原生 Graph
Graph 是面向原生 C ABI 的紧凑有序批处理,与 Model JSON 记录使用的 GraphSession 不同。
import cadflow as cad
graph = cad.Graph()
profile = graph.add(
"polyline",
((0, 0, 0), (30, 0, 0), (30, 20, 0), (0, 20, 0)),
True,
)
face = graph.add("face", profile)
body = graph.add("extrude", face, 0, 0, 5)
volume = graph.add("volume", body)
results = graph.execute()
print(float(results[volume]))
节点与引用
Graph.add(op, *args) -> int 追加不可变 Node,并返回零基索引。代表 Shape 输入的整数参数引用之前的节点;前向引用和越界索引无效。
由于操作的普通数值参数也可能是整数,参数究竟是节点引用还是数值由具体操作解释。动态构造批处理时必须遵循精确原生操作签名。
执行
results = graph.execute(session=None)
省略 session 时,执行会创建并关闭临时 NativeSession。传入现有 Session 可由调用方控制原生生命周期,但 Graph 结果仍是序列化字符串,而不是 Shape 包装。结果按节点顺序排列。
根据操作类型解码结果:
- 标量测量按文档使用
float(value)或int(value); - 向量和 BBox 是空格分隔的数值字符串;
- 创建 Shape 的节点返回原生结果标识,主要供后续 Graph 节点引用;
- 导出节点需要通过输出路径验证产物。
操作组
批处理 API 覆盖基本体、曲线与轮廓、曲面、特征、布尔、变换、拓扑提取、测量以及部分导入导出。在接收其他系统给出的任意操作名之前,应查询 Model.capabilities() 或生成的操作页。
适用边界
当完整计划已知、需要减少边界调用,并且有序标量或文件结果足够时使用 Graph。Python 需要检查活跃 Shape 或根据其状态分支时使用 Model。需要保留语义标签、结构化产品状态或 Model JSON 时使用记录与重放。
错误行为
编译会在原生派发前或派发过程中验证操作与节点引用。原生失败通过 NativeError 终止批处理,部分原生状态不是可移植结果。动态生成 Graph 时应限制规模,并为失败节点附加应用上下文。