docs(skill): два главных правила — структурное зрение и validate_part
1) «Зрение» структурное: describe_model/describe_face/describe_edge/measure — предпочесть снимку (точнее и дешевле по контексту); model_snapshot только для визуально-пространственных вопросов, не гонять картинку зря. 2) validate_part после КАЖДОЙ операции: Update()==true ≠ успех; непустой результат (напр. et3dError54) = брак, в STEP/печать не брать. Базовый и импортный циклы + эвристики переориентированы на структурный осмотр и обязательную проверку построения. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -32,6 +32,24 @@ description: >
|
||||
импорт/экспорт обменных форматов, разбор сборки, измерения, снимки. Для поиска сигнатур/констант
|
||||
в справке — отдельный навык `kompas-sdk-research`. Для правки документации — `docs-delegate`.
|
||||
|
||||
## Два правила прежде всего
|
||||
|
||||
**1. «Зрение» — структурное, не по картинке.** Чтобы «увидеть» деталь, вызывай **`describe_model`** —
|
||||
это единый структурный паспорт одним запросом: габарит, МЦХ, тела, топология (грани/рёбра, сгруппированные
|
||||
по типам), дерево построения с параметрами, переменные. Это **точнее и дешевле по контексту**, чем
|
||||
`model_snapshot`. Для деталей углубляйся `describe_face` / `describe_edge` / `measure` / `list_faces|edges|bodies|features|variables`.
|
||||
**`model_snapshot` бери только** для визуально-пространственных вопросов, на которые паспорт не отвечает
|
||||
(общая форма, ориентация, правдоподобность результата, «куда смотрит грань»). **Не анализируй изображение
|
||||
там, где достаточно чисел** — снимок дорог по контексту и менее точен.
|
||||
|
||||
**2. `validate_part` — после КАЖДОЙ операции.** Любая формообразующая или прямое редактирование
|
||||
(`extrude_*`/`revolve_*`/`fillet_*`/`chamfer_*`/`move_face`/`split_solid_by_plane`/`move_body`/`boolean_union`)
|
||||
может «пройти» (`Update()==true`), оставив деталь в ошибке. После каждой операции вызывай `validate_part`:
|
||||
**пустой результат = чисто; непустой = провал** (напр. `et3dError54`) — не продолжай и не экспортируй,
|
||||
исправь или переделай другим методом. Перед `export_step` / выдачей результата — обязательно чистый `validate_part`.
|
||||
(`move_face`/`move_body`/`boolean_union` сами дописывают итог `validate_part` в ответ, но проверяй явно после
|
||||
формообразующих тоже.)
|
||||
|
||||
## Инструменты MCP
|
||||
|
||||
**Реализованы (v2+, 46 инструментов):**
|
||||
@@ -53,12 +71,12 @@ description: >
|
||||
|
||||
Опорный сценарий построения, проверен end-to-end (см. `usecases/0001`):
|
||||
|
||||
1. `kompas_connect` (+ `kompas_set_visible true`, чтобы снимки были осмысленны).
|
||||
1. `kompas_connect` (+ `kompas_set_visible true`).
|
||||
2. `document_create part`.
|
||||
3. `sketch_create XOY` → `sketch_add_*` → `sketch_close`.
|
||||
4. `extrude_boss`/`revolve_boss`/…
|
||||
5. **Осмотр:** `model_snapshot` (увидеть) + `get_part_info`/`get_bounding_box` (сверить числами).
|
||||
6. Итерация «на грани»: `model_snapshot` → `list_faces` → `sketch_create_on_face_index` → операция.
|
||||
4. `extrude_boss`/`revolve_boss`/… → **`validate_part`** (правило 2).
|
||||
5. **Осмотр — структурно:** `describe_model` (паспорт: габарит, МЦХ, топология, дерево). Снимок — только если нужен визуальный контроль.
|
||||
6. Итерация «на грани»: `describe_model`/`list_faces` (+`describe_face`) → `sketch_create_on_face_index` → операция → `validate_part`.
|
||||
|
||||
## Работа с импортом / сборками (выработано в usecases/0002)
|
||||
|
||||
@@ -71,34 +89,33 @@ description: >
|
||||
3. **Извлечение отдельной детали**: при импорте включать «создавать файлы компонентов», тогда
|
||||
компоненты пишутся как отдельные `.m3d` рядом; открывать деталь самостоятельным документом
|
||||
(`OpenSourceDocument`). Гашение видимости компонента на снимок **не влияет** — изоляция так не делается.
|
||||
4. **Осмотр детали**: габарит по осям (какая ось — «высота»), `list_faces`/`list_edges`, стандартные
|
||||
проекции (`#Спереди/#Сверху/#Слева/#Справа/#Изометрия`) + `model_snapshot` для каждой.
|
||||
5. **Модификация** на «тупой» импортированной B-rep:
|
||||
4. **Осмотр детали — структурно:** `describe_model` (габарит по осям → какая ось «высота», МЦХ,
|
||||
тела, топология). Грани/рёбра под операцию — `list_faces`/`describe_face`, `measure`. `model_snapshot`
|
||||
(или стандартные проекции `#Спереди/#Сверху/#Слева/#Справа/#Изометрия`) — **только** если нужен
|
||||
визуально-пространственный контроль формы.
|
||||
5. **Модификация** на «тупой» импортированной B-rep (после каждой операции — `validate_part`):
|
||||
- *Простой случай* — `move_face`: сдвинуть плоскую грань на +N мм (наружу) или −N (внутрь).
|
||||
⚠ На сложном торце (с отверстием/пазом) FaceMover может дать `et3dError54` — **обязательно `validate_part` после**.
|
||||
⚠ На сложном торце (с отверстием/пазом) FaceMover может дать `et3dError54`.
|
||||
- *Вставка N мм в середину призматической ножки* (надёжно, грани совпадают):
|
||||
`split_solid_by_plane(plane, offset)` → `move_body(индекс верхнего тела, dz=N)` →
|
||||
`move_face(точка на грани реза, +N)` (мост) → `boolean_union()`. После — `validate_part`.
|
||||
6. **Экспорт STEP**: `export_step(path, format=auto|ap203|ap214|ap242)`.
|
||||
`move_face(точка на грани реза, +N)` (мост) → `boolean_union()`.
|
||||
6. **Проверка перед выдачей:** `validate_part` — чисто; затем **Экспорт STEP** `export_step(path, format=auto|ap203|ap214|ap242)`.
|
||||
|
||||
Точные COM-приёмы и сигнатуры — в авто-памяти `kompas-step-and-assembly-api` и в `usecases/0002/case.md`.
|
||||
|
||||
## Эвристики и подводные камни
|
||||
|
||||
- **Решай по снимку.** После каждой формообразующей операции делай `model_snapshot` и проверяй
|
||||
визуально; числами — `get_part_info`/`get_bounding_box`.
|
||||
- **Грань/ребро по индексу надёжнее, чем по точке.** Сначала `list_faces`/`list_edges`, затем
|
||||
`*_on_face_index` / `*_edge_index`. По точке (`SelectByPoint`) — только когда индекс не подходит.
|
||||
- **Направление операции.** `extrude_boss(..., forward)` может уйти «не туда» в зависимости от
|
||||
нормали выбранной грани — проверь снимком, при необходимости инвертируй `forward`.
|
||||
- **МЦХ.** Объём/масса меняющейся геометрии бери через `get_part_info` (под капотом API5
|
||||
`CalcMassInertiaProperties`); перед чтением после правок — `rebuild`.
|
||||
- **Зрение — структурное (правило 1).** Осматривай через `describe_model`/`describe_face`/`describe_edge`/`measure`,
|
||||
а не снимком. `model_snapshot` — только для визуально-пространственных вопросов; не гоняй картинку зря.
|
||||
- **`validate_part` после каждой операции (правило 2).** `Update()==true` ≠ успех; непустой `validate_part`
|
||||
(напр. `et3dError54`) — деталь невалидна, в STEP/печать не брать.
|
||||
- **Грань/ребро по индексу надёжнее, чем по точке.** Сначала `list_faces`/`list_edges` (или `describe_model`),
|
||||
затем `*_on_face_index` / `*_edge_index`. По точке (`SelectByPoint`) — только когда индекс не подходит.
|
||||
- **Направление операции.** `extrude_boss(..., forward)` / `move_face(distance±)` может уйти «не туда» —
|
||||
сверяй результат `get_bounding_box`/`describe_model` (числами), снимок лишь при необходимости.
|
||||
- **МЦХ.** Объём/масса меняющейся геометрии бери через `get_part_info`/`describe_model`; перед чтением после правок — `rebuild`.
|
||||
- **id эскизов/операций** недействительны после смены активного документа (create/open/close).
|
||||
- **Единицы — мм** (геометрия) и кг (масса). Локальные координаты эскиза ≠ мировые координаты модели.
|
||||
- **`Update()==true` ≠ успех.** Прямое редактирование (move_face/split/union) может «пройти», оставив
|
||||
операцию в ошибке. **Всегда `validate_part` после редактирования** — пустой результат = чисто;
|
||||
иначе деталь невалидна (напр. `et3dError54`), и STEP/печать брать нельзя. Инструменты
|
||||
move_face/move_body/boolean_union сами дописывают итог `validate_part` в ответ.
|
||||
|
||||
## Открытые вопросы / границы
|
||||
|
||||
|
||||
Reference in New Issue
Block a user