175 Commits

Author SHA1 Message Date
mikhail e95c9d2240 Merge feat/draft: уклон граней через API5 (draft / Incline)
Инструмент draft — уклон граней относительно нейтральной координатной плоскости.
ВОПРЕКИ прежнему предположению, операция доступна в API5 (Incline, o3d_incline=42,
ksInclineDefinition) — не нужен API7. direction=!outward (эмпирика). 64 инструмента, 115 тестов.
2026-05-27 10:35:25 +03:00
mikhail 72045c8a84 docs: уклон (draft, API5 Incline) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 64 инструмента, 115 тестов 2026-05-27 10:35:16 +03:00
mikhail 143877c6cc fix: правки draft по ревью Codex
- угол уклона вынесен в чистый SketchGeometry.RequireDraftAngle (0<angle<90, finite) + unit-тесты границ — P2
- описание инструмента уточнено: строго 0 < angle < 90 — P2
- интеграционный тест Draft_outward_expands_box — страхует маппинг направления (outward→!direction) — P2
- 115 тестов (69 unit + 46 integration)
2026-05-27 10:28:23 +03:00
mikhail 205a4b02de feat: уклон граней (draft) через API5 — ksInclineDefinition o3d_incline=42
- ВОПРЕКИ прежнему предположению: уклон ЕСТЬ в API5 (операция Incline, не Draft) →
  стандартный паттерн PartModeler, регистрируется в _features (массивы/зеркало применимы)
- DraftAsync: FaceArray().Add(грани) + SetPlane(нейтральная коорд. плоскость) + angle + direction
- ЭМПИРИЧЕСКИ: direction=false=расширение, true=сужение (обратно справке) → маппинг !outward
- инструмент draft (faceIndices, neutralPlane, angle 0..90, outward); валидация угла и индексов
- интеграционный тест: 4 боковые грани коробки → усечённая пирамида (объём ±10%)
- 105 тестов; спек docs/superpowers/specs/2026-05-27-draft-design.md
2026-05-27 10:23:16 +03:00
mikhail 4f7e8f3b7e docs: handoff-промт — hole готов (API7), следующий приоритет draft через API7 2026-05-27 10:11:27 +03:00
mikhail 7b234b4e5e Merge feat/hole: отверстие через API7 (hole)
Инструмент hole — простое цилиндрическое отверстие (ksHTBase), сквозное/глухое.
В API5 определения нет → реализовано на API7 (IHoles3D/IHole3D/IHoleDisposal).
Направление сверления подбирается по убыли объёма. 63 инструмента, 104 теста.
2026-05-27 10:10:51 +03:00
mikhail 0aab06169f docs: отверстие (hole, API7) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 63 инструмента, 104 теста 2026-05-27 10:10:42 +03:00
mikhail d3dd78ec0b fix: правки hole по ревью Codex
- направление сверления — по факту убыли объёма (Update=TRUE даже при сверлении в воздух
  на сквозном отверстии); TryDirection + CurrentVolume (API5 МЦХ) — P2-баг, вскрыт тестом
- валидация double.IsFinite для координат/диаметра/глубины (Infinity проходил мимо >0) — P2
- откат точки-сироты и объекта отверстия при неуспехе (IFeature7.Delete) + RebuildDocument — P2
- тест Hole_through_bottom_face_uses_direction_fallback (нижняя грань) — P3
- 104 теста зелёных
2026-05-27 10:04:22 +03:00
mikhail 13ab0f6581 feat: отверстие (hole) через API7 — IHoles3D/IHole3D + IHoleDisposal
- 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
2026-05-27 09:53:54 +03:00
mikhail 56f4a91364 docs: обновлён handoff-промт — пакет C готов, следующий приоритет hole 2026-05-27 00:24:58 +03:00
mikhail ed1e67c2f3 Merge feat/pattern-mirror: пакет C — массивы и зеркало (linear/circular pattern, mirror)
4 новых инструмента: linear_pattern, circular_pattern, mirror_operation, mirror_body.
62 инструмента, 101 тест (60 unit + 41 integration). Ревью Codex (дизайн + реализация) учтено.
2026-05-27 00:24:10 +03:00
mikhail afe94e797d docs: пакет C (массивы и зеркало) — README/CLAUDE/ARCHITECTURE/OPEN_QUESTIONS/presentation, 62 инструмента, 101 тест 2026-05-27 00:23:57 +03:00
mikhail 4cc9fb2d00 fix: правки пакета C по ревью Codex
- 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)
2026-05-27 00:16:47 +03:00
mikhail 2aeed5ba3d feat: зеркало операций и тела (mirror_operation, mirror_body)
- MirrorOperationAsync: ksMirrorCopyDefinition o3d_mirrorOperation, SetPlane + GetOperationArray
- MirrorBodyAsync: ksMirrorCopyAllDefinition o3d_mirrorAllOperation, SetPlane +
  ChooseBodies().ChooseBodiesType=ksAllBodies (отражает все тела, оригинал сохраняется)
