检查、验证与导出
几何内核调用成功,并不足以证明 CAD 产物正确。可靠工作流需要记录几何证据、检查领域不变量、写入所需格式,并验证最终文件。
检查 Shape
核心 Shape 属性在原生 Session 中计算:
evidence = {
"kind": part.kind,
"volume_mm3": part.volume,
"area_mm2": part.area,
"center_of_mass_mm": part.center_of_mass,
"bbox_mm": part.bbox,
"topology": part.topology,
}
使用 part.describe() 获取 JSON-safe 汇总;只有明确需要网格时才使用 part.describe(detail="mesh"),因为它会产生显著更多的数据。
验证几何与意图
Shape.validate() 执行低成本、后端无关的检查,并返回 OperationReport:
report = part.validate()
if not report.ok:
raise RuntimeError(report.to_dict())
随后检查该零件特有的预期:
expected_bbox = (0, 0, 0, 80, 50, 8)
if part.topology.get("solids") != 1:
raise RuntimeError("delivery must contain exactly one solid")
if part.volume <= 0:
raise RuntimeError("delivery solid must have positive volume")
for actual, expected in zip(part.bbox, expected_bbox):
if abs(actual - expected) > 0.1:
raise RuntimeError(f"unexpected bounds: {part.bbox}")
几何内核有效性和设计意图是两项独立主张,需要分别检查。
预检 Agent 编写的操作
Model.preflight() 会在几何调用前捕获常见错误:
check = model.preflight("fillet", part, 2.0, edges=[0, 4, 99])
if not check.ok:
for diagnostic in check.diagnostics:
print(diagnostic.code, diagnostic.message, diagnostic.hint)
当前检查包括 Session 不匹配、无效边索引和非正抽壳厚度。Model.apply() 把预检、执行和结构化失败报告组合起来,适合 Agent 循环。
导出产物
from pathlib import Path
output = Path("artifacts/mounting_plate")
output.mkdir(parents=True, exist_ok=True)
part.export_step(str(output / "mounting_plate.step"))
part.export_stl(str(output / "mounting_plate.stl"), binary=True)
part.export_preview_glb(str(output / "mounting_plate.glb"), deflection=0.25)
网格偏差控制预览三角化,而不会改变底层精确 BREP。数值越小通常产生越多三角形。
验证交付文件
至少应确认每个必需文件存在且非空:
for path in output.iterdir():
if path.stat().st_size == 0:
raise RuntimeError(f"empty artifact: {path}")
更高保证级别的交付还应:
- 通过
Model.import_step()重新导入 STEP。 - 将体积、包围盒、拓扑或 BREP 检查结果与源 Shape 对比。
- 渲染正交视图并进行视觉检查。
- 把验证证据保存为产物旁的 JSON 报告。
- 在产物跨系统移动时记录哈希。
公共 cadflow.inspection 与 cadflow.inspect.brep 功能面提供详细 STEP/BREP 检查和对比。对交付一致性要求高于简单往返测试时应使用它们。
推荐产物结构
artifacts/mounting_plate/
├── mounting_plate.step
├── mounting_plate.stl
├── mounting_plate.glb
├── mounting_plate.png
└── report.json
需要可复现性时,应将建模脚本和报告纳入版本控制;较大的生成几何文件可以使用 Release Assets 或外部产物存储。