- RasterImageFormat (PNG/JPG/BMP/...) + MIME-типы + парсинг - SnapshotService: ksDocument3D.SaveAsToRasterFormat -> временный файл -> байты (resultArrayBytes при заданном имени файла не заполняется; рендер в файл надёжен) - tests: снимок активной детали возвращает валидный PNG (визуально проверено) - docs/OPEN_QUESTIONS.md: зафиксирован нюанс resultArrayBytes Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.9 KiB
Открытые вопросы для проработки
Журнал спорных моментов и решений, принятых автономно (ночная сессия 2026-05-25/26). Помечено: ⚠️ = требует вашего решения; ✅ = решено по умолчанию, можно пересмотреть.
⚠️ 1. API5 vs API7 для построения 3D
Контекст. Примеры SDK строят 3D через API5 (ksPart.NewEntity(o3d_*) →
ksBossExtrusionDefinition → Create()). API7 предлагает IPart7 → IModelContainer →
IExtrusions.Add().
Решение по умолчанию (✅ в коде): в v1 строю 3D через API5 ksPart (надёжно, повторяет
рабочие примеры Step3d1). API7 использую для приложения/документов/версии.
На проработку: переводить ли операции на чистый API7 позже (плюс — единообразие, минус — риск).
✅ 2. Точка входа подключения — API5
Для построения 3D нужен KompasObject (API5), а для снимка — ksDocument3D (API5).
Поэтому KompasSession подключается через KOMPAS.Application.5 → KompasObject, затем
ksGetApplication7() → IApplication. Держит обе ссылки. (Ранее в спайке заходили через .7.)
✅ 3. Состав проектов v1
Вместо 4 проектов (Host/Tools/Core/Interop) сделано компактно: Core (COM + сервисы) +
Host (MCP + определения инструментов) + Tests. Interop — вендорские DLL в libs/.
Разнести на больше проектов можно позже.
✅ 4. Тестовые артефакты
Тестовые документы КОМПАС сохраняю в .scratch/ (gitignore). Снимки рендера — туда же,
для визуальной проверки.
Журнал решений по ходу
(дополняется автоматически во время работы)
✅ Снимок 3D: рендер через файл, а не resultArrayBytes
ksDocument3D.SaveAsToRasterFormat(fileName, param) при непустом fileName возвращает TRUE,
пишет корректный PNG на диск, но param.resultArrayBytes остаётся пустым. Поэтому
SnapshotService рендерит во временный файл и читает байты обратно (надёжно проверено на v24 Home).
На проработку: пустое имя файла + returnResultAsArrayBytes=true для чистого in-memory —
не проверено; текущий путь через temp-файл работает.