Merge feat/parametric-sketch2: решающий spike параметрики (отрицательный, findings)
This commit is contained in:
@@ -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 + чтение), без привязки к геометрии — зафиксировано честно
|
||||
в документации и описаниях инструментов.
|
||||
|
||||
Reference in New Issue
Block a user