跳到主要内容

检查、验证与导出

几何内核调用成功,并不足以证明 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}")

更高保证级别的交付还应:

  1. 通过 Model.import_step() 重新导入 STEP。
  2. 将体积、包围盒、拓扑或 BREP 检查结果与源 Shape 对比。
  3. 渲染正交视图并进行视觉检查。
  4. 把验证证据保存为产物旁的 JSON 报告。
  5. 在产物跨系统移动时记录哈希。

公共 cadflow.inspectioncadflow.inspect.brep 功能面提供详细 STEP/BREP 检查和对比。对交付一致性要求高于简单往返测试时应使用它们。

推荐产物结构

artifacts/mounting_plate/
├── mounting_plate.step
├── mounting_plate.stl
├── mounting_plate.glb
├── mounting_plate.png
└── report.json

需要可复现性时,应将建模脚本和报告纳入版本控制;较大的生成几何文件可以使用 Release Assets 或外部产物存储。