fix(feature): правки shell по ревью Codex
- сообщение shell считает грани после дедупликации (Distinct) - тест переименован (open_cap) + комментарий о симметрии торцов - RCW-долг транзитов shell задокументирован в OPEN_QUESTIONS v2-2 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -64,6 +64,9 @@
|
||||
`EntityCollection(o3d_face/o3d_edge)` не освобождаются (унаследованный паттерн; `QueryService`
|
||||
их освобождает, `PartModeler` — только зарегистрированные сущности в `ResetCore`). Накапливается
|
||||
за длинную сессию. На проработку: единый `using`/release транзитов в построителе.
|
||||
Тот же паттерн у новых членов (`SelectFaceByIndex`, `ShellAsync`: транзитные `ksShellDefinition`/
|
||||
`FaceArray()`/коллекции граней не освобождаются — сознательно, ради консистентности с
|
||||
`Fillet`/`Chamfer`; войдёт в общий рефакторинг release транзитов).
|
||||
- v2-3 — **стабильность индексов граней** (`list_faces` → `sketch_create_on_face_index`):
|
||||
индекс валиден, пока геометрия не меняется между вызовами. После любой операции порядок/состав
|
||||
граней может измениться — переиспользовать старый индекс нельзя, нужно перезапросить `list_faces`.
|
||||
|
||||
@@ -100,7 +100,8 @@ public sealed class FeatureTools(KompasSession session, PartModeler modeler)
|
||||
{
|
||||
await session.ConnectAsync();
|
||||
var id = await modeler.ShellAsync(faceIndices, thickness, outward);
|
||||
return $"Оболочка толщиной {thickness} мм создана (удалено граней: {faceIndices.Length}), id={id}.";
|
||||
var removed = faceIndices?.Distinct().Count() ?? 0;
|
||||
return $"Оболочка толщиной {thickness} мм создана (удалено граней: {removed}), id={id}.";
|
||||
}
|
||||
|
||||
[McpServerTool(Name = "rebuild")]
|
||||
|
||||
@@ -21,7 +21,7 @@ public sealed class FeatureOpsTests
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Shell_box_hollows_with_open_top()
|
||||
public async Task Shell_box_hollows_with_open_cap()
|
||||
{
|
||||
await _docs.CreateAsync(KompasDocumentType.Part);
|
||||
try
|
||||
@@ -33,7 +33,8 @@ public sealed class FeatureOpsTests
|
||||
await _modeler.ExtrudeAsync(s, depth: 20);
|
||||
var before = (await _query.GetPartInfoAsync()).Volume; // 24000
|
||||
|
||||
// Удаляем одну из двух плоских граней-торцов (площадь 40×30=1200) → открытая оболочка.
|
||||
// Удаляем один из двух плоских торцов (площадь 40×30=1200) → открытая оболочка.
|
||||
// Какой именно торец (верх/низ) — для объёма не важно: результат симметричен.
|
||||
var faces = await _query.ListFacesAsync();
|
||||
var cap = faces.First(f => f.Type == "plane" && Math.Abs(f.Area - 1200) < 1);
|
||||
var id = await _modeler.ShellAsync(new[] { cap.Index }, thickness: 2, outward: false);
|
||||
|
||||
Reference in New Issue
Block a user