# Работа с импортом / сборками Дополнение к SKILL.md — конвейер разбора ЧУЖОЙ модели/сборки: «импорт → разбор → извлечение детали → осмотр → модификация → экспорт». Сборка С НУЛЯ — `reference/assembly-playbook.md`. 1. **`import_model`** — `type` задаёт документ: `assembly` (по умолчанию) или `part`. Формат берётся из расширения; `.prt` и `.asm` носят несколько САПР сразу — там задавай `format` явно. Нужна отдельная деталь файлом — включай `createComponentFiles` (по умолчанию `false`). **Выключенный переключатель чистого диска НЕ гарантирует:** конвертер пишет файлы рядом с ИСХОДНИКОМ и помимо него — замерено, четыре импорта положили четыре незапрошенных `.m3d`. Что реально изменилось в каталоге исходника, ответ перечисляет поимённо; не хочешь засорять чужой каталог — копируй файл во временный (`help(topic="model-exchange")`). **STL/OBJ приходят СЕТКОЙ:** «тел 0, объём 0.0 мм³» после такого импорта — норма, а не провал, проверяй габаритом; ответ говорит это вслух и называет число треугольников из самого файла. Плоский чертёж (.dxf/.dwg) читает не он, а `import_drawing`. 2. **Разбор:** `describe_model(sections=components)` (у каждого компонента — origin, поворот, фиксация) и `describe_model(sections=mates)`, если сборка пришла со связями; грани компонента — `list_faces(component=N)`. Извлечённую деталь открывай самостоятельным документом. Гашение видимости компонента на снимок **не влияет** — изоляция так не делается. 3. **Осмотр — структурно** (`describe_model`: какая ось «высота», МЦХ, топология). Снимок `model_snapshot(view=…)` — ракурс выбирай по плоскости детали (плоскую смотри сверху или спереди, не в изометрии); один и тот же `view` даёт воспроизводимый кадр «до/после». **Пары ракурсов противоположны по оси:** `front` смотрит из +Z, `rear` — из −Z, так же `top`/`bottom` и `left`/`right`. Следствие, которое нужно чаще всего: деталь, лежащая на столе гранью Z=0 (эскиз на XOY, выдавливание вперёд), видна столу как **`rear`**, а `front` покажет зеркальную картинку. Читаемость надписи или логотипа доказывают снимком с нужной стороны, а не рассуждением. **Но «ортогонально» — правило про ПЛОСКУЮ деталь.** Как только форма выходит из одной плоскости (кронштейн, косынка, изогнутый профиль), ортогональный кадр перестаёт читаться: он плоский, подписей осей на нём нет, и сопоставить увиденное с координатами не выходит — `right` даёт картинку, по которой не сказать, где перёд. Профиль такой детали смотри `view="iso"`: там видно, что куда загнуто. 4. **Модификация «тупой» B-rep** (итог — в ответе каждой операции). Инструмент выбирается по тому, ЧТО задано в требовании, а не по тому, что привычнее: | Требование звучит как | Инструмент | Почему не `move_face` | |---|---|---| | «сдвинуть грань на N мм» | `move_face` | это он и есть | | «диаметр отверстия (бобышки) должен стать D» | **`resize_face`** | задаётся ДИАМЕТР, ось не двигается; `move_face` сдвинул бы стенку на (D−d)/2, и это пришлось бы считать самому | | «грань должна встать НА объект: на плоскость, на грань соседнего тела» | **`replace_face`** | расстояние считает КОМПАС; `move_face` требует вычислить его заранее | | вставка N мм в призматическую ножку | `split_solid_by_plane` → `move_body` → `move_face` (мост) → `boolean_union` | цепочка проверена end-to-end: проставка 39.45 → 41.45 мм | `resize_face` и `replace_face` требуют КОМПАС v25; на версиях старше они отвечают отказом с номером установленной версии, и тогда остаётся `move_face` с арифметикой. **Проверяйте прямое редактирование РАЗНОСТЬЮ ОБЪЁМОВ против аналитической формулы** — объём и так печатается в сводке каждой операции, лишних вызовов не нужно. Расточка отверстия обязана снять ровно `π(R²−r²)·h`, наращивание грани — добавить ровно `площадь_грани × Δh`. Считайте формулу по СВОИМ числам и сверяйте с тем, что напечатала операция: одно число ловит и «операция ушла не туда», и «отверстие перестало быть сквозным». **Оси отверстий сверяют полем `axis`.** У грани типа `cylinder`, `cone`, `torus` `list_faces` отдаёт `axis` — точку на оси и направление, в мировых координатах; у цилиндра и сферы там же `radius`. Требование «оси сдвигать нельзя» доказывается сравнением `axis` до и после, а не арифметикой по расстояниям. Осторожно с двумя соседними полями: `normal` у цилиндра — про сторону поверхности, а не про ось, а `pointOnFace` лежит на стенке (help(topic="cylinder-axis")). 5. **Перед выдачей:** последняя операция «Построение чистое» → `export_model` (STEP для обмена, STL для печати).