跳到主要内容

Graph 与重放

CadFlow 提供两种不同的 Graph 工作流:

  • cadflow.Graph 是紧凑的原生操作构建器,通过一次 C ABI 调用执行。
  • 序列化领域中的 Model JSON 记录更丰富的兼容层图,用于严格重放、语义和产品工作流。

应根据需要保留的信息选择。

执行原生批处理

每个 Graph.add() 返回一个零基节点索引,供后续节点引用:

import cadflow as cad


graph = cad.Graph()
wire = graph.add(
"polyline",
((0, 0, 0), (40, 0, 0), (40, 25, 0), (0, 25, 0)),
True,
)
face = graph.add("face", wire)
body = graph.add("extrude", face, 0, 0, 6)
graph.add("volume", body)
graph.add("bbox", body)

output = graph.execute()
print("volume:", float(output[3]))
print("bbox:", tuple(map(float, output[4].split())))

execute() 编译节点,然后作为一个批次发送到原生运行时。由于调用跨越稳定 C ABI,结果按照节点顺序以字符串列表返回。

Shape 生命周期

Graph.execute() 自行创建 Session 时,Session 会在执行后关闭。因此 Graph 适合批处理结果,不适合保留 Shape 对象;后续还要交互式处理 Shape 时应使用 Model

支持的 Graph 操作

原生 Graph 覆盖基本体、曲线、曲面、特征、布尔运算、变换、子形状操作、测量和导入。各操作通过前序节点索引引用输入,而不是使用 Python Shape

以下情况适合 Graph

  • 执行前已经确定完整操作计划;
  • 需要减少 Python/C++ 往返;
  • 最终结果是标量或文件;
  • 计划只依赖原生操作集合。

需要交互检查、条件构造或重复使用返回 Shape 时应使用 Model

保存更丰富的设计状态

序列化领域通过公共辅助函数提供 Model JSON 与严格重放:

model_json = cad.export_model_json(session=session)
replayed = cad.replay_model_json(json_str=model_json, strict=True)

该工作流属于兼容功能层,可以保存高层 Graph 节点、语义标签、来源映射、装配和其他小型原生 Graph 不建模的结构化状态。

可复现性规则

  • 在产物报告中记录 CadFlow 版本和后端。
  • 优先使用显式操作参数,不依赖环境状态。
  • 发布重放使用 strict=True
  • 保持源文件或导入 BREP 可寻址,并记录哈希。
  • 验证重放后的终端几何,不要假设重放成功就等于输出一致。
  • 在外部 Schema 中为数值同时保存单位。