fix: правки offset/loft по ревью Codex

- CreateSketchOn проверяет entity.Create() (улучшает все пути создания эскиза)
- loft-сообщение считает сечения после дедупликации
- тест loft: проверка габарита 20x20x40

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-26 23:20:38 +03:00
parent b2aac016af
commit f0c9cc7db1
3 changed files with 10 additions and 2 deletions
@@ -93,7 +93,8 @@ public sealed partial class PartModeler
?? throw new InvalidOperationException("GetDefinition() эскиза вернул не ksSketchDefinition.");
def.SetPlane(planeEntity);
entity.Create();
if (!entity.Create())
throw new InvalidOperationException("Create() эскиза вернул FALSE.");
var editor = def.BeginEdit() as ksDocument2D
?? throw new InvalidOperationException("BeginEdit() не вернул ksDocument2D.");
+2 -1
View File
@@ -130,7 +130,8 @@ public sealed class FeatureTools(KompasSession session, PartModeler modeler)
{
await session.ConnectAsync();
var id = await modeler.LoftAsync(sketchIds, closed);
return $"Операция по сечениям создана ({sketchIds.Length} сечений), id={id}.";
var sections = sketchIds?.Distinct().Count() ?? 0;
return $"Операция по сечениям создана ({sections} сечений), id={id}.";
}
[McpServerTool(Name = "rebuild")]
@@ -156,6 +156,12 @@ public sealed class FeatureOpsTests
var v = (await _query.GetPartInfoAsync()).Volume; // 20×20×40 = 16000
Assert.InRange(v, 16000 * 0.9, 16000 * 1.1);
// Габарит подтверждает соединение сечений по высоте: ≈20×20×40.
var box = await _query.GetBoundingBoxAsync();
Assert.InRange(box.SizeX, 20 * 0.95, 20 * 1.05);
Assert.InRange(box.SizeY, 20 * 0.95, 20 * 1.05);
Assert.InRange(box.SizeZ, 40 * 0.95, 40 * 1.05);
}
finally { await _docs.CloseAsync(save: false); }
}