Новый слой «модель как данные» (приоритетный над model_snapshot): - describe_model — структурный «паспорт» детали одним вызовом (габарит, МЦХ, тела, сводка топологии, дерево построения с параметрами, переменные) - list_features / list_bodies / list_variables - describe_face / describe_edge (drill-down по индексу) - measure (расстояние/угол между гранями/рёбрами/вершинами) - model_snapshot понижен до fallback для визуально-пространственных вопросов Реализация: ModelInspectionService (COM) + чистый InspectionText (рендер, группировка, детект «импорт без истории») + record-модели; InspectionTools. Дерево читается через ksPart.GetFeature()->SubFeatureCollection; точный тип и параметры операций берутся из GetObject()->GetDefinition() (ksFeature.type отдаёт лишь coarse o3d_entity). Снимок дерева также включает слои conversion (STEP), editing (move_face/solid) и validation, развивавшиеся параллельно. Полный прогон: 61 тест зелёный, 43 MCP-инструмента. Документация (README, ARCHITECTURE, OPEN_QUESTIONS, CLAUDE.md, presentation.html) синхронизирована. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.8 KiB
name, description
| name | description |
|---|---|
| kompas-3d | Методика работы с КОМПАС-3D через MCP-сервер этого проекта: построение и модификация деталей, импорт/экспорт STEP, работа со сборками, осмотр геометрии снимками и запросами. Используй ВСЕГДА, когда задача — что-то СДЕЛАТЬ в КОМПАС через MCP-инструменты (создать/править деталь, импортировать STEP, разобрать сборку, померить, отрендерить, экспортировать). Здесь — playbook'и и эвристики, выработанные в usecases/. Триггеры: «построй деталь в КОМПАС», «импортируй STEP», «что в этой сборке», «нарасти/измени деталь», «экспортируй STEP», «сделай снимок модели». НЕ для поиска по справке SDK — это навык kompas-sdk-research. |
kompas-3d — методика управления КОМПАС-3D через MCP
Два слоя (важно не смешивать)
- MCP-сервер (
src/Kompas.Mcp.Host) — инструмент. Он транслирует возможности COM API/SDK КОМПАС в MCP-инструменты. Инструменты делаются общими (по возможностям SDK), а не под конкретную задачу. Расширяя MCP, добавляй универсальную операцию (напримерimport_step,list_components,export_step, «переместить грань», «рассечь тело»), а не «сделать вот эту деталь». - Этот навык — методика. Как из общих инструментов собрать решение: порядок шагов,
выбор геометрии, проверка результата, обход подводных камней. Подходы вырабатываются в
usecases/и поднимаются сюда.
Итог: MCP = чем делать, навык = как делать. Новый приём сначала обкатывается кейсом, потом обобщается: инструмент → в MCP, метод → в этот навык.
Когда применять
Любая задача «сделать что-то В КОМПАС» через MCP: создать/править деталь, эскизы и операции,
импорт/экспорт обменных форматов, разбор сборки, измерения, снимки. Для поиска сигнатур/констант
в справке — отдельный навык kompas-sdk-research. Для правки документации — docs-delegate.
Инструменты MCP
Реализованы (v2+, 35 инструментов): kompas_connect, kompas_set_visible, kompas_status;
document_create|open|save|save_as|close|active; sketch_create, sketch_create_on_face[_index],
sketch_add_line|circle|rectangle|axis, sketch_close; extrude_boss|cut, revolve_boss|cut,
fillet_edge[_index], chamfer_edge[_index], rebuild; move_face (прямое редактирование: сдвинуть грань на N мм);
get_part_info, get_bounding_box, list_faces, list_edges, list_components;
import_step, export_step; model_snapshot.
Планируются (трансляция SDK, по мере кейсов): рассечение/перемещение тела как инструменты
(SplitSolids/BodyRepositions — механика есть, продуктизация не закончена), list_bodies,
массивы/паттерны, переменные/свойства.
Если нужного инструмента ещё нет — не хардкодь обход под кейс. Заведи кейс в
usecases/, докажи механику (тест или минимальный прогон в usecases/), затем продуктизируй как общий инструмент MCP (с тестами, TDD) и опиши приём здесь.
Базовый цикл (эскиз → операция → осмотр)
Опорный сценарий построения, проверен end-to-end (см. usecases/0001):
kompas_connect(+kompas_set_visible true, чтобы снимки были осмысленны).document_create part.sketch_create XOY→sketch_add_*→sketch_close.extrude_boss/revolve_boss/…- Осмотр:
model_snapshot(увидеть) +get_part_info/get_bounding_box(сверить числами). - Итерация «на грани»:
model_snapshot→list_faces→sketch_create_on_face_index→ операция.
Работа с импортом / сборками (выработано в usecases/0002)
Конвейер «импорт → разбор → извлечение детали → осмотр → модификация → экспорт»:
- Импорт STEP в новый документ (под капотом: встроенный конвертер по коду формата
ksConverterFromSTEP, затемConvertFromAdditionFormat). Тип документа выбирается по содержимому: сборка →.a3d, одиночное тело → деталь. - Разбор сборки: перечислить компоненты (имя, обозначение, габарит, файл) — обход
TopPart → Parts. - Извлечение отдельной детали: при импорте включать «создавать файлы компонентов», тогда
компоненты пишутся как отдельные
.m3dрядом; открывать деталь самостоятельным документом (OpenSourceDocument). Гашение видимости компонента на снимок не влияет — изоляция так не делается. - Осмотр детали: габарит по осям (какая ось — «высота»),
list_faces/list_edges, стандартные проекции (#Спереди/#Сверху/#Слева/#Справа/#Изометрия) +model_snapshotдля каждой. - Модификация: на «тупой» импортированной B-rep работает
move_face— сдвинуть грань на +N мм (наружу, добавить материал) или −N мм (внутрь). Рассечение/раздвижка тела — механика есть, отдельных инструментов пока нет (см. ниже). - Экспорт STEP:
ConvertToAdditionFormat(есть 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(под капотом API5CalcMassInertiaProperties); перед чтением после правок —rebuild. - id эскизов/операций недействительны после смены активного документа (create/open/close).
- Единицы — мм (геометрия) и кг (масса). Локальные координаты эскиза ≠ мировые координаты модели.
Открытые вопросы / границы
- Перемещение грани (
move_face) — реализовано. Работает на импортированной B-rep черезIPart7.FindObjectsByPoint+FaceMover. Проверено: top_spacer 39.45→41.45 мм. - Рассечение/перемещение тела (
SplitSolids/BodyRepositions) — механика задокументирована, отдельными MCP-инструментами не оформлена. Возможная следующая опция. - Сборки/паттерны/переменные в MCP пока не реализованы.
Связанное
- Инструменты и их реализация:
src/Kompas.Mcp.Host/Tools/*,src/Kompas.Mcp.Core/*. - Кейсы (полигон подходов):
usecases/(см.usecases/README.md). - Поиск по справке SDK: навык kompas-sdk-research.
- Правка документации проекта: навык docs-delegate.
- Память:
kompas-step-and-assembly-api(проверенные COM-приёмы импорта/экспорта/обхода).