docs: отверстие (hole, API7) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 63 инструмента, 104 теста

This commit is contained in:
2026-05-27 10:10:42 +03:00
parent d3dd78ec0b
commit 0aab06169f
5 changed files with 30 additions and 19 deletions
+9
View File
@@ -144,3 +144,12 @@ stateful-сессии? Пока полагаемся на последовате
- `measure` — расстояние/угол между объектами (`ksMeasurer`).
Ключевые паттерны: дерево — `ksPart.GetFeature()``SubFeatureCollection(true,false)`; тела — `BodyCollection()``ksBody`; переменные — `VariableCollection()``ksVariable`. Детект «импорт без истории»: `bodyCount>0 && нет формообразующих операций && features.Count<=bodyCount+1`. Итог: **62 инструмента, 101 тест.**
### ✅ hole — реализован через API7
**Решено.** Инструмент `hole` добавлен как первая формообразующая операция на API7 — в API5 интерфейс `ksHoleDefinition` отсутствует в interop (аналогично `draft`; `o3d_holeOperation=52` есть, но определения нет). Новый сервис `HoleService` (`src/Kompas.Mcp.Core/Modeling/HoleService.cs`) не является методом `PartModeler`.
Паттерн размещения: `(IModelContainer)part7``Points3D.Add()` (создаёт `IPoint3D` как центр) → `Holes3D.Add()``IHole3D``(IHoleDisposal)hole` (`BaseSurface` = грань по `FindObjectsByPoint`, `Perpendicular=true`, `AssociationVertex=point`) → `Update()``RebuildDocument()`. Эскиз размещения не нужен.
**Ключевая тонкость — направление по объёму:** `Update()` возвращает TRUE даже если сверлит «в воздух» снаружи тела (убыли материала нет). Решение: попытка `Direction=true` → Rebuild → сравниваем объём через API5 `CalcMassInertiaProperties`; если не убыл — пробуем `Direction=false`. Тот же класс проблем, что у boss/cut на грани (непредсказуемая ориентация нормали). При неуспехе обеих попыток — откат через `IFeature7.Delete()`. Добавлена валидация `double.IsFinite` (Infinity проходил мимо `>0`).
Отверстие не попадает в реестр `_features` API5 → возвращает подтверждение без id. +3 интеграционных теста (`HoleTests.cs`). Итог: **63 инструмента, 104 теста (60 unit + 44 integration).**