diff --git a/docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md b/docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md index f057026..53b63cc 100644 --- a/docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md +++ b/docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md @@ -58,13 +58,40 @@ API5-эскиза» через `ISketch.Curves` НЕ работает. 5. Эмпирическая проверка ОСТАЁТСЯ открытой: пересчитывает ли решатель эскиза геометрию при изменении переменной из ВНЕШНЕЙ автоматизации (не проверено — это ключевой риск). -## Рекомендация +## Решающий spike (API7, выполнен) — ОТРИЦАТЕЛЬНЫЙ результат -Выделить параметрические эскизы в **отдельную сессию** (или несколько): начать с минимального -spike «построить отрезок через API7 IDrawingContainer → размер ksCDimWithVariable с именем → -сменить переменную → перестроить → отрезок изменил длину». Если этот spike подтвердит управление -геометрией из внешней автоматизации — разворачивать подсистему. Если решатель не реагирует — -параметрика остаётся ограниченной CRUD переменных (текущее состояние пакета D). +Построен полный API7-путь и проверено управление геометрией: +`IModelContainer.Sketchs.Add()` → `ISketch.Plane = part.DefaultObject[o3d_planeXOY]` → +`ISketch.BeginEdit()` → `FragmentDocument` → `ViewsAndLayersManager.Views.ActiveView` +(приводится к `IDrawingContainer`) → `LineSegments.Add()` (создаёт `ILineSegment` = `IDrawingObject1`). +Геометрия строится — ОК. Дальше пробовали наложить размер-переменную и проверить, следует ли длина +за переменной `plen` (создана заранее), после `RebuildModel`: -Пока пакет D = переменные (create/set/delete + чтение), без привязки к геометрии — это -зафиксировано и честно отражено в документации/инструментах. +- **`ksCDimWithVariable` (тип 13, «размер с переменной») — `Create()` = FALSE** (и с авто-именем, и + с явным `Variable="plen"`, и с/без `Expression`/`Value`/`SegmentIndex`). Ограничение, ради которого + всё затевалось, через `IDrawingObject1.NewConstraint()` на отрезке эскиза НЕ создаётся. +- **`ksCFixedLenght` (тип 19) — `Create()` = TRUE, НО привязан к литеральному `Value`**, а + `Expression="plen"` игнорируется: после `plen`: 50→80 длина осталась **50** (не 80). `Variable` пуст. +- `ksCFixedPoint`, `ksCFixedLenght` создаются; `ksCDimWithVariable`, `ksCFixedDim` — нет. + +**Итог:** через доступные пути COM-автоматизации связать размер эскиза с переменной модели +(чтобы её изменение двигало геометрию) НЕ удаётся: нужный тип ограничения `ksCDimWithVariable` не +строится, а рабочий `ksCFixedLenght` не привязывается к переменной. Вероятно, `ksCDimWithVariable` +требует контекста, недоступного внешней автоматизации (интерактивная простановка размера / иной +порядок создания, не отражённый в справке). + +## Рекомендация (обновлено по итогам spike) + +Управляемые переменными эскизы через текущий COM-API **признаны нереализуемыми** (`ksCDimWithVariable` +не строится из внешней автоматизации). Не тратить на этот путь время повторно. Возможные направления, +если тема снова станет приоритетной: +- Проверить, не строится ли `ksCDimWithVariable` через **API5** `ksSetObjConstraint` (хотя справка + говорит, что в API5 этот тип недоступен — подтвердить рефлексией/пробой). +- Попробовать создавать размер как самостоятельный объект-аннотацию (не через `NewConstraint` на + отрезке) и затем связывать — но коллекции размеров у `IDrawingContainer` нет (только геометрия). +- Принять, что параметрика ограничена **CRUD переменных** (пакет D, готово) — переменные полезны + для импортированных параметрических моделей и как информационные; управление геометрией из + внешней автоматизации в этой версии КОМПАС/SDK недоступно. + +Пакет D = переменные (create/set/delete + чтение), без привязки к геометрии — зафиксировано честно +в документации и описаниях инструментов.