feat: drawing_add_diametral_dimension — упрочнение по ревью Codex реализации

#2: инвариант диаметра value>0 (value<=0||!IsFinite, не Abs<1e-6). #3: сообщение
create_standard_views обобщено (номера видов для инструментов размеров). #4a:
ToRadians проверяет конечность результата (переполнение). #5d: тест viewNumber:999
(вид не найден). #6: комментарий DimensionType переформулирован (COM-дефолт).

Тесты: DrawingDiametralTests 4→5. Итого 141 unit + 77 integration = 218.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-27 18:38:33 +03:00
parent 910d120c8a
commit b6ca2f7b21
5 changed files with 37 additions and 6 deletions
@@ -21,7 +21,10 @@ public static class DimensionAngles
{
if (!double.IsFinite(degrees))
throw new ArgumentException("Угол должен быть конечным числом.", nameof(degrees));
return degrees * Math.PI / 180.0;
var result = degrees * (Math.PI / 180.0);
if (!double.IsFinite(result)) // защита от переполнения на экстремальных degrees
throw new ArgumentOutOfRangeException(nameof(degrees), "Угол слишком велик (переполнение при переводе в радианы).");
return result;
}
}
@@ -158,7 +158,8 @@ public sealed class DrawingService
try
{
dim.Xc = xc; dim.Yc = yc; dim.Radius = radius; dim.Angle = angleRad;
// DimensionType (стиль линии) не задаём — принимаем COM-дефолт (стандартный стиль).
// DimensionType (стиль размерной линии) не задаём — оставляем COM-дефолт (полярность bool
// не подтверждена; дефолт даёт валидный размер с верным значением — проверено спайком).
((IDimensionText)dim).AutoNominalValue = true;
if (!dim.Update())
@@ -167,8 +168,8 @@ public sealed class DrawingService
throw new InvalidOperationException("Диаметральный размер построен невалидным.");
var value = ((IDimensionText)dim).NominalValue; // диаметр = 2·radius
if (Math.Abs(value) < 1e-6)
throw new InvalidOperationException("Диаметральный размер измерил нулевое значение.");
if (value <= 0 || !double.IsFinite(value)) // инвариант диаметра: строго положительный
throw new InvalidOperationException($"Диаметральный размер измерил некорректное значение ({value}).");
return new DrawingDimensionResult { Value = value, ViewNumber = view.Number };
}
catch
+1 -1
View File
@@ -26,7 +26,7 @@ public sealed class DrawingTools(KompasSession session, DrawingService drawing)
var r = await drawing.CreateStandardViewsAsync(partFilePath, scale, x, y);
var numbers = string.Join(", ", r.ViewNumbers);
return $"Создано {r.Created} стандартных вида на чертеже (всего видов: {r.Total}, масштаб {scale}). " +
$"Номера созданных видов: {numbers} (для drawing_add_linear_dimension).";
$"Номера созданных видов: {numbers} (для инструментов простановки размеров — параметр viewNumber).";
}
[McpServerTool(Name = "drawing_fill_title_block")]