feat: assembly_add_mate — сопряжения компонентов сборки (API7)
Веха СБОРКИ, инкремент 2. AssemblyService.AddMateAsync (API7): top.MateConstraints
→ Add(MateConstraintType) → BaseObject1/2 (грани через FindObjectsByPoint
FirstLevel=false) → ParamValue → Update → RebuildModel. Свой enum MateType
(Coincidence/Distance) → MateConstraintType. MCP-инструмент assembly_add_mate.
Подтверждено спайком и тестами: coincidence сводит грани заподлицо (ширина 120→40),
distance(30) держит зазор 30 (→70); Update=True Valid=True. Решатель может двигать
любой компонент → проверка по ширине габарита.
Ревью Codex учтено: scope урезан до coincidence/distance (только геометрически
проверенные); валидация value по типу (RequireMateValue); полный откат при любой
ошибке после Add (mate.Owner.Delete); возврат AddedMate{Type,Valid}; усиленные
ассерты (Valid, размеры компонентов неизменны). Точечный release RCW отклонён
(конвенция v2-2). Прочие типы (parallel/concentric/angle/…) — будущие инкременты.
Тесты: +14 unit (Mates.Parse/RequiresValue, RequireMateValue), +2 integration
(AssemblyMateTests). Итого 97 unit + 57 integration = 154 зелёных.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,27 @@
|
||||
# Дизайн: сопряжение компонентов сборки (assembly_add_mate) через API7
|
||||
|
||||
**Дата:** 2026-05-27
|
||||
**Статус:** спайк зелёный (механизм подтверждён вживую); спроектировано; на ревью (Codex)
|
||||
**Статус:** спайк зелёный; ревью Codex учтено (8 замечаний); реализуется
|
||||
|
||||
## Решения по ревью Codex (важные правки к дизайну ниже)
|
||||
|
||||
- **Scope урезан до `coincidence` + `distance`** (#6, #5): только эти два типа геометрически
|
||||
подтверждены спайком → только они в публичном `MateType`/`Parse`. Остальные (parallel/
|
||||
perpendicular/concentric/angle/tangency) и `Alignment`-параметр — будущие инкременты с тестами.
|
||||
- **Валидация value по типу** (#1): `Mates.RequiresValue` → distance требует `value` конечный и
|
||||
`≥ 0`; для типов без value параметр игнорируется (дефолт 0). Валидатор
|
||||
`AssemblyValidation.RequireMateValue(requiresValue, value)`.
|
||||
- **Полный откат** (#3): весь участок после `mates.Add` — в try/catch; при ЛЮБОЙ ошибке (BaseObject,
|
||||
ParamValue, Update=FALSE, RebuildModel=FALSE) сопряжение удаляется через `mate.Owner?.Delete()`
|
||||
(`IFeature7`, как у компонента в инкременте 1).
|
||||
- **Возврат результата** (#8b): `AddedMate { Type: string, Valid: bool }` — для отчёта инструмента и
|
||||
ассертов теста (`Valid`).
|
||||
- **Усиленный тест** (#2): явно `bbBefore ≈ 120`; после mate — `Valid==true`, размеры каждого
|
||||
компонента (`SizeX≈20`) неизменны, ширина сборки изменилась.
|
||||
- **RCW** (#7): точечный release НЕ вводим (конвенция v2-2, как в инкременте 1/HoleService); все
|
||||
COM-вызовы — внутри `dispatcher.InvokeAsync` (уже так). Долг зафиксирован в OPEN_QUESTIONS v2-2.
|
||||
- **Выбор грани** (#8a): паттерн «первый IFace» (как в HoleService/move_face); в описании
|
||||
инструмента — «точка в СЕРЕДИНЕ грани» (на ребре/углу хит неоднозначен).
|
||||
|
||||
## Цель
|
||||
|
||||
|
||||
Reference in New Issue
Block a user