- инструменты mirror_operation (featureIds, plane), mirror_body (plane)
- интеграционные тесты: mirror_operation на ДВУХ источниках (коллекция), mirror_body — оба ±5%
- пакет C завершён: 62 инструмента, 100 тестов (60 unit + 40 integration)
2026-05-27 00:11:02 +03:00
mikhail be6a99b9b6 feat: круговой массив (circular_pattern) — ksCircularCopyDefinition o3d_circularCopy
- CircularPatternAsync: SetAxis + свойства напрямую (count1=1 радиально, count2=count кольцевое,
  step2 угол°, factor2=false, inverce=reverse), GetOperationArray
- инструмент circular_pattern (axis, count, step°, reverse, geometric)
- интеграционный тест (3 экз. вокруг Z, шаг 90°, объём ±5% + габарит подтверждает поворот)
- эмпирически: count1=1/count2=N даёт чистый круговой массив, step2 в градусах между соседними
2026-05-27 00:08:35 +03:00
mikhail bc0adaf830 feat: линейный массив (linear_pattern) — ksMeshCopyDefinition o3d_meshCopy
- CoordinateAxis enum + CoordinateAxes.ToObj3dType/Parse (X/Y/Z → o3d_axisO*)
- SketchGeometry.RequireMin; PartModeler.RequireFeature (источник по id из _features)
- LinearPatternAsync: SetAxis1 + SetCopyParamAlongAxis(true,0,count,step,false), count2=1
- инструмент linear_pattern; unit-тесты (RequireMin, Parse), интеграционный тест (3 экз. ±5%)
- эмпирически: count включает исходный, step мм между соседними, count2=1 выключает 2D
2026-05-27 00:07:03 +03:00
mikhail 8cc0f49f99 docs: правки спека пакета C по дизайн-ревью Codex (circular свойствами, multi-feature тест, эмпирические тонкости) 2026-05-27 00:03:47 +03:00
mikhail d6ab16fd6a docs: спек пакета C — массивы и зеркало (linear/circular pattern, mirror) 2026-05-26 23:45:40 +03:00
mikhail 2a555cafd5 docs: промт-handoff для следующей сессии (пакет C — массивы/зеркало)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:36:41 +03:00
mikhail d4b3e59c60 Merge feat/offset-loft: смещённая плоскость + операция по сечениям (loft)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:27:03 +03:00
mikhail 692b113333 docs: смещённая плоскость + loft — 58 инструментов, 89 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:27:02 +03:00
mikhail f0c9cc7db1 fix: правки offset/loft по ревью Codex
- CreateSketchOn проверяет entity.Create() (улучшает все пути создания эскиза)
- loft-сообщение считает сечения после дедупликации
- тест loft: проверка габарита 20x20x40

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:20:38 +03:00
mikhail b2aac016af feat: смещённая плоскость (sketch_create_on_offset_plane) + операция по сечениям (loft)
OpenSketchOnOffsetPlaneAsync (o3d_planeOffset=14, ksPlaneOffsetDefinition) —
эскиз на смещённой плоскости. LoftAsync (o3d_baseLoft=30, ksBaseLoftDefinition):
Sketchs().Add сечений + SetLoftParam + SetThinParam(false). Смещённая плоскость
разблокировала loft (параллельные сечения). Integration: цилиндр на высоте 20;
loft 2 квадратов → призма 16000 мм³.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:17:00 +03:00
mikhail 0b0481bd92 Merge feat/sweep: кинематическая операция (пакет B шаг 3)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:13:16 +03:00
mikhail 53b9d2c18b docs: операция sweep (пакет B шаг 3) — 56 инструментов, 87 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:13:16 +03:00
mikhail ddc71a8ac0 fix(feature): правки sweep по ревью Codex
- описание sweep смягчено (несовместимость → ошибка Create)
- тест: проверка габарита цилиндра 10x10x50 (подтверждает ось)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:07:09 +03:00
mikhail 6e3c7c6fd5 feat(feature): кинематическая операция (sweep)
SweepAsync (o3d_baseEvolution): SetSketch(профиль) + PathPartArray(траектория)
+ sketchShiftType=0 + SetThinParam(false). Инструмент sweep в FeatureTools.
Integration: окружность R5 по вертикали 50 → цилиндр ~3927 мм³.
loft отложен — требует offset-плоскости (пакет E) для параллельных сечений.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:04:42 +03:00
mikhail f284653189 Merge feat/rib: операция Ребро жёсткости (пакет B шаг 2)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:01:36 +03:00
mikhail e8b22c04e7 docs: операция rib (пакет B шаг 2) — 55 инструментов, 86 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 23:01:35 +03:00
mikhail d318525e45 fix(feature): правки rib по ревью Codex
- thickness через RequirePositive (NaN-safe) + проверка angle на IsFinite
- описание side нейтральное (ksRibSideEnum), без 'ортогонально'
- тест: проверка объёма L-уголка (before), комментарий side=left

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:55:48 +03:00
mikhail fc99739e1e feat(feature): операция Ребро жёсткости (rib)
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>
2026-05-26 22:51:58 +03:00
mikhail 7a9964b6f1 Merge feat/shell: операция Оболочка (пакет B шаг 1)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:36:29 +03:00
mikhail 472f1e56e0 docs: операция shell (пакет B шаг 1) — 51 инструмент, 79 тестов
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:36:22 +03:00
mikhail fef0741eef fix(feature): правки shell по ревью Codex
- сообщение shell считает грани после дедупликации (Distinct)
- тест переименован (open_cap) + комментарий о симметрии торцов
- RCW-долг транзитов shell задокументирован в OPEN_QUESTIONS v2-2

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:31:59 +03:00
mikhail 115fcb8759 feat(feature): операция Оболочка (shell)
ShellAsync (o3d_shellOperation): удаление граней по индексам + толщина стенки,
thinType=!outward. SelectFaceByIndex в ядре, инструмент shell в FeatureTools.
Валидация: thickness>0, дедупликация индексов, проверка диапазона до мутации.
Integration-тест: коробка 40x30x20 → оболочка 2мм → 7152 мм³ (±5%).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:28:03 +03:00
mikhail b6ee39a914 docs(spec): дизайн операции Оболочка (shell) — пакет B шаг 1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:20:02 +03:00
mikhail 04e8d2be52 Merge feat/sketch-primitives: пакет A — богаче эскизы (7 примитивов)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 22:03:12 +03:00
mikhail 706ee070cf docs: 7 новых примитивов эскиза (пакет A) в README/ARCHITECTURE/CLAUDE/presentation
50 инструментов, 78 тестов (47 unit + 31 integration). Пакет A «богаче
эскизы» отмечен выполненным; следующие — B (формообразующие) / C (массивы).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:55:52 +03:00
mikhail dc4003810d feat(sketch): 7 примитивов эскиза — дуга x2, эллипс, ломаная, многоугольник, сплайн, точка
Методы 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>
2026-05-26 21:50:27 +03:00
mikhail 0bea3a0cf3 feat(core): SketchGeometry (маппинги/валидация) + SketchPoint
ArcDirection, PolygonDescribe, RequirePositive, RequireVertexCount,
RequirePoints (null + finite). SketchPoint record с JSON x/y. 10 unit-тестов.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:47:05 +03:00
mikhail a16ee31498 refactor(core): PartModeler в partial class (ядро/эскизы/операции)
Разбит на 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>
2026-05-26 21:46:15 +03:00
mikhail 2eab169e28 docs(plan,spec): правки по ревью Codex — примитивы эскиза
- NURBS: порядок 4 (кубический), не degree=3; константа SplineOrder
- NewParam<T>: освобождать сырой RCW при неудачном cast
- сплайн: ksEndObj гарантированно через try/finally
- валидация вынесена в SketchGeometry (RequirePositive/RequireVertexCount/
  RequirePoints с null+finite) — unit-тестируема
