@
feat(sketch): эскиз на выбранной грани + МЦХ через API5 sketch_create_on_face: OpenSketchOnFaceAsync выбирает плоскую грань по точке (ksPart.EntityCollection(o3d_face).SelectByPoint) и создаёт на ней эскиз — ключевой шаг итеративного цикла «построил → выбрал грань → новый эскиз». Общее ядро создания эскиза вынесено в CreateSketchOn. QueryService переписан на API5 ksPart.CalcMassInertiaProperties(ST_MIX_MM|ST_MIX_KG): - API7 IMassInertiaParam7.Calculate() непригоден — флаг Actual «залипает» после первого расчёта, повторный запрос отдавал устаревший объём (баг кэша); - API5-маршрут считает по запросу и согласован с построением через ksPart; - единицы (мм³/мм²/кг/мм) задаются битовым вектором. Тест Sketch_on_face_adds_boss_on_top: запрос → штифт R5×H10 на верхней грани цилиндра → повторный запрос видит прирост ≈785 мм³ (проверяет и грань, и кэш МЦХ). Презентация: 20 инструментов, 15 тестов; OPEN_QUESTIONS обновлён. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> @
This commit is contained in:
+14
-9
@@ -69,15 +69,20 @@ stateful-сессии? Пока полагаемся на последовате
|
||||
передавать через `ImageContentBlock.FromBytes(bytes, mimeType)` — он сам кодирует. Прямое
|
||||
присваивание `Data = rawBytes` портит изображение на проводе. Исправлено в VisionTools.
|
||||
|
||||
### ✅ МЦХ (get_part_info): единицы измерения и поведение Calculate()
|
||||
`IMassInertiaParam7` по умолчанию возвращает значения в **единицах отображения МЦХ** документа
|
||||
(по умолчанию см³/см²/г, плотность г/см³) — то есть зависит от настроек, а не фиксированные СИ.
|
||||
Поэтому `QueryService` принудительно выставляет `LengthUnits = ksLUnMM` и `MassUnits = ksMUnKG`
|
||||
перед чтением → детерминированные **мм³, мм², кг, мм**. Проверено тестом (цилиндр R10×H20:
|
||||
V≈6283 мм³, S≈1885 мм², m≈0.0494 кг, Zc=10 мм).
|
||||
Тонкость: `Calculate()` возвращает **FALSE даже при успехе** (когда расчёт уже актуален после
|
||||
`RebuildDocument`), поэтому опираемся на свойство `Actual`, а не на возвращаемое значение.
|
||||
Материал по умолчанию — сталь (ρ≈7.856 г/см³); масса зависит от назначенного материала.
|
||||
### ✅ МЦХ (get_part_info): API5 `CalcMassInertiaProperties`, а не API7
|
||||
Сначала пробовали API7 `IMassInertiaParam7` (от `TopPart`). Две проблемы:
|
||||
1. **Единицы** — отдаёт в единицах отображения МЦХ документа (по умолчанию см³/см²/г), зависит от настроек.
|
||||
2. **Залипающий кэш** — после первого расчёта свойство `Actual` остаётся `TRUE` и не сбрасывается
|
||||
при изменении геометрии через API5; `Calculate()` возвращает `FALSE` и не пересчитывает.
|
||||
Сценарий «запрос → достройка → запрос» отдавал **устаревшее** значение. Сброс через
|
||||
`RebuildModel`, переключение `MassSettingMode` — не помогли.
|
||||
|
||||
**Решение (✅ в коде):** считаем через API5 **`ksPart.CalcMassInertiaProperties(bitVector)`** →
|
||||
`ksMassInertiaParam` (`v`/`m`/`F`/`xc`/`yc`/`zc`). Считает «по запросу» (без залипания), единицы
|
||||
задаются битовым вектором: `ST_MIX_MM (0x1) | ST_MIX_KG (0x10)` → **мм³, мм², кг, мм**.
|
||||
Согласовано с тем, что деталь строится через API5 `ksPart`. Проверено двумя тестами:
|
||||
цилиндр R10×H20 (V≈6283 мм³, S≈1885 мм², m≈0.0494 кг, Zc=10 мм) и «запрос → штифт на грани → запрос»
|
||||
(виден корректный прирост ≈785 мм³). Материал по умолчанию — сталь (ρ≈7.856 г/см³).
|
||||
|
||||
### ✅ Снимок 3D: рендер через файл, а не resultArrayBytes
|
||||
`ksDocument3D.SaveAsToRasterFormat(fileName, param)` при **непустом** `fileName` возвращает TRUE,
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
<!-- HERO -->
|
||||
<header class="hero">
|
||||
<div class="wrap">
|
||||
<span class="badge"><span class="dot" style="background:var(--green);box-shadow:0 0 10px var(--green)"></span> Статус: v1 работает — цикл эскиз→выдавливание→снимок через MCP (19 инструментов)</span>
|
||||
<span class="badge"><span class="dot" style="background:var(--green);box-shadow:0 0 10px var(--green)"></span> Статус: v1 работает — цикл эскиз→выдавливание→снимок через MCP (20 инструментов)</span>
|
||||
<h1>КОМПАС-3D <span class="g">MCP-сервер</span><br>управление CAD языком LLM</h1>
|
||||
<p class="lead">MCP-сервер, который превращает операции КОМПАС-3D — создание документов,
|
||||
эскизы, 3D-операции, параметры — в инструменты для языковой модели. Под капотом —
|
||||
@@ -246,8 +246,8 @@
|
||||
впереди.</p>
|
||||
|
||||
<div class="prog">
|
||||
<div class="progrow"><span>Общий прогресс</span><span>v1 работает · 14 тестов зелёные · доки и ревью</span></div>
|
||||
<div class="bar"><i style="width:74%"></i></div>
|
||||
<div class="progrow"><span>Общий прогресс</span><span>v1 + эскиз на грани · 15 тестов зелёные · доки и ревью</span></div>
|
||||
<div class="bar"><i style="width:76%"></i></div>
|
||||
</div>
|
||||
|
||||
<div class="todo-grid" style="margin-top:26px">
|
||||
@@ -282,11 +282,11 @@
|
||||
<!-- TOOLS -->
|
||||
<div class="panel">
|
||||
<h3>Инструменты v1 <span class="tag done">ГОТОВО</span></h3>
|
||||
<p class="meta">19 инструментов, отдаются по MCP-протоколу</p>
|
||||
<p class="meta">20 инструментов, отдаются по MCP-протоколу</p>
|
||||
<ul class="list">
|
||||
<li class="muted"><span class="mark ok">✓</span><span class="t"><code>System</code>: connect · status · set_visible</span></li>
|
||||
<li class="muted"><span class="mark ok">✓</span><span class="t"><code>Documents</code>: create · open · save · save_as · close · active</span></li>
|
||||
<li class="muted"><span class="mark ok">✓</span><span class="t"><code>Sketch</code>: create · add line/circle/rectangle · close</span></li>
|
||||
<li class="muted"><span class="mark ok">✓</span><span class="t"><code>Sketch</code>: create · create_on_face 🆕 · add line/circle/rectangle · close</span></li>
|
||||
<li class="muted"><span class="mark ok">✓</span><span class="t"><code>Features</code>: extrude_boss · extrude_cut · rebuild</span></li>
|
||||
<li class="muted"><span class="mark ok">✓</span><span class="t"><code>Vision</code>: model_snapshot 👁️</span></li>
|
||||
<li class="muted"><span class="mark ok">✓</span><span class="t"><code>Query</code>: get_part_info (объём/масса/площадь/центр масс)</span></li>
|
||||
@@ -319,7 +319,7 @@
|
||||
черчению и сборкам.</p>
|
||||
<div class="timeline">
|
||||
<div class="tl" style="border-color:var(--green)"><div class="ph" style="color:var(--green)">v1 · готово ✓</div><h4>Цикл моделирования</h4><p>Документы, эскизы, выдавливание/вырез, снимок модели — работает</p></div>
|
||||
<div class="tl cur"><div class="ph">v2 · далее</div><h4>Операции и выборка</h4><p>Выбор граней, эскиз на грани, вращение, скругление/фаска, массивы</p></div>
|
||||
<div class="tl cur"><div class="ph">v2 · в работе</div><h4>Операции и выборка</h4><p>Эскиз на грани ✓ · далее: вращение, скругление/фаска, массивы, список тел</p></div>
|
||||
<div class="tl"><div class="ph">v3</div><h4>Параметрика</h4><p>Переменные <code>IVariable7</code>, свойства <code>IPropertyMng</code>, формулы</p></div>
|
||||
<div class="tl"><div class="ph">v4</div><h4>2D-черчение</h4><p>Виды, размеры, тексты, штриховки; спецификации</p></div>
|
||||
<div class="tl"><div class="ph">v5</div><h4>Сборки и экспорт</h4><p>Компоненты, сопряжения, конвертеры (STEP), HTTP/SSE-транспорт</p></div>
|
||||
|
||||
Reference in New Issue
Block a user