mikhail
88dad09ea7
@
...
feat(features): скругление и фаска ребра (fillet_edge / chamfer_edge)
PartModeler.FilletEdgeAsync / ChamferEdgeAsync через API5 o3d_fillet/o3d_chamfer:
ребро выбирается по точке (общий хелпер SelectEdgeByPoint поверх
EntityCollection(o3d_edge).SelectByPoint), добавляется в def.array(),
радиус/катет задаются (ksFilletDefinition.radius, ksChamferDefinition.SetChamferParam).
Новые MCP-инструменты: fillet_edge, chamfer_edge.
Тест Fillet_and_chamfer_edges: цилиндр → скругление верхнего ребра R3 + фаска нижнего 2×2,
проверка успеха, уменьшения объёма и снимка (визуально подтверждено).
Презентация: 25 инструментов, 17 тестов.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
@
2026-05-26 10:01:26 +03:00
mikhail
5a689ad461
@
...
feat(features): операция вращения (revolve_boss / revolve_cut)
PartModeler.RevolveAsync через API5 o3d_bossRotated/o3d_cutRotated:
directionType=dtNormal, toroidShapeType=сфероид, SetThinParam(false), SetSideParam(forward, angle).
Ось вращения — осевая линия в эскизе (системный стиль 3); добавляется sketch_add_axis.
Новые MCP-инструменты: sketch_add_axis, revolve_boss, revolve_cut (угол в градусах, по умолчанию 360).
Тест Revolve_rectangle_makes_tube: профиль [10..15]×[0..20] вокруг оси Y → труба
(внеш. R15, внутр. R10, H20), объём π·2500 ≈ 7854 мм³ — проверено через get_part_info.
Презентация: 23 инструмента, 16 тестов.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
@
2026-05-26 09:57:48 +03:00
mikhail
01f5f37c67
@
...
feat(sketch): эскиз на выбранной грани + МЦХ через API5
sketch_create_on_face: OpenSketchOnFaceAsync выбирает плоскую грань по точке
(ksPart.EntityCollection(o3d_face).SelectByPoint) и создаёт на ней эскиз —
ключевой шаг итеративного цикла «построил → выбрал грань → новый эскиз».
Общее ядро создания эскиза вынесено в CreateSketchOn.
QueryService переписан на API5 ksPart.CalcMassInertiaProperties(ST_MIX_MM|ST_MIX_KG):
- API7 IMassInertiaParam7.Calculate() непригоден — флаг Actual «залипает» после
первого расчёта, повторный запрос отдавал устаревший объём (баг кэша);
- API5-маршрут считает по запросу и согласован с построением через ksPart;
- единицы (мм³/мм²/кг/мм) задаются битовым вектором.
Тест Sketch_on_face_adds_boss_on_top: запрос → штифт R5×H10 на верхней грани
цилиндра → повторный запрос видит прирост ≈785 мм³ (проверяет и грань, и кэш МЦХ).
Презентация: 20 инструментов, 15 тестов; OPEN_QUESTIONS обновлён.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
@
2026-05-26 09:52:56 +03:00
mikhail
b73748f84b
@
...
feat(query): инструмент get_part_info (МЦХ детали)
QueryService через IMassInertiaParam7: объём, масса, площадь, центр масс.
Единицы выставляются детерминированно (мм/кг) через LengthUnits/MassUnits —
иначе КОМПАС отдаёт значения в единицах отображения МЦХ (по умолчанию см/г).
Calculate() возвращает FALSE даже при успехе → опираемся на свойство Actual.
Интеграционный тест: цилиндр R10×H20 → V≈6283 мм³, S≈1885 мм², m≈0.049 кг, Zc=10 мм.
Находка задокументирована в OPEN_QUESTIONS; презентация обновлена (19 инструментов, 14 тестов).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
@
2026-05-26 09:35:57 +03:00
mikhail
60cf26f739
refactor(core): правки по код-ревью (COM-утечки, безопасный shutdown, типобезопасность)
...
- PartModeler: ResetAsync/Dispose освобождают RCW и чистят реестр эскизов/операций;
Editor освобождается после EndEdit (C1)
- DocumentTools: сброс реестра при create/open/close — нет устаревших id (C2)
- DocumentService: освобождение транзитных IDocuments/IKompasDocument (m9)
- KompasSession.Dispose: ограниченное ожидание 5с вместо вечного блока (M3)
- PartModeler.ExtrudeAsync: убран dynamic -> конкретные definition-типы;
throughAll только для cut (M4)
- FeatureTools.extrude_cut: дефолт throughAll=false, без подмены depth (m7)
- tests: регрессия на сброс реестра (старый id недействителен)
- docs/OPEN_QUESTIONS.md: итоги ревью (исправлено/отложено)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-26 09:18:52 +03:00
mikhail
af6adc390e
feat(core): PartModeler — эскизы и выдавливание (цикл моделирования)
...
- BasePlane (XOY/XOZ/YOZ) + маппинг в Obj3dType
- PartModeler (API5 ksPart): OpenSketch/AddLine/AddCircle/AddRectangle/CloseSketch,
Extrude (boss/cut, blind/throughAll), Rebuild; реестр эскизов и операций по id
- tests: построение цилиндра со сквозным отверстием + снимок (визуально проверено)
Полный цикл "эскиз -> выдавливание -> эскиз -> сквозной вырез -> снимок" работает.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-25 23:52:55 +03:00
mikhail
d4502409de
feat(core): SnapshotService — рендер 3D-модели в PNG (S4, "зрение агента")
...
- 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 >
2026-05-25 23:48:35 +03:00
mikhail
f0995a67e6
feat(core): DocumentService — create/open/save/close (API7)
...
- KompasDocumentType (Part/Assembly/Drawing/Fragment/Specification/Text)
+ маппинг в DocumentTypeEnum и парсинг строк (ru/en)
- DocumentInfo (Name/PathName/Type)
- DocumentService: Create/Open/Save/SaveAs/Close/GetActive через IDocuments
- tests: интеграция документов (create part/fragment, SaveAs .scratch, close) — зелёные
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-25 23:45:28 +03:00
mikhail
0038790902
feat(core): STA dispatcher + KOMPAS connection session (S3)
...
- KompasDispatcher: выделенный STA-поток + очередь задач, InvokeAsync<T>,
inline-выполнение вложенных вызовов, корректный Dispose
- NativeMethods: attach к запущенному COM (CLSIDFromProgID + GetActiveObject,
замена отсутствующего в .NET 8 Marshal.GetActiveObject)
- KompasSession: подключение через API5 (KompasObject) -> API7 (IApplication),
attach/launch, версия/редакция, освобождение COM на STA-потоке
- tests: 5 unit-тестов диспетчера + 3 интеграционных теста подключения (зелёные)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-25 23:42:52 +03:00
mikhail
1be3f4d8f9
build: project skeleton (Core / Host / Tests) + MCP SDK
...
- src/Kompas.Mcp.Core: classlib с ссылками на interop-сборки КОМПАС
- src/Kompas.Mcp.Host: console, ModelContextProtocol 1.3.0 + Hosting
- tests/Kompas.Mcp.Tests: xUnit, ссылка на Core
- все проекты унаследовали net8.0-windows/x64 из Directory.Build.props
- docs/OPEN_QUESTIONS.md: журнал спорных решений
- .gitignore: добавлен .scratch/
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-25 23:39:04 +03:00