From aeb5d58820b933b6da26f1d53ada7b7460088af5 Mon Sep 17 00:00:00 2001 From: Shahovalov MIkhail Date: Wed, 27 May 2026 12:04:28 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D1=82=D0=B8=D0=BF=D0=BE=D0=B2=20=D0=BE=D1=82=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D0=B9=20=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B2?= =?UTF-8?q?=D1=8C=D1=8E=20Codex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - глухая цековка: проверка depth > spotDepth (несовместимая геометрия) — P2 - описание sinkAngle: строго 0 < sinkAngle < 180 (соответствие валидации) — P3 - описание hole_counterbore: требование depth > spotfaceDepth для глухого --- src/Kompas.Mcp.Core/Modeling/HoleService.cs | 2 ++ src/Kompas.Mcp.Host/Tools/FeatureTools.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Kompas.Mcp.Core/Modeling/HoleService.cs b/src/Kompas.Mcp.Core/Modeling/HoleService.cs index ecfa7ce..7aa6a09 100644 --- a/src/Kompas.Mcp.Core/Modeling/HoleService.cs +++ b/src/Kompas.Mcp.Core/Modeling/HoleService.cs @@ -40,6 +40,8 @@ public sealed class HoleService throw new ArgumentOutOfRangeException(nameof(spotDiameter), "Диаметр цековки должен быть больше диаметра отверстия."); if (!double.IsFinite(spotDepth) || spotDepth <= 0) throw new ArgumentOutOfRangeException(nameof(spotDepth), "Глубина цековки должна быть > 0."); + if (!throughAll && double.IsFinite(depth) && depth <= spotDepth) + throw new ArgumentOutOfRangeException(nameof(depth), "Глубина глухого отверстия должна быть больше глубины цековки."); HoleCore(x, y, z, diameter, depth, throughAll, ksHoleTypeEnum.ksHTCounterbore, hole => { var p = hole.HoleParameters as ISpotfacingHoleParameters diff --git a/src/Kompas.Mcp.Host/Tools/FeatureTools.cs b/src/Kompas.Mcp.Host/Tools/FeatureTools.cs index f045718..5f7af1a 100644 --- a/src/Kompas.Mcp.Host/Tools/FeatureTools.cs +++ b/src/Kompas.Mcp.Host/Tools/FeatureTools.cs @@ -213,7 +213,7 @@ public sealed class FeatureTools(KompasSession session, PartModeler modeler, Hol } [McpServerTool(Name = "hole_counterbore")] - [Description("Отверстие с ЦЕКОВКОЙ (цилиндрическое уширение сверху — под винт с цилиндрической головкой) на грани в точке (x,y,z — центр). diameter — диаметр отверстия (мм). depth/throughAll — как у hole. spotfaceDiameter — диаметр цековки (мм, больше diameter), spotfaceDepth — глубина цековки (мм). Направление в тело — авто.")] + [Description("Отверстие с ЦЕКОВКОЙ (цилиндрическое уширение сверху — под винт с цилиндрической головкой) на грани в точке (x,y,z — центр). diameter — диаметр отверстия (мм). depth/throughAll — как у hole (для глухого depth должен быть больше spotfaceDepth). spotfaceDiameter — диаметр цековки (мм, больше diameter), spotfaceDepth — глубина цековки (мм). Направление в тело — авто.")] public async Task HoleCounterbore( double x, double y, double z, [Description("Диаметр отверстия, мм")] double diameter, @@ -229,7 +229,7 @@ public sealed class FeatureTools(KompasSession session, PartModeler modeler, Hol } [McpServerTool(Name = "hole_countersink")] - [Description("Отверстие с ЗЕНКОВКОЙ (коническое уширение сверху — под винт с потайной головкой) на грани в точке (x,y,z — центр). diameter — диаметр отверстия (мм). depth/throughAll — как у hole. sinkDiameter — диаметр зенковки (мм, больше diameter), sinkAngle — угол конуса зенковки (градусы, 0..180; типично 90). Направление в тело — авто.")] + [Description("Отверстие с ЗЕНКОВКОЙ (коническое уширение сверху — под винт с потайной головкой) на грани в точке (x,y,z — центр). diameter — диаметр отверстия (мм). depth/throughAll — как у hole. sinkDiameter — диаметр зенковки (мм, больше diameter), sinkAngle — угол конуса зенковки (градусы, строго 0 < sinkAngle < 180; типично 90). Направление в тело — авто.")] public async Task HoleCountersink( double x, double y, double z, [Description("Диаметр отверстия, мм")] double diameter,