- closed polyline требует >=3 точек
- SketchPoint: [JsonPropertyName] x/y; Map с null-guard
- точка: убран неверный термin «вспомогательная»; нейтральный стиль
- зафиксированы источники сигнатур (Automation=docs, типы=interop A/B)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:43:23 +03:00
mikhail ac87b81e99 docs(plan): план реализации пакета A — примитивы эскиза
10 задач TDD: рефакторинг PartModeler в partial, SketchGeometry+SketchPoint,
по одному примитиву на задачу (дуга x2, эллипс, ломаная, многоугольник,
сплайн, точка), финальный прогон и документация. Сигнатуры COM и коды
param-структур сверены рефлексией по libs/kompas-interop/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 21:25:28 +03:00
mikhail 362fea4d54 docs(spec): дизайн пакета A — богаче эскизы (примитивы 2D)
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>
2026-05-26 21:06:34 +03:00
mikhail e851ed17a5 chore: игнорировать .mcp.json (машинно-специфичный путь к exe)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 20:16:34 +03:00
mikhail 579b191d7c refactor(core): унификация 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>
2026-05-26 20:15:43 +03:00
mikhail e1337e4016 feat(sdk-docs): MD-база знаний SDK — в репозиторий; генератор и зеркало убраны
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK
и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало
docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор
tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается.

