Files
kompas-plugin/plugin/skills/kompas-3d/reference/embodiments-playbook.md
T

43 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Исполнения: одна модель — несколько геометрий
Дополнение к SKILL.md. Типоразмеры (профиль на 100, 200, 500 мм), правое и левое зеркало, версии с
отверстием и без часто живут **в одном файле** исполнениями. Тогда всё, что ты меришь и
экспортируешь, относится к **текущему** исполнению — не к «детали вообще».
- **Признак замечаешь не ты, а ответ.** У модели с несколькими исполнениями `describe_model` сам
пишет, сколько их и какое сейчас текущее. Увидел эту строку — прежде чем считать массу или резать
чертёж, посмотри `describe_model(sections=embodiments)`: там габарит и масса **каждого**, и это
чтение ничего не переключает.
- **Переключение равно смене документа.** `embodiment(action="set", target="L200")` обнуляет
сессию построения: хендлы `sk_…`/`op_…` после него мертвы. Сохраняй документ до переключения.
- **Индекс живёт до первой правки дерева**: после `delete` индексы смещаются. Адресуй обозначением
(«L500»), а индексом — только сразу после того, как увидел список. У **варианта** обозначение
родительское, и адресовать его номером нельзя вовсе — под «-01» подходят двое; зови его по имени
(«M5-01») или индексом.
- **Исполнения делай ПОСЛЕДНИМ шагом.** Переключение убивает хендлы, и дальнейшая правка дерева
идёт уже через `feature_delete(featureIndex=…)` по `describe_model(sections=tree)` — путь рабочий,
но менее удобный. Сначала доведи базовую геометрию и параметризацию, потом размножай.
- **Строишь новое исполнение** — `embodiment(action="add", number="02")`; оно сразу становится
текущим, строй в нём немедленно. `depended=false` нужен, когда правки НЕ должны наследоваться от
родителя, — иначе изменение уедет и в него.
- **В сборку исполнение выбирается явно**: `assembly_add_component(embodiment="L500")`. Без
параметра встанет **базовое** исполнение, а не то, что сохранено в файле текущим. Обозначение
нужно ПОЛНОЕ («ПРОБА.001-01», а не «-01»); сервер откажет, если КОМПАС подсунет базовое.
- **«Удлинить эти профили с 500 до 600» — это смена исполнения экземпляра, а не новая вставка**:
`embodiment(action="set", target="L600", component=N)` и затем `rebuild`. Сопряжения при этом
**сохраняются** — пересоздание вставки, наоборот, порвало бы их все. Какие исполнения есть у
конкретного экземпляра, показывает `describe_model(sections="embodiments", component=N)`.
- **Исполнения, отличающиеся одним размером, — это переменная, а не правка дерева.** Значение
переменной каждое исполнение (и вариант) хранит СВОЁ: `set_variable` после `embodiment(add)`
меняет только текущее, у наследников выражение становится ссылкой на родителя
(`VCM.001|fit_h`). Отсюда приём: построй базу на переменных, затем `add` → `set_variable` в
каждом исполнении. Убрать элемент в исполнении часто проще значением, чем `feature_delete`:
цековка с `cb_d = hole_d` уходит в уже вырезанное.
- **Выгнать всю линейку на печать** — `export_model(embodiment="all")`: каждое исполнение в свой
файл с суффиксом обозначения.
- **После смены исполнения в собранном узле проверь сопряжения** (`sections="mates"`): если у нового
исполнения нет объекта, на который опиралась связь, она рвётся — «ССЫЛКА ПОТЕРЯНА», `valid: false`,
компонент недоопределён. Что было потеряно, хранит имя сопряжения; `assembly_delete` сотрёт и его.
Подробности и границы — `help(topic="embodiments")`.