33 Commits

Author SHA1 Message Date
mikhail 5d51b9e1af docs: выноска — TODO, README, ARCHITECTURE, OPEN_QUESTIONS, presentation, CLAUDE.md
Инкремент 9. 83 инструмента, 331 тест. + заметка о ревью реализации в спеке
(Codex + pi/glm-5.1 + pi/kimi-k2.6).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 00:33:33 +03:00
mikhail 4937b9e677 docs: формат/ориентация листа — TODO, README, ARCHITECTURE, OPEN_QUESTIONS, presentation, CLAUDE.md
Инкремент 8. 82 инструмента, 308 тестов. + заметка о ревью реализации в спеке
(Codex + pi/glm-5.1 + pi/kimi-k2.6; K1 снят спайком — КОМПАС сам выводит ориентацию user).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 23:34:15 +03:00
mikhail ff5fb27dd5 docs: ассоциативная привязка диам./радиального — TODO, README, ARCHITECTURE, OPEN_QUESTIONS, presentation, CLAUDE.md
Инкремент 7. 81 инструмент (associate — флаг существующих), 278 тестов.
CLAUDE.md также включает структурную чистку (делегирование каталога/дорожной карты/
бэклога в README/ARCHITECTURE/TODO без дублирования).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 21:57:45 +03:00
mikhail d8edb18f06 docs: текстовые обозначения чертежа — README, ARCHITECTURE, OPEN_QUESTIONS, presentation, CLAUDE.md
81 инструментов, 267 тестов. 2D-чертёж: добавлены шероховатость, свободный текст,
технические требования (инкремент 6).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 21:22:35 +03:00
mikhail db9d76a7bd docs: радиальный и угловой размеры — README, ARCHITECTURE, OPEN_QUESTIONS, presentation, CLAUDE.md
78 инструментов, 241 тест. Базовое семейство размеров 2D-чертежа завершено
(линейный, диаметральный, радиальный, угловой).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 20:03:35 +03:00
mikhail 7359337a95 docs: drawing_add_diametral_dimension — диаметральные размеры (76 инструментов, 218 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 75→76,
203→218; drawing_add_diametral_dimension в группе Drawing; факты (ISymbols2DContainer.
DiametralDimensions, Xc/Yc/Radius/Angle радианы, NominalValue=2R, RequireSymbols2DContainer).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:44:42 +03:00
mikhail eda3242f62 docs: drawing_add_linear_dimension — линейные размеры (75 инструментов, 203 теста)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 74→75,
188→203; drawing_add_linear_dimension в группе Drawing; факты (ISymbols2DContainer
QI от вида, локальная СК вида, AutoNominalValue, размеры НЕ в IView.ObjectCount,
ViewNumbers в результате видов).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 18:13:46 +03:00
mikhail 034e9aee24 docs: drawing_fill_title_block — оформление чертежа (74 инструмента, 188 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 73→74,
177→188; drawing_fill_title_block в группе Drawing; факты основной надписи
(LayoutSheets.ItemByNumber[1].Stamp, Text[id].Str индексировано, StampField→графы).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 17:31:31 +03:00
mikhail 6c6add72e2 docs: drawing_create_standard_views — веха 2D-чертёж начата (73 инструмента, 177 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 72→73,
156→177; новая группа инструментов Drawing; факты DrawingService (AddStandartViews,
ProjectionsTypes=object[]{1,3,5} SAFEARRAY VT_I4, created==3, непустота по новым
видам, откат IView.Delete).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:44:28 +03:00
mikhail 1493eaa776 docs: assembly_add_mate — сопряжения сделаны (72 инструмента, 156 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 71→72,
138→156; группа Assembly +assembly_add_mate; факты AddMateAsync (IMateConstraints3D,
FindObjectsByPoint FirstLevel=false, MateType, Valid-проверка); упомянут
IntegrationTestBase (per-test очистка).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:52:35 +03:00
mikhail 5b9a0c6e32 docs: assembly_add_component — класс СБОРКИ начат (71 инструмент, 138 тестов)
README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation.html: счётчики 70→71,
119→138; новая группа инструментов Assembly; ключевые факты AssemblyService
(workflow API7, эмпирика UpdatePlacement, RequireActiveAssembly, откат).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 13:16:37 +03:00
mikhail 3a5eb26db2 docs: коническое отверстие (hole_conic) — счётчики 70 инструментов, 119 тестов; перечни инструментов 2026-05-27 12:22:04 +03:00
mikhail ec5eb2b46d docs: типы отверстий (цековка/зенковка) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation; счётчики 69 инструментов, 118 тестов (исправлен ошибочный подсчёт 89) 2026-05-27 12:13:23 +03:00
mikhail 2d38cd33d8 docs: параметрика (переменные модели) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 67 инструментов, 116 тестов 2026-05-27 11:28:33 +03:00
mikhail 72045c8a84 docs: уклон (draft, API5 Incline) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 64 инструмента, 115 тестов 2026-05-27 10:35:16 +03:00
mikhail 0aab06169f docs: отверстие (hole, API7) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 63 инструмента, 104 теста 2026-05-27 10:10:42 +03:00
mikhail afe94e797d docs: пакет C (массивы и зеркало) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 62 инструмента, 101 тест 2026-05-27 00:23:57 +03:00
mikhail 692b113333 docs: смещённая плоскость + loft — 58 инструментов, 89 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:27:02 +03:00
mikhail 53b9d2c18b docs: операция sweep (пакет B шаг 3) — 56 инструментов, 87 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:13:16 +03:00
mikhail e8b22c04e7 docs: операция rib (пакет B шаг 2) — 55 инструментов, 86 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:01:35 +03:00
mikhail 472f1e56e0 docs: операция shell (пакет B шаг 1) — 51 инструмент, 79 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:36:22 +03:00
mikhail 706ee070cf docs: 7 новых примитивов эскиза (пакет A) в README/ARCHITECTURE/CLAUDE/presentation
50 инструментов, 78 тестов (47 unit + 31 integration). Пакет A «богаче
эскизы» отмечен выполненным; следующие — B (формообразующие) / C (массивы).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:55:52 +03:00
mikhail 28d2ae3868 feat(inspection): структурное «зрение» модели — осмотр без снимка
Новый слой «модель как данные» (приоритетный над model_snapshot):
- describe_model — структурный «паспорт» детали одним вызовом (габарит,
  МЦХ, тела, сводка топологии, дерево построения с параметрами, переменные)
- list_features / list_bodies / list_variables
- describe_face / describe_edge (drill-down по индексу)
- measure (расстояние/угол между гранями/рёбрами/вершинами)
- model_snapshot понижен до fallback для визуально-пространственных вопросов

Реализация: ModelInspectionService (COM) + чистый InspectionText (рендер,
группировка, детект «импорт без истории») + record-модели; InspectionTools.
Дерево читается через ksPart.GetFeature()->SubFeatureCollection; точный тип
и параметры операций берутся из GetObject()->GetDefinition() (ksFeature.type
отдаёт лишь coarse o3d_entity).

Снимок дерева также включает слои conversion (STEP), editing (move_face/solid)
и validation, развивавшиеся параллельно. Полный прогон: 61 тест зелёный,
43 MCP-инструмента. Документация (README, ARCHITECTURE, OPEN_QUESTIONS,
CLAUDE.md, presentation.html) синхронизирована.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:44:38 +03:00
mikhail 498eeaa847 @
feat(query): перечисление рёбер + скругление/фаска по индексу

QueryService.ListEdgesAsync: обход EntityCollection(o3d_edge), для каждого ребра —
индекс, тип кривой (line/circle/arc/ellipse/nurbs через ksEdgeDefinition.Is*) и длина
(GetLength, мм). Запись EdgeInfo. Новый инструмент list_edges.
PartModeler: выделены ядра CreateFillet/CreateChamfer и хелпер SelectEdgeByIndex;
добавлены FilletEdgeIndexAsync/ChamferEdgeIndexAsync. Новые инструменты
fillet_edge_index, chamfer_edge_index — выбор ребра по индексу (надёжнее точки).

Тест List_edges_and_fillet_by_index: цилиндр → 2 круговых ребра ≈62.83 мм →
скругление ребра по индексу → объём уменьшается. Итого 31 инструмент, 19 тестов.
Документация синхронизирована через навык docs-delegate (Sonnet).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@
2026-05-26 11:22:57 +03:00
mikhail 170e2aa4c0 @
feat(skills): навык kompas-sdk-research + перенос kdoc.py в навык

Новый навык kompas-sdk-research делегирует поиск/чтение офлайн-справки КОМПАС SDK
субагенту Sonnet (экономит контекст Opus на 26k страниц WebHelp).
Навигатор kdoc.py перенесён tools/ → .claude/skills/kompas-sdk-research/ как часть навыка;
добавлен автопоиск каталога справки (вверх от CWD/скрипта или через KDOC_DIR),
чтобы скрипт работал из любой точки. Индекс остаётся в docs/kompas_sdk_index.tsv.
Ссылки обновлены в CLAUDE.md, README, ARCHITECTURE, presentation, .gitignore.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@
2026-05-26 11:09:10 +03:00
mikhail 8ac92095b6 @
feat(query): перечисление граней + выбор грани по индексу

QueryService.ListFacesAsync: обход EntityCollection(o3d_face), для каждой грани —
индекс, тип поверхности (plane/cylinder/cone/sphere/torus/nurbs через ksFaceDefinition.Is*)
и площадь (GetArea, мм²). Запись FaceInfo.
PartModeler.OpenSketchOnFaceIndexAsync: эскиз на грани по индексу из list_faces —
надёжнее выбора по точке (агенту не нужно угадывать координаты).
Новые инструменты: list_faces, sketch_create_on_face_index.

Тест List_faces_and_sketch_by_index: цилиндр → 3 грани (2 plane + 1 cylinder),
площади торца ≈314 мм² и бока ≈1257 мм²; эскиз на торце по индексу → бобышка.
Презентация: 28 инструментов, 18 тестов.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@
2026-05-26 10:08:20 +03:00
mikhail 8c778a449d @
feat(query): габариты детали (get_bounding_box)

QueryService.GetBoundingBoxAsync через API5 ksPart.GetGabarit(full=false) →
габаритный параллелепипед (мм) + размеры по осям. Помогает агенту оценить
протяжённость модели и подбирать точки для select-by-point (грани/рёбра).
Новый инструмент get_bounding_box; запись BoundingBox.

Тест: цилиндр R10×H20 → X,Y ∈ [-10;10], Z ∈ [0;20] (расширен QueryTests).
Презентация: 26 инструментов.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@
2026-05-26 10:03:53 +03:00
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 09ef56f6bc docs: README + актуализация CLAUDE.md и презентации (v1 готов)
- README.md: требования, сборка/запуск, конфиг MCP-клиента, инструменты, тесты
- CLAUDE.md: раздел Current state переписан под реализованный v1 + команды + ключевые факты
- presentation.html: статус/прогресс (72%), TODO (фундамент и инструменты — готово), roadmap v1 ✓
- 12 тестов зелёные (5 unit + 7 integration)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 00:07:22 +03:00
mikhail 3a98afc67f chore: initial skeleton + KOMPAS connection spike (S1/S2)
Зафиксирован фундамент проекта MCP-сервера КОМПАС-3D:

- docs/: ARCHITECTURE.md, IMPLEMENTATION_PLAN.md, presentation.html
- tools/kdoc.py: навигатор по справке SDK
- libs/kompas-interop/: вендорские interop-сборки КОМПАС из SDK
- src/Kompas.Mcp.ConnectSpike: net8.0-windows консоль, доказывает
  работу COM-интеропа и attach/launch подключения к КОМПАС
  (IApplication, версия 24.0)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 23:28:29 +03:00