kompas 0.3.0 (из fcedb44f5661313ffd0570e3808a5309f6ae8cb7)

This commit is contained in:
gitea-actions
2026-08-16 10:02:12 +00:00
parent c62794b415
commit 94e044bd03
21 changed files with 762 additions and 433 deletions
@@ -0,0 +1,58 @@
# Работа с импортом / сборками
Дополнение к 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 для печати).