diff --git a/src/Kompas.Mcp.Core/Drawings/DrawingService.cs b/src/Kompas.Mcp.Core/Drawings/DrawingService.cs
index 3a3eb4d..10e8aaa 100644
--- a/src/Kompas.Mcp.Core/Drawings/DrawingService.cs
+++ b/src/Kompas.Mcp.Core/Drawings/DrawingService.cs
@@ -137,9 +137,11 @@ public sealed class DrawingService
=> _dispatcher.InvokeAsync(() => RequireSymbols2DContainer(viewNumber).Symbols.LineDimensions?.Count ?? 0, ct);
///
- /// Поставить диаметральный размер (Ø) окружности с центром (xc,yc) и радиусом
- /// (ЛОКАЛЬНАЯ СК вида, мм) на виде. — направление выноски (градусы).
- /// Значение (диаметр = 2·radius) измеряется автоматически. Возвращает диаметр и номер вида.
+ /// Поставить диаметральный размер (Ø) окружности на виде. — направление
+ /// выноски (градусы). При =false — свободный размер по (xc,yc,radius),
+ /// значение = 2·radius. При =true — (xc,yc,radius) служат ключом поиска
+ /// спроецированной окружности (Circles), размер привязывается к ней (BaseObject), значение Ø читается
+ /// из геометрии. Координаты — ЛОКАЛЬНАЯ СК вида (мм). Возвращает диаметр и номер вида.
///
public Task AddDiametralDimensionAsync(int viewNumber, double xc, double yc,
double radius, double angleDeg, bool associate = false, CancellationToken ct = default)
@@ -152,8 +154,20 @@ public sealed class DrawingService
DrawingValidation.RequirePositiveRadius(radius);
var angleRad = DimensionAngles.ToRadians(angleDeg);
- var (view, symbols, drawing) = RequireViewContainers(viewNumber);
- var baseObject = associate ? FindBaseCircle(drawing, xc, yc, radius) : null;
+ // Свободный путь берёт только ISymbols2DContainer (как раньше); IDrawingContainer (геометрия)
+ // нужен лишь для ассоциативной привязки — не расширяем поверхность отказа свободного пути.
+ IView view; ISymbols2DContainer symbols; IDrawingObject? baseObject = null;
+ if (associate)
+ {
+ var c = RequireViewContainers(viewNumber);
+ view = c.View; symbols = c.Symbols;
+ baseObject = FindBaseCircle(c.Drawing, xc, yc, radius);
+ }
+ else
+ {
+ var c = RequireSymbols2DContainer(viewNumber);
+ view = c.View; symbols = c.Symbols;
+ }
var dim = symbols.DiametralDimensions?.Add()
?? throw new InvalidOperationException("DiametralDimensions.Add вернул null.");
try
@@ -190,9 +204,11 @@ public sealed class DrawingService
=> _dispatcher.InvokeAsync(() => RequireSymbols2DContainer(viewNumber).Symbols.DiametralDimensions?.Count ?? 0, ct);
///
- /// Поставить радиальный размер (R) окружности/дуги с центром (xc,yc) и радиусом
- /// (ЛОКАЛЬНАЯ СК вида, мм) на виде. — направление выноски (градусы).
- /// Значение (= радиус) измеряется автоматически. Возвращает радиус и номер вида.
+ /// Поставить радиальный размер (R) окружности на виде. — направление
+ /// выноски (градусы). При =false — свободный размер по (xc,yc,radius),
+ /// значение = radius. При =true — (xc,yc,radius) служат ключом поиска
+ /// спроецированной окружности (Circles), размер привязывается к ней (BaseObject), значение R читается
+ /// из геометрии. Координаты — ЛОКАЛЬНАЯ СК вида (мм). Возвращает радиус и номер вида.
///
public Task AddRadialDimensionAsync(int viewNumber, double xc, double yc,
double radius, double angleDeg, bool associate = false, CancellationToken ct = default)
@@ -205,8 +221,20 @@ public sealed class DrawingService
DrawingValidation.RequirePositiveRadius(radius);
var angleRad = DimensionAngles.ToRadians(angleDeg);
- var (view, symbols, drawing) = RequireViewContainers(viewNumber);
- var baseObject = associate ? FindBaseCircle(drawing, xc, yc, radius) : null;
+ // Свободный путь берёт только ISymbols2DContainer (как раньше); IDrawingContainer (геометрия)
+ // нужен лишь для ассоциативной привязки — не расширяем поверхность отказа свободного пути.
+ IView view; ISymbols2DContainer symbols; IDrawingObject? baseObject = null;
+ if (associate)
+ {
+ var c = RequireViewContainers(viewNumber);
+ view = c.View; symbols = c.Symbols;
+ baseObject = FindBaseCircle(c.Drawing, xc, yc, radius);
+ }
+ else
+ {
+ var c = RequireSymbols2DContainer(viewNumber);
+ view = c.View; symbols = c.Symbols;
+ }
var dim = symbols.RadialDimensions?.Add()
?? throw new InvalidOperationException("RadialDimensions.Add вернул null.");
try