feat(engine): 支持多实体 body 与 selector 持久化

- 多实体主体拆分为独立 body_id,支持前缀匹配解析
- 重建结果新增 solid_count 字段
- fillet/chamfer 后 selector stable_id 可解析到演化后继
This commit is contained in:
2026-08-27 18:08:54 +08:00
parent e5c71d07fa
commit 9e5aa48c3d
5 changed files with 716 additions and 25 deletions
@@ -385,6 +385,16 @@ class Build123dGeometryAdapter:
# 将主体导出为 STEP 文件。
export_step(body, path)
@staticmethod
def body_solids(body: Any) -> list[Any]:
# 提取主体内的全部独立 Solid:Compound 返回成员,单个 Solid 返回自身。
# build123d 对部分退化布尔结果可能抛异常,退化为把主体整体视为一个实体。
try:
solids = list(body.solids())
except Exception:
return [body] if body is not None else []
return solids or ([body] if body is not None else [])
@staticmethod
def body_geometry(body: Any) -> dict[str, Any]:
# 汇总主体基本几何信息:包围盒与体积。