Инструмент hole — простое цилиндрическое отверстие (ksHTBase), сквозное/глухое.
В API5 определения нет → реализовано на API7 (IHoles3D/IHole3D/IHoleDisposal).
Направление сверления подбирается по убыли объёма. 63 инструмента, 104 теста.
- HoleService (Core/Modeling): простое цилиндрическое отверстие (ksHTBase), сквозное/глухое
- размещение: BaseSurface=грань (FindObjectsByPoint) + AssociationVertex=Points3D.Add()
(точка по мировым координатам ksPParamCoord+X/Y/Z); эскиз размещения не нужен
- в API5 определения отверстия НЕТ (как draft) — реализовано на API7 (прецедент: move_face)
- авто-направление в тело с повтором; DI-регистрация; инструмент hole в FeatureTools
- интеграционные тесты: сквозное (Ø10 удаляет π·25·20) + глухое (Ø8×10); spike зелёный с первого раза
- 103 теста зелёных; спек docs/superpowers/specs/2026-05-27-hole-design.md
- mirror_body: ChooseBodies() в interop не приводится к ksChooseBodies (null) и не нужен —
o3d_mirrorAllOperation по умолчанию отражает все тела, сохраняя оригинал (проверено тестом);
убран нерабочий вызов (P2 fail-fast вскрыл, что приведение всегда падает)
- добавлен тест CircularPattern_reverse_flips_rotation_direction (проводка inverce) — P2
- комментарий класса FeatureOpsTests: пакеты B и C — P3
- 101 тест (60 unit + 41 integration)
- CreateSketchOn проверяет entity.Create() (улучшает все пути создания эскиза)
- loft-сообщение считает сечения после дедупликации
- тест loft: проверка габарита 20x20x40
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- thickness через RequirePositive (NaN-safe) + проверка angle на IsFinite
- описание side нейтральное (ksRibSideEnum), без 'ортогонально'
- тест: проверка объёма L-уголка (before), комментарий side=left
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
RibAsync (o3d_ribOperation): SetSketch + index/angle/side + SetThinParam.
SketchGeometry.RibSide маппинг (left/right/up/down). Инструмент rib в FeatureTools.
Эмпирически: контур ребра висит в зазоре (не касается тела), side=left для косынки.
Integration: L-уголок + ребро в углу → объём растёт.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- сообщение shell считает грани после дедупликации (Distinct)
- тест переименован (open_cap) + комментарий о симметрии торцов
- RCW-долг транзитов shell задокументирован в OPEN_QUESTIONS v2-2
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
50 инструментов, 78 тестов (47 unit + 31 integration). Пакет A «богаче
эскизы» отмечен выполненным; следующие — B (формообразующие) / C (массивы).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Методы PartModeler + MCP-инструменты sketch_add_arc_3points/arc/ellipse/
polyline/polygon/spline/point. NURBS порядок 4, ksEndObj через try/finally,
param-структуры через NewParam с освобождением RCW. 7 интеграционных
тестов (профиль → выдавливание → объём) зелёные.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Разбит на PartModeler.cs (ядро: реестр, helpers, NewParam, reset/dispose),
PartModeler.Sketch.cs (эскизы и 2D-примитивы), PartModeler.Features.cs
(выдавливание/вращение/скругление/фаска). Поведение не изменено,
регрессия ModelingTests 7/7 зелёная.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
10 задач TDD: рефакторинг PartModeler в partial, SketchGeometry+SketchPoint,
по одному примитиву на задачу (дуга x2, эллипс, ломаная, многоугольник,
сплайн, точка), финальный прогон и документация. Сигнатуры COM и коды
param-структур сверены рефлексией по libs/kompas-interop/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7 новых MCP-инструментов эскиза: дуга (3 точки / центр+углы), эллипс,
ломаная, правильный многоугольник, сплайн (NURBS), точка. Тонкие обёртки
над ksDocument2D; param-структуры через GetParamStruct. Рефакторинг
PartModeler в partial class (Sketch/Features). Сигнатуры COM сверены по
docs/Kompas3D_SDK/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Вынесены общие ComHelper (Release + Safe-геттеры) и GeomClassifiers
(FaceType/EdgeType), устранены дубли в 5+ сервисах. Освобождение doc3d RCW
в GetTopPart, void-возвраты вместо фиктивных bool, HashSet для OpKinds,
DocumentTypeName в паспорте модели, FileExtension без аллокаций.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1) «Зрение» структурное: describe_model/describe_face/describe_edge/measure —
предпочесть снимку (точнее и дешевле по контексту); model_snapshot только для
визуально-пространственных вопросов, не гонять картинку зря.
2) validate_part после КАЖДОЙ операции: Update()==true ≠ успех; непустой результат
(напр. et3dError54) = брак, в STEP/печать не брать.
Базовый и импортный циклы + эвристики переориентированы на структурный осмотр и
обязательную проверку построения.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>