@
feat(query): перечисление рёбер + скругление/фаска по индексу QueryService.ListEdgesAsync: обход EntityCollection(o3d_edge), для каждого ребра — индекс, тип кривой (line/circle/arc/ellipse/nurbs через ksEdgeDefinition.Is*) и длина (GetLength, мм). Запись EdgeInfo. Новый инструмент list_edges. PartModeler: выделены ядра CreateFillet/CreateChamfer и хелпер SelectEdgeByIndex; добавлены FilletEdgeIndexAsync/ChamferEdgeIndexAsync. Новые инструменты fillet_edge_index, chamfer_edge_index — выбор ребра по индексу (надёжнее точки). Тест List_edges_and_fillet_by_index: цилиндр → 2 круговых ребра ≈62.83 мм → скругление ребра по индексу → объём уменьшается. Итого 31 инструмент, 19 тестов. Документация синхронизирована через навык docs-delegate (Sonnet). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> @
This commit is contained in:
@@ -195,6 +195,40 @@ public sealed class ModelingTests
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task List_edges_and_fillet_by_index()
|
||||
{
|
||||
await _docs.CreateAsync(KompasDocumentType.Part);
|
||||
try
|
||||
{
|
||||
// Цилиндр R10×H20: торцевые рёбра — две окружности длиной 2π·10 ≈ 62.83 мм.
|
||||
var s = await _modeler.OpenSketchAsync(BasePlane.XOY);
|
||||
await _modeler.AddCircleAsync(s, 0, 0, 10);
|
||||
await _modeler.CloseSketchAsync(s);
|
||||
await _modeler.ExtrudeAsync(s, depth: 20);
|
||||
|
||||
var edges = await _query.ListEdgesAsync();
|
||||
var circles = edges.Where(e => e.Type == "circle").ToList();
|
||||
Assert.True(circles.Count >= 2, "У цилиндра ожидались минимум два круговых ребра (торцы).");
|
||||
foreach (var c in circles)
|
||||
Assert.InRange(c.Length, 2 * Math.PI * 10 * 0.95, 2 * Math.PI * 10 * 1.05);
|
||||
|
||||
// Скругление кругового ребра по индексу → объём уменьшается.
|
||||
var before = (await _query.GetPartInfoAsync()).Volume;
|
||||
var fil = await _modeler.FilletEdgeIndexAsync(circles[0].Index, 3);
|
||||
Assert.True(fil > 0);
|
||||
await _modeler.RebuildAsync();
|
||||
|
||||
var after = (await _query.GetPartInfoAsync()).Volume;
|
||||
Assert.True(after < before, "После скругления ребра объём должен уменьшиться.");
|
||||
Assert.InRange(after, before * 0.9, before);
|
||||
}
|
||||
finally
|
||||
{
|
||||
await _docs.CloseAsync(save: false);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Reset_invalidates_sketch_ids()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user