From cb1984f227d755cb018ef21cdc3a551b381a1ac3 Mon Sep 17 00:00:00 2001 From: Shahovalov MIkhail Date: Wed, 27 May 2026 13:53:56 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20handoff=20=E2=80=94=20=D0=B8=D0=BD?= =?UTF-8?q?=D0=BA=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D1=82=202=20(assembly=5Fad?= =?UTF-8?q?d=5Fmate)=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2;=20=D0=B4=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=B5=20=E2=80=94=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D1=82=D1=8B/=D1=87=D0=B5=D1=80=D1=82=D1=91?= =?UTF-8?q?=D0=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/superpowers/NEXT-SESSION.md | 51 ++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/docs/superpowers/NEXT-SESSION.md b/docs/superpowers/NEXT-SESSION.md index a92e8bd..2b6602b 100644 --- a/docs/superpowers/NEXT-SESSION.md +++ b/docs/superpowers/NEXT-SESSION.md @@ -14,15 +14,22 @@ затем ЧЕРТЁЖ. ## Текущее состояние (main, синхронизирован с origin) -- 71 MCP-инструмент, 138 тестов зелёных (83 unit + 55 integration). -- **СБОРКИ начаты:** `assembly_add_component` СДЕЛАН (инкремент 1 вехи 1) — вставка детали/подсборки - из `.m3d`/`.a3d` в активную сборку с позицией (API7, `AssemblyService`, namespace - `Kompas.Mcp.Core.Assemblies`). Workflow: `IParts7.AddFromFile(path,true,true)` → - `part.Placement.SetOrigin(x,y,z)` → `UpdatePlacement(true)` → `top.RebuildModel(true)`. - Эмпирика: `UpdatePlacement`=FALSE для вручную позиционируемого компонента — НЕ ошибка; позицию - применяет SetOrigin, видимой делает RebuildModel; разфиксация первого компонента НЕ нужна. - Спек: `docs/superpowers/specs/2026-05-27-assembly-add-component-design.md`. **СЛЕДУЮЩЕЕ — инкремент 2: - `assembly_add_mate` (сопряжения).** +- 72 MCP-инструмента, 156 тестов зелёных (98 unit + 58 integration). +- **СБОРКИ: инкременты 1 и 2 СДЕЛАНЫ** (API7, `AssemblyService`, namespace `Kompas.Mcp.Core.Assemblies`): + - `assembly_add_component(filePath, x, y, z)` — вставка детали/подсборки из `.m3d`/`.a3d` с позицией. + Workflow: `IParts7.AddFromFile(path,true,true)` → `part.Placement.SetOrigin(x,y,z)` → + `UpdatePlacement(true)` → `top.RebuildModel(true)`. Эмпирика: `UpdatePlacement`=FALSE для вручную + позиционируемого компонента — НЕ ошибка; позицию применяет SetOrigin+RebuildModel; разфиксация + первого компонента НЕ нужна. + - `assembly_add_mate(mateType, x1,y1,z1, x2,y2,z2, value)` — сопряжение граней двух компонентов. + Workflow: `(IMateConstraints3D)top.MateConstraints` → `Add(MateConstraintType)` → `BaseObject1/2` + (грани через `top.FindObjectsByPoint(x,y,z,FirstLevel=false)`) → `ParamValue` (distance) → + `Update()` → `RebuildModel(true)` → проверка `mate.Valid` (false→ошибка+откат). Типы: `coincidence`, + `distance` (value>0). Решатель может двигать любой компонент → тест по ширине габарита. + - Спеки: `2026-05-27-assembly-add-component-design.md`, `2026-05-27-assembly-add-mate-design.md`. + - **Тест-инфра:** `IntegrationTestBase` (per-test `DocumentService.CloseAllAsync`) — все интеграционные + классы наследуют его. +- **СЛЕДУЮЩЕЕ — инкремент 3 (по желанию) или ВЕХА 2 (2D-ЧЕРТЁЖ).** См. ниже. - Деталь: эскизы (пакет A), формообразующие (extrude/revolve/fillet/chamfer/shell/rib/sweep/loft), массивы и зеркало (пакет C), уклон (`draft`), все типы отверстий (`hole`/`_counterbore`/ `_countersink`/`_conic`, API7), переменные (`create/set/delete_variable`), STEP import/export, @@ -56,19 +63,19 @@ Рекомендуемые инкременты (по одному, до зелёного → merge): 1. ✅ **СДЕЛАНО:** `assembly_add_component(filePath, x, y, z)` — вставка детали из файла в сборку. -2. **СЛЕДУЮЩЕЕ:** `assembly_add_mate(...)` — сопряжение между гранями/рёбрами двух компонентов - (начни с совпадения/coincidence или расстояния). API7-путь (из ревью SDK): коллекция - `(IMateConstraints3D)top.MateConstraints` → `Add(MateConstraintType)` → `IMateConstraint3D` - (`BaseObject1`/`BaseObject2` = IModelObject граней компонентов; для `mc_Distance` — `ParamValue`; - `Alignment`) → `Update()`. Типы: `mc_Coincidence=0`, `mc_Parallel=1`, `mc_Perpendicular=2`, - `mc_Tangency=3`, `mc_Concentric=4`, `mc_Distance=5`, `mc_Angle=6`, `mc_Symmetric=11`. Альтернатива - API5: `ksDocument3D.AddMateConstraint(type, obj1, obj2, direction, fixed, val)`. **Сначала - рефлексия interop** (`IMateConstraints3D`/`IMateConstraint3D`/`MateConstraintType` — проверь - наличие и точные имена в v24) — возможна тонкость с именами/доступностью, как с параметрикой. - Тест: 2 компонента → сопряжение совпадения/расстояния граней → габарит сборки меняется - предсказуемо. Объекты граней компонентов брать через их `IPart7.FindObjectsByPoint` (в мировых - координатах с учётом placement компонента). -3. Перемещение/массив компонентов, фиксация — при необходимости. +2. ✅ **СДЕЛАНО:** `assembly_add_mate` — сопряжения coincidence/distance (см. «Текущее состояние»). + Расширения (будущее): прочие типы (parallel/perpendicular/concentric/angle/tangency — добавить с + геометрической проверкой, concentric требует цилиндрических граней), параметр `Alignment` + (`ksMCAlignmentCooriented`/`Opposite`/`Closest`). Для concentric/angle проверять тип грани. +3. **(по желанию)** Перемещение/массив/фиксация компонентов. ИЛИ сразу переходить к ВЕХЕ 2 (чертёж) — + она самый ценный нереализованный класс после сборок. + +Проверенный API сопряжений (для расширений): `(IMateConstraints3D)top.MateConstraints` → +`Add(MateConstraintType)` → `IMateConstraint3D` (`BaseObject1`/`BaseObject2` = IModelObject граней; +`ParamValue` для distance/angle; `Alignment`) → `Update()` → `RebuildModel(true)`. Типы: +`mc_Coincidence=0`, `mc_Parallel=1`, `mc_Perpendicular=2`, `mc_Tangency=3`, `mc_Concentric=4`, +`mc_Distance=5`, `mc_Angle=6`, `mc_Symmetric=11`. Грани компонентов — `top.FindObjectsByPoint(x,y,z, +FirstLevel=false)` (мировые координаты с учётом placement). Память: `kompas-assembly-insert-api7`. Тонкости: компоненту нужен сохранённый файл-источник (сначала сохрани деталь). Уточни через `kompas-sdk-research` точные сигнатуры `AddFromFile`/`AddFromFileWithParam`, что такое