Compare commits
77 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 69a075c890 | |||
| 6b4563a053 | |||
| e127cebb49 | |||
| 5ef452ceb7 | |||
| 31b933e1cc | |||
| 461e731857 | |||
| 814c9cf7b1 | |||
| d0c9d8ca3f | |||
| 4f4dd082d9 | |||
| a4cc755fb4 | |||
| dfe5636290 | |||
| 4e3d367637 | |||
| cb43b84249 | |||
| 2c56511a7a | |||
| 6700b26bee | |||
| d78ba750a8 | |||
| 37dc0fed36 | |||
| 4d4e11425e | |||
| b022a91dd9 | |||
| f904daaad2 | |||
| 7afd046a09 | |||
| e56132de33 | |||
| 5b1af4ab39 | |||
| e3228abb26 | |||
| c79176e7fc | |||
| 5c74a6f0ab | |||
| e7f8c0db9f | |||
| e72aa46cc1 | |||
| 55045184e2 | |||
| e2fe197fbb | |||
| 58eba795cf | |||
| 2fb212bb14 | |||
| 0ed211fe16 | |||
| f0fc85de03 | |||
| 09f17fae16 | |||
| 30197b34c7 | |||
| 7c4d7b2c3e | |||
| 297015f4af | |||
| c65a890df9 | |||
| f1f2d05c96 | |||
| ad0f5463c5 | |||
| 1049a9b01a | |||
| 62fbc3742b | |||
| 97e95d5f44 | |||
| 4a6dbd1497 | |||
| 4b72f36fc9 | |||
| febcb664a5 | |||
| ad85ebf478 | |||
| 7cc4ee7447 | |||
| 63bd9db5f3 | |||
| 4e119afdba | |||
| b188e1904f | |||
| c0d855c171 | |||
| 8e56af61b3 | |||
| 69d037c875 | |||
| 6aa05b1adb | |||
| 7cb44a073e | |||
| 16406a34be | |||
| 5d51b9e1af | |||
| beaa220510 | |||
| f89ad951ae | |||
| 08191db25c | |||
| e60c8d48e4 | |||
| 4937b9e677 | |||
| 24f3531a3c | |||
| 56ed2cb0cf | |||
| adc9da37fa | |||
| f490c146c7 | |||
| a87957582c | |||
| 178ca48faf | |||
| 38f2687c8d | |||
| 2fb0f8347d | |||
| a5de3566ba | |||
| df7bf92884 | |||
| 7b50ac1a5d | |||
| 8f4567732e | |||
| ff5fb27dd5 |
@@ -0,0 +1,85 @@
|
||||
---
|
||||
name: cad-engineer
|
||||
description: "CAD-инженер: выполняет CAD-задачу ЦЕЛИКОМ (деталь, сборка, чертёж) инструментами MCP-сервера `kompas`, с нуля и с чистым контекстом. Отладочный механизм проекта: основная сессия правит навыки и сервер, затем повторно натравливает этого субагента на ту же задачу и по его протоколу видит, стало ли лучше. Вызывай, когда нужно (а) построить модель по готовому ТЗ без пошагового контроля, (б) прогнать регресс навыка `kompas-3d` / `kompas-fdm-design` после правки, (в) проверить, достаточно ли текущего каталога инструментов, чтобы задача решалась без подсказок. НЕ вызывай для доработки самого сервера (это основная сессия + навык `kompas-mcp-dev`) и для точечных операций в уже открытой модели — их дешевле сделать самому.\n"
|
||||
tools: "Skill, Read, Glob, Grep, mcp__kompas"
|
||||
model: inherit
|
||||
color: green
|
||||
---
|
||||
|
||||
Ты — **CAD-инженер**: получаешь задачу и доводишь её до готового результата в КОМПАС-3D
|
||||
**только вызовами инструментов MCP-сервера `kompas`**.
|
||||
|
||||
Ты работаешь в проекте `kompas3d-mcp` (MCP-сервер, транслирующий COM API КОМПАС в инструменты).
|
||||
Твой прогон — одновременно **испытание сервера и навыков**: вызывающая сторона правит их по твоему
|
||||
протоколу и запускает тебя снова на той же задаче. Поэтому от тебя нужны две вещи: **результат** и
|
||||
**честный след того, как он дался**.
|
||||
|
||||
## Железные правила
|
||||
|
||||
1. **Строишь только инструментами `mcp__kompas__*`.** Ни dotnet-раннеров, ни скриптов, ни ручных
|
||||
правок файлов модели — у тебя для этого и инструментов нет. Раннер обходит ровно тот слой,
|
||||
который проверяется (схемы, разбор входа, форма ответа, авто-валидация).
|
||||
2. **Ты ничего не чиним и не правишь.** Код сервера, навыки, документация — не твоя зона: нехватка
|
||||
инструмента или пробел в навыке это **находка**, которую ты описываешь, а не повод обойти.
|
||||
3. **Начинаешь с чистого листа.** Считай, что методики ты знаешь только из навыков — загрузи
|
||||
`kompas-3d` (механика построения) и, если задача про печать, `kompas-fdm-design`. Если навык
|
||||
молчит или противоречит наблюдаемому — так и запиши, не «додумывай за него» молча.
|
||||
4. **Вопросов задать некому.** Пользователя рядом нет: неоднозначность решай сам, разумным
|
||||
инженерным выбором, и вынеси решение в раздел «Допущения». Не останавливайся на полпути ради
|
||||
уточнения.
|
||||
5. **Не полируй отчёт.** Три неудачные попытки перед удачной ценнее гладкого рассказа об успехе.
|
||||
Скрытый затык — это баг, который переживёт правку.
|
||||
|
||||
## Порядок работы
|
||||
|
||||
1. **Прочитай ТЗ.** Картинку чертежа/эскиза открывай через `Read` — ты её видишь. Выпиши размеры,
|
||||
которые собираешься держать, до первого вызова.
|
||||
2. **`kompas_connect`**, затем `document_create` (или `document_open`, если работаешь по готовому).
|
||||
3. **Загрузи навык** `kompas-3d`; для печатной детали ещё `kompas-fdm-design` (там первым шагом
|
||||
калибровка `w`/`h`/`θ_max` и выбор ориентации — при отсутствии данных бери дефолты и скажи об этом).
|
||||
4. **Строй.** Зависимые вызовы — строго по одному, дожидаясь ответа: сессия держит эскизы по `id`,
|
||||
а сервер отвечает конкурентно. Каждая мутирующая операция сама дописывает итог проверки
|
||||
построения — читай его, а не пропускай.
|
||||
5. **Проверяй геометрию числом, а не видом.** `describe_model` (габарит, объём, число тел),
|
||||
`measure`, `list_faces` / `list_edges` / `list_bodies`. Расхождение с ТЗ больше допуска — это
|
||||
не «сойдёт», это либо правка, либо явно объявленное отступление.
|
||||
6. **Назови и сохрани.** `set_part_info(name=…)` — деталь без имени в дереве выглядит как «Деталь»;
|
||||
`document_save(path=…)` в указанную папку; `export_step`, если задача про печать или обмен.
|
||||
Проверь, что сохранение подтверждено ответом инструмента.
|
||||
7. **Отчитайся** по форме ниже.
|
||||
|
||||
## Тупик — тоже результат
|
||||
|
||||
Если операция не строится после **трёх** осмысленных попыток (разные параметры/порядок, не повтор
|
||||
того же), не грызи её дальше: зафиксируй, что именно отказало и при каких условиях, обойди другим
|
||||
маршрутом (примитивы вместо эскиза, иной порядок операций, упрощение элемента) и отметь замену как
|
||||
вынужденную. Если обхода нет — доведи всё остальное и сдай задачу частично выполненной, назвав
|
||||
недостающее. **Частичный результат с точным диагнозом полезнее, чем красиво выглядящая деталь,
|
||||
собранная не тем способом, о котором спрашивали.**
|
||||
|
||||
## Формат финального ответа
|
||||
|
||||
Твой ответ читает не человек, а вызывающая модель — пиши плотно, без вступлений и похвал.
|
||||
|
||||
**1. Результат.** Готово / готово частично / не готово. Габарит, объём, число тел, чистота
|
||||
построения. Полные пути сохранённых файлов.
|
||||
|
||||
**2. Протокол вызовов.** Нумерованный список: инструмент + значащие параметры + чем ответил, если
|
||||
ответ повлиял на следующий шаг. Это должен быть воспроизводимый рецепт — по нему повторяют прогон.
|
||||
|
||||
**3. Затыки.** Таблица: что делал → что получил → сколько попыток → чем разрешилось. Сюда же —
|
||||
бесполезные сообщения об ошибках («не построено» без причины) и операции, которые молча сделали
|
||||
не то, что обещали.
|
||||
|
||||
**4. Претензии к навыку.** Чего не хватило, что ввело в заблуждение, где формулировка допускает два
|
||||
прочтения. **Цитируй строку навыка**, а не пересказывай. Отдельно — приёмы, которые ты нашёл сам и
|
||||
которых в навыке нет.
|
||||
|
||||
**5. Претензии к MCP.** Инструмента нет вовсе / параметр неудобен или неочевиден / ответ не содержит
|
||||
того, что нужно для следующего шага / валидация пропустила заведомо неверный вход.
|
||||
|
||||
**6. Допущения.** Каждое решение, принятое за отсутствующего пользователя, с обоснованием в одну строку.
|
||||
|
||||
Если разделы 3–5 пусты — так и напиши «пусто». Пустые 3–5 при выполненной непростой задаче это
|
||||
сильный сигнал, что навык и каталог инструментов дозрели; выдумывать замечания ради заполнения
|
||||
формы не надо.
|
||||
@@ -1,62 +0,0 @@
|
||||
---
|
||||
name: docs-maintainer
|
||||
description: >
|
||||
ОБЯЗАТЕЛЬНО делегируй этому субагенту (Sonnet) ВСЮ синхронизацию документации
|
||||
проекта с кодом — README.md, CLAUDE.md, docs/ARCHITECTURE.md,
|
||||
docs/OPEN_QUESTIONS.md, docs/presentation.html — НЕ правь эти файлы сам.
|
||||
Срабатывает ПРОАКТИВНО как обязательный шаг рабочего цикла, а НЕ по явной команде:
|
||||
как только фича реализована и протестирована, ПЕРЕД коммитом доков передай ему
|
||||
сводку изменений (новые/переименованные/удалённые инструменты, классы, факты
|
||||
реализации, закрытые вопросы OPEN_QUESTIONS, новые счётчики инструментов/тестов
|
||||
для presentation.html). Не жди реплики «обнови доки» — делегируй сам после каждой
|
||||
завершённой единицы работы. Триггеры (включая ТВОИ внутренние): «фича готова, надо
|
||||
отразить в доках», «обнови README/ARCHITECTURE/CLAUDE.md/presentation»,
|
||||
«закрыт вопрос в OPEN_QUESTIONS», «синхронизируй документацию», «задокументируй
|
||||
изменения». Передавай сводку текстом — код/тесты он сам не запускает (Bash нет).
|
||||
tools: Read, Edit, Write, Glob, Grep
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
Ты — помощник по документации проекта **kompas3d-mcp** (MCP-сервер для
|
||||
автоматизации CAD-системы КОМПАС-3D через COM API, .NET 8, C#).
|
||||
|
||||
Тебя вызывают, чтобы основная модель (Opus) не тратила контекст на рутинное
|
||||
обновление документации: **сводка изменений придёт в промпте от вызывающего**.
|
||||
Твоя задача — обновить документацию так, чтобы она точно отражала текущее
|
||||
состояние проекта согласно этой сводке.
|
||||
|
||||
## Файлы для обновления (трогай только те, которых касаются изменения)
|
||||
|
||||
| Файл | Что содержит |
|
||||
|------|-------------|
|
||||
| `docs/presentation.html` | **Презентация проекта — синхронизируй ВСЕГДА.** Счётчики (число инструментов, тестов), бейдж статуса, прогресс-бар, панель инструментов, дорожная карта |
|
||||
| `README.md` | Обзор проекта, список возможностей, команды сборки/запуска |
|
||||
| `CLAUDE.md` | Гайд для агента: «Current state», ключевые факты реализации, что не сделано |
|
||||
| `docs/ARCHITECTURE.md` | Архитектурные решения, стек, паттерны, ключевые факты |
|
||||
| `docs/OPEN_QUESTIONS.md` | Нерешённые вопросы и ограничения |
|
||||
|
||||
## Правила
|
||||
|
||||
1. Прочитай каждый файл перед правкой — не угадывай содержимое.
|
||||
2. Обновляй только секции, которые реально затронуты изменениями.
|
||||
Не переписывай то, что остаётся актуальным.
|
||||
3. Если изменение закрывает вопрос из `OPEN_QUESTIONS.md` — удали его
|
||||
или перенеси в раздел «Решено» (если такой есть).
|
||||
4. Сохраняй стиль, структуру и тон существующих документов.
|
||||
5. Будь лаконичен: одно предложение вместо абзаца, если смысл не теряется.
|
||||
6. Не добавляй раздел «Изменения» или «Changelog» — документы описывают
|
||||
текущее состояние, а не историю.
|
||||
7. Счётчики в `presentation.html` (число инструментов/тестов) бери из сводки
|
||||
изменений; самостоятельно тесты не запускаешь (Bash недоступен).
|
||||
|
||||
После правок кратко сообщи, что именно было изменено в каждом файле.
|
||||
|
||||
## Пример сводки в промпте
|
||||
|
||||
```
|
||||
- Добавлен инструмент get_part_info (масса, объём, материал)
|
||||
- QueryTools.cs перенесён в отдельный файл
|
||||
- Закрыт вопрос из OPEN_QUESTIONS про get_part_info
|
||||
```
|
||||
|
||||
Или короче: «обнови доки — добавил get_part_info».
|
||||
@@ -1,34 +1,23 @@
|
||||
---
|
||||
name: kompas-sdk-research
|
||||
description: >
|
||||
ОБЯЗАТЕЛЬНО делегируй этому субагенту (Haiku, read-only) ЛЮБОЙ поиск по справке
|
||||
COM API КОМПАС в MD-базе docs/Kompas3D_SDK/ — НЕ грепай справку сам. Срабатывает
|
||||
ПРОАКТИВНО, без явной просьбы пользователя: как только при планировании или
|
||||
реализации фичи тебе понадобилась сигнатура метода (Automation/COM), значения
|
||||
перечисления (Obj3dType, ksHoleTypeEnum, ST_MIX_*, стили линий…), нужный
|
||||
интерфейс под задачу («чем/каким интерфейсом построить X»), единицы измерения
|
||||
или цепочка вызовов — СНАЧАЛА спроси этого субагента, ПОТОМ пиши код. Это дёшево:
|
||||
ответ Haiku ты всё равно перепроверяешь рефлексией по libs/kompas-interop/*.dll,
|
||||
поэтому ошибка стоит мало, а сэкономленный контекст Opus — много. Триггеры (в т.ч.
|
||||
ТВОИ внутренние, не только реплики пользователя): «нужна сигнатура …»,
|
||||
«какие значения enum …», «каким интерфейсом сделать X через API КОМПАС»,
|
||||
«что возвращает <метод>», «как через COM API построить …», «найди в справке КОМПАС».
|
||||
НЕ для построения геометрии в КОМПАС (это MCP-инструменты / навык kompas-3d) и
|
||||
НЕ для KsAPI (Qt/C++ — в MD-базе его нет).
|
||||
tools: Glob, Grep, Read
|
||||
description: "ОБЯЗАТЕЛЬНО делегируй этому субагенту (Haiku, read-only) ЛЮБОЙ поиск по справке COM API КОМПАС — она живёт в RAG-базе `kompas-sdk` (MCP), а не в этом репозитории. Срабатывает ПРОАКТИВНО, без явной просьбы пользователя: как только при планировании или реализации фичи тебе понадобилась сигнатура метода (Automation/COM), значения перечисления (Obj3dType, ksHoleTypeEnum, ST_MIX_*, стили линий…), нужный интерфейс под задачу («чем/каким интерфейсом построить X»), единицы измерения или цепочка вызовов — СНАЧАЛА спроси этого субагента, ПОТОМ пиши код. Это дёшево: ответ Haiku ты всё равно перепроверяешь рефлексией по libs/kompas-interop/*.dll, поэтому ошибка стоит мало, а сэкономленный контекст Opus — много. Триггеры (в т.ч. ТВОИ внутренние, не только реплики пользователя): «нужна сигнатура …», «какие значения enum …», «каким интерфейсом сделать X через API КОМПАС», «что возвращает <метод>», «как через COM API построить …», «найди в справке КОМПАС». НЕ для построения геометрии в КОМПАС (это MCP-инструменты / навык kompas-3d) и НЕ для KsAPI (Qt/C++ — в базе его нет).\n"
|
||||
tools: "mcp__kompas-sdk__search_knowledge, mcp__kompas-sdk__grep_knowledge, mcp__kompas-sdk__get_document, mcp__kompas-sdk__get_chunk_context, mcp__kompas-sdk__knowledge_status"
|
||||
model: haiku
|
||||
color: cyan
|
||||
---
|
||||
|
||||
Ты — помощник по навигации в справке **КОМПАС SDK** в репозитории
|
||||
Ты — помощник по навигации в справке **КОМПАС SDK** для проекта
|
||||
**kompas3d-mcp** (MCP-сервер для КОМПАС-3D через COM API, .NET 8, C#).
|
||||
Справка — это MD-база знаний `docs/Kompas3D_SDK/`: статьи по интерфейсам с
|
||||
YAML-фронтматтером (`type`, `api`, `domain`, `tags`, `sources`); методы и
|
||||
свойства — заголовки `## ` внутри статьи интерфейса.
|
||||
|
||||
Справка — это RAG-база **`kompas-sdk`** (2465 статей из репозитория
|
||||
`kompas-sdk-docs`, версия SDK v24): статьи по интерфейсам, перечислениям,
|
||||
структурам и руководствам с полями `title`, `type`, `api`, `domain`, `tags`.
|
||||
Методы и свойства — секции `## Имя - Описание` внутри статьи интерфейса.
|
||||
**В репозитории проекта справки больше нет** — Grep/Read по нему бесполезны,
|
||||
у тебя их и нет.
|
||||
|
||||
Тебя вызывают, чтобы основная модель (Opus) не тратила контекст на поиск:
|
||||
**вопрос для исследования придёт в промпте от вызывающего**. Прогони Grep/Read
|
||||
по базе, прочитай нужную статью и верни сжатый ответ (интерфейс, сигнатура,
|
||||
параметры, значения констант, источник).
|
||||
**вопрос для исследования придёт в промпте от вызывающего**. Найди ответ через
|
||||
инструменты `mcp__kompas-sdk__*` и верни сжатую выжимку.
|
||||
|
||||
## Когда это про тебя
|
||||
|
||||
@@ -37,64 +26,50 @@ YAML-фронтматтером (`type`, `api`, `domain`, `tags`, `sources`); м
|
||||
- Нужно найти интерфейс под задачу («чем построить массив», «как задать переменную»).
|
||||
- Нужен паттерн «как через API сделать X» с цепочкой вызовов.
|
||||
|
||||
## Структура MD-базы `docs/Kompas3D_SDK/`
|
||||
## Порядок поиска (соблюдай — он экономит и время, и контекст)
|
||||
|
||||
```
|
||||
index.md — оглавление по 4 категориям со ссылками на статьи
|
||||
interfaces/*.md — одна статья на интерфейс/тему; все методы и свойства как ## секции
|
||||
enums/*.md — перечисления (пары «имя | значение | смысл»)
|
||||
structures/*.md — структуры и параметрические интерфейсы
|
||||
guides/*.md — концепции и руководства
|
||||
resources/ — изображения (ссылки в статьях вида ../resources/имя.png)
|
||||
```
|
||||
|
||||
Каждая статья начинается с YAML-фронтматтера: `type` (interface/enum/struct/guide),
|
||||
`api` (api7/api5), `domain` (3d/2d/sketch/assembly/…), `tags`, `sources` (исходные `*.html`).
|
||||
Имя файла статьи — имя интерфейса (`iapplication.md`, `ksbossextrusiondefinition.md`)
|
||||
или читаемый слаг темы (`приложение.md`). Методы/свойства внутри — заголовки `## Имя - Описание`.
|
||||
|
||||
> База **хранится в репозитории** (канонический источник справки) — отдельная
|
||||
> генерация не нужна.
|
||||
|
||||
## Инструменты (используй именно их, не веб)
|
||||
|
||||
- **Grep** по `docs/Kompas3D_SDK/` — ищи имя интерфейса/метода/свойства, русское
|
||||
ключевое слово или тег. Имена методов — это заголовки `## SetSideParam - …`,
|
||||
поэтому поиск по имени метода сразу ведёт в нужную статью.
|
||||
- **Read** найденного `*.md` — статья интерфейса содержит все его методы/свойства,
|
||||
блоки `Синтаксис Automation:`/`Синтаксис COM:` (в code-fence), параметры, примечания.
|
||||
- `docs/Kompas3D_SDK/index.md` — оглавление по категориям, когда нужно осмотреть тему.
|
||||
|
||||
Полезные приёмы поиска:
|
||||
- по перечислению: `Grep "ksMassUnitsEnum"` или загляни в `enums/`;
|
||||
- фильтр по тегам в фронтматтере: `Grep "domain: \[.*3d"` , `Grep "type: enum"`;
|
||||
- веер по многим интерфейсам сразу: `Grep "IPart7|IDocument3D|IPart"` по `interfaces/`.
|
||||
|
||||
Точные числовые значения констант при необходимости сверяй в заголовках SDK:
|
||||
`C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK\Include\*.h` (например `ksConstants*.h`, `ldefin2d.h`).
|
||||
|
||||
## Важно — что в базе и чего нет
|
||||
|
||||
- База содержит **COM API7/API5** — то, что использует проект (файлы `iapplication*`,
|
||||
`kspart*`, `ksmassinertiaparam*` и т.п.). Это твой основной источник.
|
||||
- Кроссплатформенный Qt/C++ **KsAPI** (`ksapi_*`) в базу **не включён** — если задача
|
||||
явно про KsAPI, скажи об этом (нужен отдельный источник).
|
||||
1. **Знаешь точное имя** — начинай с `grep_knowledge`. Имена методов лежат в
|
||||
заголовках `## SetSideParam - …`, поэтому точный поиск ведёт прямо в статью:
|
||||
`grep_knowledge("SetSideParam")`, `grep_knowledge("ksHoleTypeEnum")`,
|
||||
`grep_knowledge("o3d_incline")`. Регулярки работают.
|
||||
2. **Вопрос задачный** («чем построить массив по сетке», «как задать уклон») —
|
||||
`search_knowledge` с фильтрами:
|
||||
- `type`: `interface` / `enum` / `struct` / `guide`;
|
||||
- `tags`: `api7`, `api5`, `3d`, `2d`, `sketch`, `assembly`, `drawing`, `feature`;
|
||||
- `path_prefix`: `sdk/enums/`, `sdk/interfaces/`, `sdk/structures/`.
|
||||
3. **Прочитать окрестность найденного** — `get_chunk_context(document_id, chunk_index, window=2)`.
|
||||
4. `get_document` — **только для небольших статей**. Крупные интерфейсы
|
||||
(`sdk/interfaces/геометрия.md` — 261 КБ, `ksdocument2d.md` — 241 КБ) выгрузкой
|
||||
целиком сожгут твой контекст и обесценят делегирование. Сомневаешься —
|
||||
бери `get_chunk_context`.
|
||||
5. `knowledge_status` — если поиск подозрительно пуст: покажет коммит, число
|
||||
документов и точек в индексе.
|
||||
|
||||
## Правила
|
||||
|
||||
1. Не угадывай — находи через Grep/Read по `docs/Kompas3D_SDK/` и читай первоисточник.
|
||||
1. Не угадывай — находи через инструменты и цитируй первоисточник.
|
||||
2. Верни **сжатую выжимку**, а не дамп статьи:
|
||||
- имя интерфейса и метода/свойства;
|
||||
- синтаксис Automation (и COM, если важен порядок out-параметров);
|
||||
- параметры (имя, тип, смысл) и возвращаемое значение;
|
||||
- для enum/констант — пары «имя = значение» и их смысл;
|
||||
- важные примечания (единицы измерения, побочные эффекты, версия КОМПАС);
|
||||
- имя статьи / `sources` из фронтматтера как ссылку на источник.
|
||||
- `path` статьи (например `sdk/interfaces/kspart.md`) как ссылку на источник.
|
||||
3. Если у метода несколько перегрузок или связанных интерфейсов — перечисли релевантные.
|
||||
4. Если в COM-interop имя отличается от справки (частый случай в этом проекте), отметь это
|
||||
как вероятную тонкость и предложи свериться рефлексией по `libs/kompas-interop/*.dll`.
|
||||
5. Только исследование и ответ — правок в код или документацию не делаешь (инструменты
|
||||
ограничены чтением).
|
||||
5. **Если MCP не отвечает — так и скажи**, не выдумывай сигнатуры: локальной копии
|
||||
справки больше нет, проверить тебе будет нечем. Такой ответ полезнее выдумки.
|
||||
6. Только исследование и ответ — правок в код или документацию не делаешь.
|
||||
|
||||
## Чего в базе нет
|
||||
|
||||
- Кроссплатформенный Qt/C++ **KsAPI** (`ksapi_*`) исключён намеренно — проект
|
||||
использует COM API. Задача про KsAPI → скажи, что нужен отдельный источник.
|
||||
- Точные числовые значения констант при необходимости сверяются в заголовках SDK
|
||||
на машине разработчика: `C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK\Include\*.h`
|
||||
(`ksConstants*.h`, `ldefin2d.h`) — этих файлов у тебя нет, поэтому просто укажи,
|
||||
где смотреть.
|
||||
|
||||
## Пример задачи в промпте
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"enabledPlugins": {
|
||||
"obsidian-autodoc@home-repo-cc": true
|
||||
},
|
||||
"extraKnownMarketplaces": {
|
||||
"home-repo-cc": {
|
||||
"source": {
|
||||
"source": "git",
|
||||
"url": "https://git.shahovalov.ru/mikhail/home-repo-cc.git"
|
||||
}
|
||||
}
|
||||
},
|
||||
"pluginConfigs": {
|
||||
"obsidian-autodoc@home-repo-cc": {
|
||||
"options": {
|
||||
"vault": "Obsidian",
|
||||
"area": "Области/Разработка"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,133 +0,0 @@
|
||||
---
|
||||
name: kompas-3d
|
||||
description: >
|
||||
Методика работы с КОМПАС-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-maintainer`.
|
||||
|
||||
## Два правила прежде всего
|
||||
|
||||
**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 инструментов):**
|
||||
- *Система/документы:* `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`.
|
||||
- *Прямое редактирование (без дерева, в т.ч. импортированная B-rep):* `move_face` (сдвинуть грань на N мм по нормали), `split_solid_by_plane` (рассечь тело плоскостью), `move_body` (сдвинуть тело на вектор), `boolean_union` (объединить тела).
|
||||
- *Обмен:* `import_step`, `export_step`.
|
||||
- *Запрос/осмотр:* `get_part_info`, `get_bounding_box`, `list_faces`, `list_edges`, `list_components`, `list_bodies`, `list_features`, `list_variables`, `measure`, `describe_model|face|edge` (структурный осмотр без снимка), `model_snapshot`.
|
||||
- *Проверка:* `validate_part` (операции в ошибке / требующие перестроения).
|
||||
|
||||
**Планируются (трансляция SDK, по мере кейсов):** массивы/паттерны, оболочка/уклон, запись переменных, 2D-чертёж, построение сборок.
|
||||
|
||||
> Если нужного инструмента ещё нет — не хардкодь обход под кейс. Заведи кейс в `usecases/`,
|
||||
> докажи механику (тест или минимальный прогон в usecases/), затем продуктизируй как
|
||||
> **общий** инструмент MCP (с тестами, TDD) и опиши приём здесь.
|
||||
|
||||
## Базовый цикл (эскиз → операция → осмотр)
|
||||
|
||||
Опорный сценарий построения, проверен end-to-end (см. `usecases/0001`):
|
||||
|
||||
1. `kompas_connect` (+ `kompas_set_visible true`).
|
||||
2. `document_create part`.
|
||||
3. `sketch_create XOY` → `sketch_add_*` → `sketch_close`.
|
||||
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)
|
||||
|
||||
Конвейер «импорт → разбор → извлечение детали → осмотр → модификация → экспорт»:
|
||||
|
||||
1. **Импорт STEP** в новый документ (под капотом: встроенный конвертер по коду формата
|
||||
`ksConverterFromSTEP`, затем `ConvertFromAdditionFormat`). Тип документа выбирается по
|
||||
содержимому: сборка → `.a3d`, одиночное тело → деталь.
|
||||
2. **Разбор сборки**: перечислить компоненты (имя, обозначение, габарит, файл) — обход `TopPart → Parts`.
|
||||
3. **Извлечение отдельной детали**: при импорте включать «создавать файлы компонентов», тогда
|
||||
компоненты пишутся как отдельные `.m3d` рядом; открывать деталь самостоятельным документом
|
||||
(`OpenSourceDocument`). Гашение видимости компонента на снимок **не влияет** — изоляция так не делается.
|
||||
4. **Осмотр детали — структурно:** `describe_model` (габарит по осям → какая ось «высота», МЦХ,
|
||||
тела, топология). Грани/рёбра под операцию — `list_faces`/`describe_face`, `measure`. `model_snapshot`
|
||||
(или стандартные проекции `#Спереди/#Сверху/#Слева/#Справа/#Изометрия`) — **только** если нужен
|
||||
визуально-пространственный контроль формы.
|
||||
5. **Модификация** на «тупой» импортированной B-rep (после каждой операции — `validate_part`):
|
||||
- *Простой случай* — `move_face`: сдвинуть плоскую грань на +N мм (наружу) или −N (внутрь).
|
||||
⚠ На сложном торце (с отверстием/пазом) FaceMover может дать `et3dError54`.
|
||||
- *Вставка N мм в середину призматической ножки* (надёжно, грани совпадают):
|
||||
`split_solid_by_plane(plane, offset)` → `move_body(индекс верхнего тела, dz=N)` →
|
||||
`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`.
|
||||
|
||||
## Эвристики и подводные камни
|
||||
|
||||
- **Зрение — структурное (правило 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).
|
||||
- **Единицы — мм** (геометрия) и кг (масса). Локальные координаты эскиза ≠ мировые координаты модели.
|
||||
|
||||
## Открытые вопросы / границы
|
||||
|
||||
- **Прямое редактирование B-rep — реализовано полностью:** `move_face`, `split_solid_by_plane`,
|
||||
`move_body`, `boolean_union`. Цепочка cut→spread→union проверена end-to-end (usecases/0002,
|
||||
top_spacer 39.45→41.45 мм, `validate_part` чисто).
|
||||
- Не реализованы как инструменты: массивы/паттерны, оболочка/уклон, запись переменных, 2D, сборки.
|
||||
|
||||
## Связанное
|
||||
|
||||
- Инструменты и их реализация: `src/Kompas.Mcp.Host/Tools/*`, `src/Kompas.Mcp.Core/*`.
|
||||
- Кейсы (полигон подходов): `usecases/` (см. `usecases/README.md`).
|
||||
- Поиск по справке SDK: субагент **kompas-sdk-research**.
|
||||
- Правка документации проекта: субагент **docs-maintainer**.
|
||||
- Память: `kompas-step-and-assembly-api` (проверенные COM-приёмы импорта/экспорта/обхода).
|
||||
@@ -0,0 +1,162 @@
|
||||
---
|
||||
name: kompas-mcp-dev
|
||||
description: Внутренняя методика доработки самого MCP-сервера КОМПАС-3D в этом репозитории — два слоя (инструмент/методика), полигон usecases/, продуктизация приёма в общий инструмент, делегирование поиска по справке SDK субагенту kompas-sdk-research. Используй, когда задача — доработать сервер (новый инструмент, тесты, плагин, CI), а не построить деталь. Для построения деталей — навык kompas-3d.
|
||||
---
|
||||
|
||||
# kompas-mcp-dev — доработка MCP-сервера КОМПАС-3D
|
||||
|
||||
Область: код сервера, тесты, упаковка в плагин. Построение деталей — навык `kompas-3d`.
|
||||
Архитектура, принципы и бэклог — в `CLAUDE.md` (каталога `docs/` в репозитории нет и заводить его
|
||||
не нужно). Тяжёлые справочники вынесены сюда, чтобы не висеть в контексте каждой сессии:
|
||||
|
||||
- **`reference/com-implementation-facts.md`** — проверенные COM-цепочки: загрузка interop, STA-диспетчер,
|
||||
построение через API5 `ksPart`, выбор граней/рёбер, МЦХ, снимки, дерево построения, переменные,
|
||||
STEP, прямое редактирование B-rep, формообразующие, массивы и зеркало, отверстия, сборки, чертежи,
|
||||
примитивы эскиза. **Читай перед правкой COM-слоя** и дописывай туда каждую новую проверенную цепочку.
|
||||
- **`reference/plugin-and-release.md`** — устройство `plugin/`, доставка сервера, ветка `dist`, релизный
|
||||
workflow, подводные камни CI, обновление RAG-базы справки SDK.
|
||||
|
||||
## Два слоя (важно не смешивать)
|
||||
|
||||
- **MCP-сервер** (`src/Kompas.Mcp.Host`) — *инструмент*. Он **транслирует возможности COM API/SDK
|
||||
КОМПАС** в MCP-инструменты. Инструменты делаются **общими** (по возможностям SDK), а не под
|
||||
конкретную задачу. Расширяя MCP, добавляй универсальную операцию (`import_step`, `list_components`,
|
||||
«переместить грань», «рассечь тело»), а не «сделать вот эту деталь».
|
||||
- **Навык `kompas-3d`** — *методика*. Как из общих инструментов собрать решение: порядок шагов,
|
||||
выбор геометрии, проверка результата, обход подводных камней.
|
||||
|
||||
Итог: **MCP = чем делать, навык = как делать.** Новый приём сначала обкатывается кейсом, потом
|
||||
обобщается: инструмент → в MCP, метод → в навык `kompas-3d`.
|
||||
|
||||
## Правила формы инструмента (каталог оптимизирован под агента)
|
||||
|
||||
Каталог сознательно сжат с 84 инструментов до 57 — экономится не только контекст, но и число
|
||||
вызовов, а каждый лишний вызов это лишний шанс сбиться. Держи форму:
|
||||
|
||||
- **Инструмент = смысл операции, вариант = параметр.** `extrude(mode=boss|cut)`,
|
||||
`hole(type=simple|counterbore|…)`, `pattern(kind=linear|circular)`. Отдельный инструмент заводи,
|
||||
только если у варианта своя схема параметров (`sweep`, `loft`, `rib` — законно отдельные).
|
||||
- **Объект выбирается индексом ИЛИ точкой одним инструментом.** Не плоди `*_index`-двойники:
|
||||
`faceIndex`/`edgeIndices` из `list_faces`/`list_edges` — основной путь, `x,y,z` — запасной.
|
||||
У операций API7, которые умеют только точку, индекс переводится в точку через
|
||||
`ModelInspectionService.FaceCenterPointAsync` (середина параметрической области грани).
|
||||
- **Пакет вместо серии вызовов.** Списочный параметр (`entities[]`, `edgeIndices[]`, `featureIds[]`)
|
||||
выполняется за ОДИН заход на STA-поток: см. `PartModeler.AddEntitiesAsync` и синхронные ядра
|
||||
примитивов рядом с ним. Ошибка обязана называть позицию в пакете.
|
||||
- **Схема не запрещает неверную комбинацию полей — это делает валидация.** Сообщение называет
|
||||
`type=…` и недостающий параметр (`SketchEntityInputs`, `FeatureTools.Required`), иначе агент
|
||||
тратит лишний ход на догадки.
|
||||
- **Текст исключения доходит до клиента только через фильтр.** MCP-SDK показывает сообщение лишь у
|
||||
`McpException`, остальное подменяет на «An error occurred invoking '<tool>'» — то есть без
|
||||
фильтра ВСЕ наши подсказки в исключениях пропадают. В `Program.cs` стоит
|
||||
`WithRequestFilters(... AddCallToolFilter ...)`, который отдаёт `CallToolResult{IsError=true}` с
|
||||
текстом от `ToolErrorText.Describe` (Core/Startup: разворачивает `AggregateException`, склеивает
|
||||
до трёх вложенных причин через «←»). Пишешь новое сообщение об ошибке — помни, что до агента
|
||||
дойдёт именно оно.
|
||||
- **У мутирующей операции есть `name` — имя узла в дереве построения.** Прокидывается до создания
|
||||
объекта (`PartModeler.NewEntity` для API5, `IModelObject.Name` до `Update()` для API7-путей),
|
||||
нормализуется в `FeatureName`. Заводишь новую операцию — добавь параметр сразу: дерево из
|
||||
«Эскиз:1…Эскиз:9» нечитаемо ни человеку, ни агенту, вернувшемуся к модели.
|
||||
- **Ответ операции несёт то, что нужно для СЛЕДУЮЩЕГО шага.** Надпись отдаёт габарит глифов
|
||||
(`TextMetrics`), а не только ширину ячейки; примитив проверяется по объёму. Иначе агент строит
|
||||
вслепую и пересобирает документ ради замера — цикл, который стоил регресс-прогону четырёх кругов.
|
||||
- **Мутирующая операция сама дописывает итог проверки** через `AutoValidation.AnnotateAsync`
|
||||
(`Core/Validation`). Переключатель — `set_auto_validate` и `KOMPAS_MCP_AUTOVALIDATE`; проверка
|
||||
никогда не превращает удачную операцию в ошибку (сбой самой проверки уходит в примечание).
|
||||
|
||||
## Журнал операций: чем подтверждать решения о каталоге
|
||||
|
||||
Решения «этот инструмент убрать, тот переделать» опираются на историю вызовов, а не на память о
|
||||
прошлых прогонах. Сервер пишет каждый вызов строкой JSON: `ts`, `tool`, `args`, `ms`, `ok`,
|
||||
`error` (текст целиком) либо `result` (первые 500 символов) + `resultChars`, а также `session` и
|
||||
`client` — по ним история режется на прогоны.
|
||||
|
||||
- **Устройство.** `Core/Diagnostics/OperationLog` (+`OperationLogEntry`, `OperationLogSettings`),
|
||||
запись — из фильтра вызовов в `Program.cs`: единственное место, через которое проходит каждый
|
||||
инструмент, там же формируется и текст ошибки. Перевод MCP-контекста в запись — `Host/ToolCallLog`
|
||||
(Core о протоколе не знает: его тесты гоняются без MCP-хоста). Снимок модели в журнал не
|
||||
попадает — вместо base64 пишется размер картинки.
|
||||
- **Включение.** Только явным путём: `KOMPAS_MCP_OPLOG_PATH` на старте (в `.mcp.json`, секция `env`)
|
||||
или `set_operation_log(enabled, path?)` в сессии; `KOMPAS_MCP_OPLOG=0` глушит, не стирая путь.
|
||||
Состояние показывает `kompas_status`. Сбой записи не имеет права уронить операцию — он оседает в
|
||||
`LastError` и виден в статусе.
|
||||
- **Разбор.** `pwsh -NoProfile -File tools/dev/oplog-report.ps1 [-Path …]` — частота и медианное
|
||||
время по инструментам, доля отказов, топ текстов ошибок и список ни разу не вызванных инструментов
|
||||
(каталог для сверки берётся из атрибутов `McpServerTool` в исходниках, а не из README).
|
||||
- **Как читать.** Инструмент с высокой долей отказов — кандидат на доработку (смотри тексты ошибок:
|
||||
чаще это непонятная агенту схема, а не COM); инструмент, которого нет в журнале после нескольких
|
||||
разных задач, — кандидат на слияние с соседом или удаление; долгие вызовы — кандидаты на пакетный
|
||||
параметр. Прежде чем удалять, проверь, что задача такого рода вообще попадала в прогоны: пустота
|
||||
бывает от того, что сценарий не запускали, а не от ненужности инструмента.
|
||||
|
||||
## Продуктизация приёма
|
||||
|
||||
> Если нужного инструмента ещё нет — не хардкодь обход под кейс. Заведи кейс в `usecases/`,
|
||||
> докажи механику (спайк или минимальный прогон), затем продуктизируй как **общий** инструмент MCP
|
||||
> (с тестами, TDD) и опиши приём в навыке `kompas-3d`.
|
||||
|
||||
**Спайк — только чтобы проверить теорию; результат выдаётся инструментами MCP.** Отдельный
|
||||
dotnet-проект в `usecases/<кейс>/` (ссылка на `Kompas.Mcp.Core`, `KompasInteropLoader.Install()`
|
||||
первой строкой) — законный способ измерить метрику, проверить COM-цепочку или опровергнуть
|
||||
утверждение навыка. Но **итоговая деталь/чертёж всегда строится вызовами MCP-инструментов**:
|
||||
раннер обходит ровно тот слой, который мы и проверяем (схемы инструментов, разбор входа, форму
|
||||
ответа, авто-валидацию), поэтому «построено раннером» не считается за проверку сервера. Если
|
||||
инструментов не хватает — это и есть находка кейса: доработать сервер, а не достроить в обход.
|
||||
Проверочный проект после кейса удаляй, полученные числа переноси в `plan.md` кейса и в навык.
|
||||
|
||||
Порядок для нового инструмента:
|
||||
|
||||
1. **Сигнатуры и константы** — через субагента `kompas-sdk-research` (см. ниже), затем перепроверка
|
||||
рефлексией по `libs/kompas-interop/*.dll`: справка врёт (напр. `IRadialDimension.NominalValue`
|
||||
отдаёт радиус, а не диаметр; `direction` у `ksInclineDefinition` инвертирован).
|
||||
2. **Спайк вживую** — минимальный прогон на запущенном КОМПАС; COM-цепочка считается верной только
|
||||
после этого.
|
||||
3. **Сервис в `src/Kompas.Mcp.Core/<домен>/`** + валидация параметров отдельным статическим классом
|
||||
(`*Validation`, `SketchGeometry`) — она покрывается unit-тестами без COM.
|
||||
4. **Инструмент в `src/Kompas.Mcp.Host/Tools/<Группа>Tools.cs`** — по файлу на группу.
|
||||
5. **Тесты**: unit на валидацию/маппинг перечислений, integration на реальную геометрию
|
||||
(класс наследует `IntegrationTestBase`, артефакты — в `.scratch/`).
|
||||
6. **Документация**: каталог инструментов в `README.md` (+ счётчик в заголовке), проверенная
|
||||
COM-цепочка и подводные камни — в `reference/com-implementation-facts.md` (здесь же, в навыке)
|
||||
и в память (`kompas-*-api*.md`). Правь эти файлы сам — субагента для документации больше нет.
|
||||
|
||||
## Проверка
|
||||
|
||||
```powershell
|
||||
dotnet build -c Release
|
||||
dotnet test --filter "Category=Unit" # без COM
|
||||
dotnet test --filter "Category=Integration" # нужен запущенный КОМПАС
|
||||
pwsh -NoProfile -File tools/tests/run-ps-tests.ps1 # PowerShell плагина (Pester)
|
||||
```
|
||||
|
||||
CI гоняет только `Category=Unit&Requires!=Windows` на Linux-раннере — integration там не запустится
|
||||
никогда. Формат решения `.slnx` понимает лишь SDK 9+, поэтому в CI проекты указаны путями.
|
||||
|
||||
## Делегирование
|
||||
|
||||
**Прогон задачи целиком** — субагент **`cad-engineer`** (`.claude/agents/`, наследует модель; из
|
||||
инструментов — только навыки, чтение и MCP `kompas`, ничего пишущего). Отладочный цикл навыка и
|
||||
каталога: правишь `plugin/skills/*` или сервер → натравливаешь субагента на ту же задачу с нуля →
|
||||
читаешь его протокол (вызовы, затыки, цитаты из навыка, чего не хватило в инструментах). Смысл именно
|
||||
в чистом контексте: если задача решается только с твоими подсказками по ходу — значит, недоработан
|
||||
навык, а не субагент. Правок он не делает принципиально, поэтому нехватка инструмента возвращается
|
||||
находкой, а не самодельным обходом. В плагин не входит.
|
||||
|
||||
**Поиск по справке SDK** (сигнатуры, константы, перечисления, цепочки COM-вызовов) — субагент
|
||||
**`kompas-sdk-research`** (Haiku, read-only). Справка живёт **не в репозитории**, а в RAG-базе
|
||||
`kompas-sdk` (MCP-сервер, репозиторий `kompas-sdk-docs`) — грепать по проекту бесполезно, доступ к
|
||||
базе есть только у субагента. Ошибка стоит дёшево: ответ всё равно перепроверяется рефлексией по
|
||||
interop-сборкам.
|
||||
|
||||
## Ориентиры в репозитории
|
||||
|
||||
- Инструменты и реализация: `src/Kompas.Mcp.Host/Tools/*`, `src/Kompas.Mcp.Core/*`.
|
||||
- Кейсы (полигон подходов): `usecases/` — локальный, в `.gitignore`, в плагин не входит.
|
||||
- Публикуемые навыки плагина: `plugin/skills/` (`kompas-3d`, `kompas-fdm-design`) — источник истины;
|
||||
`.claude/skills/<навык>` это junction'ы, раскладку делает `tools/sync-agent-assets.ps1`.
|
||||
Перед `git checkout` на ревизию без `plugin/skills` — сначала `-Remove`, иначе checkout ломается
|
||||
на полпути (подробности в `CLAUDE.md`).
|
||||
- Плагин и доставка сервера: `plugin/` (манифест, `server.lock.json`, лаунчер) — версия в
|
||||
`plugin.json` и `server.lock.json` должна совпадать, это проверяет CI.
|
||||
- Память: `kompas-step-and-assembly-api`, `kompas-drawing-api7`, `kompas-hole-api7`,
|
||||
`kompas-formative-features-api5`, `kompas-pattern-mirror-api5`, `kompas-variables-api5`.
|
||||
@@ -0,0 +1,290 @@
|
||||
# Key implementation facts (don't relearn)
|
||||
|
||||
Проверенные COM-цепочки сервера. Перенесено из `CLAUDE.md`, чтобы не грузить эти ~19 КБ
|
||||
в каждую сессию: они нужны при доработке сервера, а не при любом вопросе по репозиторию.
|
||||
Правь этот файл, когда проверил новую цепочку вживую.
|
||||
|
||||
- **Interop assemblies are not shipped** (`KompasAPI7`, `Kompas6API5`, `Kompas6Constants`,
|
||||
`Kompas6Constants3D` belong to ASCON). `libs/kompas-interop` is referenced with `<Private>false</Private>`
|
||||
— compile-time only, absent from `bin/` **and** from the published archive/`deps.json`. At runtime
|
||||
`KompasInteropLoader.Install()` (first line of `Program.cs`) hooks `AssemblyLoadContext.Default.Resolving`;
|
||||
lookup order: `KOMPAS_INTEROP_DIR` → next to `kompas-mcp.exe` → cache → the installed КОМПАС.
|
||||
**The install has no loose interop DLLs** — they live only inside `<install>\SDK\Samples\CSharp.zip`
|
||||
under `Common/`, so the provider unzips them into `%LOCALAPPDATA%\kompas-mcp\interop\<key>` (key = hash
|
||||
of the zip's path+size+mtime, so a КОМПАС upgrade re-extracts; staging dir + `Directory.Move` for
|
||||
atomicity). The install dir comes from `HKCR\<ProgID>\CLSID` → `HKCR\CLSID\{…}\LocalServer32`
|
||||
(`"…\Bin\kHome.Exe"` on v24 Home) — `HKLM\SOFTWARE\ASCON` holds settings, not the path. All interop
|
||||
identities are `Version=1.0.0.0` with **no strong name**, so resolving by simple name is version-agnostic
|
||||
across КОМПАС releases. Failure throws `KompasInteropException` with an actionable message; `Program`
|
||||
logs it at startup (non-fatal — `--version` must work without КОМПАС) and `kompas_status` returns it
|
||||
(it checks interop **before** touching `KompasSession`, otherwise the MCP SDK shows only «An error
|
||||
occurred invoking …»). **The test project copies the DLLs itself**
|
||||
(`<None Include="$(KompasInteropDir)\*.dll">`) — the Linux CI runner has no КОМПАС to resolve from.
|
||||
- **All COM calls run on one dedicated STA thread** (`KompasDispatcher.InvokeAsync`); КОМПАС is
|
||||
single-instance STA. Services never touch COM off that thread.
|
||||
- **Connection**: API5 (`KOMPAS.Application.5` → `KompasObject`) then `ksGetApplication7()` → `IApplication`;
|
||||
the API5 root is needed for `ksPart` 3D building and `ksDocument3D` snapshots. API7 drives app/documents,
|
||||
holes, assemblies, drawings and direct B-rep edit.
|
||||
- **3D via API5 `ksPart`**: `NewEntity(o3d_*)` + matching definition; always check `entity.Create()` return.
|
||||
Entity codes: `o3d_sketch`/`o3d_bossExtrusion`/`o3d_cutExtrusion`/`o3d_bossRotated`/`o3d_fillet`/`o3d_chamfer`,
|
||||
`o3d_shellOperation=43`, `o3d_ribOperation=44`, `o3d_baseEvolution=45` (sweep), `o3d_baseLoft=30`,
|
||||
`o3d_planeOffset=14`, `o3d_meshCopy=35` (linear pattern), `o3d_circularCopy=36`, `o3d_mirrorOperation=48`,
|
||||
`o3d_mirrorAllOperation=49`, `o3d_incline=42` (draft), axes `o3d_axisOX/OY/OZ=71/72/73`. Definitions:
|
||||
`ksBossExtrusionDefinition`/`ksCutExtrusionDefinition`/`ksBossRotatedDefinition`/`ksFilletDefinition`/
|
||||
`ksChamferDefinition`/`ksShellDefinition`/`ksRibDefinition`/`ksBaseEvolutionDefinition`/
|
||||
`ksBaseLoftDefinition`/`ksPlaneOffsetDefinition`/`ksMeshCopyDefinition`/`ksCircularCopyDefinition`/
|
||||
`ksMirrorCopyDefinition`/`ksMirrorCopyAllDefinition`/`ksInclineDefinition`. Cut-through holes use
|
||||
`dtBoth` + `etThroughAll`.
|
||||
- **Face/edge selection**: `ksPart.EntityCollection(o3d_face|o3d_edge)` → `SelectByPoint(x,y,z)` (world mm)
|
||||
→ `GetByIndex(0)`; or by stable index from `list_faces`/`list_edges` (helpers `SelectFaceByIndex`/
|
||||
`SelectEdgeByIndex`, range-checked before mutation; by-index is more reliable than by-point). Classify:
|
||||
`ksFaceDefinition.IsPlanar/IsCylinder/…` + `GetArea(ST_MIX_MM)`; `ksEdgeDefinition.IsLineSeg/IsCircle/IsArc/…`
|
||||
+ `GetLength()`. A sketch axis is a line with system style **3** (осевая).
|
||||
- **МЦХ / mass props**: use **API5 `ksPart.CalcMassInertiaProperties(ST_MIX_MM|ST_MIX_KG)`** →
|
||||
`ksMassInertiaParam` (`v`/`m`/`F`/`xc`/`yc`/`zc`), computed on demand. **Do NOT** use API7
|
||||
`IMassInertiaParam7.Calculate()` — its `Actual` flag sticks after the first calc and won't refresh on
|
||||
API5 geometry changes (stale volume). Bounding box: `ksPart.GetGabarit(full:false, …)`.
|
||||
- **Snapshot**: `ksDocument3D.SaveAsToRasterFormat(file, ksRasterFormatParam)` renders to a temp file (the
|
||||
in-memory `resultArrayBytes` stays empty when a filename is given); read the bytes back. Return to MCP via
|
||||
`ImageContentBlock.FromBytes(bytes, mime)` — **not** `Data = bytes` (Data holds base64). Use
|
||||
`model_snapshot` only for visually-spatial questions; **prefer `describe_model` first** (structural
|
||||
«passport» — bbox + МЦХ + bodies + topology + feature tree + variables, no image token cost).
|
||||
- Logs go to **stderr** (stdout is the MCP channel). Integration tests reuse one КОМПАС via `KompasFixture`;
|
||||
artifacts land in gitignored `.scratch/`. All integration test classes inherit `IntegrationTestBase`
|
||||
(`IAsyncLifetime`) → `DocumentService.CloseAllAsync` after each test (prevents tab accumulation).
|
||||
- **Feature tree API**: read via API5 `ksPart.GetFeature()` → `(ksFeature).SubFeatureCollection(true,false)`
|
||||
→ `ksFeatureCollection`. Casting `(ksFeature)part` does NOT work (RCW QI returns null) — must use
|
||||
`GetFeature()`. `ksFeature.type` returns only a coarse `o3d_entity` and does NOT distinguish operations;
|
||||
the precise type and params come from `ksFeature.GetObject()` → `ksEntity.GetDefinition()` + the matching
|
||||
definition (`ksBossExtrusionDefinition.GetSideParam`, `ksFilletDefinition.radius`,
|
||||
`ksChamferDefinition.GetChamferParam`, …). Node names («Элемент выдавливания:1») are localized by КОМПАС.
|
||||
Features registered by id in `_features` support patterns/mirror; helpers `RequireSketch`/`RequireFeature`.
|
||||
- **Variables (API5)**: create/read via `ksPart.GetFeature().VariableCollection` (property on the root
|
||||
ksFeature) — **NOT** `ksPart.VariableCollection()` (returns external-only). Expression is the leading
|
||||
field; value is derived. Apply via `ksPart.RebuildModel()` (check the return); after a rebuild the RCW
|
||||
variable is stale → re-read via a fresh collection (`ReadValueFresh`). Dependents recalculate
|
||||
automatically; deletion fails while dependents exist (`RemoveVariable` returns FALSE).
|
||||
**Geometry limitation:** variables drive geometry only in a parametric model (sketch dims linked to
|
||||
variable names); our sketches use literal coordinates → `set_variable` stores/computes the value but does
|
||||
NOT move geometry. Parametric sketches are **unavailable via COM** (`ksCDimWithVariable` is not
|
||||
constructible from external automation — see memory `kompas-parametric-sketch-findings`; do not retry
|
||||
without new information).
|
||||
- **Topology / measure API**: `ksFaceDefinition.EdgeCollection` / `GetCylinderParam` /
|
||||
`GetSurface().GetNormal` + `normalOrientation`; `ksEdgeDefinition.GetAdjacentFace(bool)` /
|
||||
`GetVertex(bool)` → `ksVertexDefinition.GetPoint`; bodies via `ksPart.BodyCollection()` → `ksBody`
|
||||
(`IsSolid` / `FaceCollection`); measurements via `ksPart.GetMeasurer()` → `ksMeasurer` (`SetObject1/2`,
|
||||
`unit=ST_MIX_MM`, `Calc`, `distance`/`MinDistance`/`angle` in degrees / `IsAngleValid`).
|
||||
- **«STEP import without history»** is detected structurally: `bodyCount > 0 && no formative features &&
|
||||
features.Count <= bodyCount+1` (only origin + body). A STEP that has been edited («Смещённая плоскость» /
|
||||
«Разрезать» / «Переместить грани» / «Булева операция») already has history.
|
||||
- **STEP import/export COM pattern** (verified): `IApplication.get_Converter((object)(int)ksConverterFromSTEP=-3)`
|
||||
(pass the format code, not a DLL path) → `IConverter.ConverterParameters(cmd)` →
|
||||
`IAdditionConvertParameters.Format=ksConverterFromSTEP` → `IKompasDocument3D1.ConvertFromAdditionFormat(path, prm)`.
|
||||
Export: `ConvertToAdditionFormat` (format codes AP203/AP214/AP242). Param co-classes
|
||||
(`AdditionConvertParameters` etc.) are NOT CoCreatable — only via the converter factories. Assembly
|
||||
traversal (`list_components`): `IKompasDocument3D.TopPart → IPart7.Parts (IParts7)`. Extract a component:
|
||||
`prm.NeedCreateComponentsFiles=true` (writes .m3d files next to the STEP) + `IPart7.OpenSourceDocument`.
|
||||
- **Direct B-rep face editing (`move_face`)** (verified): API7 face via
|
||||
`IPart7.FindObjectsByPoint(x,y,z,true)` → cast to `KompasAPI7.IFace`; containers via runtime COM-QI
|
||||
`(ISurfaceContainer)part`, `(IModelContainer)part`; `FaceMover` (SetFaces + Offset + Direction + Update)
|
||||
moves the face. distance>0 = outward (adds material), <0 = inward. Works on parametric and imported B-rep.
|
||||
The full split-reposition workflow (SplitSolids/BodyRepositions) is driveable; only partly exposed as tools
|
||||
(`split_solid_by_plane`, `move_body`, `boolean_union`).
|
||||
- **Forming ops (API5 definitions)**:
|
||||
- `shell` (`ksShellDefinition`, o3d_shellOperation=43): `thickness` + `thinType` (bool, `= !outward`) +
|
||||
`FaceArray()` (≥1 open face by index). Transient RCWs intentionally not released (consistent with
|
||||
Fillet/Chamfer).
|
||||
- `rib` (`ksRibDefinition`, =44): `SetSketch(sketch)` → `index=0`, `angle`, `side`
|
||||
(`left|right|up|down` → 0/1/2/3 via `SketchGeometry.RibSide()`); `SetThinParam(dtBoth, t/2, t/2)` if
|
||||
symmetric, else `(dtNormal, t, 0)`. Empirical: the rib contour must float in the gap (not touch the body)
|
||||
— КОМПАС extends the web automatically.
|
||||
- `sweep` (`ksBaseEvolutionDefinition`, =45): `SetSketch(profile)` → `PathPartArray().Add(path)` →
|
||||
`sketchShiftType=0` → `SetThinParam(false)` → `Create()`. Profile and path on different (usually ⟂)
|
||||
planes; `profileSketchId != pathSketchId`.
|
||||
- `loft` (`ksBaseLoftDefinition`, =30): `Sketchs().Add(each)` → `SetLoftParam(false,false,true)` →
|
||||
`SetThinParam(false)`. ≥2 closed sections on parallel planes — use `sketch_create(plane, offset)` for
|
||||
non-base sections.
|
||||
- offset plane (`sketch_create` with `offset≠0`, `ksPlaneOffsetDefinition`, o3d_planeOffset=14):
|
||||
`SetPlane(base)` + `offset` mm + `direction` → `Create()` → sketch on it (`OpenSketchOnOffsetPlaneAsync`).
|
||||
- `draft` (`ksInclineDefinition`, o3d_incline=42 — API5 calls the op **Incline**, NOT Draft): `FaceArray()`
|
||||
(by index) + `SetPlane(neutral base plane)` + `angle` (degrees) + `direction`. **Empirical, opposite to
|
||||
the SDK docs:** `direction=false` = expanding/outward (adds material), `true` = tapering/inward → the code
|
||||
maps `def.direction = !outward`. Validate `0<angle<90`. (`o3d_DraftFromEdges=644` / `IDraftFromEdges` is
|
||||
a different op — not used.)
|
||||
- **Patterns & mirror (API5)** — one tool each, the variant is a parameter: `pattern(kind=linear)`
|
||||
(`ksMeshCopyDefinition`, =35): `SetAxis1(axis)` +
|
||||
`SetCopyParamAlongAxis(true,0,count,step,false)` + `count2=1` (disables the 2nd direction → 1D); features
|
||||
via `OperationArray()`. `pattern(kind=circular)` (`ksCircularCopyDefinition`, =36): `SetAxis(axis)`; `count1=1`
|
||||
(radial off), `count2=count` (ring), `step2=angle°` between neighbours, `factor2=false`, `inverce=reverse`;
|
||||
`GetOperationArray().Add(feature)`. `mirror(featureIds)` (`ksMirrorCopyDefinition`, =48): `SetPlane(base)` +
|
||||
`GetOperationArray().Add(feature)`. `mirror()` without ids (`ksMirrorCopyAllDefinition`, =49): `SetPlane(base)`;
|
||||
`ChooseBodies()` casts to null in the interop and is NOT needed — it mirrors all bodies keeping the original
|
||||
(volume doubles). Empirical: `count` includes the original instance (count=3 → 3 instances). Axes:
|
||||
`CoordinateAxis{X,Y,Z}` → `o3d_axisOX/OY/OZ` (`Core/Modeling/CoordinateAxis.cs`, analogous to `BasePlane.cs`).
|
||||
- **Hole ops (API7 only — `ksHoleDefinition` is absent from the API5 interop; `HoleService`)**:
|
||||
`HoleCore(ksHoleTypeEnum holeType, Action<IHole3D> configure)` — `configure` sets `HoleParameters` **after**
|
||||
`HoleType` is assigned (the type-specific sub-interface is inaccessible until the type is fixed). Placement
|
||||
is shared: `IModelContainer`/`IHole3D`/`IHoleDisposal` + `Points3D`, direction chosen by volume delta,
|
||||
orphan rollback. None are registered in `_features` → no id returned. One tool `hole`, the variant comes
|
||||
from `type`: `simple`=`ksHTBase`, configure=null.
|
||||
`counterbore`=`ksHTCounterbore` + `(ISpotfacingHoleParameters)` (`SpotfacingDiameter`/`SpotfacingDepth`).
|
||||
`countersink`=`ksHTCountersinking` + `(ICountersinkHoleParameters)` (`CountersinkType=ksCTDiameterAngle`,
|
||||
`CountersinkDiameter`/`Angle`). `conic`=`ksHTConic` + `(IConicHoleParameters)` (`ConicType=ksCNAngle`,
|
||||
`ConicAngle`).
|
||||
- **Assembly (API7, `AssemblyService`, namespace `Kompas.Mcp.Core.Assemblies`)**: `assembly_add_component` —
|
||||
`IParts7.AddFromFile(path, ExternalFile=true, Redraw=true)` → `IPart7.Placement` (`IPlacement3D`) →
|
||||
`SetOrigin(x,y,z)` (mm, assembly world CS) → `UpdatePlacement(true)` → `top.RebuildModel(true)`.
|
||||
**Empirical:** `UpdatePlacement` returns FALSE for a manually-positioned component (no mates) — NOT an error.
|
||||
Validate `DocumentType==ksDocumentAssembly` before touching `TopPart`; rollback via `IFeature7.Delete` +
|
||||
`RebuildModel`. `assembly_add_mate` — `top.MateConstraints` (`IMateConstraints3D`) →
|
||||
`Add(MateConstraintType)` → `BaseObject1/2` (faces via `top.FindObjectsByPoint(x,y,z,FirstLevel=false)`) →
|
||||
`ParamValue` (distance) → `Update()` → `RebuildModel(true)`; check `mate.Valid` (false → rollback
|
||||
`mate.Owner.Delete`). Types `coincidence` (mc_Coincidence=0) and `distance` (mc_Distance=5, value>0) are
|
||||
verified live; the rest are backlog.
|
||||
- **Drawing (API7, `DrawingService`, namespace `Kompas.Mcp.Core.Drawings`)** — entry via `IKompasDocument2D`;
|
||||
requires an active drawing document (`DocumentType==ksDocumentDrawing`). All coordinates are **view-local**
|
||||
(mm) unless noted. The model file must be saved before placing views.
|
||||
- `drawing_create_standard_views`: `doc2d.ViewsAndLayersManager.Views.AddStandartViews(path, "#Спереди",
|
||||
projTypes, x, y, scale, dx=20, dy=20)` where `projTypes=object[]{1,3,5}` (Front/Up/Left as SAFEARRAY VT_I4).
|
||||
Success: `created==3`; content check: sum of the new views' `IView.ObjectCount` > 0 else rollback
|
||||
`IView.Delete`. Returns `ViewNumbers` (the `IView.Number` values — address views by these when placing
|
||||
annotations).
|
||||
- `drawing_fill_title_block`: `doc2d.LayoutSheets.ItemByNumber[1].Stamp` (`IStamp`) →
|
||||
`stamp.Text[columnId].Str = text` (indexed property; `IText.Str` overwrites, no Clear needed) →
|
||||
`stamp.Update()`. Fields→columns (`ksStampEnum`): Name=1, Designation=2, Material=3. Non-transactional
|
||||
(all cells → a single `Update`).
|
||||
- **Dimensions go into `(ISymbols2DContainer)view`, NOT the sheet, and are NOT counted in `IView.ObjectCount`**
|
||||
(that counts geometry in `IDrawingContainer`) — verify placement via the container's `*.Count`. Common flow:
|
||||
`Add()` → set coords → `AutoNominalValue=true` → `Update()` → check `Valid` → read
|
||||
`((IDimensionText)dim).NominalValue`; rollback `dim.Delete()` on FALSE/invalid/zero. Leader and angle are in
|
||||
**radians** (`DimensionAngles.ToRadians`). Free placement = set coordinates directly; **associative**
|
||||
(diametral/radial only) = set `BaseObject` to a projected circle → the value is read from geometry.
|
||||
- linear (`ILineDimension`): `X1,Y1,X2,Y2` (extension points) + `X3,Y3` (dimension line) + `Orientation`
|
||||
(`DimensionOrientation{Horizontal,Vertical,Parallel}` → `ksLinDParallel=0`/`Horizontal=1`/`Vertical=2`;
|
||||
parallel needs no explicit Angle).
|
||||
- diametral (`IDiametralDimension`): `Xc,Yc,Radius` + `Angle`; `NominalValue` = 2·Radius.
|
||||
- radial (`IRadialDimension`): `Xc,Yc,Radius` + `Angle`, `DimensionType=true`; **`NominalValue` = Radius,
|
||||
NOT diameter** — contrary to the SDK docs, confirmed by a spike.
|
||||
- **associative** diametral/radial (`associate=true`): instead of coordinates, find a projected circle in
|
||||
`(IDrawingContainer)view.Circles` by a center+radius key (`CircularObjectMatch.SelectMatchIndex`, tol 1 mm;
|
||||
throws on none/ambiguous; concentric disambiguated by radius), set `dim.BaseObject = circle` (`_Circle`
|
||||
implements `IDrawingObject`) → `NominalValue` read from geometry. `RequireViewContainers` gives both QIs;
|
||||
the free path stays on `RequireSymbols2DContainer`. Arc/angular/rough binding — not yet (needs its own
|
||||
spike; `ILineDimension` has no `BaseObject`).
|
||||
- angular (`IAngleDimension`, `AngleDimensions.Add(ksDrADimension=10)`): vertex `Xc,Yc` + side points
|
||||
`X1,Y1`/`X2,Y2` + arc-position `X3,Y3` (positions the arc only, does NOT pick the angle); the measured
|
||||
angle is chosen by `DimensionType` = `AngleDimensionType{Min,Max,More}` (on rays 0°/45° → min=45° /
|
||||
max=135° supplement / more=315° reflex). `NominalValue` in degrees.
|
||||
- `drawing_add_rough` (`Roughs.Add()`/`IRough`: `BranchX0/Y0`, `Angle`) + `(IRoughParams)rough` QI:
|
||||
`SignType` = `RoughSignType{NoProcessing,DeleteMaterial,WithoutDeleteMaterial}`, value (Ra/Rz) =
|
||||
`RoughParamText.Str`.
|
||||
- `drawing_add_text` — **text lives in `IDrawingContainer`, NOT `ISymbols2DContainer`, and NOT in
|
||||
`IView.ObjectCount`**: `(IDrawingContainer)view.DrawingTexts.Add()`/`IDrawingText` (`X/Y/Angle`) +
|
||||
`(IText)dt.Str` = text; count via `DrawingTexts.Count`. Do NOT set `Height` (that's block height, not font).
|
||||
- `drawing_set_technical_requirements` — **document-level**: `(IDrawingDocument)doc.TechnicalDemand` /
|
||||
`ITechnicalDemand`: `td.Text.Str = text` → `td.Update()` (`IsCreated` False→True on first set; overwrites;
|
||||
`\n` multiline).
|
||||
- `drawing_add_leader` — `ISymbols2DContainer.Leaders.Add(ksDrLeader)` → `IBaseLeader`. **Critical order
|
||||
(spike):** a fresh leader has 0 branches → `(IBranchs)bl.AddBranchByPoint(0,x,y)` (the tip) BEFORE
|
||||
`SetBranchTextPosition(textX,textY)`/`Update`, otherwise КОМПАС dies with `RPC_E_SERVERFAULT`. Text —
|
||||
`(ILeader)bl.TextOnShelf.Str`; `ShelfDirection` (enum `ShelfDirection{Auto,Right,Left,Up,Down}`, Auto = leave
|
||||
unset). `AddBranchByPoint`/`SetBranchTextPosition` return bool — check them.
|
||||
- `drawing_set_sheet_format` — `RequireLayoutSheet(n).Format` (`ISheetFormat`): `Format`=`ksDocumentFormatEnum`
|
||||
(`PaperFormat{A0..A5,User}` + `PaperFormats.Parse/ToKompas/FromKompas`); standard → set
|
||||
`VerticalOrientation=!landscape` (W/H auto-computed from enum+orientation, e.g. A3 landscape → 420×297);
|
||||
**User → set `FormatWidth/Height` only, КОМПАС derives `VerticalOrientation` from W/H, ignores the flag and
|
||||
never swaps W/H (spike)** → `sheet.Update()`. A new drawing defaults to A4 portrait.
|
||||
`ValidateFormatDimensions`: User needs W/H>0, standard forbids W/H (must be 0).
|
||||
- `DrawingAnnotationResult{Value(read-back), ViewNumber}` is the shared result for rough/text/leader.
|
||||
- **Richer sketch primitives (API5 `ksDocument2D` wrappers)**: `ksArcBy3Points`; `ksArcByAngle` (centre/radius/
|
||||
start-end angles in degrees + counterClockwise flag); `ksEllipse` via `ksEllipseParam`
|
||||
(`KompasObject.GetParamStruct(ko_EllipseParam=22)`; **the property names are `A`/`B` UPPERCASE in the interop**);
|
||||
`ksRegularPolygon` via `ksRegularPolygonParam` (`ko_RegularPolygonParam=92`; `describe = !inscribed`); a NURBS
|
||||
spline via `ksNurbs(order=4)` + `ksNurbsPoint` loop + `ksEndObj`; `ksPoint`. Param structs are released after
|
||||
use. `PartModeler` is partial: `.cs` (registry/helpers/`NewParam<T>`/reset), `.Sketch.cs` (2D primitives),
|
||||
`.Features.cs` (extrude/revolve/fillet/chamfer). Static `SketchGeometry` (`Core/Modeling`) holds the enum maps
|
||||
+ validators (`RequirePositive`, `RequireVertexCount`, `RequirePoints`, `RequireMin`). Point lists use
|
||||
`record SketchPoint(X, Y)` (JSON names `x`/`y`).
|
||||
- **Text in a sketch → curves (`type=text`, verified live)**: a text object is *annotation* — a formative
|
||||
operation never sees it. The chain that works: build `ksTextParam` (`ko_TextParam=28`) → `Init()` →
|
||||
`GetParagraphParam()` (`ksParagraphParam`: `x`, `y`, `ang`, `height`, `width`) → `SetParagraphParam`;
|
||||
one `ksTextItemParam` (`ko_TextItemParam=31`, `type=ksTItString=0`, `s=<string>`) whose `GetItemFont()`
|
||||
(`ksTextItemFont`) carries `fontName`/`height` (mm)/`ksu` (width factor)/`bitVector`
|
||||
(`ITALIC_ON=0x40`, `BOLD_ON=0x100` — from `Include/ldefin2d.h`); wrap it in
|
||||
`KompasObject.GetDynamicArray(TEXT_ITEM_ARR=4)` → `ksTextLineParam` (`ko_TextLineParam=29`,
|
||||
`SetTextItemArr`) → `GetDynamicArray(TEXT_LINE_ARR=3)` → `SetTextLineArr`; then
|
||||
`ksDocument2D.ksTextEx(param, align)` → **`ksConvertTextToCurve(ref)`** — this is what turns glyphs into
|
||||
NURBS/lines that extrude. Traps: the `align` argument of `ksTextEx` does **not** move the string (a
|
||||
centred value still lays it out right-and-up from the insertion point) — instead read
|
||||
`ksGetTextLengthFromReference(ref)` (advance width in mm, ≈ 10 % wider than the glyph bbox) and place the
|
||||
text yourself; the dynamic arrays live in КОМПАС, so `ksDeleteArray()` them in a `finally`; an unknown
|
||||
font name is silently substituted rather than failing; `height` sizes the cap+ascender, not the bbox.
|
||||
- **Glyph bounding box (verified live)**: `ksConvertTextToCurve(ref)` **returns a new reference — the
|
||||
curves**, and only that one gives the real box. `ksDocument2D.ksGetObjGabaritRect(reference, ksRectParam)`
|
||||
(`ko_RectParam`; `GetpBot()`/`GetpTop()` → `ksMathPointParam.x/y`, **millimetres of the sketch**, not
|
||||
sheet centimetres) on the *text* reference returns the cell (23.75 mm for Arial h=10 «HH») while the
|
||||
same call on the *converted* reference returns the glyphs (19.97 mm, matching the extruded solid to
|
||||
0.05 mm). Returns 0 rather than throwing when the object has no box — treat as «unknown», don't fail
|
||||
the primitive. Test: `SketchTextTests.Reported_glyph_box_matches_the_extruded_geometry`.
|
||||
- **Moving a text after it was measured (`align`/`vAlign`, verified live)**: `ksDocument2D.ksMoveObj(ref, dx, dy)`
|
||||
works **only through the TEXT reference** (the one `ksTextEx` returned). Called with the curves reference
|
||||
from `ksConvertTextToCurve` it returns success and moves nothing — the sketch geometry stays put, which
|
||||
the extrusion then proves. `ksDeleteObj` behaves the same way: success, and the curves are still there, so
|
||||
«insert → measure → delete → re-insert» silently leaves TWO strings in the sketch. After a move, do not
|
||||
re-read the box through either reference: the text reference reports the *cell*, so shift the measured
|
||||
glyph box arithmetically instead. Test: `TextAlignmentTests`.
|
||||
- **Deleting a feature (`feature_delete`, verified live)**: `ksDocument3D.DeleteObject(ksEntity)` → TRUE,
|
||||
then `RebuildDocument()`. Dependents cascade: deleting a sketch removes the extrusion built on it. A
|
||||
sketch still in edit mode must be `EndEdit`-ed first. Test: `FeatureDeleteTests`.
|
||||
- **Edge endpoints for filtering (`list_edges` window, verified live)**: `ksEdgeDefinition.GetVertex(bool)`
|
||||
→ `ksVertexDefinition.GetPoint(out x, out y, out z)` gives both ends in world mm; some curves have no
|
||||
vertices (returns null/throws) — treat as «unknown», don't fail the listing. That is what makes
|
||||
«all edges at z=0» addressable on a body with hundreds of edges.
|
||||
- **Feature names in the tree (`name` on every mutating tool, verified live)**: API5 `ksEntity.name` is
|
||||
read/write and must be assigned **before `Create()`** — `PartModeler.NewEntity(part, type, name)` does it
|
||||
for every entity, sketches included. API7 objects created outside `ksPart` (`IElementaryBody` from
|
||||
`ElementaryBodies.Add`, `IHole3D` from `Holes3D.Add`) take it via `IModelObject.Name` set before
|
||||
`Update()`. Reading back is asymmetric: `ksFeature.name` (what `list_features`/`describe_model` walk) is
|
||||
**read-only** — the tree shows the assigned name, but you cannot rename through `ksFeature`.
|
||||
Test: `FeatureNamingTests`.
|
||||
- **Elementary bodies / primitives (`primitive`, verified live)**: `(IPart7 as IModelContainer)
|
||||
.ElementaryBodies.Add(ksObj3dTypeEnum)` → cast to `IBlockBySizes` / `ICylinder` / `ISphere` /
|
||||
`IConeByHeight` → set sizes → `Update()`. Types: `o3d_BlockBySizes=668`, `o3d_Cylinder=663`,
|
||||
`o3d_Sphere=662`, `o3d_ConeByHeight=670` — and `Add` takes **`ksObj3dTypeEnum`, not `Obj3dType`**
|
||||
(same numbers, different type; the compiler catches it). Placement is the primitive's own
|
||||
`Position` (a `LocalCoordinateSystem` with writable X/Y/Z); for a block the anchor is a corner
|
||||
(`BlockPosition = ksVertex`), for bodies of revolution the base centre. `OperationResult`
|
||||
(`ksOperationUnion=0 / NewBody=1 / Cut=2 / Intersect=3`) makes the primitive a boolean in itself —
|
||||
a pocket needs no sketch and no cut extrusion. Traps: `Height`, `HeightType`, `HeightOffset` and
|
||||
cone's `Diameter` are **indexed properties** (`Height[true] = …`, index = the direction side), plain
|
||||
assignment does not compile; and `Update()` returns TRUE for a subtraction that misses the body
|
||||
entirely, so `PrimitiveService` compares the volume before/after and rolls the feature back
|
||||
(`Owner.Delete()`) when nothing changed.
|
||||
- **Part name/marking (`set_part_info`)**: write through API7 `IPart7.Name` / `IPart7.Marking` on
|
||||
`IKompasDocument3D.TopPart`, then **`top.Update()`** — without it the tree keeps showing «Деталь».
|
||||
Read-back through the same properties (API5 `ksPart.name` / `ksPart.marking` also expose them, which is
|
||||
what `ModelInspectionService` uses, since its `GetTopPart` is already an API5 `ksPart`). The document's
|
||||
file name is a different thing entirely: saving as `Badge.m3d` does not rename the part.
|
||||
- **`IKompasDocument.SaveAs(path)` returns `void` and fails silently** when a file of that name is already
|
||||
open in КОМПАС as another document: nothing is written, no error, the document simply stays unsaved.
|
||||
`DocumentService.SaveAsAsync` therefore verifies afterwards — `doc.PathName` must equal the requested
|
||||
path AND `File.Exists(path)` — and `SaveAsync` checks `doc.Changed == false`. Covered by
|
||||
`DocumentTests.SaveAs_over_a_name_held_by_another_open_document_fails_loudly`. To free the name,
|
||||
`document_close(all: true)` (→ `DocumentService.CloseAllAsync`) closes every open document.
|
||||
- **Thin-wall extrusion (`extrude(thinThickness, thinSide)`)**: `ksBoss/CutExtrusionDefinition.SetThinParam(
|
||||
thin, thinType, normalThickness, reverseThickness)` with `thinType` = `dtNormal` (outward), `dtReverse`
|
||||
(inward), `dtBoth` (half each side). **Trap: the thickness must sit in the field matching the direction**
|
||||
— with `dtReverse` the *reverseThickness* argument is the one read; passing it as `normalThickness`
|
||||
leaves the wall at zero and КОМПАС silently extrudes a SOLID section instead of failing (caught only by
|
||||
the volume: a 82×10.5 plate came out full instead of a 1.2 mm frame). `outward` over a closed contour is the cheap equivalent of a 2D
|
||||
equidistant: it grows a rim around it (verified — a 20×20 square with 2 mm outward wall gives a 24×24
|
||||
frame). Building the same sketch twice (solid + outward wall) yields a silhouette with an offset border,
|
||||
which is how a lettered badge gets its backing plate without `ksEquidistant`.
|
||||
**Intersection trap (isolated by experiment, not guessed):** a thin-wall extrusion over a
|
||||
*multi-contour* sketch (a text line is ~10 closed contours, several with inner loops) returns
|
||||
`Create()==FALSE` when the wall **intersects an already existing body**. Bisected: empty part → OK;
|
||||
body present but not touched by the wall → OK; wall crosses the body → FAIL. Body count is
|
||||
irrelevant (2+ bodies with a plain rectangular contour build fine), so is the body's origin
|
||||
(sketch or `ElementaryBodies` primitive), and `chooseType` (tried `-1/0/1/2/3`) changes nothing —
|
||||
the earlier "multi-body" explanation was wrong. Practical rule: build the thin wall before the body
|
||||
it would cross; `primitive(result=union|subtract)` has no such restriction.
|
||||
@@ -0,0 +1,79 @@
|
||||
# Плагин `kompas`, канал поставки и CI
|
||||
|
||||
Перенесено из `CLAUDE.md`: нужно при выпуске релиза и правке CI, а не в каждой сессии.
|
||||
Файл лежит в навыке (`.claude/skills/kompas-mcp-dev/`), а **не** в `plugin/CLAUDE.md`, потому что
|
||||
`plugin/` распространяется пользователям — внутренняя кухня релиза туда попадать не должна.
|
||||
|
||||
## Claude Code plugin (`plugin/`)
|
||||
|
||||
The server and both published skills ship as the plugin **`kompas`** — `plugin/` is a self-contained tree,
|
||||
distributed independently of the rest of the repo.
|
||||
|
||||
- `plugin/.claude-plugin/plugin.json` — manifest: `name: "kompas"`, `version` (currently `0.0.0`).
|
||||
Version is Claude Code's cache key — `/plugin update` and auto-update skip a plugin whose version
|
||||
matches what's installed, so **every release must bump it**.
|
||||
- `plugin/server.lock.json` — pins exactly one server version: `{version, sourceSha, url, sha256}`.
|
||||
`0.0.0` with empty fields = no release published yet.
|
||||
- `plugin/skills/{kompas-3d,kompas-fdm-design}/` — the source of truth for both published skills.
|
||||
- `plugin/commands/doctor.md` — `/kompas:doctor`: compares the expected version (from the lock) against
|
||||
the `KOMPAS_MCP_EXE` override / `install.json` marker / `kompas-mcp.exe --version`, checks whether
|
||||
КОМПАС is installed and running, then `kompas_connect` → `kompas_status`.
|
||||
- `plugin/.mcp.json` — declares the `kompas` MCP server as
|
||||
`powershell -File ${CLAUDE_PLUGIN_ROOT}/scripts/launch-kompas-mcp.ps1`.
|
||||
- `plugin/scripts/KompasMcpBootstrap.psm1` — delivery: `Read-KompasMcpLock` / `Test-KompasMcpInstall` /
|
||||
`Install-KompasMcpServer` / `Resolve-KompasMcpExecutable`. Downloads the release asset, verifies SHA256,
|
||||
unpacks under `%LOCALAPPDATA%\kompas-mcp\.tmp` and atomically moves it to
|
||||
`%LOCALAPPDATA%\kompas-mcp\<version>`, writes an `install.json` marker. An install is trusted only when
|
||||
the marker's `version`/`sha256` match the lock.
|
||||
- `plugin/scripts/launch-kompas-mcp.ps1` — entry point: the `KOMPAS_MCP_EXE` env var wins (dev mode),
|
||||
otherwise deliver per the lock; runs the server and forwards its exit code. Invariant: **not a single
|
||||
byte reaches stdout before the server starts** (stdout is the JSON-RPC channel) — all diagnostics go to
|
||||
stderr prefixed `kompas-mcp launcher:`.
|
||||
- `plugin/README.md` — prerequisites and install; `plugin/adapters/{codex,opencode}/` — config snippets
|
||||
(not separate distributions) wiring the same launcher into Codex and opencode.
|
||||
- CLI flag `--version` (`Core/Startup/CliArguments.IsVersionRequest`, early-exit in `Program.cs` before
|
||||
the host and any КОМПАС contact) — prints the 3-part assembly version; `/kompas:doctor` uses it to
|
||||
cross-check the installed binary against the lock.
|
||||
|
||||
**Gotchas:**
|
||||
- **Plugin PowerShell files must be UTF-8 *with BOM*.** The launcher runs under `powershell` (Windows
|
||||
PowerShell 5.1), which reads BOM-less files in the system ANSI codepage — Cyrillic string literals then
|
||||
corrupt parsing of the whole script. `pwsh` 7 doesn't reproduce this (BOM auto-detected either way).
|
||||
- Switching branch/commit across a `plugin/skills` boundary can dangle the skill junctions mid-checkout —
|
||||
same failure mode and fix as in `CLAUDE.md` §«Skills and their layout».
|
||||
|
||||
## Distribution channel — the `dist` branch, not `main`
|
||||
|
||||
Releases (`.gitea/workflows/release.yml`, tag `vX.Y.Z`): `dotnet publish -r win-x64 --self-contained` →
|
||||
zip → idempotent upsert of a Gitea release + asset via the Gitea API → re-verify the downloaded asset's
|
||||
SHA256 → commit updated `server.lock.json`/`plugin.json` to branch **`dist`**, on top of the tagged commit.
|
||||
A private plugin marketplace (`home-repo-cc`) will reference the plugin via a `git-subdir` source pinned to
|
||||
`ref: dist` — **not added yet**, and there is **no release yet**. Rationale: a release is built from the
|
||||
tagged commit; if the marketplace pointed at `main`, a user could get a newer `plugin/` tree under a
|
||||
version whose binary was built from an older commit.
|
||||
|
||||
`.gitea/workflows/ci.yml` runs on push/PR to `main`: `plugin.json`↔`server.lock.json` consistency check
|
||||
(jq), build, then unit tests filtered `Category=Unit&Requires!=Windows` (245 of the 250). Runner:
|
||||
`gitea-runner` (docker executor, label `ubuntu-latest`).
|
||||
|
||||
CI gotchas:
|
||||
- **SDK 8 doesn't understand the `.slnx` solution format** (`MSBUILD : error MSB1003`) — CI builds and
|
||||
tests explicit project paths (`src/Kompas.Mcp.Host/Kompas.Mcp.Host.csproj`,
|
||||
`tests/Kompas.Mcp.Tests/Kompas.Mcp.Tests.csproj`) instead of the solution. Not reproducible locally with SDK 9+.
|
||||
- **`net8.0-windows` builds and runs unit tests fine on the Linux runner** with
|
||||
`-p:EnableWindowsTargeting=true`. ASCON interop DLLs link as ordinary references; `ole32`/`oleaut32` are
|
||||
only needed at COM runtime, not build time. The 5 `DispatcherTests` are tagged
|
||||
`[Trait("Requires", "Windows")]` and excluded — `Thread.SetApartmentState(STA)` throws
|
||||
`PlatformNotSupportedException` on Linux.
|
||||
- **`.gitignore`'s `.mcp.json` rule is anchored to the repo root** (`/.mcp.json`) — without the leading
|
||||
slash the glob also matched the tracked, portable `plugin/.mcp.json`.
|
||||
- Integration tests never run in CI (they need a running КОМПАС with GUI and a license) — a hard boundary,
|
||||
not a future task.
|
||||
|
||||
## Обновление RAG-базы справки SDK
|
||||
|
||||
Когда выходит новая версия КОМПАС — в репозитории `kompas-sdk-docs`, на машине с установленным КОМПАС:
|
||||
`pwsh tools/update_sdk_docs.ps1 -SdkVersion 25` перегенерирует `sdk/` из `SDK\Help\KOMPAS_SDK_ru-RU.zip`;
|
||||
просмотри диф (**удалённые статьи = сломался парсер**, а не усохший API), закоммить, поставь тег `sdk-vNN`,
|
||||
запушь — Gitea Actions на `rag-node` перевалидирует и переключит алиас `kompas_sdk`. Индексация
|
||||
инкрементальная, по контрольным суммам.
|
||||
@@ -0,0 +1,64 @@
|
||||
name: ci
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '8.0.x'
|
||||
|
||||
# Плагин: server.lock.json — то, что скачивает лаунчер; plugin.json — то, что видит
|
||||
# Claude Code как версию установки. Обе должны совпадать между собой, иначе релизный
|
||||
# workflow отдал бы плагин с пином, который сам себе противоречит.
|
||||
- name: инструменты для проверки манифеста плагина
|
||||
run: apt-get update -qq && apt-get install -y -qq jq
|
||||
|
||||
- name: согласованность plugin.json и server.lock.json
|
||||
run: |
|
||||
MANIFEST_VERSION=$(jq -r '.version' plugin/.claude-plugin/plugin.json)
|
||||
LOCK_VERSION=$(jq -r '.version' plugin/server.lock.json)
|
||||
LOCK_SHA256=$(jq -r '.sha256' plugin/server.lock.json)
|
||||
|
||||
if [ "$MANIFEST_VERSION" != "$LOCK_VERSION" ]; then
|
||||
echo "версия plugin.json ($MANIFEST_VERSION) не совпадает с server.lock.json ($LOCK_VERSION)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 0.0.0 — состояние «релиз ещё не публиковался»: url/sha256 намеренно пустые
|
||||
# (см. tests/Kompas.Mcp.Tests/PluginManifestTests.cs, Lock_WhenReleased_HasUrlAndSha256).
|
||||
if [ "$LOCK_VERSION" != "0.0.0" ]; then
|
||||
if [ -z "$LOCK_SHA256" ] || [ "$LOCK_SHA256" = "null" ]; then
|
||||
echo "server.lock.json: версия $LOCK_VERSION опубликована, но sha256 пуст"
|
||||
exit 1
|
||||
fi
|
||||
if ! echo "$LOCK_SHA256" | grep -Eq '^[0-9a-f]{64}$'; then
|
||||
echo "server.lock.json: sha256 '$LOCK_SHA256' не похож на 64-символьный hex"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "ok: plugin.json/server.lock.json согласованы (version=$LOCK_VERSION)"
|
||||
|
||||
# Проекты указаны явно, а не через решение: формат KompasMcp.slnx понимает только
|
||||
# SDK 9+, а здесь стоит 8.0.x — на решении сборка падает с MSB1003.
|
||||
# EnableWindowsTargeting: проект таргетит net8.0-windows, сборка идёт на Linux.
|
||||
- name: build
|
||||
run: dotnet build src/Kompas.Mcp.Host/Kompas.Mcp.Host.csproj -c Release -p:EnableWindowsTargeting=true
|
||||
|
||||
# Что здесь НЕ выполняется и почему:
|
||||
# Category=Integration — нужен запущенный КОМПАС с GUI и лицензией;
|
||||
# Requires=Windows — КОМПАС не нужен, но нужна Windows (STA-апартамент
|
||||
# в KompasDispatcher: на Linux SetApartmentState бросает
|
||||
# PlatformNotSupportedException).
|
||||
# Оба класса гоняются на машине разработчика, см. CLAUDE.md.
|
||||
- name: unit tests
|
||||
run: dotnet test tests/Kompas.Mcp.Tests/Kompas.Mcp.Tests.csproj --filter "Category=Unit&Requires!=Windows" -c Release -p:EnableWindowsTargeting=true
|
||||
@@ -0,0 +1,178 @@
|
||||
name: release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['v*']
|
||||
|
||||
# Релизы сериализуются: параллельные теги не должны гонять ветку dist одновременно
|
||||
# (обе гоняющиеся сборки делают `git push --force dist`, и без сериализации может
|
||||
# выиграть та, что стартовала позже, но закончила раньше — с более старой версией).
|
||||
concurrency:
|
||||
group: release
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
OWNER: mikhail
|
||||
REPO: kompas3d-mcp
|
||||
GITEA: https://git.shahovalov.ru
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
# Пушим в dist собственным GITEA_TOKEN явным URL (см. последний шаг) —
|
||||
# заголовок авторизации, который checkout оставляет в git-конфиге для
|
||||
# выданного джобу токена, тут не нужен и может конфликтовать с ним
|
||||
# (два способа аутентификации на один и тот же хост в одном запросе).
|
||||
persist-credentials: false
|
||||
|
||||
- name: инструменты
|
||||
run: apt-get update -qq && apt-get install -y -qq jq zip curl git
|
||||
|
||||
- uses: actions/setup-dotnet@v4
|
||||
with:
|
||||
dotnet-version: '8.0.x'
|
||||
|
||||
- name: проверить формат тега
|
||||
run: |
|
||||
echo "${{ github.ref_name }}" | grep -Eq '^v[0-9]+\.[0-9]+\.[0-9]+$' \
|
||||
|| { echo "тег должен быть вида vX.Y.Z, получено: ${{ github.ref_name }}"; exit 1; }
|
||||
|
||||
- name: версия не должна уменьшаться
|
||||
run: |
|
||||
NEW="${{ github.ref_name }}"; NEW="${NEW#v}"
|
||||
CURRENT_SHA="${{ github.sha }}"
|
||||
|
||||
# Сверяем по plugin/server.lock.json (не plugin.json): в нём вместе с версией
|
||||
# лежит и sourceSha, а он нужен ниже, чтобы отличить ретрай того же релиза от
|
||||
# попытки переопубликовать ту же версию другим коммитом.
|
||||
#
|
||||
# `git show origin/dist:...` может не найти ни ветку, ни файл (первый релиз —
|
||||
# dist ещё не существует). Не полагаемся на `cmd || echo fallback` вокруг пайпа
|
||||
# с jq: jq на пустом stdin ничего не печатает, но выходит с кодом 0, поэтому
|
||||
# такой fallback никогда бы не сработал — здесь fallback навешан на сам git show,
|
||||
# jq вызывается только когда файл реально прочитан. Без dist сравнивать sourceSha
|
||||
# не с чем — OLD_SOURCE_SHA остаётся пустым, и равенство версий ниже недостижимо
|
||||
# (OLD_VERSION="0.0.0" всегда меньше валидного тега vX.Y.Z, кроме вырожденного
|
||||
# v0.0.0, который проверка формата тега не отсекает, но это не наш случай).
|
||||
git fetch origin dist 2>/dev/null || true
|
||||
OLD_VERSION="0.0.0"
|
||||
OLD_SOURCE_SHA=""
|
||||
if git show origin/dist:plugin/server.lock.json > /tmp/dist-lock.json 2>/dev/null; then
|
||||
OLD_VERSION=$(jq -r '.version // "0.0.0"' /tmp/dist-lock.json)
|
||||
OLD_SOURCE_SHA=$(jq -r '.sourceSha // ""' /tmp/dist-lock.json)
|
||||
fi
|
||||
|
||||
if [ "$OLD_VERSION" = "$NEW" ]; then
|
||||
# Равная версия допускается ровно в одном случае: тег указывает на тот же
|
||||
# коммит, из которого эта версия уже была опубликована в dist — это ретрай
|
||||
# (сбойнул шаг после публикации ассета, тег пересоздали на том же SHA и т.п.),
|
||||
# и весь пайплайн ниже идемпотентен сам по себе (upsert релиза/ассета, повторная
|
||||
# сверка sha256, force-push dist тем же содержимым). Если sourceSha другой — под
|
||||
# тем же номером версии протаскивают другой код, это не ретрай, а подмена уже
|
||||
# опубликованного релиза; такое отвергаем, а не публикуем молча поверх старого.
|
||||
if [ -n "$OLD_SOURCE_SHA" ] && [ "$OLD_SOURCE_SHA" = "$CURRENT_SHA" ]; then
|
||||
echo "ok: повтор релиза $NEW с того же коммита $CURRENT_SHA"
|
||||
else
|
||||
echo "версия $NEW уже опубликована из коммита ${OLD_SOURCE_SHA:-<неизвестно>} — поднимите версию"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
SMALLEST=$(printf '%s\n%s\n' "$OLD_VERSION" "$NEW" | sort -V | head -1)
|
||||
if [ "$SMALLEST" != "$OLD_VERSION" ]; then
|
||||
echo "версия $NEW не больше опубликованной $OLD_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
echo "ok: $NEW > $OLD_VERSION"
|
||||
fi
|
||||
|
||||
- name: publish
|
||||
run: |
|
||||
VERSION="${{ github.ref_name }}"; VERSION="${VERSION#v}"
|
||||
dotnet publish src/Kompas.Mcp.Host/Kompas.Mcp.Host.csproj \
|
||||
-c Release -r win-x64 --self-contained true \
|
||||
-p:EnableWindowsTargeting=true -p:Version="$VERSION" \
|
||||
-o out/publish
|
||||
test -f out/publish/kompas-mcp.exe || { echo "нет kompas-mcp.exe в out/publish"; exit 1; }
|
||||
|
||||
# Плоская структура: exe и зависимости прямо в корне архива, без каталога out/publish/.
|
||||
(cd out/publish && zip -qr "../kompas-mcp-$VERSION-win-x64.zip" .)
|
||||
|
||||
echo "VERSION=$VERSION" >> "$GITHUB_ENV"
|
||||
echo "ASSET=out/kompas-mcp-$VERSION-win-x64.zip" >> "$GITHUB_ENV"
|
||||
echo "SHA256=$(sha256sum "out/kompas-mcp-$VERSION-win-x64.zip" | cut -d' ' -f1)" >> "$GITHUB_ENV"
|
||||
|
||||
- name: upsert релиза и ассета
|
||||
run: |
|
||||
API="$GITEA/api/v1/repos/$OWNER/$REPO"
|
||||
AUTH="Authorization: token ${{ secrets.GITEA_TOKEN }}"
|
||||
TAG="${{ github.ref_name }}"
|
||||
NAME="kompas-mcp-$VERSION-win-x64.zip"
|
||||
|
||||
# Найти существующий релиз по тегу; создать, если его ещё нет. Различаем "нет
|
||||
# релиза" (404) от прочих ошибок API явно по HTTP-коду — не глотаем и то, и
|
||||
# другое одним `|| echo ""`, как в черновике: сетевая/авторизационная ошибка
|
||||
# не должна молча трактоваться как "релиза нет, создаём новый".
|
||||
HTTP=$(curl -s -o /tmp/release.json -w '%{http_code}' -H "$AUTH" "$API/releases/tags/$TAG")
|
||||
if [ "$HTTP" = "200" ]; then
|
||||
ID=$(jq -r '.id' /tmp/release.json)
|
||||
elif [ "$HTTP" = "404" ]; then
|
||||
HTTP=$(curl -s -o /tmp/release.json -w '%{http_code}' -X POST -H "$AUTH" \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\"}" "$API/releases")
|
||||
if [ "$HTTP" != "201" ]; then
|
||||
echo "не удалось создать релиз $TAG (HTTP $HTTP)"; cat /tmp/release.json; exit 1
|
||||
fi
|
||||
ID=$(jq -r '.id' /tmp/release.json)
|
||||
else
|
||||
echo "не удалось получить релиз по тегу $TAG (HTTP $HTTP)"; cat /tmp/release.json; exit 1
|
||||
fi
|
||||
|
||||
# Повторный прогон на том же теге не должен падать на "ассет уже существует":
|
||||
# старый ассет с тем же именем удаляется перед загрузкой нового.
|
||||
HTTP=$(curl -s -o /tmp/assets.json -w '%{http_code}' -H "$AUTH" "$API/releases/$ID/assets")
|
||||
if [ "$HTTP" != "200" ]; then
|
||||
echo "не удалось получить список ассетов релиза $ID (HTTP $HTTP)"; cat /tmp/assets.json; exit 1
|
||||
fi
|
||||
EXISTING=$(jq -r --arg name "$NAME" '.[] | select(.name==$name) | .id' /tmp/assets.json)
|
||||
if [ -n "$EXISTING" ]; then
|
||||
curl -sf -X DELETE -H "$AUTH" "$API/releases/$ID/assets/$EXISTING"
|
||||
fi
|
||||
|
||||
HTTP=$(curl -s -o /tmp/asset.json -w '%{http_code}' -X POST -H "$AUTH" \
|
||||
-F "attachment=@$ASSET" "$API/releases/$ID/assets?name=$NAME")
|
||||
if [ "$HTTP" != "201" ]; then
|
||||
echo "не удалось загрузить ассет $NAME (HTTP $HTTP)"; cat /tmp/asset.json; exit 1
|
||||
fi
|
||||
|
||||
echo "URL=$GITEA/$OWNER/$REPO/releases/download/$TAG/$NAME" >> "$GITHUB_ENV"
|
||||
|
||||
- name: сверить опубликованный ассет
|
||||
run: |
|
||||
curl -sfL "$URL" -o /tmp/published.zip
|
||||
ACTUAL=$(sha256sum /tmp/published.zip | cut -d' ' -f1)
|
||||
[ "$ACTUAL" = "$SHA256" ] || { echo "SHA256 опубликованного ассета не совпал: ожидался $SHA256, получен $ACTUAL"; exit 1; }
|
||||
|
||||
- name: обновить ветку dist
|
||||
run: |
|
||||
git config user.name "gitea-actions"
|
||||
git config user.email "actions@git.shahovalov.ru"
|
||||
git remote set-url origin "$GITEA/$OWNER/$REPO.git"
|
||||
|
||||
# dist — не история, а единственный коммит поверх коммита с тегом (см. архитектуру
|
||||
# в docs/superpowers/plans/2026-07-31-kompas-plugin-distribution.md): каждый новый
|
||||
# релиз пересобирает dist заново поверх своего тега, поэтому push принудительный.
|
||||
# concurrency-группа выше гарантирует, что это не гонка между двумя релизами разом.
|
||||
git checkout -B dist "${{ github.sha }}"
|
||||
|
||||
jq --arg v "$VERSION" --arg s "$SHA256" --arg u "$URL" --arg src "${{ github.sha }}" \
|
||||
'.version=$v | .sha256=$s | .url=$u | .sourceSha=$src' \
|
||||
plugin/server.lock.json > /tmp/lock.json && mv /tmp/lock.json plugin/server.lock.json
|
||||
jq --arg v "$VERSION" '.version=$v' \
|
||||
plugin/.claude-plugin/plugin.json > /tmp/manifest.json && mv /tmp/manifest.json plugin/.claude-plugin/plugin.json
|
||||
|
||||
git add plugin/server.lock.json plugin/.claude-plugin/plugin.json
|
||||
git commit -m "release: kompas $VERSION"
|
||||
git push --force "https://x-access-token:${{ secrets.GITEA_TOKEN }}@git.shahovalov.ru/$OWNER/$REPO.git" dist
|
||||
+18
-4
@@ -38,7 +38,9 @@ project.assets.json
|
||||
.claude/settings.local.json
|
||||
|
||||
# ---- MCP-конфиг с машинно-специфичным абсолютным путём к kompas-mcp.exe ------
|
||||
.mcp.json
|
||||
# Слэш обязателен: без него маска ловила бы и переносимый plugin/.mcp.json,
|
||||
# который в репозитории нужен (он ссылается на ${CLAUDE_PLUGIN_ROOT}).
|
||||
/.mcp.json
|
||||
|
||||
# ---- Python tooling (tools/) -----------------------------------------------
|
||||
__pycache__/
|
||||
@@ -53,6 +55,9 @@ Desktop.ini
|
||||
# ---- Scratch: тестовые документы КОМПАС, снимки рендера --------------------
|
||||
.scratch/
|
||||
|
||||
# ---- pi extension node_modules (не коммитить, source остаётся) ----
|
||||
.pi/extensions/*/node_modules/
|
||||
|
||||
# ---- Use case'ы проработки MCP (локальная песочница, не разделяется) --------
|
||||
# Папки кейсов с описаниями (case.md) и артефактами построений (.m3d, .png …).
|
||||
# Каркас и правила — в usecases/README.md (см. там же шаблон _TEMPLATE/).
|
||||
@@ -62,10 +67,19 @@ usecases/
|
||||
# Большие вендорские/генерируемые артефакты — НЕ коммитим
|
||||
# ============================================================================
|
||||
|
||||
# Офлайн-зеркало справки SDK КОМПАС-3D (~1.4 ГБ, © АСКОН). Канонический источник
|
||||
# справки теперь — MD-база docs/Kompas3D_SDK/ (в репозитории). Зеркало в репо не
|
||||
# коммитим: если будет скачано локально снова — пусть остаётся проигнорированным.
|
||||
# Справка SDK КОМПАС-3D (© АСКОН) в этом репозитории не живёт: MD-база вынесена
|
||||
# в приватный kompas-sdk-docs и доступна через RAG (MCP-сервер kompas-sdk).
|
||||
# Правила ниже — страховка на случай, если зеркало или база окажутся здесь снова.
|
||||
docs/KOMPAS_SDK_ru-RU/
|
||||
docs/Kompas3D_SDK/
|
||||
|
||||
# ---- Навыки: источник истины — plugin/skills, остальное создаётся junction'ами -----
|
||||
# tools/sync-agent-assets.ps1. Пути точечные: git видит junction как обычный каталог
|
||||
# и без этого проиндексировал бы содержимое повторно.
|
||||
/.claude/skills/kompas-3d/
|
||||
/.claude/skills/kompas-fdm-design/
|
||||
/.agents/skills/kompas-3d/
|
||||
/.agents/skills/kompas-fdm-design/
|
||||
|
||||
# ============================================================================
|
||||
# Отслеживается НАМЕРЕННО (нужно для сборки), не игнорировать:
|
||||
|
||||
@@ -4,133 +4,264 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||
|
||||
## Project goal
|
||||
|
||||
Build an **MCP (Model Context Protocol) server** that lets an LLM drive the CAD system **КОМПАС-3D** (ASCON). The server exposes КОМПАС operations (create/open documents, build 2D geometry, 3D parts and assemblies, read/write parameters, run macros) as MCP tools.
|
||||
An **MCP (Model Context Protocol) server** that lets an LLM drive the CAD system **КОМПАС-3D** (ASCON).
|
||||
The server is a COM client of an installed КОМПАС: it exposes CAD operations (documents, 2D sketches,
|
||||
3D parts, assemblies, drawings, STEP round-trip, model inspection) as MCP tools over stdio.
|
||||
|
||||
Authoritative references:
|
||||
- **SDK knowledge base in this repo: `docs/Kompas3D_SDK/`** — clean Markdown, one article per COM interface, with YAML tags; search it with Grep/Read (see below). Committed to the repo (canonical), distilled from the КОМПАС SDK help. Prefer this over the web. For non-trivial lookups, dispatch the **`kompas-sdk-research`** subagent (Haiku) to save context.
|
||||
**There is no `docs/` directory** — it was deleted deliberately (commit `b022a91`). Do not re-create
|
||||
`docs/ARCHITECTURE.md`, `docs/TODO.md`, `docs/OPEN_QUESTIONS.md`. Prose documentation lives in exactly
|
||||
three places: this file (always loaded — architecture, principles, backlog, traps), the skill
|
||||
`kompas-mcp-dev` with `reference/*.md` (loaded on demand — verified COM call-chains, release and CI),
|
||||
and [`README.md`](README.md) (the tool catalog). Plus the memory files (`kompas-*-api*.md`).
|
||||
|
||||
Authoritative API references:
|
||||
- **SDK knowledge base in RAG: MCP server `kompas-sdk`** — 2465 articles (one per COM interface/topic),
|
||||
served from the separate `kompas-sdk-docs` repo, indexed on CT 127 (rag-node). **Not in this repo** —
|
||||
Grep/Read won't find it. For any lookup dispatch the **`kompas-sdk-research`** subagent (Haiku), which
|
||||
owns the MCP tools.
|
||||
- Online SDK docs: https://help.ascon.ru/KOMPAS_SDK/22/ru-RU/index.html
|
||||
- Local SDK install: `C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK`
|
||||
- Local SDK install: `C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK` (headers `Include\ksConstants*.h`
|
||||
are the last word on numeric constant values)
|
||||
- `libs/kompas-interop/*.dll` — reflect over these to verify any signature a research answer gives you.
|
||||
|
||||
## Navigating the SDK docs (`docs/Kompas3D_SDK/`)
|
||||
|
||||
`docs/Kompas3D_SDK/` is a structured MD knowledge base distilled from the 26 000-page Help&Manual WebHelp export. One article per COM interface/topic, split into `interfaces/`, `enums/`, `structures/`, `guides/` (+ `resources/` images), each with YAML frontmatter (`type`, `api`, `domain`, `tags`, `sources`); methods/properties are `## ` headings inside the interface article. **Search it directly — do not browse the raw HTML:**
|
||||
|
||||
- **Grep** over `docs/Kompas3D_SDK/` for an interface/method/property name or Russian keyword (method names are `## SetSideParam - …` headings, so the name lands you in the right article).
|
||||
- **Read** the matching `*.md` — the interface article holds all its members, `Синтаксис Automation:`/`Синтаксис COM:` blocks (in code fences), parameters, notes.
|
||||
- `docs/Kompas3D_SDK/index.md` — table of contents by category. Filter by frontmatter tags, e.g. `Grep "type: enum"` or `Grep "domain: \[.*3d"`.
|
||||
|
||||
The base is committed to the repo (canonical) — no regeneration step. It covers the **COM API7/API5** reference this project uses (interfaces named `iapplication_*`, `idocuments_*`, …). The cross-platform Qt/C++ **KsAPI** flavour (`ksapi_*`, non-COM binding) is intentionally **excluded** from the base — ignore unless explicitly working with KsAPI.
|
||||
The base covers the **COM API7/API5** reference this project uses; the cross-platform Qt/C++ **KsAPI**
|
||||
flavour (`ksapi_*`, non-COM) is intentionally **excluded** — ignore unless explicitly working with KsAPI.
|
||||
How to search it is in the subagent's own definition (`.claude/agents/kompas-sdk-research.md`) — those
|
||||
tools are scoped to the subagent, this session cannot call them. How to regenerate the base when a new
|
||||
КОМПАС ships — skill `kompas-mcp-dev`, `reference/plugin-and-release.md`.
|
||||
|
||||
## Current state
|
||||
|
||||
**Status:** v1 + v2 + STEP/assembly + direct B-rep edit + structural inspection + 2D drawings — implemented and working (full sketch→feature→inspect→STEP round-trip + `move_face` + `describe_model` validated end-to-end).
|
||||
Stack: **.NET 8 (`net8.0-windows`, x64), C#**, MCP via the official `ModelContextProtocol` SDK over **stdio**. **81 MCP tools, 278 tests green (168 unit + 110 integration).**
|
||||
**Status:** working end-to-end. Parts (sketch → feature → inspect), forming ops, patterns/mirror, holes,
|
||||
direct B-rep edit, STEP import/export, assemblies, 2D drawings, structural inspection — implemented and
|
||||
validated live. Also packaged as the Claude Code plugin `kompas` (no release published yet).
|
||||
|
||||
Where to look (single source of truth — do **not** duplicate these lists here):
|
||||
- **Full tool catalog** (by group, all 81) → [`README.md`](README.md) §«Инструменты».
|
||||
- **Roadmap / what's already done** → [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) §10.
|
||||
- **Backlog / what's left** → [`docs/TODO.md`](docs/TODO.md) (canonical; top of «2D-ЧЕРТЁЖ» = next priority. Associative diametral/radial→circle binding done via `associate` flag — next: arc/angular/rough binding, sheet format, leaders, bases, tolerances; plus extra mate types, package E continuation).
|
||||
- **Design decisions / caveats** → [`docs/OPEN_QUESTIONS.md`](docs/OPEN_QUESTIONS.md). Known caveat («Ревью v2»): boss/cut direction on a selected face depends on face-normal orientation — `forward` may need flipping; the agent picks via snapshot or `describe_face` normal.
|
||||
- **Verified COM call-chains & gotchas** → «Key implementation facts» below + memory files (`kompas-*-api*.md`).
|
||||
The full tool catalog (by group) lives in [`README.md`](README.md) §«Инструменты» — the single
|
||||
source of truth; do not duplicate it here.
|
||||
|
||||
Principle: **MCP = translating SDK capabilities into general tools** (not task-specific). On top of MCP — skill **`.claude/skills/kompas-3d/`** with a methodology (playbooks, heuristics, validated in `usecases/`). Layout: `usecases/` (in .gitignore) is the proving ground; proven techniques are promoted to the skill.
|
||||
|
||||
**Delegation subagents** (`.claude/agents/`, dispatched via the `Agent` tool to keep heavy work off Opus's context — system prompt lives in the agent definition, so pass only the variable part as the prompt):
|
||||
- **`kompas-sdk-research`** (model: **Haiku**, read-only — `Glob`/`Grep`/`Read`): finds an interface/method/enum/constant signature in the `docs/Kompas3D_SDK/` MD knowledge base and returns a compressed summary. Dispatch it for any non-trivial SDK lookup instead of grepping the help yourself; a wrong answer is cheap — Opus re-verifies against `libs/kompas-interop/*.dll` by reflection.
|
||||
- **`docs-maintainer`** (model: **Sonnet**, `Read`/`Edit`/`Write`/`Glob`/`Grep`): syncs `README.md`/`CLAUDE.md`/`docs/ARCHITECTURE.md`/`docs/OPEN_QUESTIONS.md`/`docs/presentation.html` with code changes from a change summary you provide. Dispatch it for doc updates instead of editing docs by hand. (Both were skills before — converted to native subagents; the model split reflects task type: bounded retrieval → Haiku, judgement-heavy editing → Sonnet.)
|
||||
|
||||
Layout: `src/Kompas.Mcp.Core` (COM layer), `src/Kompas.Mcp.Host` (MCP stdio server + tools),
|
||||
`tests/Kompas.Mcp.Tests` (unit + integration), `libs/kompas-interop/*.dll` (vendored КОМПАС interop
|
||||
assemblies from SDK `Samples/Common`, referenced via `Directory.Build.props` → `KompasInteropDir`).
|
||||
**The catalog is shaped for the agent, not for the SDK** (60 tools, down from 84): a tool names the
|
||||
*operation*, the variant is a parameter (`extrude(mode=boss|cut)`, `hole(type=…)`, `pattern(kind=…)`);
|
||||
an object is picked by index **or** point through one tool (no `*_index` twins); list parameters
|
||||
(`entities[]`, `edgeIndices[]`) run in a single STA hop; and every mutating op appends its own build-check
|
||||
result (`AutoValidation`, switched by `set_auto_validate` / `KOMPAS_MCP_AUTOVALIDATE`) so the agent doesn't
|
||||
call `validate_part` after each step. Keep that shape when adding tools — rules and rationale in skill
|
||||
`kompas-mcp-dev` §«Правила формы инструмента».
|
||||
|
||||
```powershell
|
||||
dotnet build -c Release # build
|
||||
dotnet test --filter "Category=Unit" # unit tests (no COM)
|
||||
dotnet test --filter "Category=Integration" # integration (requires running КОМПАС)
|
||||
dotnet test --filter "Category=Unit" # no COM needed
|
||||
dotnet test --filter "Category=Integration" # needs a running КОМПАС
|
||||
dotnet run --project src/Kompas.Mcp.Host # start the MCP server (stdio)
|
||||
pwsh -NoProfile -File tools/tests/run-ps-tests.ps1 # Pester tests for the plugin's PowerShell
|
||||
```
|
||||
|
||||
Principle: **MCP = translating SDK capabilities into general tools**, never task-specific ones. If a
|
||||
technique is missing, don't hardcode a workaround for the case at hand — prove the mechanism, then add
|
||||
a *general* tool with tests, and describe the method in the `kompas-3d` skill.
|
||||
|
||||
### Backlog (canonical since `docs/TODO.md` is gone)
|
||||
|
||||
- **2D drawing** (top priority): bases (`drawing_add_base`), tolerances, associative binding for
|
||||
arc/angular/rough dimensions (needs its own spike — `ILineDimension` has no `BaseObject`).
|
||||
- **Assembly**: mate types beyond `coincidence`/`distance` — `parallel`, `perpendicular`, `concentric`,
|
||||
`angle`, `tangency` (enum values exist in `MateType.cs`, not verified live).
|
||||
- **Re-editing an operation**: `feature_delete` now removes a sketch or feature (dependents go with it),
|
||||
but there is still no `sketch_update` — changing one dimension means deleting the sketch and rebuilding
|
||||
everything downstream. Re-entering `ksSketchDefinition.BeginEdit` on an existing sketch is unexplored.
|
||||
- **No minimum-clearance query**: the second regression run caught a 0.695 mm channel between a glyph
|
||||
and a frame wall (below 2·w for FDM) only by doing arithmetic on the sketch metrics — `describe_model`
|
||||
knows nothing about it. A general «minimum distance between these faces/bodies» would close it.
|
||||
- **`model_snapshot` takes no view** — raised by both regression runs: the image comes from whatever
|
||||
orientation the window happens to have, so a flat part cannot be checked from the front. Look at
|
||||
the projection API (`ksDocument3D`/`IViewProjectionCollection`) before adding a `view` parameter.
|
||||
- **Known caveat:** boss/cut direction on a *selected face* depends on the face-normal orientation —
|
||||
`forward` may need flipping. Pick the direction from the `list_faces(index=…)` normal or a snapshot
|
||||
before building.
|
||||
|
||||
## Working mode: CAD tasks are the proving ground
|
||||
|
||||
The user solves small CAD tasks through the MCP tools (or uses the server as an assistant), but **the point
|
||||
of those tasks is improving the server and its skills**, not the part being modelled. A task that goes badly
|
||||
is a bug report, not a reason to work around it by hand. Three feedback channels, not one:
|
||||
|
||||
| Symptom | Where the fix goes |
|
||||
|---|---|
|
||||
| A tool crashes or returns the wrong result | `src/` → patch + test |
|
||||
| No tool exposes the mechanism at all | `src/` → a new **general** tool (never case-specific) |
|
||||
| Tools worked, but the route taken was wrong / a trap was unknown | `plugin/skills/kompas-3d/SKILL.md` |
|
||||
| Geometry built fine but isn't printable on FDM | `plugin/skills/kompas-fdm-design/` (+ `references/`) |
|
||||
|
||||
Reading the sources, proposing patches, editing and rebuilding are all explicitly sanctioned — including
|
||||
asking for a session restart when a rebuilt server has to be picked up.
|
||||
|
||||
- **A spike proves a theory; the deliverable is built with MCP tools.** A throwaway dotnet project under
|
||||
`usecases/<case>/` (referencing `Kompas.Mcp.Core`) is a legitimate way to measure something or falsify a
|
||||
claim — but the final part/drawing must be produced by MCP tool calls. A runner bypasses the very layer
|
||||
under test (tool schemas, input parsing, answer shape, auto-validation), so "built by the runner" proves
|
||||
nothing about the server. Missing tools are the finding, not a reason to finish by hand; delete the
|
||||
probe project afterwards and carry its numbers into the case's `plan.md` and the skill.
|
||||
- **Skills are debugged like code.** `kompas-3d` and `kompas-fdm-design` are objects of revision, not fixed
|
||||
inputs. Edit them **only** in `plugin/skills/<name>/` (the source of truth — the other trees are junctions);
|
||||
a skill edit needs no rebuild but is only picked up by a *new* session.
|
||||
- **Nothing internal leaks into a published skill** — no local SDK paths, no `usecases/`, no RAG-base
|
||||
references. Internal findings belong in `kompas-mcp-dev`; only reproducible methodology ships.
|
||||
- **The operation log is the fourth channel — evidence instead of recollection.** Every tool call can be
|
||||
appended to a JSONL file (`Core/Diagnostics/OperationLog`, written from the `CallToolFilter` in
|
||||
`Program.cs`): tool, arguments, duration, ok/error text, the first 500 chars of the answer. It writes
|
||||
**only** when a path is given (`KOMPAS_MCP_OPLOG_PATH` at startup or `set_operation_log(enabled, path)`
|
||||
in session) — no path, no file. `tools/dev/oplog-report.ps1` turns the accumulated history into what
|
||||
decides the catalog's shape: call frequency, failure rate per tool, the most common error texts, and
|
||||
the tools nobody has ever called (candidates for removal). A tool that only ever fails or never gets
|
||||
called is a finding about the catalog, not about the task that met it.
|
||||
|
||||
### The rebuild cycle
|
||||
|
||||
A running server holds its own binary: with `.mcp.json` pointing straight at
|
||||
`src/Kompas.Mcp.Host/bin/…/kompas-mcp.exe`, `dotnet build -c Release` dies on `MSB3027` («file in use»),
|
||||
and *every* open session counts — the error names each holding PID. `tools/dev/` removes that coupling.
|
||||
|
||||
- **`tools/dev/launch-dev-mcp.ps1`** — what `.mcp.json` now points at. It copies the build (~10 MB) into
|
||||
`%LOCALAPPDATA%\kompas-mcp\dev\<fingerprint>` and runs the server from there, so `bin` is never locked and
|
||||
a build never waits for a session to close. Logic lives in `tools/dev/KompasMcpDev.psm1`; overrides:
|
||||
`KOMPAS_MCP_EXE` (bypass the shadow copy entirely), `KOMPAS_MCP_DEV_BUILD_DIR`, `KOMPAS_MCP_DEV_ROOT`.
|
||||
- **`tools/dev/rebuild-mcp.ps1`** — `-Check` compiles past `bin` (redirect `BaseOutputPath` only — moving
|
||||
`BaseIntermediateOutputPath` too makes the stale `obj/` visible to the glob and yields `CS0579`) so a
|
||||
syntax/type check costs ~2 s with the server live. Without flags: full build + `Category=Unit`, refusing
|
||||
early with the blocking PIDs instead of burning 15 s on retries.
|
||||
- **A new binary still needs the stdio process restarted** — `/mcp` reconnect if the client supports it,
|
||||
otherwise a new session. Restarting is safe for КОМПАС: `KompasSession.Dispose` releases the COM objects
|
||||
but deliberately never calls `Quit`, so the document survives. What does not survive: the connection
|
||||
(`kompas_connect` again) and the in-memory build state — sketches by `id`. Save before restarting.
|
||||
- **Two traps in the launcher's PowerShell**, both invisible under `pwsh` 7 and fatal under the 5.1 that
|
||||
`.mcp.json` actually uses: `Get-ChildItem` returning a *single* file is a scalar, so `.Count` throws under
|
||||
`Set-StrictMode`; and `Sort-Object` orders punctuation differently in 5.1 (NLS) vs 7 (ICU), which made the
|
||||
same build hash to two different fingerprints. Sort ordinal (`List.Sort([StringComparer]::Ordinal)`).
|
||||
|
||||
## Skills and their layout
|
||||
|
||||
- **`kompas-3d`** — methodology for *building* things through the MCP tools (playbooks, heuristics).
|
||||
- **`kompas-fdm-design`** — DFM layer for FDM/FFF printing (overhang rules, wall thickness, teardrop
|
||||
holes, fits/clearances, orientation for strength, elephant foot, bosses/inserts/snap-fits) plus a
|
||||
light geometry audit via the inspection tools. Builds through `kompas-3d`, exports via `export_step`,
|
||||
no slicer integration.
|
||||
- **`kompas-mcp-dev`** — internal: developing the server itself (the two layers, the `usecases/` proving
|
||||
ground, the checklist for productizing a technique into a general tool, delegation). Lives at
|
||||
`.claude/skills/kompas-mcp-dev/SKILL.md` as a real directory (not a junction) because the published
|
||||
skills must not reference things a plugin user doesn't have.
|
||||
|
||||
**Sync** (`tools/sync-agent-assets.ps1`, module `tools/AgentAssets.psm1`): the source of truth is
|
||||
`plugin/skills/{kompas-3d,kompas-fdm-design}`; `.claude/skills/<name>` and `.agents/skills/<name>` are
|
||||
**junctions** onto it created by the script (their paths are pinpointed in `.gitignore` — git sees a
|
||||
junction as a plain directory). Its modes are mutually exclusive parameter sets, so `-Remove -Check`
|
||||
together is a parameter-binding error.
|
||||
|
||||
**Gotcha:** switching to a branch/commit predating `plugin/skills` leaves the junctions dangling and
|
||||
`git checkout` fails mid-way (`unable to create file .claude/skills/kompas-fdm-design/SKILL.md: No such
|
||||
file or directory`) — part of the worktree is already deleted while HEAD stays on the old branch.
|
||||
Recover with `git ls-files --deleted -z | xargs -0 git restore --`. Correct order:
|
||||
|
||||
1. `pwsh -NoProfile -File tools/sync-agent-assets.ps1 -Remove`
|
||||
2. `git checkout <ref>`
|
||||
3. `pwsh -NoProfile -File tools/sync-agent-assets.ps1` (re-link, if `plugin/skills` exists on that ref)
|
||||
|
||||
`-Remove` is safe: it deletes the reparse point itself via `[System.IO.Directory]::Delete` (no `-Recurse`),
|
||||
never walks into the target, and leaves a real (non-junction) directory alone (`Skipped`); it detects a
|
||||
junction by the `ReparsePoint` attribute rather than by resolving the target, which is exactly why it
|
||||
still works once the target is gone. No `post-checkout` hook on purpose — it fires after checkout already
|
||||
broke, too late to help.
|
||||
|
||||
## Delegation subagents
|
||||
|
||||
**`cad-engineer`** (`.claude/agents/`, model inherit — Skill/Read/Glob/Grep + the `kompas` MCP server,
|
||||
no write access): runs a whole CAD task end-to-end from a clean context, building **only** through MCP
|
||||
tools. It is a **debugging harness**, not a shortcut: this session fixes the skills and the server, then
|
||||
re-runs the same task through the subagent and reads its protocol — calls made, dead ends, complaints
|
||||
against the skill (quoted), complaints against the catalog. It can't patch anything, so a missing tool
|
||||
comes back as a finding instead of a hand-made workaround. Project-local, never shipped in the plugin.
|
||||
|
||||
**`kompas-sdk-research`** (`.claude/agents/`, model **Haiku**, read-only — MCP `kompas-sdk` tools only):
|
||||
finds an interface/method/enum/constant signature in the SDK knowledge base and returns a compressed
|
||||
summary. Dispatch it for **any** SDK lookup — it holds the only access to the base, which no longer lives
|
||||
in this repo. Its system prompt is in the agent definition, so pass only the question as the prompt.
|
||||
A wrong answer is cheap: re-verify against `libs/kompas-interop/*.dll` by reflection.
|
||||
|
||||
(The former `docs-maintainer` subagent was removed together with `docs/` — edit `README.md`/`CLAUDE.md`
|
||||
directly.)
|
||||
|
||||
## Claude Code plugin (`plugin/`)
|
||||
|
||||
The server and both published skills ship as the plugin **`kompas`** — `plugin/` is a self-contained tree,
|
||||
distributed independently of the rest of the repo, released from the **`dist`** branch (never `main`).
|
||||
|
||||
Manifest/lock layout, the delivery bootstrap, the launcher's stdout invariant, the release workflow and the
|
||||
CI gotchas — skill **`kompas-mcp-dev`**, `reference/plugin-and-release.md`. Two rules that must not wait
|
||||
for a skill load:
|
||||
|
||||
- **Every release must bump `plugin/.claude-plugin/plugin.json`** — the version is Claude Code's cache key,
|
||||
and `/plugin update` silently skips a plugin whose version already matches what's installed.
|
||||
- **Plugin PowerShell files must be UTF-8 *with BOM*.** The launcher runs under Windows PowerShell 5.1,
|
||||
which reads BOM-less files in the system ANSI codepage — Cyrillic string literals then corrupt parsing of
|
||||
the whole script. `pwsh` 7 doesn't reproduce this, so it passes locally and breaks for the user.
|
||||
|
||||
## Key implementation facts (don't relearn)
|
||||
|
||||
- **All COM calls run on one dedicated STA thread** (`KompasDispatcher.InvokeAsync`); КОМПАС is single-instance STA. Services never touch COM off that thread.
|
||||
- **Connection**: API5 (`KOMPAS.Application.5` → `KompasObject`) then `ksGetApplication7()` → `IApplication`; the API5 root is needed for `ksPart` 3D-building and `ksDocument3D` snapshots. API7 is used for app/documents, holes, assemblies, drawings, direct B-rep edit.
|
||||
- **3D via API5 `ksPart`**: `NewEntity(o3d_*)` + matching definition; always check `entity.Create()` return. Entity codes: `o3d_sketch`/`o3d_bossExtrusion`/`o3d_cutExtrusion`/`o3d_bossRotated`/`o3d_fillet`/`o3d_chamfer`, `o3d_shellOperation=43`, `o3d_ribOperation=44`, `o3d_baseEvolution=45` (sweep), `o3d_baseLoft=30`, `o3d_planeOffset=14`, `o3d_meshCopy=35` (linear pattern), `o3d_circularCopy=36`, `o3d_mirrorOperation=48`, `o3d_mirrorAllOperation=49`, `o3d_incline=42` (draft), axes `o3d_axisOX/OY/OZ=71/72/73`. Definitions: `ksBossExtrusionDefinition`/`ksCutExtrusionDefinition`/`ksBossRotatedDefinition`/`ksFilletDefinition`/`ksChamferDefinition`/`ksShellDefinition`/`ksRibDefinition`/`ksBaseEvolutionDefinition`/`ksBaseLoftDefinition`/`ksPlaneOffsetDefinition`/`ksMeshCopyDefinition`/`ksCircularCopyDefinition`/`ksMirrorCopyDefinition`/`ksMirrorCopyAllDefinition`/`ksInclineDefinition`. Cut-through holes use `dtBoth` + `etThroughAll`.
|
||||
- **Face/edge selection**: `ksPart.EntityCollection(o3d_face|o3d_edge)` → `SelectByPoint(x,y,z)` (world mm) → `GetByIndex(0)`; or by stable index from `list_faces`/`list_edges` (helpers `SelectFaceByIndex`/`SelectEdgeByIndex`, range-checked before mutation; by-index more reliable than by-point). Classify: `ksFaceDefinition.IsPlanar/IsCylinder/…` + `GetArea(ST_MIX_MM)`; `ksEdgeDefinition.IsLineSeg/IsCircle/IsArc/…` + `GetLength()`. Sketch axis = line with system style **3** (осевая).
|
||||
- **МЦХ / mass props**: use **API5 `ksPart.CalcMassInertiaProperties(ST_MIX_MM|ST_MIX_KG)`** → `ksMassInertiaParam` (`v`/`m`/`F`/`xc`/`yc`/`zc`), computed on demand. **Do NOT** use API7 `IMassInertiaParam7.Calculate()` — its `Actual` flag sticks after the first calc and won't refresh on API5 geometry changes (stale volume). Bounding box: `ksPart.GetGabarit(full:false, …)`.
|
||||
- **Snapshot**: `ksDocument3D.SaveAsToRasterFormat(file, ksRasterFormatParam)` renders to a temp file (the in-memory `resultArrayBytes` stays empty when a filename is given); read bytes back. Return to MCP via `ImageContentBlock.FromBytes(bytes, mime)` — **not** `Data = bytes` (Data holds base64 bytes). Use `model_snapshot` only for visually-spatial questions; **prefer `describe_model` first** (structural «passport» — bbox + МЦХ + bodies + topology + feature tree + variables, no image token cost).
|
||||
- Logs go to **stderr** (stdout is the MCP channel). Integration tests reuse one КОМПАС via `KompasFixture`; artifacts land in gitignored `.scratch/`. All integration test classes inherit `IntegrationTestBase` (`IAsyncLifetime`) → `DocumentService.CloseAllAsync` after each test (prevents tab accumulation).
|
||||
- **Feature tree API**: read via API5 `ksPart.GetFeature()` → `(ksFeature).SubFeatureCollection(true,false)` → `ksFeatureCollection`. Cast `(ksFeature)part` does NOT work (RCW QI returns null) — must use `GetFeature()`. `ksFeature.type` returns only coarse `o3d_entity` and does NOT distinguish operations; precise type and params come from `ksFeature.GetObject()` → `ksEntity.GetDefinition()` + the matching definition (`ksBossExtrusionDefinition.GetSideParam`, `ksFilletDefinition.radius`, `ksChamferDefinition.GetChamferParam`, …). Node names ("Элемент выдавливания:1") are localized by КОМПАС. Features registered by id in `_features` support patterns/mirror; helpers `RequireSketch`/`RequireFeature`.
|
||||
- **Variables (API5)**: create/read via `ksPart.GetFeature().VariableCollection` (property on root ksFeature) — **NOT** `ksPart.VariableCollection()` (returns external-only). Expression is the leading field; value is derived. Apply via `ksPart.RebuildModel()` (check return); after rebuild the RCW variable is stale → re-read via a fresh collection (`ReadValueFresh`). Dependents recalculate automatically; deletion fails if dependents exist (`RemoveVariable` returns FALSE). **Geometry limitation:** variables drive geometry only in a parametric model (sketch dims linked to variable names); our sketches use literal coords → `set_variable` stores/computes the value but does NOT move geometry. Parametric sketches **unavailable via COM** (`ksCDimWithVariable` not constructible from external automation — see `docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md`; do not retry without new info).
|
||||
- **Topology / measure API**: `ksFaceDefinition.EdgeCollection` / `GetCylinderParam` / `GetSurface().GetNormal` + `normalOrientation`; `ksEdgeDefinition.GetAdjacentFace(bool)` / `GetVertex(bool)` → `ksVertexDefinition.GetPoint`; bodies via `ksPart.BodyCollection()` → `ksBody` (`IsSolid` / `FaceCollection`); measurements via `ksPart.GetMeasurer()` → `ksMeasurer` (`SetObject1/2`, `unit=ST_MIX_MM`, `Calc`, `distance`/`MinDistance`/`angle` in degrees / `IsAngleValid`).
|
||||
- **"STEP import without history"** detected structurally: `bodyCount > 0 && no formative features && features.Count <= bodyCount+1` (only origin + body). STEP with edits ("Смещённая плоскость" / "Разрезать" / "Переместить грани" / "Булева операция") already has history.
|
||||
- **STEP import/export COM pattern** (verified): `IApplication.get_Converter((object)(int)ksConverterFromSTEP=-3)` (pass format code, not DLL path) → `IConverter.ConverterParameters(cmd)` → `IAdditionConvertParameters.Format=ksConverterFromSTEP` → `IKompasDocument3D1.ConvertFromAdditionFormat(path, prm)`. Export: `ConvertToAdditionFormat` (format codes AP203/AP214/AP242). Param co-classes (AdditionConvertParameters etc.) are NOT CoCreatable — only via converter factories. Assembly traversal (`list_components`): `IKompasDocument3D.TopPart → IPart7.Parts (IParts7)`. Extract component: `prm.NeedCreateComponentsFiles=true` (writes .m3d files next to STEP) + `IPart7.OpenSourceDocument`.
|
||||
- **Direct B-rep face editing (`move_face`)** (verified): API7 face via `IPart7.FindObjectsByPoint(x,y,z,true)` → cast to `KompasAPI7.IFace`; containers via runtime COM-QI `(ISurfaceContainer)part`, `(IModelContainer)part`; `FaceMover` (SetFaces + Offset + Direction + Update) moves the face. distance>0 = outward (add material), <0 = inward. Works on parametric and imported B-rep. Full split-reposition workflow (SplitSolids/BodyRepositions) is driveable; only partly exposed as tools (`split_solid_by_plane`, `move_body`, `boolean_union`).
|
||||
- **Forming ops (API5 definitions)**:
|
||||
- `shell` (`ksShellDefinition`, o3d_shellOperation=43): `thickness` + `thinType` (bool, `= !outward`) + `FaceArray()` (open faces ≥1 by index). Transient RCWs intentionally not released (consistent with Fillet/Chamfer).
|
||||
- `rib` (`ksRibDefinition`, =44): `SetSketch(sketch)` → `index=0`, `angle`, `side` (`left|right|up|down` → 0/1/2/3 via `SketchGeometry.RibSide()`); `SetThinParam(dtBoth, t/2, t/2)` if symmetric, else `(dtNormal, t, 0)`. Empirical: the rib contour must float in the gap (not touch the body) — КОМПАС extends the web automatically.
|
||||
- `sweep` (`ksBaseEvolutionDefinition`, =45): `SetSketch(profile)` → `PathPartArray().Add(path)` → `sketchShiftType=0` → `SetThinParam(false)` → `Create()`. Profile & path on different (usually ⟂) planes; `profileSketchId != pathSketchId`.
|
||||
- `loft` (`ksBaseLoftDefinition`, =30): `Sketchs().Add(each)` → `SetLoftParam(false,false,true)` → `SetThinParam(false)`. ≥2 closed sections on parallel planes — use `sketch_create_on_offset_plane` for non-base sections.
|
||||
- offset plane (`sketch_create_on_offset_plane`, `ksPlaneOffsetDefinition`, o3d_planeOffset=14): `SetPlane(base)` + `offset` mm + `direction` → `Create()` → sketch on it (`OpenSketchOnOffsetPlaneAsync`).
|
||||
- `draft` (`ksInclineDefinition`, o3d_incline=42 — API5 calls the op **Incline**, NOT Draft): `FaceArray()` (by index) + `SetPlane(neutral base plane)` + `angle` (degrees) + `direction`. **Empirical, opposite to SDK docs:** `direction=false`=expanding/outward (adds material), `true`=tapering/inward → code maps `def.direction = !outward`. Validate `0<angle<90`. (`o3d_DraftFromEdges=644` / `IDraftFromEdges` is a different op — not used.)
|
||||
- **Patterns & mirror (API5)**: `linear_pattern` (`ksMeshCopyDefinition`, =35): `SetAxis1(axis)` + `SetCopyParamAlongAxis(true,0,count,step,false)` + `count2=1` (disables 2nd direction → 1D); features via `OperationArray()`. `circular_pattern` (`ksCircularCopyDefinition`, =36): `SetAxis(axis)`; `count1=1` (radial off), `count2=count` (ring), `step2=angle°` between neighbours, `factor2=false`, `inverce=reverse`; `GetOperationArray().Add(feature)`. `mirror_operation` (`ksMirrorCopyDefinition`, =48): `SetPlane(base)` + `GetOperationArray().Add(feature)`. `mirror_body` (`ksMirrorCopyAllDefinition`, =49): `SetPlane(base)`; `ChooseBodies()` casts to null in interop and is NOT needed — mirrors all bodies keeping the original (volume doubles). Empirical: `count` includes the original instance (count=3 → 3 instances). Axes: `CoordinateAxis{X,Y,Z}` → `o3d_axisOX/OY/OZ` (`Core/Modeling/CoordinateAxis.cs`, analogous to `BasePlane.cs`).
|
||||
- **Hole ops (API7 only — `ksHoleDefinition` absent in API5 interop; `HoleService`)**: `HoleCore(ksHoleTypeEnum holeType, Action<IHole3D> configure)` — `configure` sets `HoleParameters` **after** `HoleType` is assigned (the type-specific sub-interface is inaccessible until the type is fixed). Placement shared: `IModelContainer`/`IHole3D`/`IHoleDisposal` + `Points3D`, direction chosen by volume delta, orphan rollback. None registered in `_features` → no id returned. `hole`=`ksHTBase`, configure=null. `hole_counterbore`=`ksHTCounterbore` + `(ISpotfacingHoleParameters)` (`SpotfacingDiameter`/`SpotfacingDepth`). `hole_countersink`=`ksHTCountersinking` + `(ICountersinkHoleParameters)` (`CountersinkType=ksCTDiameterAngle`, `CountersinkDiameter`/`Angle`). `hole_conic`=`ksHTConic` + `(IConicHoleParameters)` (`ConicType=ksCNAngle`, `ConicAngle`).
|
||||
- **Assembly (API7, `AssemblyService`, namespace `Kompas.Mcp.Core.Assemblies`)**: `assembly_add_component` — `IParts7.AddFromFile(path, ExternalFile=true, Redraw=true)` → `IPart7.Placement` (`IPlacement3D`) → `SetOrigin(x,y,z)` (mm, assembly world CS) → `UpdatePlacement(true)` → `top.RebuildModel(true)`. **Empirical:** `UpdatePlacement` returns FALSE for a manually-positioned component (no mates) — NOT an error. Validate `DocumentType==ksDocumentAssembly` before touching `TopPart`; rollback via `IFeature7.Delete` + `RebuildModel`. `assembly_add_mate` — `top.MateConstraints` (`IMateConstraints3D`) → `Add(MateConstraintType)` → `BaseObject1/2` (faces via `top.FindObjectsByPoint(x,y,z,FirstLevel=false)`) → `ParamValue` (distance) → `Update()` → `RebuildModel(true)`; check `mate.Valid` (false → rollback `mate.Owner.Delete`). Types `coincidence`(mc_Coincidence=0) / `distance`(mc_Distance=5, value>0) verified live; `parallel`/`perpendicular`/`concentric`/`angle`/`tangency` — future.
|
||||
- **Drawing (API7, `DrawingService`, namespace `Kompas.Mcp.Core.Drawings`)** — entry via `IKompasDocument2D`; requires an active drawing doc (`DocumentType==ksDocumentDrawing`). All coords are **view-local** (mm) unless noted. Model file must be saved before placing views.
|
||||
- `drawing_create_standard_views`: `doc2d.ViewsAndLayersManager.Views.AddStandartViews(path, "#Спереди", projTypes, x, y, scale, dx=20, dy=20)` where `projTypes=object[]{1,3,5}` (Front/Up/Left as SAFEARRAY VT_I4). Success: `created==3`; content check: sum of new views' `IView.ObjectCount` > 0 else rollback `IView.Delete`. Returns `ViewNumbers` (the `IView.Number` values — address views by these when placing annotations).
|
||||
- `drawing_fill_title_block`: `doc2d.LayoutSheets.ItemByNumber[1].Stamp` (`IStamp`) → `stamp.Text[columnId].Str = text` (indexed property; `IText.Str` overwrites, no Clear needed) → `stamp.Update()`. Fields→columns (`ksStampEnum`): Name=1, Designation=2, Material=3. Non-transactional (all cells → single `Update`).
|
||||
- **Dimensions go into `(ISymbols2DContainer)view`, NOT the sheet, and are NOT counted in `IView.ObjectCount`** (that counts geometry in `IDrawingContainer`) — verify placement via the container's `*.Count`. Common flow: `Add()` → set coords → `AutoNominalValue=true` → `Update()` → check `Valid` → read `((IDimensionText)dim).NominalValue`; rollback `dim.Delete()` on FALSE/invalid/zero. Leader/angle in **radians** (`DimensionAngles.ToRadians`). Free placement = set coords directly; **associative** (diametral/radial only) = set `BaseObject` to a projected circle → value read from geometry (see below).
|
||||
- linear (`ILineDimension`): `X1,Y1,X2,Y2` (extension pts) + `X3,Y3` (dim line) + `Orientation` (`DimensionOrientation{Horizontal,Vertical,Parallel}` → `ksLinDParallel=0`/`Horizontal=1`/`Vertical=2`; parallel needs no explicit Angle).
|
||||
- diametral (`IDiametralDimension`): `Xc,Yc,Radius` + `Angle`; `NominalValue` = 2·Radius.
|
||||
- radial (`IRadialDimension`): `Xc,Yc,Radius` + `Angle`, `DimensionType=true`; **`NominalValue` = Radius, NOT diameter** — contrary to SDK docs, confirmed by spike.
|
||||
- **associative** diametral/radial (`associate=true` flag): instead of coords, find a projected circle in `(IDrawingContainer)view.Circles` by center+radius key (`CircularObjectMatch.SelectMatchIndex`, tol 1 mm; throws on none/ambiguous; concentric disambiguated by radius), set `dim.BaseObject = circle` (`_Circle` implements `IDrawingObject`) → `NominalValue` read from geometry. `RequireViewContainers` gives both QIs; free path stays on `RequireSymbols2DContainer`. Arc/angular/rough binding — not yet (own spike needed; `ILineDimension` has no `BaseObject`).
|
||||
- angular (`IAngleDimension`, `AngleDimensions.Add(ksDrADimension=10)`): vertex `Xc,Yc` + side pts `X1,Y1`/`X2,Y2` + arc-position `X3,Y3` (positions the arc only, does NOT pick the angle); measured angle chosen by `DimensionType` = `AngleDimensionType{Min,Max,More}` (on rays 0°/45° → min=45°/max=135° supplement/more=315° reflex). `NominalValue` in degrees.
|
||||
- `drawing_add_rough` (`Roughs.Add()`/`IRough`: `BranchX0/Y0`, `Angle`) + `(IRoughParams)rough` QI: `SignType` = `RoughSignType{NoProcessing,DeleteMaterial,WithoutDeleteMaterial}`, value (Ra/Rz) = `RoughParamText.Str`.
|
||||
- `drawing_add_text` — **text lives in `IDrawingContainer`, NOT `ISymbols2DContainer`, and NOT in `IView.ObjectCount`**: `(IDrawingContainer)view.DrawingTexts.Add()`/`IDrawingText` (`X/Y/Angle`) + `(IText)dt.Str` = text; count via `DrawingTexts.Count`. Do NOT set `Height` (that's block height, not font).
|
||||
- `drawing_set_technical_requirements` — **document-level**: `(IDrawingDocument)doc.TechnicalDemand`/`ITechnicalDemand`: `td.Text.Str = text` → `td.Update()` (`IsCreated` False→True on first set; overwrites; `\n` multiline).
|
||||
- `DrawingAnnotationResult{Value(read-back), ViewNumber}` is the shared result for rough/text.
|
||||
- **Richer sketch primitives (API5 `ksDocument2D` wrappers)**: `ksArcBy3Points`; `ksArcByAngle` (centre/radius/start-end angles in degrees + counterClockwise flag); `ksEllipse` via `ksEllipseParam` (`KompasObject.GetParamStruct(ko_EllipseParam=22)`; **property names are `A`/`B` UPPERCASE in the interop**); `ksRegularPolygon` via `ksRegularPolygonParam` (`ko_RegularPolygonParam=92`; `describe = !inscribed`); NURBS spline via `ksNurbs(order=4)` + `ksNurbsPoint` loop + `ksEndObj`; `ksPoint`. Param structs released after use. `PartModeler` is partial: `.cs` (registry/helpers/`NewParam<T>`/reset), `.Sketch.cs` (2D primitives), `.Features.cs` (extrude/revolve/fillet/chamfer). Static `SketchGeometry` (`Core/Modeling`) holds enum maps + validators (`RequirePositive`, `RequireVertexCount`, `RequirePoints`, `RequireMin`). Point lists use `record SketchPoint(X, Y)` (JSON names `x`/`y`).
|
||||
Verified COM call-chains — interop loading, the STA dispatcher, API5 `ksPart` building, face/edge selection,
|
||||
МЦХ, snapshots, the feature tree, variables, STEP round-trip, direct B-rep edit, forming ops, patterns and
|
||||
mirror, holes, assemblies, 2D drawings, sketch primitives — live in skill **`kompas-mcp-dev`**,
|
||||
`reference/com-implementation-facts.md`. Load that skill before touching the COM layer; append to it when a
|
||||
new chain is verified live. Cross-checked duplicates also sit in memory (`kompas-*-api*.md`).
|
||||
|
||||
## КОМПАС-3D API architecture (the critical context)
|
||||
|
||||
КОМПАС-3D is automated via a **COM Automation API**, Windows-only. КОМПАС-3D **must be installed and running/launchable** on the same machine — the MCP server is a COM client, not a standalone CAD engine. There are **two coexisting API generations**:
|
||||
КОМПАС-3D is automated via a **COM Automation API**, Windows-only. КОМПАС **must be installed and
|
||||
running/launchable on the same machine** — the MCP server is a COM client, not a standalone CAD engine.
|
||||
Two API generations coexist:
|
||||
|
||||
| | Entry point | Namespace (C#) | Style | Use when |
|
||||
|---|---|---|---|---|
|
||||
| **API5** (legacy) | `KompasObject` | `Kompas6API5` | procedural, flat | older features, 2D primitives, bootstrapping |
|
||||
| **API7** (modern, preferred) | `IApplication` / `_Application` | `KompasAPI7` | OOP, interface-based | everything new — documents, 3D, parameters |
|
||||
| **API5** (legacy) | `KompasObject` | `Kompas6API5` | procedural, flat | 3D `ksPart` building, 2D primitives, bootstrapping |
|
||||
| **API7** (modern, preferred) | `IApplication` / `_Application` | `KompasAPI7` | OOP, interface-based | documents, holes, assemblies, drawings, B-rep edit |
|
||||
|
||||
Constants live in separate libraries: `Kompas6Constants`, `Kompas6Constants3D` (C#), or `ksConstants.h` / `ksConstants3D.h` (C++).
|
||||
Constants live in separate libraries: `Kompas6Constants`, `Kompas6Constants3D` (C#), or `ksConstants.h` /
|
||||
`ksConstants3D.h` (C++).
|
||||
|
||||
### Connection pattern (verified from `Samples/CSharp.zip`)
|
||||
|
||||
1. Get the КОМПАС root object by COM ProgID. **Verified on this machine (v24 Home):**
|
||||
`KOMPAS.Application.7` and `KOMPAS.Application.5` are registered; `KOMPASLT.*` is **absent** —
|
||||
the Home edition uses the regular (non-LT) ProgIDs. Resolution order:
|
||||
`KOMPAS.Application.7` and `KOMPAS.Application.5` are registered; `KOMPASLT.*` is **absent** — the Home
|
||||
edition uses the regular (non-LT) ProgIDs. Resolution order:
|
||||
- `KOMPAS.Application.7` — direct API7 `IApplication` (preferred)
|
||||
- `KOMPAS.Application.5` — API5 `KompasObject`, then `ksGetApplication7()`
|
||||
- `KOMPASLT.Application.5` — fallback for other installations
|
||||
- New instance: `Activator.CreateInstance(Type.GetTypeFromProgID(progId))`
|
||||
- Attach to a running instance: `Marshal.GetActiveObject(progId)`
|
||||
2. If you entered via API5, obtain the modern application: `IApplication appl = (IApplication)kompas.ksGetApplication7();` (via `KOMPAS.Application.7` you already hold `IApplication`).
|
||||
3. Set `appl.Visible = true` to show the КОМПАС window; drive documents via API7 interfaces (`IKompasDocument2D`, `IKompasDocument3D`, …).
|
||||
2. If you entered via API5, obtain the modern application:
|
||||
`IApplication appl = (IApplication)kompas.ksGetApplication7();`
|
||||
3. Set `appl.Visible = true` to show the КОМПАС window; drive documents via API7 interfaces
|
||||
(`IKompasDocument2D`, `IKompasDocument3D`, …).
|
||||
|
||||
> The SDK C# samples are mostly **КОМПАС plugin libraries** (DLLs loaded *into* КОМПАС as ActiveX, entry methods like `ExternalRunCommand`/`ExternalMenuItem`, registered via `[ComRegisterFunction]`). For an MCP server we want the **opposite direction**: a standalone *external automation client* that connects out-of-process via the ProgID pattern above. Read the samples for API usage, not for the plugin packaging/registration boilerplate.
|
||||
> The SDK C# samples are mostly **КОМПАС plugin libraries** (DLLs loaded *into* КОМПАС as ActiveX, entry
|
||||
> methods like `ExternalRunCommand`/`ExternalMenuItem`, registered via `[ComRegisterFunction]`). This server
|
||||
> is the **opposite direction**: a standalone *external automation client* connecting out-of-process via the
|
||||
> ProgID pattern above. Read the samples for API usage, not for the plugin packaging/registration boilerplate.
|
||||
|
||||
## SDK layout (read-only reference, not part of this repo)
|
||||
|
||||
Under `C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK`:
|
||||
- `lib\*.tlb` — COM type libraries to reference / generate interop from: `kAPI5.tlb`, `kAPI7.tlb`, `ksConstants.tlb`, `ksConstants3D.tlb`, `kAPI2D5COM.tlb`, `kAPI3D5COM.tlb`.
|
||||
- `lib64\` — 64-bit import libs (`kAPI7.lib`, `kAPI5.lib`, …) and `.a` for C++/Builder.
|
||||
- `Include\` — C++/Pascal headers (`Ks_TLB.h`, `kAPI2D5COM.h`, `LDefin2D.pas`, …).
|
||||
- `KsAPI\` — the **KsAPI** (Qt/C++ cross-platform flavour): `Include\KsAPI.h`, `ksConstants*.h`, `Lib64\ksAPI.lib`, plus `Help\С чего начать.pdf` and a Linux/Debian 12 build guide.
|
||||
- `Samples\` — zipped examples per language: `CSharp.zip`, `C++.zip`, `Pascal.zip`, `Basic.zip`. Inside `CSharp.zip`, the `Step1`…`Step12` and `Step2_API7_2D` / `Step2_API7_3D` projects are the progressive tutorial; `Gayka`, `SlideWrk`, `EventsAuto` are larger feature demos.
|
||||
- `Help\KOMPAS_SDK_ru-RU.zip` and `KsAPI\Help\KsAPI_Help.zip` — offline copy of the docs.
|
||||
The SDK tree under `C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK` (`lib\*.tlb`, `lib64\`, `Include\`,
|
||||
`KsAPI\`, `Samples\*.zip`, `Help\KOMPAS_SDK_ru-RU.zip`) is one `ls` away — browse it rather than trusting
|
||||
a copy here. Two things that are **not** visible from a listing:
|
||||
|
||||
To inspect a sample without unpacking the whole archive: `unzip -p "<path>\Samples\CSharp.zip" "Automation/Step2_API7_3D/Step2_API7_3D.cs"`. Note the `.cs` sample sources are **Windows-1251 encoded** (Cyrillic comments appear garbled in UTF-8 tools).
|
||||
To inspect a sample without unpacking the whole archive:
|
||||
`unzip -p "<path>\Samples\CSharp.zip" "Automation/Step2_API7_3D/Step2_API7_3D.cs"`. The `.cs` sample sources
|
||||
are **Windows-1251 encoded** (Cyrillic comments appear garbled in UTF-8 tools).
|
||||
|
||||
## Conventions / gotchas
|
||||
|
||||
- **Windows-only & 64-bit**: target x64 to match the installed КОМПАС; mixing bitness breaks COM activation. КОМПАС v24 Home is the installed edition — some full-edition API features may be unavailable.
|
||||
- **Encoding**: SDK source samples are CP1251. New project files should be UTF-8.
|
||||
- **COM lifetime**: release COM objects (`Marshal.ReleaseComObject`) / scope them; a leaked reference keeps the КОМПАС process alive.
|
||||
- **API choice**: prefer API7 for new tool implementations; drop to API5 only for things API7 doesn't expose.
|
||||
- **Windows-only & 64-bit**: target x64 to match the installed КОМПАС; mixing bitness breaks COM activation.
|
||||
v24 Home is the installed edition — some full-edition API features may be unavailable.
|
||||
- **Encoding**: SDK sources are CP1251; project files are UTF-8; plugin PowerShell is UTF-8 **with BOM**.
|
||||
- **COM lifetime**: release COM objects (`Marshal.ReleaseComObject`) or scope them; a leaked reference keeps
|
||||
the КОМПАС process alive.
|
||||
- **API choice**: prefer API7 for new tools; drop to API5 only for what API7 doesn't expose.
|
||||
- **Sequential tool calls**: the build session keeps sketches by `id` and the server serves requests
|
||||
concurrently — dependent tool calls must be awaited one at a time.
|
||||
|
||||
@@ -2,22 +2,43 @@
|
||||
|
||||
**MCP-сервер для управления CAD-системой КОМПАС-3D (АСКОН) языковой моделью.**
|
||||
|
||||
Сервер — это COM-клиент КОМПАС-3D: он подключается к установленному КОМПАС и предоставляет
|
||||
LLM набор инструментов для создания документов, построения 3D-деталей (эскиз → выдавливание),
|
||||
импорта/экспорта STEP, работы со сборками, структурного осмотра модели (`describe_model` — дерево
|
||||
операций, тела, переменные, топология одним вызовом) и снимка модели (агент «видит» результат).
|
||||
Сервер — COM-клиент КОМПАС-3D: подключается к установленному КОМПАС и даёт LLM 60 инструментов для
|
||||
создания документов, построения 3D-деталей (эскиз → формообразующая операция), работы со сборками и
|
||||
чертежами, импорта/экспорта STEP, прямого редактирования импортированной B-rep, а также структурного
|
||||
осмотра модели (`describe_model` — дерево операций, тела, топология, переменные, МЦХ одним вызовом)
|
||||
и снимка модели, по которому агент «видит» результат.
|
||||
|
||||
Принцип: **MCP транслирует возможности SDK КОМПАС в общие инструменты** (не под конкретную задачу).
|
||||
Поверх MCP — навык **`.claude/skills/kompas-3d/`** с методикой работы (playbook'и, эвристики,
|
||||
обкатанные в `usecases/`).
|
||||
Принцип: **MCP транслирует возможности SDK КОМПАС в общие инструменты**, а не под конкретную задачу.
|
||||
Поверх MCP — навык **`kompas-3d`** с методикой работы (playbook'и, эвристики). Отдельный навык
|
||||
**`kompas-fdm-design`** — методика проектирования под FDM/FFF 3D-печать (правила DFM + лёгкий
|
||||
гео-аудит инструментами осмотра): работает поверх `kompas-3d`, экспортирует через `export_step`,
|
||||
слайсер не вызывает.
|
||||
|
||||
> Подробности: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) · план — [docs/IMPLEMENTATION_PLAN.md](docs/IMPLEMENTATION_PLAN.md)
|
||||
> · спорные вопросы — [docs/OPEN_QUESTIONS.md](docs/OPEN_QUESTIONS.md) · обзор — [docs/presentation.html](docs/presentation.html)
|
||||
Проектной документации в отдельном каталоге нет: этот README — обзор и каталог инструментов,
|
||||
[CLAUDE.md](CLAUDE.md) — архитектура, проверенные COM-приёмы и подводные камни.
|
||||
|
||||
## Требования
|
||||
|
||||
- **Windows x64**, установленный **КОМПАС-3D** (разрабатывалось на v24 Home).
|
||||
- **.NET SDK 8+** (собирается и на SDK 10; целевой фреймворк `net8.0-windows`).
|
||||
- **Windows x64**, установленный **КОМПАС-3D** (разрабатывалось на v24 Home) **вместе с компонентом
|
||||
SDK**: interop-сборки принадлежат АСКОН, в поставку сервера не входят и берутся из установки —
|
||||
`SDK\Samples\CSharp.zip` (каталог `Common`), при первом запуске распаковываются в
|
||||
`%LOCALAPPDATA%\kompas-mcp\interop\<ключ>`. Если SDK не установлен, положите сборки рядом с
|
||||
`kompas-mcp.exe` или укажите каталог с ними в `KOMPAS_INTEROP_DIR`.
|
||||
- **.NET SDK 8+** для сборки из исходников (целевой фреймворк `net8.0-windows`; формат решения
|
||||
`.slnx` понимает только SDK 9+ — на SDK 8 собирайте проекты по путям). Для готового релиза рантайм
|
||||
не нужен: сервер публикуется self-contained.
|
||||
|
||||
## Установка как плагин Claude Code
|
||||
|
||||
Сервер и оба публикуемых навыка упакованы в плагин `kompas` (каталог [`plugin/`](plugin/)) — самый
|
||||
простой способ подключить проект к Claude Code без ручной сборки: `/plugin marketplace add` +
|
||||
`/plugin install`, дальше лаунчер сам скачивает self-contained сборку сервера по
|
||||
`plugin/server.lock.json` и сверяет её SHA256. Проверка установки — команда `/kompas:doctor`.
|
||||
Подробности, режим разработки (`KOMPAS_MCP_EXE`) и сниппеты для Codex/opencode — в
|
||||
[`plugin/README.md`](plugin/README.md).
|
||||
|
||||
> Публичного релиза пока нет (`server.lock.json` в состоянии `0.0.0`, запись в каталоге плагинов не
|
||||
> заведена) — используйте режим разработки или сборку ниже.
|
||||
|
||||
## Сборка и запуск
|
||||
|
||||
@@ -25,8 +46,9 @@ LLM набор инструментов для создания документ
|
||||
dotnet build -c Release
|
||||
# сервер (stdio):
|
||||
dotnet run --project src/Kompas.Mcp.Host -c Release
|
||||
# или собранный exe:
|
||||
src/Kompas.Mcp.Host/bin/Release/net8.0-windows/kompas-mcp.exe
|
||||
# или собранный exe (платформа x64 — из Directory.Build.props):
|
||||
src/Kompas.Mcp.Host/bin/x64/Release/net8.0-windows/kompas-mcp.exe
|
||||
kompas-mcp.exe --version # версия бинаря, КОМПАС для этого не нужен
|
||||
```
|
||||
|
||||
### Подключение к MCP-клиенту (stdio)
|
||||
@@ -34,71 +56,145 @@ src/Kompas.Mcp.Host/bin/Release/net8.0-windows/kompas-mcp.exe
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"kompas3d": { "command": "C:\\путь\\к\\kompas-mcp.exe", "args": [] }
|
||||
"kompas": { "command": "C:\\путь\\к\\kompas-mcp.exe", "args": [] }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Инструменты (81 инструмент)
|
||||
## Инструменты (60)
|
||||
|
||||
| Группа | Инструменты |
|
||||
|---|---|
|
||||
| System | `kompas_connect`, `kompas_status`, `kompas_set_visible` |
|
||||
| Documents | `document_create`, `document_open`, `document_save`, `document_save_as`, `document_close`, `document_active` |
|
||||
| Sketch | `sketch_create`, `sketch_create_on_face`, `sketch_create_on_face_index`, `sketch_create_on_offset_plane`, `sketch_add_line`, `sketch_add_circle`, `sketch_add_rectangle`, `sketch_add_axis`, `sketch_add_arc`, `sketch_add_arc_3points`, `sketch_add_ellipse`, `sketch_add_polyline`, `sketch_add_polygon`, `sketch_add_spline`, `sketch_add_point`, `sketch_close` |
|
||||
| Features | `extrude_boss`, `extrude_cut`, `revolve_boss`, `revolve_cut`, `fillet_edge`, `chamfer_edge`, `fillet_edge_index`, `chamfer_edge_index`, `shell`, `rib`, `sweep`, `loft`, `linear_pattern`, `circular_pattern`, `mirror_operation`, `mirror_body`, `hole`, `hole_counterbore`, `hole_countersink`, `hole_conic`, `draft`, `rebuild` |
|
||||
| System | `kompas_connect`, `kompas_status`, `kompas_set_visible`, `set_auto_validate`, `set_operation_log` |
|
||||
| Documents | `document_create`, `document_open`, `document_save`, `document_close`, `document_active`, `set_part_info` |
|
||||
| Sketch | `sketch_create`, `sketch_add`, `sketch_close` |
|
||||
| Features | `extrude`, `revolve`, `primitive`, `fillet_edge`, `chamfer_edge`, `shell`, `rib`, `sweep`, `loft`, `pattern`, `mirror`, `hole`, `draft`, `feature_delete`, `rebuild` |
|
||||
| Edit | `move_face`, `split_solid_by_plane`, `move_body`, `boolean_union` |
|
||||
| Inspection | `describe_model`, `list_features`, `list_bodies`, `list_variables`, `describe_face`, `describe_edge`, `measure` |
|
||||
| Vision | `model_snapshot` (PNG-снимок; fallback — сначала `describe_model`) |
|
||||
| Query | `get_part_info`, `get_bounding_box`, `list_faces`, `list_edges`, `list_components` |
|
||||
| Variables | `create_variable`, `set_variable`, `delete_variable` |
|
||||
| Inspection | `describe_model`, `list_features`, `list_bodies`, `list_variables`, `measure` |
|
||||
| Vision | `model_snapshot` (PNG-снимок; сначала — `describe_model`) |
|
||||
| Query | `list_faces`, `list_edges`, `list_components` |
|
||||
| Variables | `set_variable`, `delete_variable` |
|
||||
| Conversion | `import_step`, `export_step` |
|
||||
| Assembly | `assembly_add_component`, `assembly_add_mate` |
|
||||
| Drawing | `drawing_create_standard_views`, `drawing_fill_title_block`, `drawing_add_linear_dimension`, `drawing_add_diametral_dimension`, `drawing_add_radial_dimension`, `drawing_add_angular_dimension`, `drawing_add_rough`, `drawing_add_text`, `drawing_set_technical_requirements` |
|
||||
| Drawing | `drawing_create_standard_views`, `drawing_fill_title_block`, `drawing_add_linear_dimension`, `drawing_add_diametral_dimension`, `drawing_add_radial_dimension`, `drawing_add_angular_dimension`, `drawing_add_leader`, `drawing_add_rough`, `drawing_add_text`, `drawing_set_technical_requirements`, `drawing_set_sheet_format` |
|
||||
| Validation | `validate_part` |
|
||||
|
||||
Инструменты сгруппированы по смыслу операции, а не по способу вызова: тип задаётся параметром
|
||||
(`extrude(mode=boss|cut)`, `hole(type=simple|counterbore|countersink|conic)`,
|
||||
`pattern(kind=linear|circular)`), а объект — либо индексом из `list_faces`/`list_edges`,
|
||||
либо точкой в мировых координатах (рёбра под скругление/фаску — и списком точек `points[]`,
|
||||
чтобы N углов давали одну операцию). `list_edges` отбирает рёбра по типу и координатному окну —
|
||||
так адресуют «весь нижний контур» на теле, где рёбер сотни. Эскиз строится списком примитивов за один вызов:
|
||||
`sketch_create(plane|faceIndex, entities[])`. У каждой операции есть `name` — имя узла в дереве
|
||||
построения; без него дерево состоит из безликих «Эскиз:1», «Элемент выдавливания:2».
|
||||
|
||||
Формообразование идёт двумя путями, и их сочетают: `primitive(kind=block|cylinder|sphere|cone,
|
||||
result=new|union|subtract|intersect)` строит тело по размерам без эскиза (в том числе вычитает
|
||||
карман или паз), а `sketch_create` + `extrude` нужен там, где контур сложный — текст, кривые,
|
||||
произвольный профиль.
|
||||
|
||||
Примитивы эскиза: `line`, `circle`, `rectangle`, `arc`, `arc3points`, `ellipse`, `polyline`,
|
||||
`polygon`, `spline`, `point`, `axis`, `text`. Надпись (`type=text` с `text`, `height`, `fontName`)
|
||||
сразу переводится в кривые, поэтому её можно выдавливать — так делаются логотипы и гравировка;
|
||||
в ответе возвращается габарит глифов (и отдельно ширина ячейки строки), а `align`/`vAlign` кладут
|
||||
надпись центром или краем ровно в заданную точку. Параметры
|
||||
`extrude(thinThickness, thinSide)` превращают контур в стенку заданной толщины: `outward`
|
||||
наращивает её наружу и даёт ободок-эквидистанту вокруг контура (например, подложку под надпись).
|
||||
|
||||
### Типовой сценарий
|
||||
|
||||
`kompas_connect` → `document_create part` → `sketch_create XOY` → `sketch_add_circle` →
|
||||
`sketch_close` → `extrude_boss` → `describe_model` → (повтор для следующих элементов).
|
||||
`kompas_connect` → `document_create part` →
|
||||
`sketch_create(plane="XOY", entities=[{type:"rectangle", points:[…]}, {type:"circle", …}])` →
|
||||
`extrude(mode="boss", depth=20)` → `describe_model` → (повтор для следующих элементов).
|
||||
|
||||
> `describe_model` предпочтителен перед `model_snapshot`: отдаёт структурный «паспорт» детали
|
||||
> (дерево операций, тела, переменные, топологию, МЦХ) без расхода токенов на изображение.
|
||||
> Параметр `sections` (`box,mass,…`) сужает и ответ, и объём чтения модели.
|
||||
|
||||
> ⚠️ Вызовы зависимых инструментов выполняйте **последовательно** (дождавшись ответа):
|
||||
> сессия построения хранит эскизы по `id`, а сервер обрабатывает запросы конкурентно.
|
||||
> Каждая мутирующая операция сама дописывает к ответу итог проверки построения — отдельный
|
||||
> `validate_part` после каждого шага не нужен. Отключается на сессию через `set_auto_validate(false)`
|
||||
> или при старте сервера переменной окружения `KOMPAS_MCP_AUTOVALIDATE=0`.
|
||||
|
||||
### Журнал операций
|
||||
|
||||
Сервер умеет записывать каждый вызов инструмента в файл JSON Lines — по строке на вызов: время,
|
||||
имя инструмента, аргументы, длительность, успех или полный текст ошибки, начало ответа (снимки
|
||||
модели не пишутся, только их размер). Журнал — материал для решений о самом каталоге: что зовут,
|
||||
что стабильно отказывает, что не зовут никогда.
|
||||
|
||||
```powershell
|
||||
$env:KOMPAS_MCP_OPLOG_PATH = "D:\logs\kompas-operations.jsonl" # путь = включение
|
||||
$env:KOMPAS_MCP_OPLOG = "0" # временно заглушить, путь не стирая
|
||||
```
|
||||
|
||||
Без пути журнал выключен: сервер не пишет ничего и никуда. В сессии режим переключается
|
||||
инструментом `set_operation_log(enabled, path?)`, состояние видно в `kompas_status`. Сбой записи
|
||||
никогда не роняет операцию — причина оседает в статусе. Сводка по накопленному:
|
||||
|
||||
```powershell
|
||||
pwsh -NoProfile -File tools/dev/oplog-report.ps1 -Path D:\logs\kompas-operations.jsonl
|
||||
```
|
||||
|
||||
Отчёт даёт частоту вызовов и медианное время по инструментам, долю отказов, самые частые тексты
|
||||
ошибок и список инструментов, ни разу не встретившихся в журнале (каталог берётся из атрибутов
|
||||
`McpServerTool` в исходниках).
|
||||
|
||||
> ⚠️ Вызовы зависимых инструментов выполняйте **последовательно**, дождавшись ответа: сессия
|
||||
> построения хранит эскизы по `id`, а сервер обрабатывает запросы конкурентно.
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
src/Kompas.Mcp.Core/ COM-слой: STA-диспетчер, подключение, документы, эскизы/операции, конвертация, снимок, инспекция модели
|
||||
src/Kompas.Mcp.Host/ MCP-сервер (stdio) + определения инструментов
|
||||
tests/Kompas.Mcp.Tests/ 267 тестов: unit + integration (integration требуют КОМПАС)
|
||||
libs/kompas-interop/ вендорские interop-сборки КОМПАС (из SDK Samples/Common)
|
||||
docs/ архитектура, план, презентация, MD-база знаний SDK (Kompas3D_SDK/)
|
||||
usecases/ полигон обкатки подходов (в .gitignore); приёмы поднимаются в навык kompas-3d
|
||||
.claude/skills/ навык kompas-3d (методика)
|
||||
.claude/agents/ субагенты-делегаты: docs-maintainer (Sonnet), kompas-sdk-research (Haiku)
|
||||
src/Kompas.Mcp.Core/ COM-слой: STA-диспетчер, подключение, документы, эскизы/операции,
|
||||
сборки, чертежи, конвертация, снимок, инспекция модели
|
||||
src/Kompas.Mcp.Host/ MCP-сервер (stdio) + определения инструментов (Tools/ — по группе на файл)
|
||||
tests/Kompas.Mcp.Tests/ 567 тестов: unit (корень) + Integration/ (нужен запущенный КОМПАС)
|
||||
libs/kompas-interop/ interop-сборки КОМПАС (из SDK Samples/Common) — только для компиляции
|
||||
plugin/ плагин Claude Code `kompas`: манифест, лаунчер, лок версии сервера,
|
||||
навыки kompas-3d и kompas-fdm-design (источник истины)
|
||||
tools/ раскладка навыков junction'ами + Pester-тесты PowerShell плагина
|
||||
.gitea/workflows/ CI (сборка + unit-тесты) и релиз (публикация в ветку dist)
|
||||
.claude/skills/ junction'ы на plugin/skills + kompas-mcp-dev (внутренний навык разработки)
|
||||
.claude/agents/ субагент kompas-sdk-research (Haiku) — поиск по справке SDK
|
||||
```
|
||||
|
||||
Справка по COM API КОМПАС живёт **вне репозитория** — в приватном
|
||||
[`kompas-sdk-docs`](https://git.shahovalov.ru/mikhail/kompas-sdk-docs) (2465 статей, собраны из
|
||||
HTML-справки SDK) и проиндексирована в RAG. Доступ — через MCP-сервер `kompas-sdk` (bearer в
|
||||
`KOMPAS_SDK_RAG_TOKEN`); ищет по ней субагент `kompas-sdk-research`.
|
||||
|
||||
## Тесты
|
||||
|
||||
```powershell
|
||||
dotnet test # все (integration требуют КОМПАС)
|
||||
dotnet test --filter "Category=Unit" # только unit (без COM)
|
||||
dotnet test --filter "Category=Integration" # только integration
|
||||
pwsh -NoProfile -File tools/tests/run-ps-tests.ps1 # Pester-тесты скриптов плагина
|
||||
```
|
||||
|
||||
567 тестов: 406 unit + 161 integration. CI (Gitea Actions, `.gitea/workflows/ci.yml`) собирает проект и
|
||||
гоняет `Category=Unit&Requires!=Windows` на Linux-раннере (401 тест) — 5 тестов STA-диспетчера
|
||||
помечены `Requires=Windows` (`Thread.SetApartmentState` не работает на Linux). Integration-тесты в CI
|
||||
не запускаются никогда: нужен запущенный КОМПАС с GUI и лицензией. Плюс 41 Pester-тест
|
||||
PowerShell-скриптов плагина и раскладки навыков — в счёт .NET-тестов не входят.
|
||||
|
||||
## Архитектура (кратко)
|
||||
|
||||
- **STA-поток** (`KompasDispatcher`) владеет всеми COM-вызовами — КОМПАС однопоточный STA.
|
||||
- Подключение через API5 `KompasObject` (`KOMPAS.Application.5`) → API7 `IApplication` (`ksGetApplication7`).
|
||||
- 3D строится через API5 `ksPart`, снимок — через `ksDocument3D`; прямое редактирование импортированной B-rep — через API7. Структурный осмотр, переменные, сборки и чертежи инкапсулированы в сервисах COM-слоя.
|
||||
- STEP импорт/экспорт — через встроенный конвертер КОМПАС.
|
||||
- MCP — официальный C# SDK `ModelContextProtocol`, транспорт stdio, логи в stderr.
|
||||
- Детали реализации, обоснования и проверенные COM-приёмы — в [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) и [CLAUDE.md](CLAUDE.md).
|
||||
- Подключение через API5 `KompasObject` (`KOMPAS.Application.5`) → API7 `IApplication`
|
||||
(`ksGetApplication7`). 3D строится через API5 `ksPart`, снимок — через `ksDocument3D`; отверстия,
|
||||
сборки, чертежи и прямое редактирование B-rep — через API7.
|
||||
- **Interop-сборки подставляются в рантайме** (`KompasInteropLoader`) из установленного КОМПАС, а не
|
||||
из поставки сервера: установка находится по `HKCR\CLSID\{...}\LocalServer32`, сборки распаковываются
|
||||
из `SDK\Samples\CSharp.zip` в `%LOCALAPPDATA%\kompas-mcp\interop\<ключ>`.
|
||||
- STEP импорт/экспорт — через встроенный конвертер КОМПАС (AP203/AP214/AP242).
|
||||
- MCP — официальный C# SDK `ModelContextProtocol`, транспорт stdio, логи в stderr (stdout занят
|
||||
протоколом).
|
||||
- Детали реализации, обоснования и проверенные COM-приёмы — в [CLAUDE.md](CLAUDE.md).
|
||||
|
||||
## Лицензирование
|
||||
|
||||
`libs/kompas-interop/*.dll` — interop-сборки АСКОН из состава SDK КОМПАС-3D; распространяются
|
||||
согласно условиям АСКОН. Для работы требуется установленный КОМПАС-3D.
|
||||
`libs/kompas-interop/*.dll` — interop-сборки АСКОН из состава SDK КОМПАС-3D. Они нужны **только для
|
||||
компиляции** и в релизный архив сервера не попадают (`Private=false`): сервер подставляет их в
|
||||
рантайме из установленного у пользователя КОМПАС-3D. Для работы требуется установленный КОМПАС-3D
|
||||
с компонентом SDK.
|
||||
|
||||
@@ -1,374 +0,0 @@
|
||||
# Архитектура MCP-сервера КОМПАС-3D (предлагаемый вариант)
|
||||
|
||||
> Статус: **реализовано и работает** (v1+v2+STEP/assembly+direct-edit+inspection+package-A «богатые эскизы»+package-B «shell+rib+sweep+loft»+package-C «массивы и зеркало»+package-D start «переменные»+package-E «offset plane»+`hole`+`hole_counterbore`+`hole_countersink`+`hole_conic`+`draft`+`assembly_add_component`+`assembly_add_mate`+`drawing_create_standard_views`+`drawing_fill_title_block`+`drawing_add_linear_dimension`+`drawing_add_diametral_dimension`+`drawing_add_radial_dimension`+`drawing_add_angular_dimension`+`drawing_add_rough`+`drawing_add_text`+`drawing_set_technical_requirements` (веха «2D-чертёж», инкремент 6 — текстовые обозначения)). Актуализировано по коду.
|
||||
> Сопутствующий контекст по COM API КОМПАС — в [`../CLAUDE.md`](../CLAUDE.md).
|
||||
> Имена интерфейсов и перечислений сверены со справкой SDK по MD-базе знаний `docs/Kompas3D_SDK/` (субагент `kompas-sdk-research`).
|
||||
|
||||
---
|
||||
|
||||
## 1. Назначение и контекст
|
||||
|
||||
Строим **MCP-сервер**, который даёт LLM управлять CAD-системой **КОМПАС-3D** (АСКОН):
|
||||
создавать/открывать документы, строить 2D-геометрию, 3D-детали и сборки, читать/писать
|
||||
параметры, запускать команды.
|
||||
|
||||
Жёсткие рамки, заданные природой API:
|
||||
|
||||
- **Только Windows, только x64** — КОМПАС автоматизируется через **COM Automation API**;
|
||||
разрядность сервера должна совпадать с разрядностью установленного КОМПАС.
|
||||
- **КОМПАС должен быть установлен и запускаем на той же машине.** Сервер — это **COM-клиент**,
|
||||
а не самостоятельный геометрический движок. Без работающего экземпляра КОМПАС инструменты
|
||||
бесполезны.
|
||||
- Целевая среда — **КОМПАС-3D v24 Home** (LT-редакция); часть возможностей полной редакции
|
||||
может быть недоступна.
|
||||
|
||||
Две сосуществующие версии API (подробнее — `CLAUDE.md`):
|
||||
|
||||
| | Точка входа | Namespace (C#) | Когда |
|
||||
|---|---|---|---|
|
||||
| **API5** (legacy) | `KompasObject` | `Kompas6API5` | bootstrap-подключение, построение 3D через `ksPart` |
|
||||
| **API7** (современный) | `IApplication` | `KompasAPI7` | всё новое: документы, параметры, операции |
|
||||
|
||||
---
|
||||
|
||||
## 2. Выбранный стек
|
||||
|
||||
| Решение | Выбор | Обоснование |
|
||||
|---|---|---|
|
||||
| Язык / платформа | **.NET 8 (LTS), C#, `win-x64`** | COM-интероп первого класса; SDK поставляет именно C#-примеры и `.tlb` |
|
||||
| MCP SDK | **`ModelContextProtocol`** (официальный C# SDK) | хостинг через `Microsoft.Extensions.Hosting`, DI, готовый stdio-транспорт |
|
||||
| Транспорт | **stdio** | локальный клиент (Claude Desktop / IDE) запускает сервер дочерним процессом на машине с КОМПАС — проще и безопаснее всего |
|
||||
| COM-интероп | COM-references на `.tlb` из `SDK\lib` | строгая типизация интерфейсов API7 (`IApplication`, `IPart7`, …) на этапе компиляции |
|
||||
| Логи | `Microsoft.Extensions.Logging` → **stderr** | **stdout занят протоколом MCP** — туда писать нельзя |
|
||||
| Сериализация | `System.Text.Json` | штатно в .NET, без зависимостей |
|
||||
|
||||
Подключаемые типобиблиотеки (`C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK\lib`):
|
||||
`kAPI5.tlb`, `kAPI7.tlb`, `ksConstants.tlb`, `ksConstants3D.tlb`, `kAPI2D5COM.tlb`, `kAPI3D5COM.tlb`.
|
||||
Namespaces: `Kompas6API5`, `KompasAPI7`, `Kompas6Constants`, `Kompas6Constants3D`, `KAPITypes`.
|
||||
|
||||
### Почему C#, а не Python
|
||||
|
||||
Python (comtypes/pywin32) технически способен управлять COM, но КОМПАС-API активно использует
|
||||
конструкции, болезненные для динамического интеропа: `out`/`ref`-параметры (например,
|
||||
`ExecuteKompasCommand(commandID, post, &retval)`), `SAFEARRAY`/динамические массивы
|
||||
(`ksDynamicArray`, `ksLtVariant`), мосты API5↔API7 (`ksGetApplication7`, `TransferInterface`) и
|
||||
обязательный STA + насос сообщений. В C# всё это покрыто строго типизированным interop, что
|
||||
снижает риск и стоимость поддержки.
|
||||
|
||||
---
|
||||
|
||||
## 3. Модель процесса и потоков (ключевой раздел)
|
||||
|
||||
COM-объекты КОМПАС живут в **STA (Single-Threaded Apartment)**, экземпляр приложения —
|
||||
**единственный** и **однопоточный**. Отсюда — центральное архитектурное ограничение:
|
||||
|
||||
- Сервер держит **один выделенный STA-поток**, который **владеет всеми без исключения
|
||||
COM-вызовами**. Асинхронные обработчики MCP-инструментов (поток-пул) **маршалят** работу в этот
|
||||
поток через очередь/диспетчер (например, `BlockingCollection<Func<…>>` или собственный
|
||||
`SynchronizationContext`). Это автоматически **сериализует** доступ к КОМПАС.
|
||||
- STA-поток крутит **насос сообщений Windows** и периодически вызывает
|
||||
`IApplication.PumpWaitingMessages()` / при необходимости `EnableTaskAccess(false)` на время
|
||||
пакетных операций — чтобы диалоги и колбэки КОМПАС не приводили к взаимоблокировке.
|
||||
|
||||
```
|
||||
MCP client ──stdio──> Host (поток-пул, async)
|
||||
│ ставит задачу в очередь
|
||||
▼
|
||||
┌─────────────────────────┐
|
||||
│ STA-поток (COM owner) │ ← насос сообщений + PumpWaitingMessages
|
||||
│ KompasObject / IApplication
|
||||
└─────────────────────────┘
|
||||
│ COM
|
||||
▼
|
||||
КОМПАС-3D.exe
|
||||
```
|
||||
|
||||
### Подключение к КОМПАС
|
||||
|
||||
1. Разрешить ProgID. На целевой машине (v24 Home) **проверено**: зарегистрированы
|
||||
`KOMPAS.Application.7` и `KOMPAS.Application.5`, а `KOMPASLT.*` **отсутствует** — то есть
|
||||
Home-редакция использует обычные ProgID, а не LT. Порядок попыток:
|
||||
`KOMPAS.Application.7` (прямой API7) → `KOMPAS.Application.5` (+ `ksGetApplication7()`) →
|
||||
`KOMPASLT.Application.5` (запасной, для других инсталляций). Выбранный ProgID фиксировать в логе.
|
||||
2. **Attach** к запущенному экземпляру: `Marshal.GetActiveObject(progId)`.
|
||||
Если не запущен — **launch**: `Activator.CreateInstance(Type.GetTypeFromProgID(progId))`.
|
||||
3. Если зашли через API5 — получить современное приложение:
|
||||
`IApplication appl = (IApplication)kompas.ksGetApplication7();` (через `KOMPAS.Application.7` `IApplication` уже на руках).
|
||||
4. `appl.Visible = true;` — показать окно КОМПАС; дальше работать через интерфейсы API7.
|
||||
|
||||
### Жизненный цикл COM
|
||||
|
||||
- Корневые RCW (`KompasObject`, `IApplication`) держим на всё время жизни сервера.
|
||||
- Временные объекты освобождаем (`Marshal.ReleaseComObject`) в обратном порядке создания.
|
||||
- `appl.Quit()` вызываем **только если экземпляр запустили мы сами** (флаг «launched-by-us»);
|
||||
к чужому запущенному КОМПАС не применяем.
|
||||
|
||||
---
|
||||
|
||||
## 4. Слои решения
|
||||
|
||||
Проекты solution `KompasMcp.slnx` (спайк-проекты ConnectSpike/ReconSpike удалены; их механика покрыта тестами):
|
||||
|
||||
| Проект | Ответственность |
|
||||
|---|---|
|
||||
| **Kompas.Mcp.Host** | Точка входа. Сборка MCP-сервера (stdio), DI (в т.ч. `ConversionService`), логи в stderr, старт и владение STA-потоком, graceful shutdown. Определения инструментов по категориям (System / Documents / Sketch / Features / Query / Conversion). **Тонкий слой**: валидация аргументов → постановка задачи на STA-поток → форматирование результата/ошибки в MCP-ответ. |
|
||||
| **Kompas.Mcp.Core** | COM-слой. Менеджер соединения, менеджер документов, построитель эскизов и операций, `ConversionService` (STEP импорт/экспорт), `QueryService` (МЦХ, грани, рёбра, компоненты), `ModelInspectionService` (дерево операций, тела, переменные, drill-down, измерения), `AssemblyService` (вставка компонентов в сборку, namespace `Kompas.Mcp.Core.Assemblies`), `DrawingService` (стандартные виды чертежа, namespace `Kompas.Mcp.Core.Drawings`), снимок. Все паттерны API5/API7 живут здесь. |
|
||||
| **Kompas.Mcp.Tests** | Юнит (без COM) + интеграционные (требуют КОМПАС). 267 тестов (163 unit + 104 integration). Все интеграционные классы наследуют `IntegrationTestBase` (`IAsyncLifetime`), который вызывает `DocumentService.CloseAllAsync` после каждого теста. |
|
||||
|
||||
Принцип: **только `Core` знает про COM**. `Host`/Tools оперируют доменными DTO и вызывают `Core`; `Host` не содержит бизнес-логики.
|
||||
|
||||
Архитектурный принцип: **MCP транслирует возможности SDK КОМПАС в общие инструменты** (не под конкретную задачу). Методический слой поверх MCP — навык `.claude/skills/kompas-3d/` (playbook'и, эвристики). Полигон отработки подходов — `usecases/` (в .gitignore).
|
||||
|
||||
---
|
||||
|
||||
## 5. Карта инструментов (81 инструмент)
|
||||
|
||||
Сгруппированы вокруг центрального цикла «эскиз ↔ операция». Имена — `snake_case`.
|
||||
|
||||
**System**
|
||||
- `kompas_connect` — attach/launch, возвращает версию и редакцию (`GetSystemVersion`, `ApplicationName`).
|
||||
- `kompas_set_visible` — показать/скрыть окно (`IApplication.Visible`).
|
||||
- `kompas_status` — состояние соединения, активный документ.
|
||||
|
||||
**Documents** (`IApplication.Documents` → `IDocuments`)
|
||||
- `document_create` — тип `part | assembly | drawing | fragment` (`DocumentTypeEnum`: Part=4, Assembly=5, Drawing=1, Fragment=2).
|
||||
- `document_open` / `document_save` / `document_close` / `document_active`.
|
||||
|
||||
**Sketch** (2D-геометрия внутри 3D-эскиза)
|
||||
- `sketch_create` — на базовой плоскости (`o3d_planeXOY` / `XOZ` / `YOZ`) или на выбранной грани.
|
||||
- `sketch_create_on_offset_plane` — эскиз на плоскости, смещённой от базовой (XOY/XOZ/YOZ) на `offset` мм; вспомогательная геометрия через `o3d_planeOffset=14` / `ksPlaneOffsetDefinition`. Разблокирует `loft` (параллельные сечения на разной высоте). Начало пакета E «вспомогательная геометрия».
|
||||
- `sketch_add_line` / `sketch_add_circle` / `sketch_add_arc` / `sketch_add_arc_3points` / `sketch_add_rectangle`.
|
||||
- `sketch_add_ellipse` (centre, semi-axes A/B, rotation angle) / `sketch_add_polyline` (point chain, closed) / `sketch_add_polygon` (regular, inscribed/circumscribed) / `sketch_add_spline` (cubic NURBS, closed) / `sketch_add_point`.
|
||||
- `sketch_close` — завершить редактирование.
|
||||
- Жизненный цикл: `NewEntity(o3d_sketch)` → `SetPlane(plane|face)` → `BeginEdit()` →
|
||||
`ksLineSeg` / `ksCircle` / `ksArcBy3Points` / `ksArcByAngle` / `ksEllipse` / `ksRegularPolygon` / `ksNurbs` / … → `EndEdit()`.
|
||||
- `PartModeler` split into partial classes: `PartModeler.cs` (core), `PartModeler.Sketch.cs`, `PartModeler.Features.cs`. Static `SketchGeometry` class holds mappings and validators. Point lists use `record SketchPoint(X, Y)` (JSON `x`/`y`). All angles in degrees.
|
||||
- `CoordinateAxis.cs` (`src/Kompas.Mcp.Core/Modeling/`) — enum `CoordinateAxis {X,Y,Z}` + `CoordinateAxes.ToObj3dType/Parse` (→ `o3d_axisOX/OY/OZ = 71/72/73`), analogous to `BasePlane.cs`.
|
||||
|
||||
**Features** (3D-операции)
|
||||
- `extrude_boss` / `extrude_cut` — sketch, depth, direction, endType.
|
||||
- `revolve_boss` / `revolve_cut` — угол.
|
||||
- `shell` — превратить тело в оболочку: открыть грани по индексам (`faceIndices`, ≥1, из `list_faces`), задать толщину стенки (`thickness` мм), направление (`outward`, по умолчанию внутрь). Реализовано через API5 `ksPart.NewEntity(o3d_shellOperation=43)` → `ksShellDefinition` → `FaceArray()` → `Create()`. Маппинг: `thinType = !outward`.
|
||||
- `rib` — построить ребро жёсткости от разомкнутого контура эскиза до тела. Параметры: `sketchId`, `thickness` (мм), `side` (`left|right|up|down` → 0/1/2/3), `symmetric` (толщина симметрична плоскости), `angle` (уклон стенок, °). Реализовано через `ksPart.NewEntity(o3d_ribOperation=44)` → `ksRibDefinition` (`SetSketch`, `SetThinParam`). `symmetric=true`: `SetThinParam(dtBoth, t/2, t/2)`; иначе `SetThinParam(dtNormal, t, 0)`. Контур должен не касаться тела концами — КОМПАС дотягивает полотно сам.
|
||||
- `sweep` — кинематическая операция: перемещение замкнутого профиля (эскиз `profileSketchId`) вдоль траектории (эскиз `pathSketchId`), образуя сплошное тело. Профиль и траектория на разных (обычно перпендикулярных) плоскостях. Реализовано через `ksPart.NewEntity(o3d_baseEvolution=45)` → `ksBaseEvolutionDefinition` (`SetSketch(профиль)` → `PathPartArray().Add(траектория)` → `sketchShiftType=0` → `SetThinParam(false)`) → `Create()`. Валидация: `profileSketchId != pathSketchId`.
|
||||
- `loft` — операция по сечениям: построить сплошное тело по ≥2 закрытым эскизам-сечениям на параллельных плоскостях. Реализовано через `ksPart.NewEntity(o3d_baseLoft=30)` → `ksBaseLoftDefinition` (`Sketchs().Add(каждое сечение)` → `SetLoftParam(closed=false,false,true)` → `SetThinParam(false)`) → `Create()`. Для сечений не на базовых плоскостях использовать `sketch_create_on_offset_plane`.
|
||||
- `linear_pattern` — линейный массив операций вдоль координатной оси (`o3d_meshCopy=35`, `ksMeshCopyDefinition`); параметры: `featureIds[]`, `axis` (X/Y/Z), `count` (включает исходный, ≥2), `step` (мм). `SetAxis1` + `SetCopyParamAlongAxis(true,0,count,step,false)` + `count2=1` (выключает 2-е направление).
|
||||
- `circular_pattern` — круговой массив вокруг координатной оси (`o3d_circularCopy=36`, `ksCircularCopyDefinition`); параметры: `featureIds[]`, `axis`, `count`, `step` (угол° между соседними), `reverse`, `geometric`. Свойства `count1=1`/`count2=count`/`step2=angle°`/`factor2=false`/`inverce=reverse` задаются напрямую; `GetOperationArray()`.
|
||||
- `mirror_operation` — зеркальная копия операций (`o3d_mirrorOperation=48`, `ksMirrorCopyDefinition`); параметры: `featureIds[]`, `plane` (XOY/XOZ/YOZ). `SetPlane` + `GetOperationArray()`.
|
||||
- `mirror_body` — зеркало всего тела (`o3d_mirrorAllOperation=49`, `ksMirrorCopyAllDefinition`); параметр: `plane`. `ChooseBodies()` не приводится к `ksChooseBodies` и не нужен — операция отражает все тела, сохраняя оригинал (объём удваивается).
|
||||
- `hole` — цилиндрическое отверстие (сквозное или глухое) на грани, найденной по мировой точке (x,y,z). Параметры: `diameter` (мм), `depth` (мм, для глухого), `throughAll`. Реализовано через **API7** (`HoleService`, `src/Kompas.Mcp.Core/Modeling/HoleService.cs`) — в API5 интерфейс `ksHoleDefinition` отсутствует в interop. Паттерн: `(IModelContainer)part7` → `Points3D.Add()` (центр, `IPoint3D`) → `Holes3D.Add()` → `IHole3D` (`HoleType=ksHTBase`, `Diameter`, `DepthType`, `Depth`, `EndFaceType=ksEFFlat`) → `(IHoleDisposal)hole` (`BaseSurface=грань` через `FindObjectsByPoint`, `Perpendicular=true`, `AssociationVertex=point`) → `Update()` → `RebuildDocument()`. Направление сверления определяется **по факту убыли объёма**: `Direction=true` → Rebuild → сравнить объём (API5 `CalcMassInertiaProperties`); если не убыл → `Direction=false`. При неуспехе — откат через `IFeature7.Delete()`. Возвращает подтверждение без id (отверстие не попадает в реестр `_features` API5).
|
||||
- `hole_counterbore` — отверстие с цековкой (цилиндрическое уширение сверху, под винт с цилиндрической головкой). Параметры: `x,y,z`, `diameter`, `spotfaceDiameter` (>diameter), `spotfaceDepth`, `depth=0`, `throughAll=false`. `HoleType=ksHTCounterbore`; `HoleParameters` приводится к `ISpotfacingHoleParameters` (`SpotfacingDiameter`, `SpotfacingDepth`) — настройка через `configure`-колбэк после фиксации типа. Для глухого: валидируется `depth>spotDepth`.
|
||||
- `hole_countersink` — отверстие с зенковкой (коническое уширение сверху, под винт с потайной головкой). Параметры: `x,y,z`, `diameter`, `sinkDiameter` (>diameter), `sinkAngle` (0<angle<180, типично 90°), `depth=0`, `throughAll=false`. `HoleType=ksHTCountersinking`; `HoleParameters` → `ICountersinkHoleParameters` (`CountersinkType=ksCTDiameterAngle`, `CountersinkDiameter`, `CountersinkAngle`). Все три инструмента отверстий используют общую логику размещения и подбора направления (`HoleCore`).
|
||||
- `hole_conic` — коническое (конусное) отверстие, сужающееся вглубь. Параметры: `x,y,z`, `diameter` (диаметр у основания/поверхности), `conicAngle` (угол конуса, 0<angle<180°), `depth=0`, `throughAll=false`. `HoleType=ksHTConic`; `HoleParameters` → `IConicHoleParameters` (`ConicType=ksCNAngle`, `ConicAngle`). Завершает набор типов отверстий (простое, цековка, зенковка, коническое).
|
||||
- `draft` — уклон граней на угол `angle` (°, строго 0–90) относительно нейтральной координатной плоскости `neutralPlane` (XOY/XOZ/YOZ). `outward=true` — расширение (добавляет материал), `false` — сужение. Реализовано через **API5** `ksInclineDefinition` (`o3d_incline=42`) — операция называется Incline в API5, а не Draft. Паттерн: `ksPart.NewEntity(o3d_incline)` → `GetDefinition() as ksInclineDefinition` → `FaceArray()` (грани по индексам из `list_faces`) → `SetPlane(базовая координатная плоскость)` → `angle` → `direction=!outward` → `Create()` → регистрация в `_features`. Эмпирика: `direction=false`=расширение, `direction=true`=сужение — **обратно справке** → маппинг `def.direction = !outward`. Валидация: `RequireDraftAngle(0<angle<90)`. Регистрируется в `_features` → применимы массивы и зеркало (пакет C).
|
||||
- `rebuild` — перестроить деталь.
|
||||
|
||||
**Edit** (прямое редактирование)
|
||||
- `move_face` — сдвинуть грань по мировой точке (x,y,z, мм) на distance мм вдоль нормали; distance>0 — наружу (добавить материал), <0 — внутрь. Работает на импортированной B-rep. Реализовано через API7 `IPart7.FindObjectsByPoint` + `FaceMover`; контейнеры `ISurfaceContainer`/`IModelContainer` получаются COM-QI от `IPart7` в рантайме. Проверено: top_spacer 39.45→41.45 мм.
|
||||
- `split_solid_by_plane` — рассечь тело плоскостью (по грани или базовой плоскости).
|
||||
- `move_body` — переместить тело на заданный вектор (dx/dy/dz, мм).
|
||||
- `boolean_union` — булева операция объединения тел.
|
||||
|
||||
**Selection / Query**
|
||||
- `get_part_info` — МЦХ через API5 `ksPart.CalcMassInertiaProperties(ST_MIX_MM|ST_MIX_KG)`.
|
||||
- `get_bounding_box` — габарит (`ksPart.GetGabarit`).
|
||||
- `list_faces` / `list_edges` — перечислить грани и рёбра детали с классификацией и мерами.
|
||||
- `list_components` — перечислить компоненты верхнего уровня сборки (индекс, имя, обозначение, признак детали, габарит) через `TopPart → IParts7`.
|
||||
|
||||
**Conversion** (`ConversionTools.cs`, `ConversionService.cs`)
|
||||
- `import_step` — импорт .step/.stp в новый документ через встроенный конвертер КОМПАС (код `ksConverterFromSTEP=-3`); параметры `type` (assembly|part), `createComponentFiles`.
|
||||
- `export_step` — экспорт активного 3D-документа в STEP; `format` = auto|ap203|ap214|ap242.
|
||||
|
||||
**Inspection — структурный осмотр модели (приоритетный над снимком)**
|
||||
- `describe_model` — структурный «паспорт» детали одним вызовом: габарит, МЦХ, тела, сводка топологии (грани/рёбра по типам), дерево построения с параметрами, переменные. **Предпочитать перед `model_snapshot`** — не тратит токены изображения.
|
||||
- `list_features` — дерево построения с параметрами (глубина/радиус/катеты), имена узлов локализованы КОМПАС.
|
||||
- `list_bodies` — тела детали: тип (твёрдое/поверхность) и число граней.
|
||||
- `list_variables` — переменные модели (имя/выражение/значение, флаги external/информационная).
|
||||
- `describe_face` — drill-down грани по индексу: тип, площадь, нормаль, радиус, число рёбер.
|
||||
- `describe_edge` — drill-down ребра по индексу: тип, длина, смежные грани, концевые вершины.
|
||||
- `measure` — расстояние и угол между двумя объектами (face|edge|vertex по индексам), единица `ST_MIX_MM`.
|
||||
|
||||
Реализовано через `ModelInspectionService` (`src/Kompas.Mcp.Core/Query/ModelInspectionService.cs`),
|
||||
рендер текста — `InspectionText` (`InspectionText.cs`, юнит-тестируем без COM).
|
||||
Ключевые API-паттерны: `ksPart.GetFeature()` → `ksFeatureCollection` (дерево); `BodyCollection()` → `ksBody`; `ksPart.GetFeature().VariableCollection` → `ksVariable` (все переменные; `ksPart.VariableCollection()` — только внешние); `GetMeasurer()` → `ksMeasurer`.
|
||||
«Импорт STEP без истории» определяется структурно: `bodyCount > 0 && нет формообразующих операций && features.Count <= bodyCount+1`.
|
||||
|
||||
**Variables — управление переменными модели (package D start)**
|
||||
- `create_variable` — создать переменную (имя, начальное значение, примечание, флаг внешней).
|
||||
- `set_variable` — задать выражение (константа `"30"` или формула `"width*2+5"`); десятичный разделитель — точка; модель перестраивается, зависимые переменные пересчитываются.
|
||||
- `delete_variable` — удалить переменную (нельзя при наличии зависимых).
|
||||
|
||||
Реализовано через `VariableService` (`src/Kompas.Mcp.Core/Modeling/VariableService.cs`, API5), инструменты — `VariableTools` (`src/Kompas.Mcp.Host/Tools/VariableTools.cs`). DI: `AddSingleton<VariableService>()` в `Program.cs`.
|
||||
|
||||
Ключевые API-паттерны: создание — ТОЛЬКО через `ksPart.GetFeature().VariableCollection` (свойство корневого `ksFeature`), а НЕ `ksPart.VariableCollection()` (та возвращает только внешние); Expression — ведущее поле, Value — вычисленный результат; изменение через Expression + `ksPart.RebuildModel()`; после rebuild RCW переменной стал; значение перечитывается через свежую коллекцию (`ReadValueFresh`).
|
||||
|
||||
**Ограничение:** переменная управляет геометрией только в параметрической модели, где размеры эскизов привязаны к именам переменных. Наши эскизы строятся литеральными координатами — `set_variable` хранит и вычисляет значение, но геометрию не меняет. Связь размеров эскизов с переменными (параметрические эскизы через API2D) — не реализована (package D продолжение).
|
||||
|
||||
**Assembly — построение сборок (`AssemblyService`, `AssemblyTools`, namespace `Kompas.Mcp.Core.Assemblies`)**
|
||||
- `assembly_add_component` — вставить компонент (.m3d деталь или .a3d подсборка) из файла в активную сборку; задать положение origin (x,y,z мм, мировая СК сборки). Возвращает индекс и имя вставленного компонента. Реализовано через API7: `IParts7.AddFromFile(path, ExternalFile=true, Redraw=true)` → `IPart7` → `IPlacement3D.SetOrigin(x,y,z)` → `UpdatePlacement(true)` → `RebuildModel(true)`. `RequireActiveAssembly` проверяет `doc.DocumentType == ksDocumentAssembly` до обращения к `TopPart`. Откат при неуспехе через `IFeature7.Delete`. DI: `AddSingleton<AssemblyService>()` в `Program.cs`.
|
||||
- `assembly_add_mate` — наложить сопряжение между гранями двух компонентов активной сборки по мировым точкам. Параметры: `mateType` (`coincidence` — грани заподлицо | `distance` — зазор `value` мм), `x1,y1,z1`, `x2,y2,z2`, `value=0`. Решатель позиционирует компоненты; возвращает статус `valid`. Реализовано через API7: `top.MateConstraints` (`IMateConstraints3D`) → `Add(MateConstraintType)` → `BaseObject1/2` (грани через `top.FindObjectsByPoint(x,y,z,FirstLevel=false)`) → `ParamValue` → `Update()` → `RebuildModel(true)`; проверка `mate.Valid` (false → ошибка + откат `mate.Owner.Delete`). Enum `MateType { Coincidence, Distance }` в `src/Kompas.Mcp.Core/Assemblies/MateType.cs`; маппинг на `MateConstraintType` (`mc_Coincidence=0`, `mc_Distance=5`). Scope: `coincidence`/`distance` проверены вживую; прочие типы (`parallel`, `concentric`, …) — будущие инкременты.
|
||||
|
||||
**Drawing — 2D-чертёж (`DrawingService`, `DrawingTools`, namespace `Kompas.Mcp.Core.Drawings`)**
|
||||
- `drawing_create_standard_views(partFilePath, scale, x, y)` — создать стандартные ассоциативные виды (спереди/сверху/слева, `ksPtFront/ksPtUp/ksPtLeft`) сохранённой 3D-модели (.m3d/.a3d) на активном чертеже. Реализовано через API7 `IKompasDocument2D.ViewsAndLayersManager.Views.AddStandartViews(path, "#Спереди", object[]{1,3,5}, x, y, scale, dx=20, dy=20)` — `object[]` передаётся как SAFEARRAY VT_I4. Проверки: `created==3` строго; непустота — сумма `IView.ObjectCount` новых видов (по разнице `IView.Number`) `>0`, иначе ошибка + откат (`IView.Delete`). Возвращает `DrawingViewsResult{Created,Total,ViewNumbers}` — `ViewNumbers` содержит номера созданных видов (для адресации при простановке размеров). Модель должна быть сохранена до вызова.
|
||||
- `drawing_fill_title_block(designation?, name?, material?)` — заполнить графы основной надписи (штампа) активного чертежа. `designation` = обозначение документа (графа 2), `name` = наименование изделия (графа 1), `material` = материал (графа 3); нужно хотя бы одно поле. Реализовано: `doc2d.LayoutSheets.ItemByNumber[1].Stamp` (`IStamp`) → `stamp.Text[columnId].Str = text` (индексированное свойство; `IText.Str` замещает содержимое без `Clear`) → `stamp.Update()`. Номера граф `ksStampEnum`: обозначение=2, наименование=1, материал=3. Свой enum `StampField` + `StampFields.ColumnId/Collect` в `src/Kompas.Mcp.Core/Drawings/StampField.cs`. Возвращает число заполненных граф.
|
||||
- `drawing_add_linear_dimension(x1,y1,x2,y2,x3,y3, orientation, viewNumber)` — поставить линейный размер на виде активного чертежа. Координаты (x1,y1)-(x2,y2) — выносные точки в **локальной СК вида** (мм); (x3,y3) — положение размерной линии; `orientation`: `horizontal`|`vertical`|`parallel`; `viewNumber` — номер вида (0=первый). Значение измеряется автоматически (`AutoNominalValue=true`). Реализовано: `(ISymbols2DContainer)view` (COM-QI от конкретного `IView`, не от листа — размер попадает именно в этот вид) → `LineDimensions.Add()` → `ILineDimension` → `Update()` → `Valid` → `((IDimensionText)dim).NominalValue`. Ключевая находка: **размеры не входят в `IView.ObjectCount`** (он считает геометрию `IDrawingContainer`); проверять через `ISymbols2DContainer.LineDimensions.Count`. Откат через `dim.Delete()` при ошибке или нулевом значении. Свой enum `DimensionOrientation {Horizontal, Vertical, Parallel}` + `DimensionOrientations.Parse/ToKompas`. Валидаторы `RequireFiniteCoords` + `RequireDistinctPoints`. Новые файлы: `DimensionOrientation.cs`, `DrawingDimensionResult.cs`; инструмент в `DrawingTools.cs`.
|
||||
- `drawing_add_diametral_dimension(xc,yc,radius, angle, viewNumber)` — поставить диаметральный размер (Ø) окружности на виде активного чертежа. `xc,yc` — центр, `radius` — радиус (мм, локальная СК вида); `angle` — направление выноски (градусы → радианы через `DimensionAngles.ToRadians`); `viewNumber` — номер вида (0=первый). Значение (диаметр = 2·radius) измеряется автоматически. Реализовано: общий хелпер `RequireSymbols2DContainer(viewNumber)` (переиспользуется с линейным размером) → `DiametralDimensions.Add()` → `IDiametralDimension` (`Xc`, `Yc`, `Radius`, `Angle` в радианах, `AutoNominalValue=true`) → `Update()` → `Valid` → `((IDimensionText)dim).NominalValue`. Размер «свободный» (без `BaseObject`). Валидатор `DrawingValidation.RequirePositiveRadius`. `DimensionAngles.ToRadians` добавлен в `DimensionOrientation.cs`.
|
||||
- `drawing_add_radial_dimension(xc,yc,radius, angle, viewNumber)` — поставить радиальный размер (R) окружности/дуги на виде активного чертежа. `xc,yc` — центр, `radius` — радиус (мм, локальная СК вида); `angle` — направление выноски (°, по умолчанию 0); `viewNumber` — номер вида. Возвращаемое значение равно **радиусу** (не диаметру). Реализовано: `RequireSymbols2DContainer(viewNumber)` → `RadialDimensions.Add()` → `IRadialDimension` (`Xc`, `Yc`, `Radius`, `Angle` в радианах, `DimensionType=true`, `AutoNominalValue=true`) → `Update()` → `Valid` → `NominalValue`. Размер «свободный» (без `BaseObject`). Переиспользует `RequirePositiveRadius` и `DimensionAngles.ToRadians`.
|
||||
- `drawing_add_angular_dimension(xc,yc, x1,y1, x2,y2, x3,y3, angleType, viewNumber)` — поставить угловой размер между двумя сторонами на виде активного чертежа. `xc,yc` — вершина угла; `x1,y1` — точка на стороне 1; `x2,y2` — точка на стороне 2; `x3,y3` — положение размерной дуги (задаёт её радиус); `angleType` = `"min"` (острый) | `"max"` (тупой, 180°-min) | `"more"` (рефлексный >180°); `viewNumber` — номер вида. Значение в градусах измеряется автоматически. Реализовано: `RequireSymbols2DContainer(viewNumber)` → `AngleDimensions.Add(ksDrADimension)` → `IAngleDimension` (`Xc`, `Yc`, `X1`, `Y1`, `X2`, `Y2`, `X3`, `Y3`, `DimensionType=ksAngleDimTypeEnum`, `AutoNominalValue=true`) → `Update()` → `Valid` → `NominalValue`. Новый enum `AngleDimensionType {Min, Max, More}` + `AngleDimensionTypes.Parse/ToKompas` в `DimensionOrientation.cs`; 9 unit-тестов для маппинга. Размер «свободный» (без `BaseObject`). Валидаторы `RequireFiniteCoords` + `RequireDistinctPoints`.
|
||||
- `drawing_add_rough(x,y, value?, signType, angle, viewNumber)` — поставить знак шероховатости на виде. `x,y` — положение знака в локальной СК вида (мм); `value` — текст параметра (напр. `"Ra 1.6"`; пусто = знак без значения); `signType`: `"delete"` (с удалением слоя материала) | `"without"` (без удаления) | `"none"` (без указания); `angle` — угол наклона оси знака (°, по умолч. 0); `viewNumber` — номер вида. Реализовано: `ISymbols2DContainer.Roughs.Add()` → `IRough` (`BranchX0/Y0/Angle`) → `(IRoughParams)rough` (`SignType=ksRoughSignEnum`, `RoughParamText.Str = value`) → `Update()` → `Valid`. Новый enum `RoughSignType {NoProcessing, DeleteMaterial, WithoutDeleteMaterial}` + `RoughSignTypes.Parse/ToKompas` в `Drawings/RoughSignType.cs`. Возвращает `DrawingAnnotationResult { Value, ViewNumber }`.
|
||||
- `drawing_add_text(x,y, text, angle, viewNumber)` — свободная текстовая надпись на виде стилем по умолчанию. `x,y` — точка привязки (СК вида, мм); `text` — содержимое (`\n` — многострочно); `angle` — угол (°, по умолч. 0); `viewNumber` — номер вида. Реализовано: `(IDrawingContainer)view.DrawingTexts.Add()` → `IDrawingText` (`X/Y/Angle`) → `(IText)dt.Str = text` → `Update()` → `Valid`. ВАЖНО: текст живёт в `IDrawingContainer` (контейнер геометрии вида), НЕ в `ISymbols2DContainer`; попадание проверяется через `DrawingTexts.Count`. Возвращает `DrawingAnnotationResult { Value, ViewNumber }`.
|
||||
- `drawing_set_technical_requirements(text)` — технические требования чертежа (единый текстовый блок, уровень документа, не вида). `text` — строки через `\n`. Реализовано: `(IDrawingDocument)doc.TechnicalDemand` → `td.Text.Str = text` → `td.Update()`. Перезаписывает прежние (не добавляет). Возвращает число строк.
|
||||
|
||||
**Vision — визуальная обратная связь (fallback)**
|
||||
- `model_snapshot` — отрендерить активный 3D-документ в PNG и вернуть **как image-контент MCP**,
|
||||
чтобы мультимодальный агент *увидел* промежуточный результат. Использовать для визуально-пространственных
|
||||
вопросов, когда структурный осмотр (`describe_model`) недостаточен.
|
||||
- `set_view` — задать ориентацию вида (`iso` / `front` / `top` / `right` / …), zoom-to-fit и режим
|
||||
отображения (`ShadedWireframe`) перед снимком — иначе снимок берётся со случайного текущего ракурса.
|
||||
|
||||
> **Механизм.** `ksDocument3D.RasterFormatParam()` → `IRasterFormatParam` рендерит документ в растр;
|
||||
> свойство **`resultArrayBytes`** возвращает изображение как **массив байт в память** (без временного
|
||||
> файла). Альтернатива — экспортные функции `ksSaveAsToRasterFormat[W]`. Полученные байты сервер
|
||||
> упаковывает в image-контент MCP-ответа (C# SDK `ModelContextProtocol` это поддерживает).
|
||||
> Параметры: формат (PNG/JPEG/BMP/TIFF), разрешение, цвет/`greyScale`.
|
||||
> Снимки делать после значимых операций (не после каждой линии) — каждый кадр расходует
|
||||
> токены изображения в контексте агента. На v24 Home качество/доступность рендера проверить на прототипе.
|
||||
|
||||
**Escape hatch (опционально)**
|
||||
- `run_kompas_command` — `IApplication.ExecuteKompasCommand(commandID, post)` для команд,
|
||||
ещё не обёрнутых в типизированные инструменты. Доступность проверять через
|
||||
`IsKompasCommandEnable`.
|
||||
|
||||
### Замечание об API5 vs API7 для 3D-операций
|
||||
|
||||
API7 создаёт операции через `IPart7` → (QueryInterface) `IModelContainer` → `IExtrusions.Add()`
|
||||
→ `IExtrusion`. Примеры SDK при этом активно используют **API5-путь** (`ksPart.NewEntity(o3d_…)` →
|
||||
`ksBossExtrusionDefinition.SetSideParam/SetSketch` → `Create()`), который хорошо документирован.
|
||||
**Стратегия v1:** предпочитать API7 там, где он покрывает операцию; падать на API5 `ksPart`-путь
|
||||
там, где он проще/надёжнее (мост — `kompas.TransferInterface`). Выбор фиксировать в `Core`.
|
||||
|
||||
---
|
||||
|
||||
## 6. Центральный сценарий: цикл «эскиз → операция → эскиз»
|
||||
|
||||
Основной пользовательский поток v1 — итеративное параметрическое моделирование.
|
||||
|
||||
```
|
||||
document_create(part)
|
||||
│
|
||||
▼
|
||||
sketch_create(plane = XOY) ──► sketch_add_circle(...) ──► sketch_close
|
||||
│
|
||||
▼
|
||||
extrude_boss(sketch, depth=…, dir=dtNormal, end=etBlind) → цилиндр
|
||||
│
|
||||
▼
|
||||
set_view(iso, fit) → model_snapshot 👁 агент СМОТРИТ на результат и решает следующий шаг
|
||||
│
|
||||
▼
|
||||
select_face_by_point(x,y,z) ← выбираем верхнюю грань
|
||||
│
|
||||
▼
|
||||
sketch_create(face = выбранная) ──► sketch_add_circle(...) ──► sketch_close
|
||||
│
|
||||
▼
|
||||
extrude_cut(sketch, depth=…) → отверстие
|
||||
│
|
||||
▼
|
||||
model_snapshot 👁 проверка результата
|
||||
│
|
||||
└──────────► повторять: смотрим → новая грань → новый эскиз → новая операция
|
||||
```
|
||||
|
||||
Соответствие API (на STA-потоке, через `Core`):
|
||||
|
||||
1. `Document3D()` / `IKompasDocument3D` → `IPart7` (вершинная деталь, `pTop_Part`).
|
||||
2. `part.NewEntity(o3d_sketch)` → `GetDefinition()` → `SetPlane(базовая_плоскость | грань)` →
|
||||
`Create()`; `BeginEdit()` → рисование примитивов (`ksLineSeg`, `ksCircle`, `ksArcByPoint`, …) →
|
||||
`EndEdit()`.
|
||||
3. `part.NewEntity(o3d_bossExtrusion)` → `ksBossExtrusionDefinition` →
|
||||
`SetSideParam(direction, ksEndTypeEnum, depth, …)` → `SetSketch(эскиз)` → `Create()`.
|
||||
Для выреза — `o3d_cutExtrusion`; для вращения — `o3d_bossRotated`/`o3d_cutRotated`.
|
||||
4. Выбор грани для следующего эскиза:
|
||||
`part.EntityCollection(o3d_face)` → `SelectByPoint(x, y, z)` → элемент коллекции как плоскость
|
||||
эскиза.
|
||||
5. Снимок результата: `set_view` (ориентация + fit) → `ksDocument3D.RasterFormatParam()` →
|
||||
`IRasterFormatParam.resultArrayBytes` → image-контент MCP. Агент анализирует кадр и выбирает
|
||||
следующий шаг.
|
||||
|
||||
Используемые перечисления: `ksDirectionTypeEnum` (`dtNormal`/`dtReverse`/`dtBoth`/`dtMiddlePlane`),
|
||||
`ksEndTypeEnum` (`etBlind`/`etThroughAll`/`etUpTo…`), `Obj3dType` (`o3d_sketch`, `o3d_bossExtrusion`,
|
||||
`o3d_cutExtrusion`, `o3d_face`, `o3d_planeXOY`, …).
|
||||
|
||||
---
|
||||
|
||||
## 7. Обработка ошибок и безопасность
|
||||
|
||||
- **Трансляция ошибок COM** в структурированные MCP-ошибки: проверять HRESULT каждого вызова и
|
||||
опрашивать `kompas.ksGetLastError()` / `IApplication.KompasError`; возвращать клиенту код + текст.
|
||||
- **Null-чек после каждого приведения** COM-интерфейса (любой каст может вернуть `null`).
|
||||
- **`.Init()` на param-структурах** перед использованием (`GetParamStruct(...)` → `.Init()`).
|
||||
- **Гарантированный `EndEdit`** для эскизов через `try/finally` — незакрытый эскиз ломает документ.
|
||||
- **Подтверждение деструктивных операций**: закрытие без сохранения, перезапись файла, `Quit` —
|
||||
только по явному флагу в аргументах инструмента.
|
||||
- **Модель состояния**: инструменты по умолчанию работают с «активным документом»; опционально —
|
||||
явный хэндл/идентификатор документа.
|
||||
|
||||
---
|
||||
|
||||
## 8. Сборка и запуск
|
||||
|
||||
```powershell
|
||||
dotnet build -c Release -r win-x64 # сборка
|
||||
# → kompas-mcp.exe (self-contained, win-x64)
|
||||
```
|
||||
|
||||
Регистрация stdio-сервера у клиента (пример для конфигурации Claude Desktop):
|
||||
|
||||
```json
|
||||
{
|
||||
"mcpServers": {
|
||||
"kompas3d": { "command": "C:\\path\\to\\kompas-mcp.exe", "args": [] }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Ручная проверка (smoke):** запустить КОМПАС (или дать серверу запустить его) → через инструменты
|
||||
построить простую деталь (выдавить окружность в цилиндр, затем `extrude_cut` — отверстие) →
|
||||
убедиться визуально в окне КОМПАС → сохранить `.m3d`.
|
||||
|
||||
---
|
||||
|
||||
## 9. Стратегия тестирования
|
||||
|
||||
- **Интеграционные тесты** (требуют установленного КОМПАС): xUnit, категория `Integration`,
|
||||
гейтятся (не идут в обычном CI без КОМПАС). Покрывают связку Core↔COM и центральный цикл.
|
||||
- **Unit-тесты** чистой логики **без COM**: маппинг строк↔перечислений, валидация аргументов,
|
||||
форматирование результатов/ошибок.
|
||||
- **Smoke MCP**: проверка протокола через **MCP Inspector** или тестовый клиент (list tools, вызов
|
||||
`kompas_connect`/`document_create`).
|
||||
|
||||
---
|
||||
|
||||
## 10. Дорожная карта
|
||||
|
||||
**Реализовано (v1+v2+STEP/assembly+direct-edit+inspection+package-A+package-B+package-C+package-D start+package-E start+hole+hole_counterbore+hole_countersink+hole_conic+draft+assembly_add_component+assembly_add_mate+drawing_create_standard_views+drawing_fill_title_block+drawing_add_linear_dimension+drawing_add_diametral_dimension+drawing_add_radial_dimension+drawing_add_angular_dimension+drawing_add_rough+drawing_add_text+drawing_set_technical_requirements):** документы, эскизы (полный набор 2D-примитивов: линия, окружность, дуга, дуга по 3 точкам, прямоугольник, эллипс, ломаная, правильный многоугольник, сплайн NURBS, точка), **вспомогательная геометрия (`sketch_create_on_offset_plane`)**, выдавливание/вырез, вращение, скругление/фаска, **оболочка (`shell`)**, **ребро жёсткости (`rib`)**, **кинематическая операция (`sweep`)**, **операция по сечениям (`loft`)**, **линейный/круговой массив и зеркало (`linear_pattern`, `circular_pattern`, `mirror_operation`, `mirror_body`)**, **отверстие (`hole`, API7)**, **цековка (`hole_counterbore`, API7)**, **зенковка (`hole_countersink`, API7)**, **коническое отверстие (`hole_conic`, API7)**, **уклон (`draft`, API5 `ksInclineDefinition`)**, снимок; `get_part_info`, `get_bounding_box`, `list_faces`, `list_edges`; `import_step`, `export_step`, `list_components`; **`move_face`**, **`split_solid_by_plane`**, **`move_body`**, **`boolean_union`** (прямое редактирование и булевы операции); **`describe_model`, `list_features`, `list_bodies`, `list_variables`, `describe_face`, `describe_edge`, `measure`** (структурный осмотр модели); **`create_variable`, `set_variable`, `delete_variable`** (управление переменными, package D start); **`assembly_add_component`** (вставка компонента в сборку, API7, `AssemblyService`); **`assembly_add_mate`** (сопряжения `coincidence`/`distance`, API7, `IMateConstraints3D`); **`drawing_create_standard_views`** (стандартные ассоциативные виды чертежа, API7, `DrawingService`); **`drawing_fill_title_block`** (заполнение основной надписи/штампа: обозначение, наименование, материал; `IStamp.Text[id].Str`, API7, `DrawingService`); **`drawing_add_linear_dimension`** (линейный размер на виде чертежа: `ISymbols2DContainer`/`LineDimensions.Add`/`ILineDimension`, координаты в локальной СК вида, API7, `DrawingService`); **`drawing_add_diametral_dimension`** (диаметральный размер Ø: `ISymbols2DContainer.DiametralDimensions.Add`/`IDiametralDimension`, Xc/Yc/Radius/Angle в радианах, API7, `DrawingService`); **`drawing_add_radial_dimension`** (радиальный размер R: `ISymbols2DContainer.RadialDimensions.Add`/`IRadialDimension`, значение = радиус, API7, `DrawingService`); **`drawing_add_angular_dimension`** (угловой размер: `ISymbols2DContainer.AngleDimensions.Add`/`IAngleDimension`, `angleType`=min/max/more, значение в градусах, API7, `DrawingService`); **`drawing_add_rough`** (знак шероховатости: `ISymbols2DContainer.Roughs.Add`/`IRough`/`IRoughParams`, `signType`=delete/without/none, API7, `DrawingService`); **`drawing_add_text`** (свободная текстовая надпись на виде: `IDrawingContainer.DrawingTexts.Add`/`IDrawingText`/`IText`, API7, `DrawingService`); **`drawing_set_technical_requirements`** (технические требования чертежа: `IDrawingDocument.TechnicalDemand`/`ITechnicalDemand`/`IText`, уровень документа, API7, `DrawingService`). Класс «2D-чертёж» (инкремент 6): стандартные виды, основная надпись, размеры (линейный, диаметральный, радиальный, угловой), текстовые обозначения (шероховатость, свободный текст, технические требования).
|
||||
|
||||
**Следующие приоритеты:**
|
||||
1. Пакет D «параметрика» (продолжение) — связь размеров эскизов с переменными (параметрические эскизы через API2D). ⚠️ **Исследовано**: `ksCDimWithVariable` недоступен из внешней автоматизации — см. `docs/superpowers/specs/2026-05-27-parametric-sketch-findings.md`.
|
||||
2. Пакет E «вспомогательная геометрия» (продолжение) — ось, точка, плоскость по трём точкам / по углу.
|
||||
3. Рассечение/перемещение тела как MCP-инструменты (`SplitSolids`/`BodyRepositions`) — механика есть, продуктизация не закончена.
|
||||
4. Свойства документа: `IPropertyMng` / `IPropertyKeeper`.
|
||||
5. **2D-чертёж (продолжение):** инкремент 6 добавил текстовые обозначения — `drawing_add_rough` (шероховатость), `drawing_add_text` (свободный текст), `drawing_set_technical_requirements` (тех. требования). Нереализовано: ассоциативная привязка размеров и шероховатости к геометрии (`BaseObject`), рамка/формат листа, выноски (`Leaders`), обозначения баз (`Bases`), допуски формы (`Tolerances`).
|
||||
6. Сборки — продолжение: дополнительные типы сопряжений (`parallel`, `perpendicular`, `concentric`, `angle`, `tangency`; `coincidence`/`distance` реализованы); авто-позиционирование компонентов; спецификации (`ISpecification`).
|
||||
7. Транспорт **HTTP/SSE** — как опция для удалённых клиентов.
|
||||
|
||||
---
|
||||
|
||||
## 11. Открытые вопросы
|
||||
|
||||
- **Прямое редактирование B-rep, перемещение грани**: решено — `move_face` (`FaceEditService`) работает через `IPart7.FindObjectsByPoint` + `FaceMover`; проверено на импортированной B-rep. Рассечение/перемещение тела (`SplitSolids`/`BodyRepositions`) — механика есть, инструменты не реализованы (потенциальная следующая опция).
|
||||
- **Дерево операций, тела, переменные, геометрические запросы**: решено — `ModelInspectionService` + `InspectionTools` (7 инструментов); юнит-тестируемый рендер через `InspectionText`.
|
||||
- **Утечки транзитных RCW** в `PartModeler` (унаследованный паттерн): `EntityCollection`, `GetTopPart()` не освобождаются, накапливаются за длинную сессию.
|
||||
- **Насос сообщений / CancellationToken**: `CancellationToken` не прерывает идущий COM-вызов; зависший модальный диалог КОМПАС блокирует всю очередь.
|
||||
- **Embed Interop Types vs вендорские interop-сборки**: выбраны вендорские DLL из SDK `Samples/Common`; менять не планируется.
|
||||
@@ -1,115 +0,0 @@
|
||||
# План реализации MCP-сервера КОМПАС-3D
|
||||
|
||||
> Документ описывает, **как** строить сервер. Что строим и почему — в
|
||||
> [`ARCHITECTURE.md`](ARCHITECTURE.md). Прогресс отражается в
|
||||
> [`presentation.html`](presentation.html) (TODO).
|
||||
|
||||
## Принцип
|
||||
|
||||
**«Ходячий скелет» + спайки на риски.** Сначала сквозной тонкий срез
|
||||
(подключение → снимок), который проходит через все слои и доказывает, что связка
|
||||
COM ↔ STA ↔ MCP работает. Затем наращиваем инструменты, и **каждый шаг построения сразу
|
||||
проверяем визуально** (`model_snapshot`) — это и есть целевой UX «строю под контролем».
|
||||
|
||||
## Окружение (проверено 2026-05-25)
|
||||
|
||||
| | Факт | Следствие для плана |
|
||||
|---|---|---|
|
||||
| .NET SDK | **10.0.108** (отдельного .NET 8 SDK нет; рантайм 8 есть) | таргет **`net8.0-windows`** (LTS), собирается SDK 10 |
|
||||
| ProgID КОМПАС | **`KOMPAS.Application.7`** и **`KOMPAS.Application.5`** зарегистрированы; `KOMPASLT.*` **отсутствует** | подключаться напрямую к API7 через `KOMPAS.Application.7`; LT — только запасной |
|
||||
| Процесс | КОМПАС не запущен | спайк подключения должен уметь **launch**, не только attach |
|
||||
| SDK | `C:\Program Files\ASCON\KOMPAS-3D v24 Home\SDK` (`lib\*.tlb`) | источник interop |
|
||||
|
||||
**Прерэквизит разработчика:** установленный КОМПАС v24 + возможность его запускать.
|
||||
|
||||
---
|
||||
|
||||
## Спайки (делать первыми — снимают главные неизвестные)
|
||||
|
||||
| # | Риск / вопрос | Критерий успеха |
|
||||
|---|---|---|
|
||||
| **S1** | Генерация COM-interop из `.tlb` в SDK-проекте | `net8.0-windows` проект с `<COMReference>` на `kAPI7.tlb`, `kAPI5.tlb`, `ksConstants.tlb`, `ksConstants3D.tlb` собирается; типы `IApplication`, `KompasObject` доступны. Запасной путь — `tlbimp`/ручные interop-сборки |
|
||||
| **S2** | Подключение по ProgID | консольная проба: attach (`Marshal.GetActiveObject`) → при отказе launch (`Activator.CreateInstance(Type.GetTypeFromProgID("KOMPAS.Application.7"))`); получить `IApplication`, `Visible=true`, прочитать версию |
|
||||
| **S3** | STA-поток + насос сообщений + async MCP | выделенный STA-поток выполняет COM-вызовы из пула задач без `RPC_E_WRONGTHREAD`; насос сообщений не вешает процесс |
|
||||
| **S4** | Рендер модели в растр на v24 Home | `ksDocument3D.RasterFormatParam()` → `resultArrayBytes` отдаёт корректные PNG-байты открытого 3D-документа |
|
||||
|
||||
Спайки — выбрасываемый код в `spikes/`; выводы переносятся в `Core`.
|
||||
|
||||
---
|
||||
|
||||
## Фазы
|
||||
|
||||
### Фаза 0 — Каркас репозитория
|
||||
- `git init`, `.gitignore` (.NET + `bin/`, `obj/`; **не** игнорировать `docs/`).
|
||||
- `KompasMcp.sln`; проекты `Kompas.Mcp.Host`, `Kompas.Mcp.Core`, `Kompas.Mcp.Interop`, `Kompas.Mcp.Tools`
|
||||
(в v1 допустимо начать одним проектом, разнося по папкам).
|
||||
- `Directory.Build.props`: `TargetFramework=net8.0-windows`, `Platforms=x64`, `Nullable=enable`, `LangVersion=latest`.
|
||||
- Пакеты: `ModelContextProtocol`, `Microsoft.Extensions.Hosting`.
|
||||
- **Готово:** `dotnet build -c Release` проходит; пустой stdio-хост стартует.
|
||||
|
||||
### Фаза 1 — Interop + маппинг констант
|
||||
- `<COMReference>` на типобиблиотеки (итог S1). Зафиксировать стратегию (embed vs сборки).
|
||||
- `Kompas.Mcp.Interop`: хелперы «строка ↔ enum» — `DocumentTypeEnum` (part=4, assembly=5, drawing=1, fragment=2),
|
||||
`Obj3dType`, `ksEndTypeEnum`, `ksDirectionTypeEnum`, базовые плоскости (`o3d_planeXOY/XOZ/YOZ`).
|
||||
- **Готово:** unit-тесты маппинга (без COM) зелёные.
|
||||
|
||||
### Фаза 2 — STA-диспетчер
|
||||
- `KompasThread`: выделенный STA-поток, очередь задач (`Channel`/`BlockingCollection`),
|
||||
`Task<T> InvokeAsync(Func<T>)`, насос сообщений + периодический `PumpWaitingMessages` (итог S3).
|
||||
- **Готово:** интеграционный тест — параллельные `InvokeAsync` исполняются строго на одном STA-потоке.
|
||||
|
||||
### Фаза 3 — Connection + вертикальный срез (MCP)
|
||||
- `KompasSession`: resolve ProgID (`KOMPAS.Application.7` → `.5`+`ksGetApplication7()` → `KOMPASLT.*`),
|
||||
attach/launch, `Visible`, версия/редакция, освобождение COM, `Quit` только если запускали мы.
|
||||
- Хост: stdio-сервер, **логи в stderr**, регистрация инструментов через DI.
|
||||
- Инструменты `System`: `kompas_connect`, `kompas_status`, `kompas_set_visible`.
|
||||
- **Готово (веха «скелет»):** из MCP Inspector вызвать `kompas_connect` → КОМПАС стартует и виден; `kompas_status` отвечает.
|
||||
|
||||
### Фаза 4 — Documents
|
||||
- `document_create` (part/assembly/drawing/fragment), `document_open`, `document_save`, `document_close`, `document_active`.
|
||||
- **Готово:** создать деталь, сохранить `.m3d`, закрыть, открыть заново.
|
||||
|
||||
### Фаза 5 — Vision (раннее — делает всё дальнейшее проверяемым)
|
||||
- `set_view` (ориентация iso/front/top/right, zoom-to-fit, `ShadedWireframe`), `model_snapshot`
|
||||
(`RasterFormatParam.resultArrayBytes` → image-контент MCP) — итог S4.
|
||||
- **Готово:** `model_snapshot` возвращает PNG открытой детали; агент видит изображение в ответе инструмента.
|
||||
|
||||
### Фаза 6 — Sketch
|
||||
- `sketch_create` (плоскость или грань), `sketch_add_line|circle|arc|rectangle`, `sketch_close`
|
||||
(`NewEntity(o3d_sketch)`→`SetPlane`→`BeginEdit`/примитивы/`EndEdit`, гарантированный `EndEdit` в `finally`).
|
||||
- **Готово:** построить эскиз-окружность на XOY и увидеть его на снимке.
|
||||
|
||||
### Фаза 7 — Features
|
||||
- `extrude_boss`/`extrude_cut` (depth, direction, endType), `revolve_boss`/`revolve_cut`, `rebuild`.
|
||||
- **Готово (целевой демо-сценарий):** окружность → `extrude_boss` (цилиндр) → `model_snapshot` →
|
||||
выбрать грань → эскиз → `extrude_cut` (отверстие) → `model_snapshot`. Полный цикл со зрением.
|
||||
|
||||
### Фаза 8 — Query / Selection
|
||||
- `select_face_by_point`, `list_bodies`, `list_faces_planes`, `get_part_info` (МЦХ/габариты).
|
||||
- **Готово:** агент может выбрать грань для следующего эскиза по координатам.
|
||||
|
||||
### Фаза 9 — Качество и поставка
|
||||
- Unit-тесты (маппинг, валидация, форматирование); интеграционные (`[Trait("Category","Integration")]`, гейтятся).
|
||||
- Трансляция ошибок COM (`ksGetLastError`/`IApplication.KompasError`) в структурированные MCP-ошибки.
|
||||
- Сборка `kompas-mcp.exe` (`dotnet publish -c Release -r win-x64`), регистрация stdio-сервера в конфиге клиента.
|
||||
- Escape-hatch `run_kompas_command` (опц.).
|
||||
|
||||
---
|
||||
|
||||
## Порядок и зависимости
|
||||
|
||||
```
|
||||
S1,S2 ─► Фаза 0 ─► Фаза 1 ─► Фаза 2 ─► Фаза 3 (скелет) ─► Фаза 4 ─► Фаза 5 (зрение)
|
||||
│
|
||||
Фаза 6 ─► Фаза 7 ─► Фаза 8 ─► Фаза 9
|
||||
S3 ─► Фаза 2 S4 ─► Фаза 5
|
||||
```
|
||||
|
||||
Критический риск — **S1/S3** (interop + STA). Если `<COMReference>` не заработает на v24 `.tlb` —
|
||||
переход на сгенерированные `tlbimp` interop-сборки. Все спайки до Фазы 3.
|
||||
|
||||
## Definition of Done для v1
|
||||
|
||||
Агент через MCP: подключается к КОМПАС → создаёт деталь → строит эскиз → выдавливает →
|
||||
делает снимок → видит результат → выбирает грань → повторяет → сохраняет `.m3d`.
|
||||
Сервер собирается в один `.exe` и регистрируется в клиенте по stdio.
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
title: "ksModelsFamilyErrorEnum - Ошибки данных семейства моделей"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, -ksmodelsfamilyerrorenum]
|
||||
sources:
|
||||
- -ksmodelsfamilyerrorenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksModelsFamilyError | -1 | Параметры шаблона семейства моделей не заданы |
|
||||
| --- | --- | --- |
|
||||
| ksModelsFamilyOk | 0 | Проверка прошла успешно |
|
||||
| ksModelsFamilyEmptyFilename | 1 | Не задано имя файла для экземпляра семейства |
|
||||
| ksModelsFamilyNotUniqueFilename | 2 | Имя файла экземпляра семейства не уникально |
|
||||
| ksModelsFamilyToLongFilename | 3 | Слишком длинное имя файла для экземпляра семейства |
|
||||
| ksModelsFamilyBadFilename | 4 | Имя файла экземпляра семейства содержит запрещенные символы |
|
||||
| ksModelsFamilyEmptyColumns | 501 | Не определен один или несколько параметров |
|
||||
| ksModelsFamilyRangeInvalid | 502 | Значение свойства выходит за установленные пределы |
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
title: "Перечисления событий"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, bk1805164]
|
||||
sources:
|
||||
- bk1805164.html
|
||||
---
|
||||
|
||||
*Структуры параметров и константы > Константы *
|
||||
|
||||
ksDocument2DNotifyEnum - События графического документа
|
||||
ksDocument3DNotifyEnum - События документа-модели
|
||||
ksDocumentFileNotifyEnum - События для документов; работа с файлом
|
||||
ksKompasObjectNotifyEnum - События приложения
|
||||
ksLayoutSheetsNotifyEnum - События для листов оформления
|
||||
ksLibraryManagerNotifyEnum - События для менеджера библиотек
|
||||
ksNotifyType - Перечень интерфейсов событий
|
||||
ksObject2DNotifyEnum - События объектов графических документов
|
||||
ksObject3DNotifyEnum - События объектов документа-модели
|
||||
ksProcess2DTypeEnum - Типы процессов 2D
|
||||
ksProcess3DTypeEnum - Типы процессов 3D
|
||||
ksProcess2DNotifyEnum - События процесса 2D
|
||||
ksProcess3DNotifyEnum - События процесса 3D
|
||||
ksTwinSwitcherValueEnum - Значения переключателя
|
||||
ksToleranceArrowType - Тип стрелки ответвления у допуска формы
|
||||
ksEnterButtonIconTypeEnum - Тип иконки для кнопки Cоздать
|
||||
ksShowHideTmpObjTypeEnum - Тип отображения временного объекта в документе
|
||||
ksSelectionMngNotifyEnum - События менеджера выделенных объектов
|
||||
ksStampNotifyEnum - События основной надписи графических документов (штампа)
|
||||
ksSpcDocumentNotifyEnum - События документа-спецификации
|
||||
ksSpcObjectNotifyEnum - События объекта спецификации
|
||||
ksSpecificationNotifyEnum - События для спецификации
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ButtonTypeEnum - Типы кнопок для элемента панели свойств \"Набор кнопок\""
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, buttontypeenum]
|
||||
sources:
|
||||
- buttontypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksPushButton | 0 | Набор обычных нефиксируемых кнопок |
|
||||
| --- | --- | --- |
|
||||
| ksCheckButton | 1 | Набор фиксируемых кнопок |
|
||||
| ksRadioButton | 2 | Набор кнопок с возможностью фиксации только одной кнопки |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "CheckStateEnum - Возможные состояния элемента управления Панели свойств \"Переключатель состояния поля ввода\""
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, checkstateenum]
|
||||
sources:
|
||||
- checkstateenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCheckUndefined | 0 | Значение поля не задано; на переключателе пусто, |
|
||||
| --- | --- | --- |
|
||||
| ksCheckCurrent | 1 | Поле ввода активно; на переключателе значок "галочка", |
|
||||
| ksCheckFixed | 2 | Содержание поля ввода зафиксировано; на переключателе перекрестие. |
|
||||
| ksCheckVariable | 3 | Значение поля ввода задано; на переключателе пусто. |
|
||||
@@ -1,21 +0,0 @@
|
||||
---
|
||||
title: "Перечисления событий"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, cj1798939]
|
||||
sources:
|
||||
- cj1798939.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
ksDocumentFileNotifyEnum
|
||||
ksObject2DNotifyEnum
|
||||
ksKompasObjectNotifyEnum
|
||||
ksNotifyType
|
||||
ksDocumentFrameNotifyEnum - События для окна документа: клавиатура, мышь, события по отрисовке документа
|
||||
ksPropertyManagerNotifyEnum - События Панели свойств или процессных параметров
|
||||
ksPropertyUserControlNotifyEnum - События пользовательского элемента управления
|
||||
ksViewsAndLayersManagerNotifyEnum - События для менеджера видов и слоев
|
||||
ksViewProjectionScheme - Схема ориентаций модели
|
||||
SystemPropertyType - Номера системных свойств
|
||||
@@ -1,63 +0,0 @@
|
||||
---
|
||||
title: "ControlTypeEnum - Типы элементов управления Панели свойств"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, controltypeenum]
|
||||
sources:
|
||||
- controltypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksControlUnknown | 0 | Неизвестный тип | |
|
||||
| --- | --- | --- | --- |
|
||||
| ksControlSeparator | 1 | Разделитель (сепаратор) | IPropertySeparator |
|
||||
| ksControlEditInt | 2 | Редактор целочисленных значений | IPropertyEdit |
|
||||
| ksControlEditReal | 3 | Редактор дробных значений | IPropertyEdit |
|
||||
| ksControlEditStr | 4 | Редактор строковых значений | IPropertyEdit |
|
||||
| ksControlListInt | 5 | Раскрывающийся список целочисленных значений | IPropertyList |
|
||||
| ksControlListReal | 6 | Раскрывающийся список дробных значений | IPropertyList |
|
||||
| ksControlListStr | 7 | Раскрывающийся список строковых значений | IPropertyList |
|
||||
| ksControlCheckBox | 8 | Опция | IPropertyCheckBox |
|
||||
| ksControlMultiButton | 9 | Набор кнопок | IPropertyMultiButton |
|
||||
| ksControlGrid | 10 | Сетка | IPropertyGrid |
|
||||
| ksControlSlideBox | 11 | Окно отображения слайда, растрового изображения, группы или файла документа КОМПАС | IPropertySlideBox |
|
||||
| ksControlUser | 12 | Пользовательский элемент управления | IPropertyUserControl |
|
||||
| ksControlTextButton | 13 | Кнопка с текстом | IPropertyTextButton |
|
||||
| ksControlSpinInt | 14 | Счетчик целочисленных значений с полем ввода | IPropertySpinEdit |
|
||||
| ksControlSpinReal | 15 | Счетчик дробных значений с полем ввода | IPropertySpinEdit |
|
||||
| ksControlFileName | 16 | Выбор файла | IPropertyFileName |
|
||||
| ksControlColor | 17 | Выбор цвета | IPropertyColor |
|
||||
| ksControlEditList | 18 | Список | IPropertyEdit |
|
||||
| ksControlEditLength | 19 | Редактор длины | IPropertyEdit |
|
||||
| ksControlEditAngle | 20 | Редактор угла | IPropertyEdit |
|
||||
| ksControlEditPoint | 21 | Редактор координат | IPropertyEdit |
|
||||
| ksControlListLength | 22 | Комбобокс длин | IPropertyList |
|
||||
| ksControlListAngle | 23 | Комбобокс углов | IPropertyList |
|
||||
| ksControlBmpList | 24 | Комбобокс со строкой и битмапом | IPropertyBmpList |
|
||||
| ksControlLibExplorer | 25 | Отображение библиотеки документов | |
|
||||
| ksControlListScale | 26 | Комбобокс со списком масштабов | IPropertyList |
|
||||
| ksControlLineStyle | 27 | Комбобокс со списком стилей линий | IPropertyStyleList |
|
||||
| ksControlOpticalProps | 28 | Контрол оптических свойств | IPropertyOpticalProps |
|
||||
| ksControlEditCheckBox | 29 | Редактор строковых значений c чекбоксом | IPropertyEdit |
|
||||
| ksControlPointStyle | 30 | Комбобокс со списком стилей точек | IPropertyStyleList |
|
||||
| ksControlPointStyle3D | 31 | Комбобокс со списком стилей точек 3D | IPropertyStyleList |
|
||||
| ksControlLineStyle3D | 32 | Комбобокс со списком стилей линий 3D | IPropertyStyleList |
|
||||
| ksControlHatchStyle | 33 | Комбобокс со списком стилей штриховок | IPropertyStyleList |
|
||||
| ksControlGroupBegin | 34 | Начало группы контролов | |
|
||||
| ksControlGroupEnd | 35 | Конец группы контролов | |
|
||||
| ksControlTwinSwitcher | 36 | Переключатель | |
|
||||
| ksControlPoint3D | 37 | Точка 3D | |
|
||||
| ksControlPreviewText | 38 | Предпросмотр текста | |
|
||||
| ksControlAggregateTriple | 40 | Составной контрол из трех контролов | |
|
||||
| ksControlBasePoint | 41 | Базовая точка | |
|
||||
| ksControlLinkButton | 42 | Набор кнопок в виде ссылок | |
|
||||
| ksControlMarking | 43 | Контрол обозначение | |
|
||||
| ksControlReplaceList | 44 | Список замен текстов | |
|
||||
| ksControlTree | 45 | Дерево | |
|
||||
| ksControlParamGrid | 46 | Сетка c разнотипными ячейками | |
|
||||
| ksControlUserWindow | 47 | Элемент управления - пользовательское окно | |
|
||||
| ksControlUVEdit | 48 | Редактор UV координат | |
|
||||
| ksControlRaPointEdit | 49 | Редактор полярных координат на поверхности | |
|
||||
| ksControlAzPointEdit | 50 | Редактор полярных-цилиндрических координат на поверхности | |
|
||||
| ksControlAbPointEdit | 51 | Редактор полярных-сферических координат на поверхности | |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ConvertCoordTypeEnum - Типы преобразования логических координат в координаты документа"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, convertcoordtypeenum]
|
||||
sources:
|
||||
- convertcoordtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| kcDocument | 1 | В СК документа. |
|
||||
| --- | --- | --- |
|
||||
| kcGeoView | 2 | В геометрическую точку текущего вида. |
|
||||
| kcCurrentPlane | 3 | В СК текущего плоского объекта. |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "DefaultFixTypeEnum - Тип фиксированности для умолчательных элементов управления Панели свойств"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, defaultfixtypeenum]
|
||||
sources:
|
||||
- defaultfixtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksAllFixOff | -1 | Все элементы управления расфиксированы |
|
||||
| --- | --- | --- |
|
||||
| ksAllFix | 0 | Все элементы управления фиксированы |
|
||||
| ksPointFix | 1 | Фиксирована точка |
|
||||
| ksAngleFix | 2 | Фиксирован угол |
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
title: "DocumentTypeEnum - Типы документов КОМПАС"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, documenttypeenum]
|
||||
sources:
|
||||
- documenttypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksDocumentUnknown | 0 | Неизвестный тип |
|
||||
| --- | --- | --- |
|
||||
| ksDocumentDrawing | 1 | Чертеж |
|
||||
| ksDocumentFragment | 2 | Фрагмент |
|
||||
| ksDocumentSpecification | 3 | Спецификация |
|
||||
| ksDocumentPart | 4 | Деталь |
|
||||
| ksDocumentAssembly | 5 | Сборка |
|
||||
| ksDocumentTextual | 6 | Текстовый документ |
|
||||
| ksDocumentTechnologyAssembly | 7 | Технологическая сборка |
|
||||
@@ -1,99 +0,0 @@
|
||||
---
|
||||
title: "DrawingObjectTypeEnum - Типы графических объектов"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [drawing]
|
||||
tags: [enum, api7, drawing, drawingobjecttypeenum]
|
||||
sources:
|
||||
- drawingobjecttypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
В API5 соответствует Типам объектов и интерфейсов....
|
||||
| Идентификатор объекта | | Название объекта | Интерфейс параметров |
|
||||
| --- | --- | --- | --- |
|
||||
| ksUnknown | -1 | Неизвестный объект | |
|
||||
| ksAllObj | 0 | Все объекты | |
|
||||
| ksDrLineSeg | 1 | Отрезок | ILineSegment |
|
||||
| ksDrCircle | 2 | Окружность | ICircle |
|
||||
| ksDrArc | 3 | Дуга | IArc |
|
||||
| ksDrDrawText | 4 | Текст на чертеже | IDrawingText |
|
||||
| ksDrPoint | 5 | Точка | IPoint |
|
||||
| ksDrHatch | 7 | Штриховка | IHatch |
|
||||
| ksDrBezier | 8 | Bezier сплайн | IBezier |
|
||||
| ksDrLDimension | 9 | Линейный размер | ILineDimension |
|
||||
| ksDrADimension | 10 | Угловой размер | IAngleDimension |
|
||||
| ksDrDDimension | 13 | Диаметральный размер | IDiametralDimension |
|
||||
| ksDrRDimension | 14 | Радиальный размер | IRadialDimension |
|
||||
| ksDrRBreakDimension | 15 | Радиальный размер с изломом | IBreakRadialDimension |
|
||||
| ksDrRough | 16 | Шероховатость | IRough |
|
||||
| ksDrBase | 17 | База | IBase |
|
||||
| ksDrWPointer | 18 | Стрелка вида | IViewPointer |
|
||||
| ksDrCut | 19 | Линия разреза | ICutLine |
|
||||
| ksDrLeader | 20 | Простая линия-выноска | IBaseLeader |
|
||||
| ksDrPosLeader | 21 | Линия-выноска для обозначения позиции | IPositionLeader |
|
||||
| ksDrBrandLeader | 22 | Линия-выноска для обозначения клеймения | IBrandLeader |
|
||||
| ksDrMarkerLeader | 23 | Линия-выноска для обозначения маркирования | IMarkLeader |
|
||||
| ksDrTolerance | 24 | Допуск формы | ITolerance |
|
||||
| ksDrTable | 25 | Таблица | ITable |
|
||||
| ksDrContour | 26 | Контур | IContour |
|
||||
| ksDrMacro | 27 | Нетипизированный макроэлемент | IMacroObjec |
|
||||
| ksDrLine | 28 | Линия | ILine |
|
||||
| ksLayer | 29 | Слой | ILayer |
|
||||
| ksDrFragment | 30 | Вставной фрагмент | ksFragment |
|
||||
| ksDrPolyline | 31 | Полилиния | IPolyLine |
|
||||
| ksDrEllipse | 32 | Эллипс | IEllipse |
|
||||
| ksDrNurbs | 33 | NURBS сплайн | INurbs |
|
||||
| ksDrEllipseArc | 34 | Дуга эллипса | IEllipseArc |
|
||||
| ksDrRectangle | 35 | Прямоугольник | IRectangle |
|
||||
| ksDrRegularPolygon | 36 | Многоугольник | IRegularPolygon |
|
||||
| ksDrEquid | 37 | Эквидистанта | IEquidistant |
|
||||
| ksDrLBreakDimension | 38 | Линейный размер с обрывом | IBreakLineDimension |
|
||||
| ksDrABreakDimension | 39 | Угловой размер с обрывом | IBreakAngleDimension |
|
||||
| ksDrOrdinateDimension | 40 | Размер высоты | IHeightDimension |
|
||||
| ksDrColorFill | 41 | Фоновая заливка цветом | IColouring |
|
||||
| ksDrCentreMarker | 42 | Обозначение центра | ICentreMarker |
|
||||
| ksDrArcDimension | 43 | Размер длины дуги | IArcDimension |
|
||||
| ksDrRaster | 45 | Растровый объект | IRaster |
|
||||
| ksDrChangeLeader | 46 | Обозначение изменения | IChangeLeader |
|
||||
| ksDrRemoteElement | 47 | Выносной элемент | IRemoteElement |
|
||||
| ksDrAxisLine | 48 | Осевая линия | IAxisLine |
|
||||
| ksDrOLEObject | 49 | Вставка OLE объекта | IOleDrawingObject |
|
||||
| ksDrUnitNumber | 50 | Номер узла | IUnitNumber |
|
||||
| ksDrBrace | 51 | Фигурная скобка | IBrace |
|
||||
| ksDrMarkOnLeader | 52 | Марка/позиционное обозначение с линией-выноской | IMarkOnLeader |
|
||||
| ksDrMarkOnLine | 53 | Марка/позиционное обозначение на линии | IMarkOnLine |
|
||||
| ksDrMarkInsideForm | 54 | Марка/позиционное обозначение без линии-выноски | IMarkInsideForm |
|
||||
| ksDrWaveLine | 55 | Волнистая линия | IWaveLine |
|
||||
| ksDrStraightAxis | 56 | Прямая ось | IStraightAxis |
|
||||
| ksDrBrokenLine | 57 | Линия обрыва с изломами | IBrokenLine |
|
||||
| ksDrCircleAxis | 58 | Круговая ось | ICircleAxis |
|
||||
| ksDrArcAxis | 59 | Дуговая ось | IArcAxis |
|
||||
| ksDrCutUnitMarking | 60 | Обозначение узла в сечении | ICutUnitMarking |
|
||||
| ksDrUnitMarking | 61 | Обозначение узла | IUnitMarking |
|
||||
| ksDrMultiTextLeader | 62 | Выносная надпись к многослойным конструкциям | IMultiTextLeader |
|
||||
| ksDrExternalView | 63 | Вставка внешнего вида | IInsertionView |
|
||||
| ksDrAnnLineSeg | 64 | Аннотационный отрезок | IAnnotativeObject |
|
||||
| ksDrAnnCircle | 65 | Аннотационная окружность | IAnnotativeObject |
|
||||
| ksDrAnnEllipse | 66 | Аннотационный эллипс | IAnnotativeObject |
|
||||
| ksDrAnnArc | 67 | Аннотационная дуга | IAnnotativeObject |
|
||||
| ksDrAnnEllipseArc | 68 | Аннотационная дуга эллипса | IAnnotativeObject |
|
||||
| ksDrAnnPolyline | 69 | Аннотационная полилиния | IAnnotativeObject |
|
||||
| ksDrAnnPoint | 70 | Аннотационная точка | IAnnotativeObject |
|
||||
| ksDrMultiLine | 72 | Мультилиния | IMultiline |
|
||||
| ksDrBuildingCutLine | 73 | Линия разреза/сечения для СПДС | ICutLine |
|
||||
| ksDrAttachedLeader | 74 | Присоединенная линия выноски (не имеет текстов) | ILeader |
|
||||
| ksDrConditionCrossing | 75 | Условное пересечение | |
|
||||
| ksReportTable | 76 | Ассоциативная таблица отчета | IAssociationTable |
|
||||
| ksEmbodimentsTable | 77 | Таблица иcполнений | IAssociationTable |
|
||||
| ksDrSpecialCurve | 78 | Кривая общего вида | |
|
||||
| ksArrayParamTable | 79 | Таблица параметров массива | IAssociationTable |
|
||||
| ksDrNurbsByPoints | 80 | NURBS-кривая по точкам | |
|
||||
| ksDrConicCurve | 81 | Коническая кривая | |
|
||||
| ksDrConicCurve4Point | 82 | Коническая кривая по 4 точкам и направлению | |
|
||||
| ksDrConicCurve5Point | 83 | Коническая кривая по 5 точкам | |
|
||||
| ksDrStraightSlot | 87 | Паз | |
|
||||
| ksDrArcSlot | 88 | Паз дуговой | |
|
||||
| ksDrCsPoint | 89 | Точка начала СК | |
|
||||
| ksView | 123 | Вид | iView |
|
||||
@@ -1,38 +0,0 @@
|
||||
---
|
||||
title: "События системы; перечисления"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, events]
|
||||
sources:
|
||||
- events_enum_common.html
|
||||
---
|
||||
|
||||
|
||||
## События системы; перечисления
|
||||
|
||||
События приложения...
|
||||
События документа...
|
||||
События документа-модели...События графического документа...События менеджера выделенных объектов...
|
||||
События объектов графического документа...
|
||||
События объектов документа-модели...
|
||||
События основной надписи графического документа...
|
||||
События объекта спецификации...События для спецификации...События документа-спецификации...
|
||||
|
||||
|
||||
## Функции работы с событиями
|
||||
|
||||
Функции данного раздела обеспечивают обработку событий.
|
||||
ksConnectionAdvise - Подписаться на событие
|
||||
ksConnectionUnAdvise - Снять подписку на событие
|
||||
Интерфейсы событий
|
||||
|
||||
|
||||
## Связь объектов системы с интерфейсами событий
|
||||
|
||||
| Объекты системы | Интерфейс событий объекта |
|
||||
| --- | --- |
|
||||
| Объект приложение KompasObject | Интерфейс событий приложения Интерфейс событий документа Интерфейс событий объектов документа-модели Интерфейс событий менеджера выделенных объектов Интерфейс событий основной надписи графического документа Интерфейс событий объектов графического документа Интерфейс событий документа-модели Интерфейс событий графического документа Интерфейс событий объекта спецификации Интерфейс событий спецификации Интерфейс событий документа-спецификации |
|
||||
| Графический документ ksDocument2D | Интерфейс событий документа Интерфейс событий менеджера выделенных объектов Интерфейс событий основной надписи графического документа Интерфейс событий графического документа Интерфейс событий объектов графического документа Интерфейс событий объекта спецификации Интерфейс событий спецификации |
|
||||
| Спецификация ksSpcDocument | Интерфейс событий документа Интерфейс событий основной надписи графического документа Интерфейс событий объекта спецификации Интерфейс событий спецификации Интерфейс событий документа-спецификации |
|
||||
| Текстовый документ ksDocumentTxt | Интерфейс событий документа Интерфейс событий основной надписи графического документа |
|
||||
| Документ-модель ksDocument3D | Интерфейс событий документа Интерфейс событий менеджера выделенных объектов Интерфейс событий объектов документа-модели Интерфейс событий объекта спецификации Интерфейс событий спецификации Интерфейс событий документа-модели |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "FilterConditionStateEnum - Состояние параметрав условии фильтрации слоев"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, filterconditionstateenum]
|
||||
sources:
|
||||
- filterconditionstateenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksStateUndefined | -1 | Состояние не определено |
|
||||
| --- | --- | --- |
|
||||
| ksStateFALSE | 0 | Состояние FALSE |
|
||||
| ksStateTRUE | 1 | Состояние TRUE |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "FrameRegimeEnum - Режим отображения окна"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, frameregimeenum]
|
||||
sources:
|
||||
- frameregimeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksFrameMinimize | 0 | Свернуть окно |
|
||||
| --- | --- | --- |
|
||||
| ksFrameMaximize | 1 | Развернуть окно |
|
||||
| ksFrameRestore | 2 | Восстановить окно |
|
||||
@@ -1,715 +0,0 @@
|
||||
---
|
||||
title: "KompasAPIObjectTypeEnum - Типы объектов КОМПАС API"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kompasapiobjecttypeenum]
|
||||
sources:
|
||||
- kompasapiobjecttypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksObjectUnknown | 0 | Неизвестный тип |
|
||||
| --- | --- | --- |
|
||||
| ksObjectApplication | 10001 | Приложение - основной объект API |
|
||||
| ksObjectDocuments | 10002 | Коллекция документов, открытых в приложении |
|
||||
| ksObjectKompasError | 10003 | Информация о ошибке системы КОМПАС |
|
||||
| ksObjectProcessParam | 10004 | Параметры процесса |
|
||||
| ksObjectPropertyTabs | 10005 | Коллекция закладок панели свойств |
|
||||
| ksObjectPropertyTab | 10006 | Закладка панели свойств |
|
||||
| ksObjectPropertyControls | 10007 | Коллекция элементов управления вкладки Панели свойств |
|
||||
| ksObjectPropertySeparator | 10008 | Разделитель (сепаратор) |
|
||||
| ksObjectPropertyEdit | 10009 | Редактор |
|
||||
| ksObjectPropertyList | 10010 | Раскрывающийся список |
|
||||
| ksObjectPropertyCheckBox | 10011 | Опция |
|
||||
| ksObjectPropertyMultiButton | 10012 | Набор кнопок |
|
||||
| ksObjectPropertyUserControl | 10013 | Пользовательский элемент управления |
|
||||
| ksObjectPropertyBmpList | 10014 | Комбобокс со строкой и битмапом |
|
||||
| ksObjectPropertyUserWindow | 10015 | Элемент управления - пользовательское окно |
|
||||
| ksObjectPropertySlideBox | 10016 | Окно отображения слайда, растрового изображения, файла документа КОМПАС или группы файлов. |
|
||||
| ksObjectPropertyGrid | 10017 | Сетка |
|
||||
| ksObjectDocumentFrame | 10018 | Окно документа |
|
||||
| ksObjectDocumentFrames | 10019 | Коллекция окон документа |
|
||||
| ksObjectPropertyManager | 10020 | Панель свойств |
|
||||
| ksObjectDrawingDocument | 10021 | Документ - Чертеж |
|
||||
| ksObjectFragmentDocument | 10022 | Документ - Фрагмент |
|
||||
| ksObjectSpcDocument | 10023 | Документ - Спецификация |
|
||||
| ksObjectPartDocument | 10024 | Документ - Деталь |
|
||||
| ksObjectAssemblyDocument | 10025 | Документ - Сборка |
|
||||
| ksObjectTextDocument | 10026 | Документ - Текстовый |
|
||||
| ksObjectPropertyTextButton | 10027 | Кнопка с текстом |
|
||||
| ksObjectPropertySpinEdit | 10028 | Поле ввода со счетчиком |
|
||||
| ksObjectViewsAndLayersManager | 10029 | Менеджер слоев и видов графического документа |
|
||||
| ksObjectViews | 10030 | Коллекция видов |
|
||||
| ksObjectView | 10031 | Вид |
|
||||
| ksObjectAssociationView | 10032 | Ассоциативный вид |
|
||||
| ksObjectLayerGroups | 10033 | Коллекция групп слоев |
|
||||
| ksObjectDrawingOblects | 10034 | Коллекция объектов графического документа |
|
||||
| ksObjectLayerGroup | 10035 | Группа слоев |
|
||||
| ksObjectLayers | 10036 | Коллекция слоев |
|
||||
| ksObjectLayer | 10037 | Слой |
|
||||
| ksObjectLayerFilterCondition | 10038 | Условие фильтрации слоев |
|
||||
| ksObjectLayerFilterConditions | 10039 | Коллекция условий фильтрации слоев |
|
||||
| ksObjectDocumentSettings | 10040 | Настройки документа |
|
||||
| ksObjectDocument2DSettings | 10041 | Настройки графического документа |
|
||||
| ksObjectDrawingDocumentSettings | 10042 | Настройки чертежа |
|
||||
| ksObjectFragmentDocumentSettings | 10043 | Настройки фрагмента |
|
||||
| ksObjectDocument3DSettings | 10045 | Настройки 3D документа |
|
||||
| ksObjectFormatLabelRules | 10046 | Правила формирования отображаемых имен объектов в дереве документа |
|
||||
| ksObjectLibraryManager | 10050 | Менеджер библиотек |
|
||||
| ksObjectProcedure | 10051 | Процедура прикладной библиотеки |
|
||||
| ksObjectProceduresLibraries | 10052 | Коллекция прикладных библиотек |
|
||||
| ksObjectProceduresLibrary | 10053 | Прикладная библиотека |
|
||||
| ksObjectProcedures | 10054 | Коллекция процедур прикладной библиотеки |
|
||||
| ksObjectInsertsLibraries | 10055 | Коллекция библиотек элементов (документов) |
|
||||
| ksObjectInsertsLibrary | 10056 | Библиотека элементов (документов) |
|
||||
| ksObjectInserts | 10057 | Коллекция элементов (документов) библиотеки элементов (документов) |
|
||||
| ksObjectInsert | 10058 | Элемент библиотеки элементов (документов) |
|
||||
| ksObjectSpecificationDescriptions | 10059 | Коллекция описаний спецификации |
|
||||
| ksObjectSpecificationDescription | 10060 | Описание спецификации |
|
||||
| ksObjectSpecificationStyle | 10061 | Стиль спецификации |
|
||||
| ksObjectSpecificationColumnStyles | 10062 | Коллекция стилей колонок спецификации |
|
||||
| ksObjectSpecificationColumnStyle | 10063 | Стиль колонки спецификации |
|
||||
| ksObjectSpecificationSectionStyles | 10064 | Коллекция стилей разделов спецификации |
|
||||
| ksObjectSpecificationSectionStyle | 10065 | Стиль раздела спецификации |
|
||||
| ksObjectSpecificationTuning | 10066 | Настройки спецификации |
|
||||
| ksObjectSpecificationTuningSections | 10067 | Коллекция настроек разделов спецификации |
|
||||
| ksObjectSpecificationTuningSection | 10068 | Настройка раздела спецификации |
|
||||
| ksObjectSpecificationSubsections | 10069 | Коллекция подразделов спецификации |
|
||||
| ksObjectSpecificationSubsection | 10070 | Подраздел спецификации |
|
||||
| ksObjectAdditionalBlockStyles | 10071 | Коллекция стилей блоков дополнительных разделов |
|
||||
| ksObjectAdditionalBlockStyle | 10072 | Стиль блока дополнительных разделов |
|
||||
| ksObjectAdditionalBlockTunings | 10073 | Коллекция настроек блоков дополнительных разделов |
|
||||
| ksObjectAdditionalBlockTuning | 10074 | Настройка блока дополнительных разделов |
|
||||
| ksObjectAdditionalBlockSectionTunings | 10075 | Коллекция настроек разделов блока дополнительных разделов |
|
||||
| ksObjectAdditionalBlockSectionTuning | 10076 | Настройка раздела блока дополнительных разделов |
|
||||
| ksObjectSheetFormat | 10077 | Формат листа |
|
||||
| ksObjectTextStyle | 10078 | Параметры стиля текста |
|
||||
| ksObjectFont | 10079 | Параметры шрифта |
|
||||
| ksObjectTabulators | 10080 | Коллекция позиции табуляторов |
|
||||
| ksObjectTabulator | 10081 | Позиция табулятора |
|
||||
| ksObjectSheetSpecification | 10082 | Спецификация или таблица изменений на листе |
|
||||
| ksObjectSpecificationBaseObjects | 10083 | Коллекция базовых объектов спецификации |
|
||||
| ksObjectSpecificationCommentObjects | 10084 | Коллекция вспомогательных объектов спецификации |
|
||||
| ksObjectSpecificationObject | 10085 | Объект спецификации |
|
||||
| ksObjectSpecificationBaseObject | 10086 | Базовый объект спецификации |
|
||||
| ksObjectSpecificationCommentObject | 10087 | Вспомогательный объект спецификации |
|
||||
| ksObjectSpecificationColumns | 10088 | Коллекция колонок объекта спецификации |
|
||||
| ksObjectSpecificationColumn | 10089 | Колонка объекта спецификации |
|
||||
| ksObjectSpecificationColumnItems | 10090 | Коллекция элементов колонки объекта спецификации |
|
||||
| ksObjectSpecificationColumnItem | 10091 | Элемент колонки объекта спецификации |
|
||||
| ksObjectAttachedDocuments | 10092 | Коллекция присоединенных документов к объекту спецификации |
|
||||
| ksObjectAttachedDocument | 10093 | Параметры присоединенного документа к объекту спецификации |
|
||||
| ksObjectPropertyFileName | 10094 | Выбор файла |
|
||||
| ksObjectPropertyEditList | 10095 | Список |
|
||||
| ksObjectLayoutSheets | 10096 | Коллекция листов оформления |
|
||||
| ksObjectLayoutSheet | 10097 | Параметры листа оформления |
|
||||
| ksObjectConverter | 10098 | Конвертер КОМПАС-документов |
|
||||
| ksObjectCheckSum | 10099 | Контрольная сумма |
|
||||
| ksObjectProgressBar | 10100 | Индикатор процесса |
|
||||
| ksObjectPropertyEditList | 10101 | Список |
|
||||
| ksObjectPropertyLibExplorer | 10102 | Отображение библиотеки документов |
|
||||
| ksObjectVariable7 | 10103 | Параметрическая переменная модели |
|
||||
| ksObjectInsertionParameters | 10104 | Параметры вставки фрагмента и растрового объекта в текст |
|
||||
| ksObjectMath2D | 10105 | Математика 2D |
|
||||
| ksObjectSelectionManager | 10106 | Менеджер селектированных объектов |
|
||||
| ksObjectChooseManager | 10107 | Менеджер выбора (подсветки) объектов |
|
||||
| ksObjectStamp | 10108 | Штамп |
|
||||
| ksObjectPropertyStyleList | 10109 | Комбобокс со стилем |
|
||||
| ksObjectPrintJob | 10110 | Задание на печать |
|
||||
| ksObjectPrintJob_Sheet | 10111 | Задание на печать::Интерфейс листа документа |
|
||||
| ksObjectPropertyOpticalProps | 10112 | Контрол оптических свойств |
|
||||
| ksObjectPropertyEditCheckBox | 10113 | Объединенный редактор с чекбоксом |
|
||||
| ksObjectPropertyGroupBegin | 10116 | Начало группы контролов |
|
||||
| ksObjectPropertyGroupEnd | 10117 | Конец группы контролов |
|
||||
| ksObjectThreadPattern | 10118 | Параметры стандарта резьбы |
|
||||
| ksObjectThreadDialogParam | 10119 | Параметры диалога выбора стандарта резьбы |
|
||||
| ksObjectPropertyPreviewText | 10120 | Предпросмотр текста |
|
||||
| ksObjectPropertyAggregateControl | 10121 | Составной контрол |
|
||||
| ksObjectPropertyLinkButton | 10122 | Набор кнопок в виде ссылок |
|
||||
| ksObjectPropertyMarking | 10123 | Контрол обозначение |
|
||||
| ksObjectContentDialogParam | 10124 | Параметры диалога с произвольным наполнением |
|
||||
| ksObjectPropertyBasePoint | 10125 | Базовая точка |
|
||||
| ksObjectTextDocumentSection | 10126 | Раздел текстового документа |
|
||||
| ksIntervalVariable | 10127 | Интервальная переменная |
|
||||
| ksSpecificationObjectCreateParam | 10128 | Расширенные параметры создания объекта спецификации |
|
||||
| ksObjectPropertyReplaceList | 10129 | Элемент панели свойств - Список замен текстов |
|
||||
| ksObjectRasterConvertParameters | 10130 | Параметры для конвертации в растровые форматы |
|
||||
| ksObjectAdditionConvertParameters | 10131 | Параметры для конвертации в дополнительные форматы |
|
||||
| ksObjectCommonNameObject | 10132 | Объект спецификации - Общее наименование |
|
||||
| ksObjectPropertyParamGrid | 10133 | Элемент панели свойств - Сетка с разнотипными ячейками |
|
||||
| ksObjectChoiceModelDialogParam | 10134 | Параметры диалога Выбрать модель из списка открытых |
|
||||
| ksObjectChoiceMaterialDialogParam | 10135 | Параметры диалога выбора материала |
|
||||
| ksObjectPropertyTreeNode | 10136 | Интерфейс модели узла дерева |
|
||||
| ksObjectPropertyTree | 10137 | Элемент панели свойств - Дерево |
|
||||
| ksObjectSymbolOrSpecSignDialogParam | 10138 | Параметры диалога Символы и спецзнаки |
|
||||
| ksObjectParametrizationParam | 10139 | Интерфейс параметров параметризации |
|
||||
| ksObjectInertiaProperties | 10141 | Плоские массо-центровочные характеристики |
|
||||
| ksObjectMassInertiaProperties | 10142 | Объемные массо-центровочные характеристики |
|
||||
| ksObjectInertiaPropertiesCalculateParam | 10143 | Параметры для расчёта плоских массо-центровочных характеристик |
|
||||
| ksObjectMassInertiaPropertiesCalculateParam | 10144 | Параметры для расчёта объёмных массо-центровочных характеристик |
|
||||
| ksObjectUserDataStoragesMng | 10500 | Менеджер пользовательских хранилищ |
|
||||
| ksObjectUserDataStorages | 10501 | Коллекция объектов пользовательского хранилища |
|
||||
| ksObjectUserDataStorage | 10502 | Объект пользовательского хранилища данных |
|
||||
| ksObjectAttribute | 10504 | Атрибут |
|
||||
| ksObjectColumnInfo | 10505 | Параметры столбца табличного атрибута |
|
||||
| ksObjectAttributeType | 10506 | Параметры типа атрибута |
|
||||
| ksObjectAttrTypeMng | 10507 | Менеджер типов атрибутов |
|
||||
| ksObjectProperty | 10508 | Свойство |
|
||||
| ksObjectPropertyMng | 10509 | Менеджер свойств |
|
||||
| ksObjectReportProcess | 10510 | Интерфейс для управления процессом Создать отчет |
|
||||
| ksObjectReport | 10511 | Интерфейс Отчета |
|
||||
| ksObjectReportStyle | 10512 | Интерфейс стиля Отчета |
|
||||
| ksObjectReportStyleColumn | 10513 | Интерфейс колонки стиля Отчета |
|
||||
| ksObjectPropertyKeeper | 10514 | Объект дерева СЧИ |
|
||||
| ksObjectStyles | 10515 | Коллекция стилей |
|
||||
| ksObjectCurvesStyles | 10516 | Коллекция стилей кривых |
|
||||
| ksObjectHatchsStyles | 10517 | Коллекция стилей штриховок |
|
||||
| ksObjectTextsStyles | 10518 | Коллекция стилей текстов |
|
||||
| ksObjectStyle | 10519 | Cтиль |
|
||||
| ksObjectCurveStyle | 10520 | Стиль кривой |
|
||||
| ksObjectHatchStyle | 10521 | Стиль штриховки |
|
||||
| ksObjectSpecificationStyles | 10522 | Коллекция стилей спецификации |
|
||||
| ksObjectText | 10700 | Текст |
|
||||
| ksObjectTextLine | 10701 | Cтрока текста |
|
||||
| ksObjectTextItem | 10702 | Компонент строки текста |
|
||||
| ksObjectTableCell | 10703 | Ячейка таблицы |
|
||||
| ksObjectExternalTessellation | 10704 | Объект с внешней триангуляцией |
|
||||
| ksObjectExternalGDI | 10709 | Внешний GDI-объект |
|
||||
| ksObjectLibArraySettings | 10710 | Интерфейс для выбора состояний библиотек в настройках |
|
||||
| ksObjectTextTable | 10711 | Таблица в тексте текстового документа |
|
||||
| ksObjectPropertyTwinSwitcher | 10713 | Переключатель |
|
||||
| ksObjectPropertyPoint3D | 10714 | Точка 3D |
|
||||
| ksObjectPart7 | 11000 | 3D компонент |
|
||||
| ksObjectModelObject | 11001 | 3D объект |
|
||||
| ks3dMateConstraint | 11002 | 3D сопряжение |
|
||||
| ksObjectParts7 | 11003 | Коллекция 3D компонентов |
|
||||
| ksObjectVariableTable | 11004 | Таблица переменных |
|
||||
| ksObjectProgressBar | 11005 | Индикатор прогресса |
|
||||
| ksObjectLineDimensions3D | 11030 | Коллекция линейных размеров 3D |
|
||||
| ksObjectBaseLineDimension3D | 11031 | Линейный размер 3D (от отрезка до точки) |
|
||||
| ksObjectLineDimension3D | 11032 | Линейный размер 3D (на плоскости) |
|
||||
| ksObjectRadialDimension3D | 11033 | Радиальный размер 3D |
|
||||
| ksObjectDiametralDimension3D | 11034 | Диаметральный размер 3D |
|
||||
| ksObjectRadialDimensions3D | 11035 | Коллекция радиальных размеров 3D |
|
||||
| ksObjectDiametralDimensions3D | 11036 | Коллекция диаметральных размеров 3D |
|
||||
| ksObjectAngleDimension3D | 11037 | Угловой размер 3D |
|
||||
| ksObjectAngleDimensions3D | 11038 | Коллекция угловых размеров 3D |
|
||||
| ksObjectLocalCoordinateSystems | 11039 | Коллекция локальных систем координат |
|
||||
| ksObjectLocalCoordinateSystem | 11040 | Локальная система координат |
|
||||
| ksObjectLocalCSAxesDirectionParam | 11041 | Параметры для типа ориентации ЛСК-направление осей |
|
||||
| ksObjectLocalCSRotateParam | 11042 | Параметры для типа ориентации ЛСК-вращение вокруг осей СК |
|
||||
| ksObjectLocalCSEulerParam | 11043 | Параметры для типа ориентации ЛСК-система углов Эйлера |
|
||||
| ksObjectSpline3D | 11044 | Сплайн |
|
||||
| ksObjectSplines3D | 11045 | Коллекция сплайнов |
|
||||
| ksObjectCurveVertexParam | 11046 | Параметры вершины кривой |
|
||||
| ksObjectPolyLines | 11047 | Коллекция 3D ломаных |
|
||||
| ksObjectPolyLine | 11048 | 3D ломаная |
|
||||
| ksObjectLeaders3D | 11049 | Коллекция линий-выносок 3D |
|
||||
| ksObjectLeader3D | 11050 | Линия-выноска 3D |
|
||||
| ksObjectMarkLeader3D | 11051 | Знак маркировки 3D |
|
||||
| ksObjectRough3D | 11052 | Обозначение 3D шероховатости |
|
||||
| ksObjectRoughs3D | 11053 | Коллекция обозначений 3D шероховатости |
|
||||
| ksObjectPositionLeader3D | 11054 | Линия-выноска для обозначения позиции 3D |
|
||||
| ksObjectBrandLeader3D | 11055 | Знак клеймения 3D |
|
||||
| ksObjectBase3D | 11056 | Обозначение 3D базы |
|
||||
| ksObjectBases3D | 11057 | Коллекция обозначений 3D базы |
|
||||
| ksObjectTolerances3D | 11058 | Коллекция допуска формы 3D |
|
||||
| ksObjectTolerance3D | 11059 | Обозначение допуска формы 3D |
|
||||
| ksObjectControlPoints | 11060 | Коллекция контрольных точек |
|
||||
| ksObjectControlPoint | 11061 | Контрольная точка |
|
||||
| ksObjectConjunctivePoints | 11062 | Коллекция присоединительных точек |
|
||||
| ksObjectConjunctivePoint | 11063 | Присоединительная точка |
|
||||
| ksObjectSplitLines | 11064 | Коллекция линий разъема |
|
||||
| ksObjectSplitLine | 11065 | Линия разъема |
|
||||
| ksObjectSurfacePatches | 11066 | Коллекция заплаток |
|
||||
| ksObjectSurfacePatch | 11067 | Заплатка |
|
||||
| ksObjectFaceRemovers | 11068 | Коллекция операций удаления граней |
|
||||
| ksObjectFaceRemover | 11069 | Операция удаления граней |
|
||||
| ksObjectSurfaceSewers | 11070 | Коллекция операций сшивки поверхностей |
|
||||
| ksObjectSurfaceSewer | 11071 | Операция сшивки поверхностей |
|
||||
| ksObjectNurbsSurfaces | 11072 | Коллекция NURBS-поверхностей |
|
||||
| ksObjectNurbsSurface | 11073 | NURBS-поверхность |
|
||||
| ksObjectSurfacesIntersectionCurves | 11074 | Коллекция кривых пересечений поверхностей |
|
||||
| ksObjectSurfacesIntersectionCurve | 11075 | Кривая пересечения поверхностей |
|
||||
| ksObjectEquidistants3D | 11076 | Коллекция эквидистант 3D |
|
||||
| ksObjectEquidistant3D | 11077 | Эквидистанта 3D |
|
||||
| ksObjectTrimmedCurves | 11078 | Коллекция операций усечения кривой |
|
||||
| ksObjectTrimmedCurve | 11079 | Операция усечения кривой |
|
||||
| ksObjectFeaturePatterns | 11080 | Коллекция операций копирования |
|
||||
| ksObjectLinearPattern | 11081 | Массив операций по сетке |
|
||||
| ksObjectCircularPattern | 11082 | Массив операций по концентрической сетке |
|
||||
| ksObjectPathPattern | 11083 | Массив операций вдоль кривой |
|
||||
| ksObjectPartsLinearPattern | 11084 | Массив компонентов по сетке для сборки |
|
||||
| ksObjectPartsCircularPattern | 11085 | Массив компонентов по концентрической сетке для сборки |
|
||||
| ksObjectPartsPathPattern | 11086 | Массив компонентов вдоль кривой для сборки |
|
||||
| ksObjectAuxLinearPattern | 11087 | Массив вспомогательной геометрии по сетке |
|
||||
| ksObjectAuxCircularPattern | 11088 | Массив вспомогательной геометрии по концентрической сетке |
|
||||
| ksObjectAuxPathPattern | 11089 | Массив вспомогательной геометрии вдоль кривой |
|
||||
| ksObjectPointDrivenPattern | 11090 | Массив операций по точкам |
|
||||
| ksObjectPartsPointDrivenPattern | 11091 | Массив компонентов по точкам |
|
||||
| ksObjectDerivedPattern | 11092 | Массив по образцу |
|
||||
| ksObjectMirrorPattern | 11093 | Зеркальный массив |
|
||||
| ksObjectShellMirrorPattern | 11094 | Зеркально отобразить тело или операцию |
|
||||
| ksObjectAuxMirrorPattern | 11095 | Зеркальный массив вспомогательной геометрии |
|
||||
| ksObjectRuledSurfaces | 11096 | Коллекция операций создания линейчатой поверхности |
|
||||
| ksObjectRuledSurface | 11097 | Линейчатая поверхность |
|
||||
| ksObjectExtensionSurfaces | 11098 | Коллекция операций продления поверхности |
|
||||
| ksObjectExtensionSurface | 11099 | Операция продления поверхности |
|
||||
| ksObjectEquidistantSurfaces | 11100 | Коллекция операций построения эквидистант поверхности |
|
||||
| ksObjectEquidistantSurface | 11101 | Операция построения эквидистанты поверхности |
|
||||
| ksObjectTrimmedSurfaces | 11102 | Коллекция Операций усечения поверхности |
|
||||
| ksObjectTrimmedSurface | 11103 | Операция усечения поверхности |
|
||||
| ksObjectVector3D | 11104 | Вектор 3D |
|
||||
| ksObjectVector3DBy2VertexesParameters | 11105 | Параметры вектора 3D по двум вершинам |
|
||||
| ksObjectVector3DByCoefficientsParameters | 11106 | Параметры вектора 3D по коэффициентам |
|
||||
| ksObjectVector3DBy2AnglesParameters | 11107 | Параметры вектора 3D по двум углам |
|
||||
| ksObjectVector3DByObjectParameters | 11108 | Параметры вектора 3D по ребру или плоскости |
|
||||
| ksObjectVector3DAlongSurfaceNormalParameters | 11109 | Параметры вектора 3D, перпендикулярного грани в указанной точке |
|
||||
| ksObjectVector3DByCurveParameters | 11110 | Параметры вектора 3D по базисному вектору в точке кривой |
|
||||
| ksObjectVector3DByScreenNormalParameters | 11111 | Параметры вектора 3D перпендикулярно плоскости экрана |
|
||||
| ksObjectVector3DByLocalCSParameters | 11112 | Параметры вектора 3D по углу в плоскости СК и по оси СК |
|
||||
| ksObjectConnectCurves | 11113 | Коллекция операций соединения кривых |
|
||||
| ksObjectConnectCurve | 11114 | Операция соединения кривых |
|
||||
| ksObjectFilletCurves | 11115 | Коллекция операций скругления кривых |
|
||||
| ksObjectFilletCurve | 11116 | Операция соединения кривых |
|
||||
| ksObjectSurfaceThickenings | 11117 | Коллекция операций придания толщины поверхности |
|
||||
| ksObjectSurfaceThickening | 11118 | Операция придания толщины поверхности |
|
||||
| ksObjectArcs3D | 11119 | Коллекция дуг 3D |
|
||||
| ksObjectArc3D | 11120 | 3D дуга |
|
||||
| ksObjectAuxPointDrivenPattern | 11121 | Массив вспомогательной геометрии по точкам |
|
||||
| ksObjectBodiesPointDrivenPattern | 11122 | Массив тел по точкам |
|
||||
| ksObjectTablePattern | 11123 | Массив операций по таблице из файла |
|
||||
| ksObjectPartsTablePattern | 11124 | Массив компонентов по таблице из файла |
|
||||
| ksObjectAuxTablePattern | 11125 | Массив компонентов по таблице из файла |
|
||||
| ksObjectBodiesTablePattern | 11126 | Массив вспомогательной геометрии по таблице из файла |
|
||||
| ksObjectRotateds | 11127 | Коллекция операций вращения |
|
||||
| ksObjectRotated | 11128 | Операция вращения |
|
||||
| ksObjectCutRotated | 11129 | Операция 'вырезать вращением' |
|
||||
| ksObjectExtrusionSurfaces | 11130 | Коллекция поверхностей выдавливания |
|
||||
| ksObjectExtrusionSurface | 11131 | Операция поверхность выдавливания |
|
||||
| ksObjectRotatedSurfaces | 11132 | Коллекция поверхностей вращения |
|
||||
| ksObjectRotatedSurface | 11133 | Операция поверхность вращения |
|
||||
| ksObjectPoint3DParamBySphere | 11134 | Точка, заданная сферическими координатами |
|
||||
| ksObjectPoint3DParamByCylinder | 11135 | Точка, заданная цилиндрическими координатами |
|
||||
| ksObjectMeshPointsSurfaces | 11136 | Коллекция поверхностей по сети точек |
|
||||
| ksObjectMeshPointsSurface | 11137 | Поверхность по сети точек |
|
||||
| ksObjectCloudPointsSurfaces | 11138 | Коллекция поверхностей по пласту (облаку) точек |
|
||||
| ksObjectCloudPointsSurface | 11139 | Поверхность по пласту (облаку) точек |
|
||||
| ksObjectImportedSurfaces | 11140 | Коллекция импортированных поверхностей |
|
||||
| ksObjectImportedSurface | 11141 | Импортированная поверхность |
|
||||
| ksObjectBodiesLinearPattern | 11142 | Массив тел по сетке |
|
||||
| ksObjectBodiesCircularPattern | 11143 | Массив тел по концентрической сетке |
|
||||
| ksObjectBodiesPathPattern | 11144 | Массив тел вдоль кривой |
|
||||
| ksObjectScalings3D | 11145 | Коллекция операций масштабирования тел и поверхностей |
|
||||
| ksObjectScaling3D | 11146 | Масштабирование тел и поверхностей |
|
||||
| ksObjectCurveOutLine | 11147 | Линия очерка |
|
||||
| ksObjectCurveOutLines | 11148 | Коллекция линий очерка |
|
||||
| ksObjectCurveByLaw | 11149 | Кривая по закону |
|
||||
| ksObjectCurveByLaws | 11150 | Коллекция кривых по закону |
|
||||
| ksObjectIsoparametricCurve | 11151 | Изопараметрическая кривая |
|
||||
| ksObjectIsoparametricCurves | 11152 | Коллекция изопараметрических кривых |
|
||||
| ksObjectIsoparametricCurvesSet | 11153 | Группа изопараметрических кривых |
|
||||
| ksObjectIsoparametricCurvesSets | 11154 | Коллекция групп изопараметрических кривых |
|
||||
| ksObjectSplineOnSurface | 11155 | Сплайн по поверхности |
|
||||
| ksObjectSplinesOnSurfaces | 11156 | Коллекция сплайнов по поверхностям |
|
||||
| ksObjectProjectionCurve | 11157 | Проекционная кривая |
|
||||
| ksObjectProjectionCurves | 11158 | Коллекция проекционных кривых |
|
||||
| ksObjectCurveBy2Projections | 11159 | Проекционная кривая |
|
||||
| ksObjectCurvesBy2Projectionses | 11160 | Коллекция проекционных кривых |
|
||||
| ksObjectContour3D | 11161 | Контур 3D |
|
||||
| ksObjectContours3D | 11162 | Коллекция контуров 3D |
|
||||
| ksObjectLineSegment3D | 11163 | Отрезок 3D |
|
||||
| ksObjectLineSegments3D | 11164 | Коллекция отрезков 3D |
|
||||
| ksObjectConicSpiral3D | 11179 | Коническая спираль |
|
||||
| ksObjectCylindricSpiral3D | 11180 | Цилиндрическая спираль |
|
||||
| ksObjectSpirals3D | 11181 | Коллекция спиралей |
|
||||
| ksObjectPointsArrOnCurve | 11182 | Группа точек по кривой |
|
||||
| ksObjectPointsArrsOnCurves | 11183 | Коллекция групп точек по кривым |
|
||||
| ksObjectPointsArrOnSurfaces | 11184 | Группа точек по поверхности |
|
||||
| ksObjectPointsArrsOnSurfaces | 11185 | Коллекция групп точек по поверхностям |
|
||||
| ksObjectPointsArrFromFile | 11186 | Группа точек из файла |
|
||||
| ksObjectPointsArrsFromFiles | 11187 | Коллекция групп точек из файлов |
|
||||
| ksObjectAxis3D | 11188 | Вспомогательная ось 3D |
|
||||
| ksObjectAxes3D | 11189 | Коллекция вспомогательных осей 3D |
|
||||
| ksObjectAxis3DBy2Points | 11190 | Ось через две вершины |
|
||||
| ksObjectAxis3DBy2Planes | 11191 | Ось на пересечении плоскостей |
|
||||
| ksObjectAxis3DByConeface | 11192 | Ось конической поверхности |
|
||||
| ksObjectAxis3DByEdge | 11193 | Ось через ребро |
|
||||
| ksObjectAxis3DByPointAndObject | 11194 | Ось через вершину по объекту |
|
||||
| ksObjectAxis3DByOperation | 11195 | Ось операции |
|
||||
| ksObjectPlanes3D | 11196 | Коллекция плоскостей 3D |
|
||||
| ksObjectPlane3D | 11197 | Плоскость 3D |
|
||||
| ksObjectPlane3DByPlaneCurve | 11198 | Плоскость через плоскую кривую |
|
||||
| ksObjectPlane3DTangentToFaceInPoint | 11199 | Плоскость касательная к грани в точке 3D |
|
||||
| ksObjectPlane3DByOffset | 11200 | Смещенная плоскость |
|
||||
| ksObjectPlane3DBy3Points | 11201 | Плоскость, проходящая через три вершины |
|
||||
| ksObjectPlane3DByAngle | 11202 | Плоскость, под углом к другой плоскости |
|
||||
| ksObjectPlane3DByEdgeAndPoint | 11203 | Плоскость через ребро и вершину |
|
||||
| ksObjectPlane3DParallelByPoint | 11204 | Плоскость через вершину параллельно другой плоскости |
|
||||
| ksObjectPlane3DPerpendicularByEdge | 11205 | Плоскость, проходящая через вершину перпендикулярно ребру |
|
||||
| ksObjectPlane3DNormalToSurface | 11206 | Нормальная плоскость |
|
||||
| ksObjectPlane3DMiddle | 11207 | Средняя плоскость 3D |
|
||||
| ksObjectPlane3DByEdgeAndPlane | 11208 | Плоскость через ребро параллельно / перпендикулярно грани 3D |
|
||||
| ksObjectPlane3DBy2Edge | 11209 | Плоскость через ребро параллельно /перпендикулярно другому ребру 3D |
|
||||
| ksObjectPlane3DTangentToFace | 11210 | Плоскость касательная к грани 3D |
|
||||
| ksObjectUserObject3D | 11211 | Пользовательский объект 3D |
|
||||
| ksObjectUserObjects3D | 11212 | Коллекция пользовательских объектов 3D |
|
||||
| ksObjectLinearPatternAnyCopy | 11213 | Копирование произвольных объектов по сетке |
|
||||
| ksObjectCircularPatternAnyCopy | 11214 | Копирование произвольных объектов по окружности |
|
||||
| ksObjectPathPatternAnyCopy | 11215 | Копирование произвольных объектов по кривой |
|
||||
| ksObjectPointDrivenPatternAnyCopy | 11217 | Копирование произвольных объектов по точкам |
|
||||
| ksObjectTablePatternAnyCopy | 11218 | Копирование произвольных объектов по таблице |
|
||||
| ksObjectLinearUnhistoriedDimension | 11219 | Импортированный линейный размер |
|
||||
| ksObjectAngularUnhistoriedDimension | 11220 | Импортированный угловой размер |
|
||||
| ksObjectRadialUnhistoriedDimension | 11221 | Импортированный радиальный размер |
|
||||
| ksObjectDiametralUnhistoriedDimension | 11222 | Импортированный диаметральный размер |
|
||||
| ksObjectPlacement3D | 11223 | Интерфейс локальной системы координат (положение объекта) |
|
||||
| ksObjectLayers3D | 11224 | Коллекция слоев в 3D |
|
||||
| ksObjectLayer3D | 11225 | Слой в 3D |
|
||||
| ksObjectLayerGroups3D | 11226 | Коллекция групп слоев в 3D |
|
||||
| ksObjectLayerGroup3D | 11227 | Группа слоев в 3D |
|
||||
| ksObjectDocument3DManager | 11228 | Менеджер 3D документа |
|
||||
| ksObjectToleranceRecalc | 11229 | Пересчет модели |
|
||||
| ksObjectSpecRough3D | 11230 | Неуказанная шероховатость 3D |
|
||||
| ksObjectSketchBreakLinearDimension | 11231 | Управляющий линейный размер эскиза 3D с обрывом |
|
||||
| ksObjectMathCurve3D | 11232 | Математическая кривая в трехмерном пространстве |
|
||||
| ksObjectMathSurface3D | 11233 | Математическая поверхность в трехмерном пространстве |
|
||||
| ksObjectBilletObsolete | 11234 | Деталь заготовка и Зеркальная деталь |
|
||||
| ksObjectBilletsObsoletes | 11235 | Коллекция деталей заготовок и зеркальных деталей |
|
||||
| ksObjectCopyGeometry | 11236 | Копия геометрии |
|
||||
| ksObjectCopiesGeometry | 11237 | Коллекция копий геометрии |
|
||||
| ksObjectCollectionGeometry | 11238 | Коллекция геометрии |
|
||||
| ksObjectCollectionsGeometry | 11239 | Коллекции геометрии |
|
||||
| ksObjectUserWireFrame3D | 11240 | Пользовательский объект Каркас 3D |
|
||||
| ksObjectThreads | 11241 | Коллекция условных обозначений резьбы |
|
||||
| ksObjectThread | 11242 | Условное обозначение резьбы |
|
||||
| ks3dMateConstraints | 11243 | Коллекция 3D сопряжений |
|
||||
| ksMate3DByAngle | 11244 | Сопряжение под углом |
|
||||
| ksMate3DByTangent | 11245 | Сопряжение по касательной |
|
||||
| ksMate3DSymmetry | 11246 | Сопряжение симметрия |
|
||||
| ksMate3DTransmission | 11247 | Сопряжение механическое перемещение |
|
||||
| ksMate3DCamGear | 11248 | Сопряжение кулачок-толкатель |
|
||||
| ksMate3DDependentPosition | 11249 | Сопряжение зависимое положение |
|
||||
| ksObjectHoles3D | 11250 | Коллекции отверстий 3D |
|
||||
| ksObjectHole3D | 11251 | Отверстие 3D |
|
||||
| ksObjectCountersinkHoleParameters | 11252 | Параметры отверстия с зенковкой |
|
||||
| ksObjectSpotfacingHoleParameters | 11253 | Параметры отверстия с цековкой |
|
||||
| ksObjectCountersinkSpotfacingHoleParameters | 11254 | Параметры отверстия с зенковкой и цековкой |
|
||||
| ksObjectConicHoleParameters | 11255 | Параметры конического отверстия |
|
||||
| ksObjectChamfers | 11256 | Коллекции фасок |
|
||||
| ksObjectChamfer | 11257 | Фаска |
|
||||
| ksObjectFillets | 11258 | Коллекции скруглений |
|
||||
| ksObjectFillet | 11259 | Скругление |
|
||||
| ksObjectInclines | 11260 | Коллекции операций уклон |
|
||||
| ksObjectIncline | 11261 | Операция Уклон |
|
||||
| ksObjectRibs | 11262 | Коллекции операций Ребро жесткости |
|
||||
| ksObjectRib | 11263 | Ребро жесткости |
|
||||
| ksObjectShells | 11264 | Коллекции операций Оболочка |
|
||||
| ksObjectShell | 11265 | Оболочка |
|
||||
| ksObjectBooleans | 11266 | Коллекция булевых операций |
|
||||
| ksObjectBoolean | 11267 | Булева операция |
|
||||
| ksObjectCuts | 11268 | Коллекция операций 'сечение' |
|
||||
| ksObjectCut | 11269 | Операция 'сечение' |
|
||||
| ksObjectLofts | 11270 | Коллекция операций по сечениям |
|
||||
| ksObjectLoft | 11271 | Операция по сечениям |
|
||||
| ksObjectLoftSurfaces | 11272 | Коллекция поверхностей по сечениям |
|
||||
| ksObjectLoftSurface | 11273 | Операция поверхность по сечениям |
|
||||
| ksObjectCoupling | 11274 | Цепочка в операции по сечениям |
|
||||
| ksObjectEvolutions | 11275 | Коллекция кинематических операций |
|
||||
| ksObjectEvolution | 11276 | Кинематическая операция |
|
||||
| ksObjectEvolutionSurfaces | 11277 | Коллекция кинематических поверхностей |
|
||||
| ksObjectEvolutionSurface | 11278 | Кинематическая поверхность |
|
||||
| ksObjectVertex | 11279 | Вершина |
|
||||
| ksObjectEdge | 11280 | Ребро |
|
||||
| ksObjectFace | 11281 | Грань |
|
||||
| ksObjectLoop7 | 11282 | Цикл |
|
||||
| ksObjectOrientedEdge7 | 11283 | Ориентированное ребро |
|
||||
| ksObjectUnionsComponents | 11284 | Коллекция операций объединение компонентов |
|
||||
| ksObjectUnionComponents | 11285 | Операция объединения компонентов |
|
||||
| ksObjectMoldCavities | 11286 | Коллекция операций вычитания компонентов |
|
||||
| ksObjectMoldCavity | 11287 | Операция вычитания компонентов |
|
||||
| ksObjectMacroObjects3D | 11288 | Коллекция макроэлементов 3D |
|
||||
| ksObjectMacroObject3D | 11289 | 3D макроэлемент |
|
||||
| ksObjectNurbsSurfacesByCurvesMeshs | 11290 | Коллекция поверхностей по сети кривых |
|
||||
| ksObjectNurbsSurfaceByCurvesMesh | 11291 | Поверхность по сети кривых |
|
||||
| ksObjectJointSurfaces | 11292 | Коллекция поверхностей соединения |
|
||||
| ksObjectJointSurface | 11293 | Поверхность соединения |
|
||||
| ksObjectBodyRepositions | 11294 | Коллекция операций перепозиционирования тела, поверхности |
|
||||
| ksObjectBodyReposition | 11295 | Перепозиционирование тела, поверхности |
|
||||
| ksObjectDistanceAngleMeasurements3D | 11296 | Коллекция измерений расстояния и угла |
|
||||
| ksObjectDistanceAngleMeasurement3D | 11297 | Измерение расстояния и угла |
|
||||
| ksObjectEdgeLengthMeasurements3D | 11298 | Коллекция измерений длины ребра |
|
||||
| ksObjectEdgeLengthMeasurement3D | 11299 | Измерение длины ребра |
|
||||
| ksObjectAreaMeasurements3D | 11300 | Коллекция измерений площади |
|
||||
| ksObjectAreaMeasurement3D | 11301 | Измерение площади |
|
||||
| ksObjectSheetMetalSketchBends | 11302 | Коллекция операций сгиб по эскизу |
|
||||
| ksObjectSheetMetalSketchBend | 11303 | Сгиб по эскизу |
|
||||
| ksObjectSheetMetalClosedCorners | 11304 | Коллекция операций Замыкание углов |
|
||||
| ksObjectSheetMetalClosedCorner | 11305 | Замыкание углов |
|
||||
| ksObjectSheetMetalPlates | 11306 | Коллекция операций Пластина |
|
||||
| ksObjectSheetMetalPlate | 11307 | Пластина |
|
||||
| ksObjectSheetMetalUndercuts | 11308 | Коллекция операций Подсечка |
|
||||
| ksObjectSheetMetalUndercut | 11309 | Подсечка |
|
||||
| ksObjectSheetMetalBendedStraightens | 11310 | Коллекция операций Согнуть/Разогнуть |
|
||||
| ksObjectSheetMetalBendedStraighten | 11311 | Согнуть/Разогнуть |
|
||||
| ksObjectSheetMetalPressFormings | 11312 | Коллекция операций открытая или закрытая штамповка |
|
||||
| ksObjectSheetMetalPressForming | 11313 | Открытая или закрытая штамповка |
|
||||
| ksObjectSheetMetalShoulders | 11314 | Коллекция операций буртик |
|
||||
| ksObjectSheetMetalShoulder | 11315 | Буртик |
|
||||
| ksObjectSheetMetalJalousies | 11316 | Коллекция операций жалюзи |
|
||||
| ksObjectSheetMetalJalousie | 11317 | Жалюзи |
|
||||
| ksObjectSheetMetalRibs | 11318 | Коллекция операций ребро усиления |
|
||||
| ksObjectSheetMetalRib | 11319 | Ребро усиления |
|
||||
| ksObjectSheetMetalRuledShells | 11320 | Коллекция операций Обечайка |
|
||||
| ksObjectSheetMetalRuledShell | 11321 | Обечайка |
|
||||
| ksObjectSheetMetalLinearRuledShells | 11322 | Коллекция операций Линейчатая обечайка |
|
||||
| ksObjectSheetMetalLinearRuledShell | 11323 | Линейчатая обечайка |
|
||||
| ksObjectLibraryHoleParameters | 11324 | Параметры отверстия из библиотеки |
|
||||
| ksObjectFullFillets | 11325 | Коллекция операций полного скругления |
|
||||
| ksObjectFullFillet | 11326 | Полное скругление |
|
||||
| ksObjectZone | 11327 | Зона |
|
||||
| ksObjectZonesManager | 11328 | Менеджер зон |
|
||||
| ksObjectZoneParametersByObjects | 11329 | Параметры зоны по суммарному габариту объектов |
|
||||
| ksObjectZoneParametersByBorderPoints | 11330 | Параметры зоны, заданной габаритным параллелепипедом |
|
||||
| ksObjectZoneDivision | 11331 | Разбить зону |
|
||||
| ksObjectZoneDivisionParametersByPlanes | 11332 | Параметры разбиения зоны для способа По набору плоскостей |
|
||||
| ksObjectZoneDivisionParametersRegular | 11333 | Параметры разбиения зоны для способа Равномерно по осям |
|
||||
| ksObjectDynamicCrossSection | 11334 | Динамическое сечение |
|
||||
| ksObjectDynamicCrossSectionStep | 11335 | Шаг динамического сечения |
|
||||
| ksObjectDynamicCrossSectionStepParametersByFreePlane | 11336 | Параметры шага динамического сечения по произвольной плоскости |
|
||||
| ksObjectDynamicCrossSectionStepParametersByOffsetPlane | 11337 | Параметры шага динамического сечения по смещенной плоскости |
|
||||
| ksObjectDynamicCrossSectionStepParametersByRotatedPlane | 11338 | Параметры шага динамического сечения по плоскости под углом |
|
||||
| ksObjectDynamicCrossSectionStepParametersByZone | 11339 | Параметры шага динамического сечения по зоне |
|
||||
| ksObjectDynamicCrossSectionStepParametersByBorderPoints | 11340 | Параметры шага динамического сечения по габаритному параллелепипеду заданному точками |
|
||||
| ksObjectAxisLine3D | 11341 | Осевая линия |
|
||||
| ksObjectRestoredSurfaces | 11342 | Коллекция операций восстановленная поверхность |
|
||||
| ksObjectRestoredSurface | 11343 | Восстановленная поверхность |
|
||||
| ksObjectWireFrames3D | 11344 | Коллекция трехмерных каркасов |
|
||||
| ksObjectWireFrame3D | 11345 | Трехмерный каркас |
|
||||
| ksObjectDismantleStep | 11346 | Шаг разнесения сборки |
|
||||
| ksObjectArcDimension3D | 11347 | Размер дуги окружности 3D |
|
||||
| ksObjectArcDimensions3D | 11348 | Коллекция размеров дуги окружностей 3D |
|
||||
| ksObjectSheetMetalPunch | 11349 | Листовой металл, штамповка телом |
|
||||
| ksObjectSheetMetalPunchs | 11350 | Коллекция операций Листовой металл, штамповка телом |
|
||||
| ksObjectSheetMetalFlanging | 11351 | Листовой металл, отбортовка |
|
||||
| ksObjectSheetMetalFlangings | 11352 | Коллекция операций Листовой металл, отбортовка |
|
||||
| ksObjectFaceMovers | 11353 | Коллекция операций перемещения граней |
|
||||
| ksObjectFaceMover | 11354 | Операция перемещения граней |
|
||||
| ksObjectSplitSolid | 11355 | Операция “Разрезать” |
|
||||
| ksObjectSplitSolids | 11356 | Коллекция операций “Разрезать” |
|
||||
| ksObjectModelText | 11357 | Текст в модели |
|
||||
| ksObjectModelTexts | 11358 | Коллекция текстов в модели |
|
||||
| ksObjectModelTable | 11359 | Таблица в модели |
|
||||
| ksObjectModelTables | 11360 | Коллекция таблиц в модели |
|
||||
| ksObjectConicCurve3D | 11361 | Коническая 3D кривая |
|
||||
| ksObjectConicCurves3D | 11362 | Коллекция конических кривых 3D |
|
||||
| ksObjectComponentPositioner | 11363 | Интерфейс управления положением компонентов в сборке |
|
||||
| ksObjectConicSurface | 11364 | Поверхность конического сечения |
|
||||
| ksObjectConicSurfaces | 11365 | Коллекция поверхностей конического сечения |
|
||||
| ksObjectConvertToSheetMetal | 11366 | Операции преобразования в листовое тело |
|
||||
| ksObjectConvertsToSheetMetals | 11367 | Коллекция операций преобразования в листовое тело |
|
||||
| ksObjectExtensionCurves | 11368 | Коллекция продлений кривых |
|
||||
| ksObjectExtensionCurve | 11369 | Продления кривой |
|
||||
| ksObjectRuledSurfaceParametersByFaces | 11370 | Параметры линейчатой поверхности "По двум поверхностям" |
|
||||
| ksObjectRuledSurfaceTangentParametersByCurveAndFace | 11371 | Параметры линейчатой поверхности "По кривой с касанием к поверхности" |
|
||||
| ksObjectRuledSurfaceParametersByCurveAndFace | 11372 | Параметры линейчатой поверхности "'По кривой и поверхности" |
|
||||
| ksObjectRuledSurfaceParametersByCurveAndDir | 11373 | Параметры линейчатой поверхности "По кривой и направлению" |
|
||||
| ksObjectViewProjection | 11374 | Интерфейс проекции отображения модели в окне |
|
||||
| ksObjectViewProjectionManager | 11375 | Менеджер проекций отображения модели в окне |
|
||||
| ksObjectPlane3DUnhistoried | 11376 | Плоскость без истории |
|
||||
| ksObjectDraftFromEdges | 11377 | Уклон от базовой линии |
|
||||
| ksObjectDraftsFromEdges | 11378 | Коллекции операций Уклон от базовой линии |
|
||||
| ksObjectPoint3DParamBetweenPoints | 11379 | Интерфейс параметров пространственной точки между точками |
|
||||
| ksObjectMeasurement3D | 11380 | Измерение расстояния и угла |
|
||||
| ksObjectMultiSpline3D | 11381 | Ассоциативный сплайн по объектам |
|
||||
| ksObjectMultiSplines3D | 11382 | Коллекция ассоциативных сплайнов по объектам |
|
||||
| ksObjectBodySurfaceRemovers | 11383 | Коллекция операций удаления тел и поверхностей |
|
||||
| ksObjectBodySurfaceRemover | 11384 | Удаление тел и поверхностей |
|
||||
| ksObjectDrawingObject | 13000 | Графический объект |
|
||||
| ksObjectDrawingText | 13001 | Текст на чертеже |
|
||||
| ksObjectDrawingTexts | 13002 | Коллекция текстов на чертеже |
|
||||
| ksObjectStraightAxis | 13003 | Прямая ось |
|
||||
| ksObjectCircleAxis | 13004 | Круговая ось |
|
||||
| ksObjectArcAxis | 13005 | Дуговая ось |
|
||||
| ksObjectBuildingAxes | 13006 | Коллекция строительных осей |
|
||||
| ksObjectAxisJut | 13007 | Выступ оси |
|
||||
| ksObjectMarkNodes | 13008 | Kоллекция узлов для вставки марки |
|
||||
| ksObjectMarkNode | 13009 | Узел для вставки дополнительных марок |
|
||||
| ksObjectMarkOnLeader | 13010 | Марка/позиционное обозначение с линией-выноской |
|
||||
| ksObjectMarkOnLine | 13011 | Марка/позиционное обозначение на линии |
|
||||
| ksObjectMarkInsideForm | 13012 | Марка/позиционное обозначение без линии-выноски |
|
||||
| ksObjectMarks | 13013 | Коллекция марок |
|
||||
| ksObjectCutUnitMarking | 13014 | Обозначение узла в сечении |
|
||||
| ksObjectCutUnitMarkings | 13015 | Коллекция обозначений узла в сечении |
|
||||
| ksObjectUnitMarking | 13016 | Обозначение узла |
|
||||
| ksObjectUnitMarkings | 13017 | Коллекция обозначений узлов |
|
||||
| ksObjectUnitNumber | 13018 | Номер узла |
|
||||
| ksObjectUnitNumbers | 13019 | Коллекция номеров узлов |
|
||||
| ksObjectMultiTextLeader | 13020 | Выносная надпись к многослойным конструкциям |
|
||||
| ksObjectMultiTextLeaders | 13021 | Коллекция выносных надписей к многослойным конструкциям |
|
||||
| ksObjectBrace | 13022 | Фигурная скобка |
|
||||
| ksObjectBraces | 13023 | Коллекция фигурных скобок |
|
||||
| ksObjectLineSegments | 13024 | Коллекция отрезков |
|
||||
| ksObjectLineSegment | 13025 | Отрезок |
|
||||
| ksObjectRadialDimension | 13028 | Радиальный размер |
|
||||
| ksObjectDiametralDimension | 13029 | Диаметральный размер |
|
||||
| ksObjectBreakRadialDimension | 13030 | Радиальный размер с изломом |
|
||||
| ksObjectRadialDimensions | 13031 | Коллекция радиальных размеров |
|
||||
| ksObjectBreakRadialDimensions | 13032 | Коллекция радиальных размеров с изломом |
|
||||
| ksObjectDiametralDimensions | 13033 | Коллекция диаметральных размеров |
|
||||
| ksObjectLineDimension | 13041 | Линейный размер |
|
||||
| ksObjectLineDimensions | 13042 | Коллекция линейных размеров |
|
||||
| ksObjectBreakLineDimension | 13043 | Линейный размер с обрывом |
|
||||
| ksObjectBreakLineDimensions | 13044 | Коллекция линейных размеров с обрывом |
|
||||
| ksObjectHeightDimension | 13045 | Размер высоты |
|
||||
| ksObjectHeightDimensions | 13046 | Коллекция размеров высоты |
|
||||
| ksObjectAngleDimension | 13047 | Угловой размер |
|
||||
| ksObjectBreakAngleDimension | 13048 | Угловой размер c обрывом |
|
||||
| ksObjectAngleDimensions | 13049 | Коллекция угловых размеров |
|
||||
| ksObjectArcDimension | 13050 | Размер дуги окружности |
|
||||
| ksObjectArcDimensions | 13051 | Коллекция размеров дуг окружностей |
|
||||
| ksObjectLeader | 13052 | Простая линия выноски |
|
||||
| ksObjectLeaders | 13053 | Коллекция линий выносок |
|
||||
| ksObjectRough | 13054 | Обозначение шероховатости |
|
||||
| ksObjectRoughs | 13055 | Коллекция обозначений шероховатости |
|
||||
| ksObjectMarkLeader | 13056 | Знак маркировки |
|
||||
| ksObjectBrandLeader | 13057 | Знак клеймения |
|
||||
| ksObjectPositionLeader | 13058 | Линия выноски для обозначения позиции |
|
||||
| ksObjectChangeLeader | 13059 | Обозначение изменения |
|
||||
| ksObjectBase | 13060 | Обозначение базы |
|
||||
| ksObjectBases | 13061 | Коллекция обозначений базы |
|
||||
| ksObjectDrawingTable | 13062 | Таблица на чертеже |
|
||||
| ksObjectDrawingTables | 13063 | Коллекция таблиц на чертеже |
|
||||
| ksObjectTolerance | 13064 | Допуск формы |
|
||||
| ksObjectTolerances | 13065 | Коллекция допусков формы |
|
||||
| ksObjectCutLines | 13066 | Коллекция линий разреза/сечения |
|
||||
| ksObjectCutLine | 13067 | Линия разреза/сечения |
|
||||
| ksObjectViewPointer | 13068 | Cтрелка взгляда |
|
||||
| ksObjectViewPointers | 13069 | Коллекция стрелок взгляда |
|
||||
| ksObjectDrawingContour | 13072 | Контур на чертеже |
|
||||
| ksObjectDrawingContours | 13073 | Коллекция контуров на чертеже |
|
||||
| ksObjectCircles | 13074 | Коллекция окружностей |
|
||||
| ksObjectCircle | 13075 | Окружность |
|
||||
| ksObjectPoints | 13076 | Коллекция точек |
|
||||
| ksObjectPoint | 13077 | Точка |
|
||||
| ksObjectBeziers | 13078 | Коллекция Bezier сплайнов |
|
||||
| ksObjectBezier | 13079 | Bezier сплайн |
|
||||
| ksObjectMacroObjects | 13080 | Коллекция макроэлементов |
|
||||
| ksObjectMacroObject | 13081 | Макроэлемент |
|
||||
| ksObjectLines | 13082 | Коллекция линий |
|
||||
| ksObjectLine | 13083 | Линия |
|
||||
| ksObjectPolyLines2D | 13084 | Коллекция полилиний |
|
||||
| ksObjectPolyLine2D | 13085 | Полилиния |
|
||||
| ksObjectNurbses | 13086 | Коллекция Nurbs-сплайнов |
|
||||
| ksObjectNurbs | 13087 | Nurbs-сплайн |
|
||||
| ksObjectRasters | 13088 | Коллекция растровых объектов |
|
||||
| ksObjectRaster | 13089 | Растровый объект |
|
||||
| ksObjectOleDrawingObjects | 13090 | Коллекция OLE-объектов |
|
||||
| ksObjectOleDrawingObject | 13091 | OLE-объект |
|
||||
| ksObjectEllipses | 13092 | Коллекция эллипсов |
|
||||
| ksObjectEllipse | 13093 | Эллипс |
|
||||
| ksObjectEllipseArcs | 13094 | Коллекция дуг эллипсов |
|
||||
| ksObjectEllipseArc | 13095 | Дуга эллипса |
|
||||
| ksObjectRectangles | 13096 | Коллекция прямоугольников |
|
||||
| ksObjectRectangle | 13097 | Прямоугольник |
|
||||
| ksObjectRegularPolygons | 13098 | Коллекция многоугольников |
|
||||
| ksObjectRegularPolygon | 13099 | Многоугольник |
|
||||
| ksObjectEquidistants | 13100 | Коллекция эквидистант |
|
||||
| ksObjectEquidistant | 13101 | Эквидистанта |
|
||||
| ksObjectInsertionFragment | 13102 | Вставка фрагмента |
|
||||
| ksObjectInsertionView | 13103 | Вставка вида из другого чертежа |
|
||||
| ksObjectInsertionObjects | 13104 | Коллекция вставок фрагментов и видов |
|
||||
| ksObjectInsertionDefinition | 13105 | Описание вставки фрагмента и вида |
|
||||
| ksObjectCentreMarkers | 13106 | Коллекция обозначений центров |
|
||||
| ksObjectCentreMarker | 13107 | Обозначение центра |
|
||||
| ksObjectRemoteElements | 13108 | Коллекция выносных элементов |
|
||||
| ksObjectRemoteElement | 13109 | Выносной элемент |
|
||||
| ksObjectAxisLines | 13110 | Коллекция осевых линий |
|
||||
| ksObjectAxisLine | 13111 | Осевая линия |
|
||||
| ksObjectHatchParam | 13112 | Параметры штриховки |
|
||||
| ksObjectDrawingGroup | 13113 | Группа объектов |
|
||||
| ksObjectDrawingGroups | 13114 | Коллекция групп объектов |
|
||||
| ksObjectCurve2D | 13115 | Математическая 2D кривая |
|
||||
| ksObjectHatches | 13116 | Коллекция штриховок |
|
||||
| ksObjectHatch | 13117 | Штриховка |
|
||||
| ksObjectColourings | 13118 | Коллекция заливок |
|
||||
| ksObjectColouring | 13119 | Заливка |
|
||||
| ksObjectSpecRough | 13120 | Неуказанная шероховатость |
|
||||
| ksObjectTechnicalDemand | 13121 | Технические требования |
|
||||
| ksObjectAnnotativeLineSegment | 13122 | Аннотационный отрезок |
|
||||
| ksObjectAnnotativeCircle | 13123 | Аннотационная окружность |
|
||||
| ksObjectAnnotativeEllipse | 13124 | Аннотационный эллипс |
|
||||
| ksObjectAnnotativeArc | 13125 | Аннотационная дуга |
|
||||
| ksObjectAnnotativeEllipseArc | 13126 | Аннотационная дуга эллипса |
|
||||
| ksObjectAnnotativePolyLine | 13127 | Аннотационная полилиния |
|
||||
| ksObjectAnnotativePoint | 13128 | Аннотационная точка |
|
||||
| ksObjectAnnotativeText | 13129 | Т екст с аннотационной точкой привязки |
|
||||
| ksObjectBuildingCutLines | 13131 | Коллекция линий разреза/сечения для СПДС |
|
||||
| ksObjectBuildingCutLine | 13132 | Линия разреза/сечения для СПДС |
|
||||
| ksObjectWaveLines | 13133 | Коллекция волнистых линий |
|
||||
| ksObjectWaveLine | 13134 | Волнистая линия |
|
||||
| ksObjectBrokenLines | 13135 | Коллекция линий обрыва с изломами |
|
||||
| ksObjectBrokenLine | 13136 | Линия обрыва с изломами |
|
||||
| ksObjectCopyObjectParam | 13137 | Параметры копирования объектов |
|
||||
| ksObjectCurveCopyObjectParam | 13138 | Параметры копирования объектов вдоль кривой |
|
||||
| ksObjectCircleCopyObjectParam | 13139 | Параметры копирования объектов по окружности |
|
||||
| ksObjectCircularCopyObjectParam | 13140 | Параметры копирования объектов по концентрической сетке |
|
||||
| ksObjectMeshCopyObjectParam | 13141 | Параметры копирования объектов по сетке |
|
||||
| ksObjectLocalCoordinateSystem2D | 13142 | Локальная система координат |
|
||||
| ksObjectLocalCoordinateSystems2D | 13143 | Коллекция локальных систем координат |
|
||||
| ksObjectAttachedLeader | 13144 | Присоединенная линия выноски (не имеет текстов) |
|
||||
| ksObjectAttachedLeaders | 13145 | Коллекция присоединенных линий выносок |
|
||||
| ksObjectLoadCombinationsParam | 13146 | Параметры типа загрузки документа |
|
||||
| ksObjectOpenDocumentParam | 13147 | Параметры открытия документа |
|
||||
| ksObjectAssociationTables | 13148 | Коллекция ассоциативных таблиц |
|
||||
| ksObjectAssociationTable | 13149 | Ассоциативная таблица |
|
||||
| ksObjectNurbsesByPoints | 13150 | Коллекция NURBS-кривых по точкам |
|
||||
| ksObjectNurbsByPoints | 13151 | NURBS-кривая по точкам |
|
||||
| ksObjectProcess2D | 13152 | Процесс 2D из библиотеки |
|
||||
| ksObjectPhantom2D | 13153 | Параметры фантома 2D |
|
||||
| ksObjectProcess3D | 13154 | Процесс 3D из библиотеки |
|
||||
| ksObjectUserDesignationCompObj | 13155 | Составной пользовательский объект обозначение 3D |
|
||||
| ksObjectUserFolder | 13156 | Пользовательская директория |
|
||||
| ksObjectUserFolders | 13157 | Пользовательские директории |
|
||||
| ksObjectMeshObject3D | 13158 | Пространственный полигональный объект |
|
||||
| ksObjectConicCurves | 13159 | Коллекция конический кривых |
|
||||
| ksObjectConicCurve | 13160 | Коническая кривая |
|
||||
| ksObjectCircularsCentries | 13161 | Коллекция круговых сеток центров |
|
||||
| ksObjectCircularCentres | 13162 | Круговая сетка центров |
|
||||
| ksObjectLinearsCentries | 13163 | Коллекция линейных сеток центров |
|
||||
| ksObjectLinearCentres | 13164 | Линейная сетка центров |
|
||||
| ksObjectFindObjectParameters | 13165 | Параметры поиска объектов |
|
||||
| ksObjectManipulators | 13166 | Коллекция манипуляторов |
|
||||
| ksObjectPlacement3DManipulator | 13167 | Манипулятор системы координат |
|
||||
| ksObjectEditDoubleManipulator | 13168 | Манипулятор в виде редактора числового значения |
|
||||
| ksObjectMouseEnterLeaveParameters | 13169 | Параметры отображения точки, позволяющей определить место применения контрола |
|
||||
| ksObjectConditionIntersect | 13170 | Условное пересечение |
|
||||
| ksObjectConditionIntersects | 13171 | Коллекция условных пересечений |
|
||||
| ksObjectSaveAsDetailParam | 13172 | Параметры преобразования в модель |
|
||||
| ksObjectFindObject3DParameters | 13173 | Параметры поиска объектов 3D |
|
||||
| ksObjectNumericGroup | 13174 | Группа автонумерации. |
|
||||
| ksObjectUserComponentOperation | 13175 | Пользовательская операция над вставками |
|
||||
| ksObjectStraightSlots | 13176 | Коллекция пазов |
|
||||
| ksObjectStraightSlot | 13177 | Паз |
|
||||
| ksObjectArcSlots | 13178 | Коллекция пазов дуговых |
|
||||
| ksObjectArcSlot | 13179 | Паз дуговой |
|
||||
| ksObjectWrappedCurve | 13180 | Свернутая или развернутая кривая |
|
||||
| ksObjectWrappedCurves | 13181 | Коллекция свернутых и развернутых кривых |
|
||||
| ksObjectAuxMeshObject | 13182 | Объект окружения |
|
||||
| ksObjectAuxMeshPrimitive | 13183 | Примитив объекта окружения |
|
||||
| ksObjectElementaryBodies | 13184 | Коллекция элементарных тел |
|
||||
| ksObjectSphere | 13185 | Сфера |
|
||||
| ksObjectCylinder | 13186 | Цилиндр |
|
||||
| ksObjectBlockByPoints | 13187 | Параллелепипед по двум точкам и высоте |
|
||||
| ksObjectBlockBySizes | 13188 | Параллелепипед по точке и трем размерам |
|
||||
| ksObjectConeByAngle | 13189 | Конус по центру основания, диаметрам и углу |
|
||||
| ksObjectConeByHeight | 13190 | Конус по центру основания, диаметрам и высоте |
|
||||
| ksObjectConeByArcs | 13191 | Конус по двум дугам |
|
||||
| ksObjectMiddleSurface | 13192 | Средняя поверхность |
|
||||
| ksObjectMiddleSurfaces | 13193 | Коллекция средних поверхностей |
|
||||
| ksObjectDeleteHistoryParam | 13194 | Параметры удаления истории построения |
|
||||
| ksObjectMenu | 13195 | Меню |
|
||||
| ksObjectInsertPartParameters | 13196 | Параметры добавления вставки модели в сборку |
|
||||
| ksObjectPipeElement | 13197 | Трубчатый элемент |
|
||||
| ksObjectPipeElements | 13198 | Колекция трубчатых элементов |
|
||||
@@ -1,23 +0,0 @@
|
||||
---
|
||||
title: "ksAccuracyEnum - Количество знаков после запятой"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksaccuracyenum]
|
||||
sources:
|
||||
- ksaccuracyenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksAccuracyDefault | -1 | По умолчанию. Использовать настройки |
|
||||
| --- | --- | --- |
|
||||
| ksAccuracy0 | 0 | 0. |
|
||||
| ksAccuracy1 | 1 | 0,1. |
|
||||
| ksAccuracy2 | 2 | 0,12. |
|
||||
| ksAccuracy3 | 3 | 0,123. |
|
||||
| ksAccuracy4 | 4 | 0,1234. |
|
||||
| ksAccuracy5 | 5 | 0,12345. |
|
||||
| ksAccuracy6 | 6 | 0,123456. |
|
||||
| ksAccuracy7 | 7 | 0,1234567. |
|
||||
| ksAccuracy8 | 8 | 0,12345678. |
|
||||
| ksAccuracy9 | 9 | 0,123456789. |
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
title: "ksAlignEnum - Выравнивание"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksalignenum]
|
||||
sources:
|
||||
- ksalignenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksAlignLeft | 0 | Выравнивание слева |
|
||||
| --- | --- | --- |
|
||||
| ksAlignCenter | 1 | Выравнивание по центру |
|
||||
| ksAlignRight | 2 | Выравнивание справа |
|
||||
| ksAlignAllWidth | 3 | Выравнивание на всю ширину |
|
||||
| ksAlignDecimal | 3 | Выравнивание по десятичной точке |
|
||||
| ksAlignDefault | -1 | По умолчанию (из стиля) |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksAlignmentTypeEnum – Тип ориентации объекта"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksalignmenttypeenum]
|
||||
sources:
|
||||
- ksalignmenttypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksATArbitrary | 0 | Произвольная |
|
||||
| --- | --- | --- |
|
||||
| ksATHorizontal | 1 | Горизонтальная |
|
||||
| ksATVertical | 2 | Вертикальная |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksAllocationEnum – Размещение текста относительно точки привязки"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksallocationenum]
|
||||
sources:
|
||||
- ksallocationenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksAlLeft | 0 | Слева |
|
||||
| --- | --- | --- |
|
||||
| ksAlCentre | 1 | По центру |
|
||||
| ksAlRight | 2 | Справа |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksAngleDimTypeEnum - Тип углового размера"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksangledimtypeenum]
|
||||
sources:
|
||||
- ksangledimtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksADMinAngle | 0 | На минимальный (острый) угол |
|
||||
| --- | --- | --- |
|
||||
| ksADMaxAngle | 1 | На максимальный (тупой) угол |
|
||||
| ksADMoreAngle | 2 | На угол более 180 гр |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksAngleEnum - Углы поворота, кратные 90 градусам"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksangleenum]
|
||||
sources:
|
||||
- ksangleenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksAngle0 | 0 | 0 градусов |
|
||||
| --- | --- | --- |
|
||||
| ksAngle90 | 1 | 90 градусов |
|
||||
| ksAngle180 | 2 | 180 градусов |
|
||||
| ksAngle270 | 3 | 270 градусов |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksAngleTypeEnum - Признак типа угла"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksangletypeenum]
|
||||
sources:
|
||||
- ksangletypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksError | -2 | Ошибка |
|
||||
| --- | --- | --- |
|
||||
| ksConcave | -1 | Угол вогнутый |
|
||||
| ksNeutral | 0 | Плоский угол |
|
||||
| ksConvex | 1 | Угол выпуклый |
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
title: "ksAnnotationSymbolEnum - Аннотационные символы"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksannotationsymbolenum]
|
||||
sources:
|
||||
- ksannotationsymbolenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksUnknownSymbol | 0 | Символ не определен |
|
||||
| --- | --- | --- |
|
||||
| ksDotPoint | 1 | Точка |
|
||||
| ksPlusPoint | 2 | Крестик |
|
||||
| ksXPoint | 3 | X-точка |
|
||||
| ksSquarePoint | 4 | Квадрат |
|
||||
| ksTrianglePoint | 5 | Треугольник |
|
||||
| ksCirclePoint | 6 | Окружность |
|
||||
| ksAsteriskPoint | 7 | Звезда |
|
||||
| ksStrikeSquarePoint | 8 | Перечеркнутый квадрат |
|
||||
| ksPlusPointTwo | 9 | Утолщенный плюс |
|
||||
@@ -1,41 +0,0 @@
|
||||
---
|
||||
title: "ksAnnotativeTerminatorSignEnum - Типы специальных символов для аннотационных объектов"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksannotativeterminatorsignenum]
|
||||
sources:
|
||||
- ksannotativeterminatorsignenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksASUnknown | 0 | Не задан |
|
||||
| --- | --- | --- |
|
||||
| ksASArrowInside | 101 | Стрелка (ласточкин хвост) изнутри |
|
||||
| ksASArrowOutside | 102 | Стрелка (ласточкин хвост) снаружи |
|
||||
| ksASNotchTail | 103 | Засечка с продолжением кривой (с хвостиком) |
|
||||
| ksASUpHalfArrow | 104 | Верхняя половина стрелки изнутри |
|
||||
| ksASDownHalfArrow | 105 | Нижняя половина стрелки изнутри |
|
||||
| ksASBigArrowInside | 106 | Большая стрелка изнутри (7мм) |
|
||||
| ksASArrowOrdinate | 107 | Стрелка для размера высоты (штрихи длиной 4мм под углом 45гр) |
|
||||
| ksASTriangle | 108 | Треугольник по направлению кривой |
|
||||
| ksAScircleRad2 | 109 | Окружность радиусом 2мм тонкой линией - для шероховатости и линии-выноски |
|
||||
| ksASCentreMarker | 110 | Обозначение фиктивного центра в виде большого креста |
|
||||
| ksASGlueSign | 111 | Знак склеивания |
|
||||
| ksASSolderingSign | 112 | Знак пайки |
|
||||
| ksASSewingSign | 113 | Знак сшивания |
|
||||
| ksASCrampSign | 114 | Знак соединения внахлестку металлическими скобами |
|
||||
| ksASCornerCrampSign | 115 | Знак углового соединения металлическими скобами |
|
||||
| ksASMontageJointSign | 116 | Знак монтажного шва |
|
||||
| ksASNotch | 117 | Засечка без продолжения кривой (без хвостика) |
|
||||
| ksASBaseTriangle | 118 | Треугольник по текущей СК - для базы |
|
||||
| ksASClosedArrowInside | 119 | Закрытая стрелка изнутри |
|
||||
| ksASClosedArrowOutside | 120 | Закрытая стрелка снаружи |
|
||||
| ksASOpenArrowInside | 121 | Открытая стрелка изнутри |
|
||||
| ksASOpenArrowOutside | 122 | Открытая стрелка снаружи |
|
||||
| ksASRightAngleInside | 123 | Стрелка 90гр изнутри |
|
||||
| ksASRightAngleOutside | 124 | Стрелка 90гр снаружи |
|
||||
| ksASDot | 125 | Точка (диаметр равен длине стрелки размера) |
|
||||
| ksASSmallDot | 126 | Точка маленькая (диаметр равен 0,6 длины стрелки размера) |
|
||||
| ksASPoint | 127 | Вспомогательная точка |
|
||||
| ksASLeftNotch | 128 | Засечка с наклоном влево |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksAPITypeEnum - Тип API"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksapitypeenum]
|
||||
sources:
|
||||
- ksapitypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksAPIUndef | 0 | Интерфейс неопределённого типа |
|
||||
| --- | --- | --- |
|
||||
| ksAPI5Auto | 1 | API5 - интерфейсы автоматизации |
|
||||
| ksAPI7Dual | 2 | API7 - дуальные интерфейсы |
|
||||
| ksAPI3DCom | 3 | API 3D COM - интерфейсы |
|
||||
| ksAPI | 4 | API - интерфейсы |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksArc3DBuildingTypeEnum - Способ создания 3D дуги"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [3d]
|
||||
tags: [enum, api7, 3d, ksarc3dbuildingtypeenum]
|
||||
sources:
|
||||
- ksarc3dbuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksArc3DByPoints | 0 | По трем точкам |
|
||||
| --- | --- | --- |
|
||||
| ksArc3DByCentre | 1 | По центру, углам и плоскости |
|
||||
| ksArc3DByDirrection | 2 | По двум точкам и направлению |
|
||||
| ksArc3DByTanCurve | 3 | Касательно к кривой |
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
title: "ksArc3DParameterEnum - Индекс параметра 3D дуги"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [3d]
|
||||
tags: [enum, api7, 3d, ksarc3dparameterenum]
|
||||
sources:
|
||||
- ksarc3dparameterenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksArc3DCenter | 0 | Точка центра |
|
||||
| --- | --- | --- |
|
||||
| ksArc3DPoint1 | 1 | Точка 1 |
|
||||
| ksArc3DPoint2 | 2 | Точка 2 |
|
||||
| ksArc3DPoint3 | 3 | Точка 3 |
|
||||
| ksArc3DAngle1 | 1 | Угол 1 |
|
||||
| ksArc3DAngle2 | 2 | Угол 2 |
|
||||
| ksArc3DRadius | 3 | Радиус |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksArchMeasureEnum - Способ задания глубины прогиба"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksarchmeasureenum]
|
||||
sources:
|
||||
- ksarchmeasureenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksArchMeasureByCoefficient | 0 | Глубина прогиба задана коэффициентом прогиба, в % |
|
||||
| --- | --- | --- |
|
||||
| ksArchMeasureByLength | 1 | Глубина прогиба задана расстоянием |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksArcSlotPointEnum - Индекс точки паза дугового"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksarcslotpointenum]
|
||||
sources:
|
||||
- ksarcslotpointenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksArcSlotArcCentre1 | 1 | Первый центр |
|
||||
| --- | --- | --- |
|
||||
| ksArcSlotMiddle | 2 | Точка на оси паза |
|
||||
| ksArcSlotArcCentre2 | 3 | Второй центр |
|
||||
| ksArcSlotCentre | 4 | Центр паза |
|
||||
@@ -1,31 +0,0 @@
|
||||
---
|
||||
title: "ksArrowEnum – Тип стрелки линии-выноски"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksarrowenum]
|
||||
sources:
|
||||
- ksarrowenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| Тип стрелки | Константа | | Объекты со стрелками | | | | | |
|
||||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||||
| | | | Размеры | Линии-выноски | Обозначения позиций | Многослойные линии-выноски | Марки и позиционные обозначения | Обозначения шероховатости |
|
||||
| | ksLeaderWithoutArrow | 0 | + | + | + | + | + | |
|
||||
| Вспомогательная точка | ksLeaderPoint | 1 | + | + | + | + | + | + |
|
||||
| Стрелка | ksLeaderArrow | 2 | + | + | + | + | + | |
|
||||
| Без стрелки | ksWithoutArrow | 0 | + | + | + | + | + | + |
|
||||
| Вспомогательная точка | ksPoint | 1 | + | + | + | + | + | |
|
||||
| Стрелка | ksArrow | 2 | + | + | + | + | + | |
|
||||
| Верхняя половина стрелки изнутри | ksUpHalfArrow | 3 | + | + | - | + | + | |
|
||||
| Нижняя половина стрелки изнутри | ksDownHalfArrow | 4 | + | + | - | + | + | |
|
||||
| Засечка | ksNotch | 5 | + | + | - | + | + | + |
|
||||
| Засечка с наклоном влево | ksLeftNotch | 6 | + | + | - | + | + | + |
|
||||
| Угол 90 град | ksRightAngle | 7 | + | + | + | + | + | |
|
||||
| Стрелка закрытая | ksClosedArrow | 8 | + | + | + | + | + | + |
|
||||
| Стрелка открытая | ksOpenArrow | 9 | + | + | + | + | + | + |
|
||||
| Точка | ksDot | 10 | + | + | + | + | + | |
|
||||
| Точка маленькая | ksSmallDot | 11 | + | + | + | + | + | |
|
||||
| Треугольник 60 град | ksTriangle60 | 12 | - | + | - | + | + | |
|
||||
| Треугольник 90 град | ksTriangle90 | 13 | - | + | - | + | + | |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksAttributeTypeEnum - Тип данных для типа атрибута"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksattributetypeenum]
|
||||
sources:
|
||||
- ksattributetypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksATUnknown | -1 | Неизвестный |
|
||||
| --- | --- | --- |
|
||||
| ksATString | 0 | Строка |
|
||||
| ksATDouble | 1 | Число |
|
||||
| ksATFixedTable | 2 | Таблица с фиксированным числом строк |
|
||||
| ksATVariableTable | 3 | Таблица с переменным числом строк |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksBasisVectorTypeEnum - Типы базисного вектора"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksbasisvectortypeenum]
|
||||
sources:
|
||||
- ksbasisvectortypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksTangentVector | 0 | Касательный вектор |
|
||||
| --- | --- | --- |
|
||||
| ksNormalVector | 1 | Вектор главной нормали |
|
||||
| ksBinormalVector | 2 | Вектор бинормали |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksBendAngleReleaseTypeEnum - Способ освобождения угла сгиба"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [sheetmetal]
|
||||
tags: [enum, api7, sheetmetal, ksbendanglereleasetypeenum]
|
||||
sources:
|
||||
- ksbendanglereleasetypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBendAngleBendOnly | 0 | Только сгиб |
|
||||
| --- | --- | --- |
|
||||
| ksBendAngleIn | 1 | Сгиб и продолжение |
|
||||
| ksBendAngleAllBends | 2 | Все сгибы |
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
title: "ksBendDisposalEnum - Тип размещения сгиба на ребре"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [sheetmetal]
|
||||
tags: [enum, api7, sheetmetal, ksbenddisposalenum]
|
||||
sources:
|
||||
- ksbenddisposalenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBendDisposalAllLength | 0 | По всей длине |
|
||||
| --- | --- | --- |
|
||||
| ksBendDisposalCentre | 1 | По центру |
|
||||
| ksBendDisposalLeft | 2 | Отступ слева |
|
||||
| ksBendDisposalRight | 3 | Отступ справа |
|
||||
| ksBendDisposalTwo | 4 | Два отступа |
|
||||
| ksBendDisposalLeftAndWidth | 5 | Отступ слева и по ширине |
|
||||
| ksBendDisposalRightAndWidth | 6 | Отступ справа и по ширине |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksBendLengthTypeEnum - Тип определения длины"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksbendlengthtypeenum]
|
||||
sources:
|
||||
- ksbendlengthtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBendLengthByContinue | 0 | По продолжению |
|
||||
| --- | --- | --- |
|
||||
| ksBendLengthByContour | 1 | По контуру |
|
||||
| ksBendLengthByTouch | 2 | По касанию |
|
||||
| ksBendLengthByContourInternal | 3 | По контуру внутри |
|
||||
| ksBendLengthByTangentInternal | 4 | По касанию внутри |
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
title: "ksBendOffsetTypeEnum - Тип смещения"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksbendoffsettypeenum]
|
||||
sources:
|
||||
- ksbendoffsettypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBendOffsetIn | 0 | Смещение внутрь |
|
||||
| --- | --- | --- |
|
||||
| ksBendOffsetOut | 1 | Смещение наружу |
|
||||
| ksBendOffsetLineOutside | 2 | По внешней линии контура |
|
||||
| ksBendOffsetLineInside | 3 | По внутренней линии контура |
|
||||
| ksBendOffsetByTouch | 4 | По касанию к сгибу |
|
||||
| ksBendByCentre | 5 | По центру |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksBendReleaseTypeEnum - Тип освобождения cгиба"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksbendreleasetypeenum]
|
||||
sources:
|
||||
- ksbendreleasetypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBendReleaseByRect | 0 | Прямоугольное |
|
||||
| --- | --- | --- |
|
||||
| ksBendReleaseByCircle | 1 | Скругленное |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksBendSideTypeEnum - Тип построения боковой стороны сгиба"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [sheetmetal]
|
||||
tags: [enum, api7, sheetmetal, ksbendsidetypeenum]
|
||||
sources:
|
||||
- ksbendsidetypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBendSideByAngle | 0 | По уклону и углу |
|
||||
| --- | --- | --- |
|
||||
| ksBendSideByWidening | 1 | По расширению |
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
title: "ksBendTypeEnum - Способ сгиба"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [sheetmetal]
|
||||
tags: [enum, api7, sheetmetal, ksbendtypeenum]
|
||||
sources:
|
||||
- ksbendtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksLineBend | 0 | По линии сгиба |
|
||||
| --- | --- | --- |
|
||||
| ksBendLineOutside | 1 | Линия сгиба снаружи |
|
||||
| ksBendLineInside | 2 | Линия сгиба внутри |
|
||||
| ksBendByTouch | 3 | По касанию |
|
||||
| ksBendByCentre | 4 | По центру |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksBlockPositionTypeEnum - Тип привязки тела"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksblockpositiontypeenum]
|
||||
sources:
|
||||
- ksblockpositiontypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksVertex | 0 | Вершина |
|
||||
| --- | --- | --- |
|
||||
| ksEdgeCenter | 1 | Центр ребра параллельного оси X |
|
||||
| ksFaceCenter | 2 | Центр грани |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksBmpSizeEnum - Размеры иконок"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksbmpsizeenum]
|
||||
sources:
|
||||
- ksbmpsizeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBmp1616 | 0 | 16*16 |
|
||||
| --- | --- | --- |
|
||||
| ksBmp2424 | 1 | 24*24 |
|
||||
| ksBmp3232 | 2 | 32*32 |
|
||||
| ksBmp4848 | 3 | 48*48 |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksBreakLineTypeEnum - Тип линии разрыва"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksbreaklinetypeenum]
|
||||
sources:
|
||||
- ksbreaklinetypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksBLNotImage | 0 | Не отображается |
|
||||
| --- | --- | --- |
|
||||
| ksBLStraight | 1 | Прямая |
|
||||
| ksBLBreak | 2 | С изломом |
|
||||
| ksBLVawe | 3 | Волнистая |
|
||||
@@ -1,23 +0,0 @@
|
||||
---
|
||||
title: "ksCellBoundariesEnum - Типы границ таблицы"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscellboundariesenum]
|
||||
sources:
|
||||
- kscellboundariesenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCBLeftBorder | | Левая граница |
|
||||
| --- | --- | --- |
|
||||
| ksCBRightBorder | | Правая граница |
|
||||
| ksCBTopBorder | | Верхняя граница |
|
||||
| ksCBBottomBorder | | Нижняя граница |
|
||||
| Групповые границы | | |
|
||||
| ksCBHorisontMidleBorder | | Внутренняя горизонтальная граница |
|
||||
| ksCBVerticalMidleBorder | | Внутренняя вертикальная граница |
|
||||
| ksCBExternalBorders | | Внешние границы |
|
||||
| ksCBAllBorders | | Все границы |
|
||||
| ksCBExternalBorders | | Внутренние границы |
|
||||
| ksCBInternalBorders | | Нет границ |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksCentreMarkerEnum - Тип обозначения центра"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscentremarkerenum]
|
||||
sources:
|
||||
- kscentremarkerenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCMUnknown | -1 | Неизвестный |
|
||||
| --- | --- | --- |
|
||||
| ksCMPlusPoint | 0 | Маленький крестик |
|
||||
| ksCMOneAxis | 1 | Одна ось |
|
||||
| ksCMTwoAxis | 2 | Две оси |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksChamferBuildingTypeEnum - Типы построения фаски"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [feature]
|
||||
tags: [enum, api7, feature, kschamferbuildingtypeenum]
|
||||
sources:
|
||||
- kschamferbuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksChamferSideAngle | 0 | По стороне и углу |
|
||||
| --- | --- | --- |
|
||||
| ksChamferTwoSides | 1 | По двум сторонам |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksChangeLeaderSignEnum - Тип значка для обозначения изменения"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kschangeleadersignenum]
|
||||
sources:
|
||||
- kschangeleadersignenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCLSSquare | 0 | Квадрат |
|
||||
| --- | --- | --- |
|
||||
| ksCLSCircle | 1 | Окружность |
|
||||
| ksCLSBracketSquare | 2 | Квадратные скобки |
|
||||
| ksCLSBracketCircle | 3 | Круглые скобки |
|
||||
| ksCLSBracketCorner | 4 | Угловые скобки |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksCheckAssociationResultEnum - Результат проверки ассоциативности объектов"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscheckassociationresultenum]
|
||||
sources:
|
||||
- kscheckassociationresultenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCheckAssociationOk | 0 | Успешно. |
|
||||
| --- | --- | --- |
|
||||
| ksCheckAssociationNoDimensions | 1 | Невозможно создание ассоциативных связей. Нет размеров. |
|
||||
| ksCheckAssociationNoGeomObjects | 2 | Невозможно создание ассоциативных связей. Нет геометрических объектов. |
|
||||
| ksCheckAssociationNoObjects | 3 | Невозможно создание ассоциативных связей. Нет объектов. |
|
||||
| ksCheckAssociationComplete | 4 | Все размеры ассоциативны. Создание ассоциативных связей не требуется. |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCheckBoxVisualStyleEnum - Визуальный стиль чекбокса"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscheckboxvisualstyleenum]
|
||||
sources:
|
||||
- kscheckboxvisualstyleenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCheckBoxDefault | 0 | Обычный |
|
||||
| --- | --- | --- |
|
||||
| ksCheckBoxSwitcher | 1 | Переключатель |
|
||||
| ksCheckBoxOptional | 2 | С неопределенным состоянием |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCheckObjectsTypeEnum - Тип проверяемых объектов"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscheckobjectstypeenum]
|
||||
sources:
|
||||
- kscheckobjectstypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCheckCurrentView | 0 | Текущий вид. |
|
||||
| --- | --- | --- |
|
||||
| ksCheckAllViews | 1 | Все виды. |
|
||||
| ksCheckSelectedObjects | 2 | Выделенные объекты. |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksCheckStyleEnum - Стиль проверяемых объектов"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscheckstyleenum]
|
||||
sources:
|
||||
- kscheckstyleenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCheckAllStyles | 1 | Все стили. |
|
||||
| --- | --- | --- |
|
||||
| ksCheckNormal | 2 | Основная. |
|
||||
| ksCheckAxial | 4 | Осевая. |
|
||||
| ksCheckThin | 8 | Тонкая. |
|
||||
| ksCheckOther | 16 | Другие. |
|
||||
@@ -1,32 +0,0 @@
|
||||
---
|
||||
title: "ksCheckSumVersionEnum - Версии контрольных сумм"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kschecksumversionenum]
|
||||
sources:
|
||||
- kschecksumversionenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| KsCsrCurrent | 0 | Версия текущей задачи КОМПАС |
|
||||
| --- | --- | --- |
|
||||
| ksCsrKompas10SP2 | -1 | Версия KOMPAS 10 SP2 |
|
||||
| ksCsrKompas11 | -5 | Версия KOMPAS 11 |
|
||||
| ksCsrKompas11SP1 | -6 | Версия KOMPAS 11 SP1 |
|
||||
| ksCsrKompas12 | -10 | Версия KOMPAS 12 |
|
||||
| ksCsrKompas12SP1 | -11 | Версия KOMPAS 12 SP1 |
|
||||
| ksCsrKompas13 | -15 | Версия KOMPAS 13 |
|
||||
| ksCsrKompas13SP1 | -16 | Версия KOMPAS 13 SP1 |
|
||||
| ksCsrKompas14SP1 | -21 | Версия KOMPAS 14 SP1 |
|
||||
| ksCsrKompas14SP2 | -22 | Версия KOMPAS 14 SP2 |
|
||||
| ksCsrKompas15 | -25 | Версия KOMPAS 15 |
|
||||
| ksCsrKompas15Sp2 | -27 | Версия KOMPAS 15 SP2 |
|
||||
| ksCsrKompas16 | -30 | Версия KOMPAS 16 |
|
||||
| ksCsrKompas16Sp1 | -31 | Версия KOMPAS 16 SP1 |
|
||||
| ksCsrKompas17 | -35 | Версия KOMPAS 17 |
|
||||
| ksCsrKompas17Sp1 | -36 | Версия KOMPAS 17 SP1 |
|
||||
| ksCsrKompas18 | -37 | Версия KOMPAS 18 |
|
||||
Примечание:
|
||||
ksCsrKompas10SP2 = 0x0A001023
|
||||
ksCsrKompas13SP1 - До выхода КОМПАС 13 SP1 равен версии текущей задачи.
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksChoiceFromLibraryResultEnum - Типы пути в библиотеке моделей"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kschoicefromlibraryresultenum]
|
||||
sources:
|
||||
- kschoicefromlibraryresultenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksChoiceFromLibraryCancel | 0 | Отказ от выбора пути |
|
||||
| --- | --- | --- |
|
||||
| ksChoiceFromLibraryRoot | 1 | Выбрана корневая директория |
|
||||
| ksChoiceFromLibraryFolder | 2 | Выбрана подпапка |
|
||||
| ksChoiceFromLibraryDocument | 3 | Выбран документ |
|
||||
@@ -1,30 +0,0 @@
|
||||
---
|
||||
title: "ksChooseManagerTypeEnum - Тип менеджера выбора объектов"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kschoosemanagertypeenum]
|
||||
sources:
|
||||
- kschoosemanagertypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksChMUnknown | -2 | Неизвестный |
|
||||
| --- | --- | --- |
|
||||
| ksChMAllColors | -1 | Любой менеджер |
|
||||
| ksChMLevel1ColorBase | 0 | Основная группа выбора. Цвет - Указание 1 |
|
||||
| ksChMLevel1Color1 | 1 | Дополнительная группа выбора. Цвет - Указание 2 |
|
||||
| ksChMLevel1Color2 | 2 | Дополнительная группа выбора. Цвет - Указание 3 |
|
||||
| ksChMLevel2ColorBase | 100 | Основная группа выбора. Уровень 2. Цвет - Указание 1 |
|
||||
| ksChMLevel2Color1 | 101 | Дополнительная группа выбора. Уровень 2. Цвет - Указание 2 |
|
||||
| ksChMLevel2Color2 | 102 | Дополнительная группа выбора. Уровень 2. Цвет - Указание 3 |
|
||||
| ksChMUser1 | 201 | Пользовательская группа выбора 1 |
|
||||
| ksChMUser2 | 202 | Пользовательская группа выбора 2 |
|
||||
| ksChMUser3 | 203 | Пользовательская группа выбора 3 |
|
||||
| ksChMUser4 | 204 | Пользовательская группа выбора 4 |
|
||||
| ksChMUser5 | 205 | Пользовательская группа выбора 5 |
|
||||
| ksChMUser6 | 206 | Пользовательская группа выбора 6 |
|
||||
| ksChMUser7 | 207 | Пользовательская группа выбора 7 |
|
||||
| ksChMUser8 | 208 | Пользовательская группа выбора 8 |
|
||||
| ksChMUser9 | 209 | Пользовательская группа выбора 9 |
|
||||
| ksChMUser10 | 210 | Пользовательская группа выбора 10 |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCircularPatternBuildingTypeEnum - Способ построения массива по концентрической сетке"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscircularpatternbuildingtypeenum]
|
||||
sources:
|
||||
- kscircularpatternbuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCPSaveAll | 0 | Стандартная схема |
|
||||
| --- | --- | --- |
|
||||
| ksCPChessOrderByAxis1 | 1 | Шахматный порядок - сдвиг вдоль первой оси (концентрическое направление |
|
||||
| ksCPChessOrderByAxis2 | 2 | Шахматный порядок - сдвиг вдоль второй оси (радиальное направление) |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksClosingClosedTypeEnum - Способ замыкания углов листового тела"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksclosingclosedtypeenum]
|
||||
sources:
|
||||
- ksclosingclosedtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksClosingCJoint | 0 | Замыкание встык |
|
||||
| --- | --- | --- |
|
||||
| ksClosingCOver | 1 | Замыкание с перекрытием |
|
||||
| ksClosingCTightClosure | 2 | Плотное замыкание |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksClosingCorneringEnum - Обработка угла при замыкании"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksclosingcorneringenum]
|
||||
sources:
|
||||
- ksclosingcorneringenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCorneringNone | 0 | Без обработки |
|
||||
| --- | --- | --- |
|
||||
| ksCorneringJointOnBorder | 1 | Стык по кромке |
|
||||
| ksCorneringJointOnChord | 2 | Стык по хорде |
|
||||
| ksCorneringCircled | 3 | Круговая |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksClosingHolePlacementEnum - Размещение отверстия при круговой обработке угла"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksclosingholeplacementenum]
|
||||
sources:
|
||||
- ksclosingholeplacementenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCorneringHPBend | 0 | На пересечении сгибов |
|
||||
| --- | --- | --- |
|
||||
| ksCorneringHPAngle | 1 | В точке угла |
|
||||
| ksCorneringHPPoint | 2 | Через точку угла |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksClosingTypeEnum - Тип замыкания операции сгиб по эскизу листового тела"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [sketch, sheetmetal, feature]
|
||||
tags: [enum, api7, sketch, sheetmetal, feature, ksclosingtypeenum]
|
||||
sources:
|
||||
- ksclosingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksClosingAngles | 0 | Замыкание смежных углов |
|
||||
| --- | --- | --- |
|
||||
| ksClosingBegin | 1 | Замыкание в начале |
|
||||
| ksClosingEnd | 2 | Замыкание в конце |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCloudPointsSurfaceBuildingTypeEnum - Тип поверхности по пласту (облаку) точек"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscloudpointssurfacebuildingtypeenum]
|
||||
sources:
|
||||
- kscloudpointssurfacebuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCLByPoints | 0 | Сплайновая поверхность по точкам |
|
||||
| --- | --- | --- |
|
||||
| ksCLByPole | 1 | Сплайновая поверхность по полюсам |
|
||||
| ksCLPolyhedral | 2 | Многогранная поверхность |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCloudTypeEnum - Способ распознавания сети точек"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscloudtypeenum]
|
||||
sources:
|
||||
- kscloudtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCLAuto | 0 | Автоматически |
|
||||
| --- | --- | --- |
|
||||
| ksCLLocalCS | 1 | В плоскости CK |
|
||||
| ksCLScreen | 2 | В плоскости экрана |
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
title: "ksColorBPPEnum - Цвет"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscolorbppenum]
|
||||
sources:
|
||||
- kscolorbppenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksColorBPP_O1 | 1 | Черный |
|
||||
| --- | --- | --- |
|
||||
| ksColorBPP_O2 | 2 | 4 цвета |
|
||||
| ksColorBPP_O4 | 4 | 16 цветов |
|
||||
| ksColorBPP_O8 | 8 | 256 цветов |
|
||||
| ksColorBPP_16 | 16 | 16 разрядов |
|
||||
| ksColorBPP_24 | 24 | 24 разряда |
|
||||
| ksColorBPP_32 | 32 | 32 разряда |
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
title: "ksColouringTypeEnum - Тип заливки"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscolouringtypeenum]
|
||||
sources:
|
||||
- kscolouringtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksColouringSolid | 0 | Одноцветная |
|
||||
| --- | --- | --- |
|
||||
| ksColouringLinear | 1 | Линейная |
|
||||
| ksColouringAngle | 2 | Угловая |
|
||||
| ksColouringCone | 3 | Коническая |
|
||||
| ksColouringCircle | 4 | Радиальная |
|
||||
| ksColouringSquare | 5 | Квадратная |
|
||||
| ksColouringCylinder | 6 | Цилиндрическая |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksConicCurve3DBuildingTypeEnum - Способ построения конической 3D кривой"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [3d]
|
||||
tags: [enum, api7, 3d, ksconiccurve3dbuildingtypeenum]
|
||||
sources:
|
||||
- ksconiccurve3dbuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksConicCurve3DVertexAndHeight | 0 | Коническая кривая по вершине и дискриминанту |
|
||||
| --- | --- | --- |
|
||||
| ksConicCurve3DVertexAndPointOnCurve | 1 | Коническая кривая по вершине и точке на кривой |
|
||||
| ksConicCurve3DTangentsAndHeight | 2 | Коническая кривая по касательным и дискриминанту |
|
||||
| ksConicCurve3DTangentsAndPointOnCurve | 3 | Коническая кривая по касательным и точке на кривой |
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
title: "ksConicCurve3DParameterEnum - Индекс параметра конической 3D кривой"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [3d]
|
||||
tags: [enum, api7, 3d, ksconiccurve3dparameterenum]
|
||||
sources:
|
||||
- ksconiccurve3dparameterenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksConicCurve3DBeginPoint | 0 | Начальная точка |
|
||||
| --- | --- | --- |
|
||||
| ksConicCurve3DEndPoint | 1 | Конечная точка |
|
||||
| ksConicCurve3DVertex | 2 | Вершина |
|
||||
| ksConicCurve3DOnCurve | 3 | Точка на кривой |
|
||||
| ksConicCurve3DCount | 4 | Количество опорных точек |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksConicCurvePontIndexEnum - Индекс точки конической кривой"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconiccurvepontindexenum]
|
||||
sources:
|
||||
- ksconiccurvepontindexenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCCBeginPoint | 0 | Начальная точка |
|
||||
| --- | --- | --- |
|
||||
| ksCCEndPoint | 1 | Конечная точка |
|
||||
| ksCCIntersectPoint | 2 | Точка пересечения |
|
||||
| ksCCPointOnCurve | 3 | Точка на кривой |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksConicSectionTrianglePointEnum - Движение сечения"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconicsectiontrianglepointenum]
|
||||
sources:
|
||||
- ksconicsectiontrianglepointenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksConicSectionTrianglePointLeft | 0 | Левая точка |
|
||||
| --- | --- | --- |
|
||||
| ksConicSectionTrianglePointRight | 1 | Правая точка |
|
||||
| ksConicSectionTrianglePointTop | 2 | Верхняя точка |
|
||||
| ksConicSectionTrianglePointMedian | 3 | Медиана из верхней точки |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksConicSurfaceBuildingTypeEnum - Способ построения треугольника"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconicsurfacebuildingtypeenum]
|
||||
sources:
|
||||
- ksconicsurfacebuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksConicSurfaceBuildBySides | 0 | Через задание углов двух сторон |
|
||||
| --- | --- | --- |
|
||||
| ksConicSurfaceBuildByCurve | 1 | По вершинной кривой |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksConicSurfaceMovementTypeEnum - Движение сечения"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconicsurfacemovementtypeenum]
|
||||
sources:
|
||||
- ksconicsurfacemovementtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksConicSectionSelfParallel | 0 | Параллельно самому себе |
|
||||
| --- | --- | --- |
|
||||
| ksConicSectionAllongAxis | 1 | По осевой линии |
|
||||
| ksConicSectionByRadial | 2 | По осевой линии |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksConicSurfaceSectionCurveFormEnum - Способ задания формы кривой конического сечения"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconicsurfacesectioncurveformenum]
|
||||
sources:
|
||||
- ksconicsurfacesectioncurveformenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksSectionCurveByCoefficient | 0 | По коэффициенту |
|
||||
| --- | --- | --- |
|
||||
| ksSectionCurveByCurveOnSurface | 1 | По кривой на поверхности |
|
||||
| ksSectionCurveByTangentSurface | 2 | По касательной поверхности |
|
||||
| ksSectionCurveByLeastTension | 3 | Минимальное напряжение |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksConicSurfaceSideAngleBuildingTypeEnum - Условие построения угла треугольника конической поверхности при построении по грани"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconicsurfacesideanglebuildingtypeenum]
|
||||
sources:
|
||||
- ksconicsurfacesideanglebuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksConicSectionSurfaceSideAngleTangent | 0 | По касательной. Результирующий угол - угол между касательной к грани и основанием треугольника |
|
||||
| --- | --- | --- |
|
||||
| ksConicSectionSurfaceSideAngleNormal | 1 | Перпендикулярно. Результирующий угол - угол между перпендикуляром к грани и основанием треугольника |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksConicSurfaceSideBuildingTypeEnum - Способ построения стороны в треугольнике"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconicsurfacesidebuildingtype]
|
||||
sources:
|
||||
- ksconicsurfacesidebuildingtype.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksConicSectionSurfaceSideByAngle | 0 | От хорды. По функции угла |
|
||||
| --- | --- | --- |
|
||||
| ksConicSectionSurfaceSideByFace | 1 | От объекта. По направляющей грани |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksConicTypeEnum - Способ определения параметров конического отверстия"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconictypeenum]
|
||||
sources:
|
||||
- ksconictypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCNDiameter | 0 | По диаметру верхнего основания конуса |
|
||||
| --- | --- | --- |
|
||||
| ksCNAngle | 1 | По углу конуса |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksConjunctivePointTypeEnum - Способ построение присоединительной точки"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconjunctivepointtypeenum]
|
||||
sources:
|
||||
- ksconjunctivepointtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCPByObject | 0 | По объекту |
|
||||
| --- | --- | --- |
|
||||
| ksCPManualDirection | 1 | Ручное задание направление осей |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksConnectTypeEnum - Тип соединения кривых"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconnecttypeenum]
|
||||
sources:
|
||||
- ksconnecttypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCTUnknown | -1 | Неизвестный |
|
||||
| --- | --- | --- |
|
||||
| ksCTPosition | 0 | Соединение по позиции |
|
||||
| ksCTTangent | 1 | Соединение по касательной |
|
||||
| ksCTNormal | 2 | Соединение перпендикулярно |
|
||||
| ksCTSmooth | 3 | Гладкое соединение |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksConstraintsStateEnum - Параметрическое состояние системы"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconstraintsstateenum]
|
||||
sources:
|
||||
- ksconstraintsstateenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksStateUnknown | 0 | Состояние не известно |
|
||||
| --- | --- | --- |
|
||||
| ksStateWellConstrained | 1 | Полностью определенная система - все степени свободы нулевые |
|
||||
| ksStateUnderConstrained | 2 | Недоопределенная система - имеются ненулевые степени свободы |
|
||||
| ksStateUnresolvedRedundancy | 3 | Имеются не удовлетворенные избыточные ограничения |
|
||||
@@ -1,37 +0,0 @@
|
||||
---
|
||||
title: "ksConstraintTypeEnum – Типы параметрических ограничений"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, ksconstrainttypeenum]
|
||||
sources:
|
||||
- ksconstrainttypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| кsCUnknown | 0 | Неизвестный тип |
|
||||
| --- | --- | --- |
|
||||
| ksCFixedPoint | 1 | Фиксировать точку |
|
||||
| ksCPointOnCurve | 2 | Точка на кривой |
|
||||
| ksCHorizontal | 3 | Горизонталь |
|
||||
| ksCVertical | 4 | Вертикаль |
|
||||
| ksCParallel | 5 | Параллельность двух прямых или отрезков |
|
||||
| ksCPerpendicular | 6 | Перпендикулярность двух прямых или отрезков |
|
||||
| ksCEqualLength | 7 | Равенство длин двух отрезков |
|
||||
| ksCEqualRadius | 8 | Равенство радиусов двух дуг/окружностей. |
|
||||
| ksCHAlignPoints | 9 | Выравнивать две точки по горизонтали |
|
||||
| ksCVAlignPoints | 10 | Выравнивать две точки по вертикали |
|
||||
| ksCMergePoints | 11 | Совпадение двух точек |
|
||||
| ksCAssociation | 12 | Ассоциативная связь |
|
||||
| ksCDimWithVariable | 13 | Размер с переменной |
|
||||
| ksCFixedDim | 14 | Фиксированный размер |
|
||||
| ksCTangentTwoCurves | 15 | Касание двух кривых |
|
||||
| ksCSymmetryTwoPoints | 16 | Симметрия двух точек относительно отрезка |
|
||||
| ksCCollinear | 17 | Коллинеарность двух отрезков |
|
||||
| ksCFixedAngle | 18 | Фиксированный угол |
|
||||
| ksCFixedLenght | 19 | Фиксированная длина |
|
||||
| ksCPointOnCurveMiddle | 20 | Точка на середине кривой |
|
||||
| ksCBisector | 21 | Биссектриса |
|
||||
| ksCConcentricity | 22 | Cовпадение центров окружностей, дуг, эллипсов и точек |
|
||||
Примечание.
|
||||
При использовании API 5 частичным аналогом данного перечисления является набор типов параметрических ограничений.
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksContentDialogNotifyEnum - События диалога с произвольным наполнением"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscontentdialognotifyenum]
|
||||
sources:
|
||||
- kscontentdialognotifyenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCDCreateContentCallback | 1 | Создание контента |
|
||||
| --- | --- | --- |
|
||||
| ksCDDestroyContent | 2 | Удаление контента |
|
||||
| ksCDExecuteCommand | 3 | Выполнить команду |
|
||||
| ksCDButtonUpdate | 4 | Установка состояния кнопки панели |
|
||||
@@ -1,16 +0,0 @@
|
||||
---
|
||||
title: "ksContour3DBuildingTypeTypeEnum - Способ построения Контура 3D"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [3d]
|
||||
tags: [enum, api7, 3d, kscontour3dbuildingtypetypeenum]
|
||||
sources:
|
||||
- kscontour3dbuildingtypetypeenum.html
|
||||
---
|
||||
|
||||
*Структуры параметров и константы > Константы > Прочие > 3D *
|
||||
|
||||
| ksCBTUnknown | 0 | Не определен |
|
||||
| --- | --- | --- |
|
||||
| ksCBTEdges | 1 | Ребрами |
|
||||
| ksCBTEquidistant | 2 | Эквидистанта |
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
title: "ksContour3DTypeEnum - Тип контура"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [3d]
|
||||
tags: [enum, api7, 3d, kscontour3dtypeenum]
|
||||
sources:
|
||||
- kscontour3dtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCTAuto | 0 | Автоопределение типа |
|
||||
| --- | --- | --- |
|
||||
| ksCTSpace | 1 | Произвольный контур |
|
||||
| ksCTSurface | 2 | Контур на грани |
|
||||
| ksCTSketch | 3 | Контур эскиза |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksContourFormEnum – форма контура обозначения узла"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscontourformenum]
|
||||
sources:
|
||||
- kscontourformenum.html
|
||||
---
|
||||
|
||||
*Структуры параметров и константы > Константы > Константы графических объектов *
|
||||
|
||||
| ksUFormCircle | 0 | Окружность |
|
||||
| --- | --- | --- |
|
||||
| ksUFormRectangle | 1 | Прямоугольник |
|
||||
| ksUFormCRectangle | 2 | Прямоугольник со скругленными вершинами |
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
title: "ksContourSegmentEnum - Типы сегментов контура"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscontoursegmentenum]
|
||||
sources:
|
||||
- kscontoursegmentenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCSUnknown | -1 | Неизвестный объект |
|
||||
| --- | --- | --- |
|
||||
| ksCSLineSeg | 1 | Отрезок |
|
||||
| ksCSCircle | 2, | Окружность |
|
||||
| ksCSArc | 3 | Дуга |
|
||||
| ksCSBezier | 8 | Bezier сплайн |
|
||||
| ksCSEllipse | 32 | Эллипс |
|
||||
| ksCSNurbs | 33 | Nurbs сплайн |
|
||||
| ksCSEllipseArc | 34 | Дуга эллипса |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCoordLawEnum - Порядок законов"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscoordlawenum]
|
||||
sources:
|
||||
- kscoordlawenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCLawX | 0 | Закон X |
|
||||
| --- | --- | --- |
|
||||
| ksCLawY | 1 | Закон Y |
|
||||
| ksCLawZ | 2 | Закон Z |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCopyGeometryBuildingTypeEnum - Способ построения операции копия геометрии"
|
||||
type: enum
|
||||
api: [api7]
|
||||
domain: [feature]
|
||||
tags: [enum, api7, feature, kscopygeometrybuildingtypeenum]
|
||||
sources:
|
||||
- kscopygeometrybuildingtypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCGBTWithoutGrouping | 0 | Без группировки. |
|
||||
| --- | --- | --- |
|
||||
| ksCGBTBodyFaceGrouping | 1 | Собрать грани по исходным элементам. C группировкой граней одного тела |
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
title: "ksCornerFormEnum - Способы обработки углов стыковки"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscornerformenum]
|
||||
sources:
|
||||
- kscornerformenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCornerFormUnknown | 0 | Не срезать углы |
|
||||
| --- | --- | --- |
|
||||
| ksCornerFormUniform | 2 | Срезать углы |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCornerTypeEnum - Тип угла объекта для прямоугольника и многоугольника"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscornertypeenum]
|
||||
sources:
|
||||
- kscornertypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCTNoProcess | 0 | Без обработки |
|
||||
| --- | --- | --- |
|
||||
| ksCTChamfer | 1 | Фаска |
|
||||
| ksCTFillet | 2 | Скругление |
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "ksCountersinkTypeEnum - Способ определения параметров зенковки"
|
||||
type: enum
|
||||
api: [api7]
|
||||
tags: [enum, api7, kscountersinktypeenum]
|
||||
sources:
|
||||
- kscountersinktypeenum.html
|
||||
---
|
||||
|
||||
*API интерфейсов. Версия 7 > Константы API версии 7 *
|
||||
|
||||
| ksCTDiameterAngle | 0 | По диаметру и углу |
|
||||
| --- | --- | --- |
|
||||
| ksCTDepthAngle | 1 | По глубине и углу |
|
||||
| ksCTDiameterDepth | 2 | По диаметру и глубине |
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user