- .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным
  (safety-net на случай повторной локальной выгрузки).
- CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 20:00:05 +03:00
mikhail ba4e0db558 docs(skill): два главных правила — структурное зрение и validate_part
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>
2026-05-26 19:47:14 +03:00
mikhail c761cba673 feat(sdk-docs): оптимизация MD-базы знаний + переход справки на неё
Оптимизация генератора docs/Kompas3D_SDK/ (build_kompas3d_sdk.py):
- слияние навигационных страниц в родителя (54 хаба, 475 интерфейсов);
  читаемые slug-имена + категория по доминирующему типу детей;
- шумоподавление: убраны артефакты «Интерфейс...», TOC-хвосты,
  breadcrumb-таблицы; синтаксис развёрнут из пайп-таблиц в плоский текст;
- слим frontmatter: sources сведён к корневой странице на группу;
- генератор самодостаточен — читает zoom_pageinfo.js напрямую,
  зависимость от kompas_sdk_index.tsv убрана.

Навык kompas-sdk-research переведён с kdoc.py/HTML на поиск по MD-базе
(Grep/Read). Удалены устаревшие скрипты: kdoc.py, convert_sdk_docs.py,
convert_sdk_to_md.py. Ссылки в CLAUDE.md/ARCHITECTURE.md/README.md/.gitignore
актуализированы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 19:45:31 +03:00
mikhail 3452e21791 fix(tools): фильтр breadcrumb-таблиц со Scroll + fix classify_type
- _render_table(): пропускаем навигационные таблицы Help&Manual,
  где последняя колонка == "Scroll" (хлебные крошки per-section).
- classify_type(): проверяем title на "интерфейс*" до проверки суффикса
  "definition" в ключе — исправляет ksXxxDefinition → interfaces/.
- HtmlToMdExtractor: вход по id=hmpagebody_scroller (не topicbody)
  — обход бага Help&Manual с незакрытыми <a> в навигации.

Результат: 2940 статей, 161 пропущена, 0 ошибок, 45 изображений.
Синтаксис Automation/COM в code-fence, таблицы значений в MD-таблицах.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 18:50:38 +03:00