feat: drawing_add_linear_dimension — линейный размер на виде (API7)
Веха 2D-ЧЕРТЁЖ, инкремент 3. DrawingService.AddLinearDimensionAsync: (ISymbols2D Container)view (QI) → LineDimensions.Add → X1..Y3 (локальная СК вида) + Orientation + AutoNominalValue → Update → проверка Valid → ((IDimensionText)dim).NominalValue. Свой enum DimensionOrientation (horizontal/vertical/parallel). Новый инструмент drawing_add_linear_dimension. DrawingViewsResult += ViewNumbers (адресация видов). Находка: размеры НЕ в IView.ObjectCount (он про геометрию IDrawingContainer) — проверка попадания в вид через ISymbols2DContainer.LineDimensions.Count. Ревью Codex спека учтено: RequireDistinctPoints (нулевая длина) + Valid после Update; контракт «первый несистемный вид»; null-check Add; AutoNominalValue явно; ViewNumbers required + текст ответа create_standard_views; тесты адресации/негатив. Тесты: +8 unit (DimensionOrientations, DrawingValidation), +5 integration (DrawingDimensionTests). Итого 131 unit + 70 integration = 201. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,29 @@
|
||||
# Дизайн: линейный размер на виде чертежа (drawing_add_linear_dimension) через API7
|
||||
|
||||
**Дата:** 2026-05-27
|
||||
**Статус:** спайк зелёный (механизм + авто-значение подтверждены); спроектировано; на ревью (Codex)
|
||||
**Статус:** реализовано и проверено (5 интеграционных + unit, всего 201); ревью Codex спека учтено
|
||||
|
||||
## Находка реализации: размеры НЕ в IView.ObjectCount
|
||||
|
||||
`IView.ObjectCount` считает **геометрию** (`IDrawingContainer`: линии/дуги), а размеры живут в
|
||||
`ISymbols2DContainer` отдельно → после простановки размера `ObjectCount` НЕ меняется (проверено: 4→4).
|
||||
Поэтому «размер попал в целевой вид» проверяем счётом `ISymbols2DContainer.LineDimensions.Count`
|
||||
(helper `GetViewLineDimensionCountAsync`), а не `ObjectCount`. (Гарантия непустоты у стандартных видов
|
||||
по `ObjectCount` остаётся верной — там именно геометрия.)
|
||||
|
||||
## Правки по ревью Codex
|
||||
|
||||
- **Нулевая длина** (#1): `DrawingValidation.RequireDistinctPoints(x1,y1,x2,y2)` — расстояние между
|
||||
точками > 1e-7 (иначе вырожденный размер); + проверка `dim.Valid` после `Update()` (откат);
|
||||
+ негативный тест.
|
||||
- **Контракт вида** (#4): честно — «первый НЕСИСТЕМНЫЙ вид (Number != 0)» при `viewNumber<=0`, без
|
||||
претензии на ассоциативность и без QI к `IAssociationView` (в наших чертежах иных видов нет).
|
||||
- **null-check + порядок** (#9): `LineDimensions.Add()` проверять на null; `AutoNominalValue=true`
|
||||
выставлять явно; `NominalValue` читать ТОЛЬКО после `Update()==true && Valid==true`.
|
||||
- **ViewNumbers** (#7): поле `required` в `DrawingViewsResult`; инициализатор и текст MCP-ответа
|
||||
`drawing_create_standard_views` обновить (вернуть номера видов).
|
||||
- **Тесты** (#6): ObjectCount ЦЕЛЕВОГО вида до/после; адресация конкретного `viewNumber`; негатив на
|
||||
совпадающие точки. **viewNumber не найден** (#2) → понятная ошибка. 3D-конвертер точек (#8) — будущее.
|
||||
|
||||
## Цель
|
||||
|
||||
|
||||
Reference in New Issue
Block a user