From 9237340667bfefde14c24aef5b3e3465e332854e Mon Sep 17 00:00:00 2001 From: Shahovalov MIkhail Date: Wed, 27 May 2026 11:54:10 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D1=8D?= =?UTF-8?q?=D1=81=D0=BA=D0=B8=D0=B7=D1=8B=20=E2=80=94=20=D1=80=D0=B5=D1=88?= =?UTF-8?q?=D0=B0=D1=8E=D1=89=D0=B8=D0=B9=20spike=20=D0=BE=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D1=86=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?(ksCDimWithVariable=20=D0=BD=D0=B5=20=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B8=D1=82=D1=81=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit API7-путь построения эскиза работает (Sketchs.Add→BeginEdit→FragmentDocument→IDrawingContainer→ LineSegments.Add), но управляющий размер недостижим: ksCDimWithVariable Create=False из внешней автоматизации; ksCFixedLenght игнорирует Expression со ссылкой на переменную (привязан к литералу). Вывод: переменные не драйвят геометрию эскиза через доступный COM-API. Путь признан тупиковым. --- .../2026-05-27-parametric-sketch-findings.md | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) 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 + чтение), без привязки к геометрии — зафиксировано честно +в документации и описаниях инструментов.