系统架构
CadFlow 有意收窄应用代码与 OpenCascade 之间的边界。Python 表达建模意图和结构化工作流;稳定 C ABI 进入拥有精确几何的 C++17 Session。
Python 应用 / CAD 智能体
Model · Shape · Graph
稳定 C ABI
C++ Session / ShapeHandle
内核 · IO · Runtime · Physics
OpenCascade 几何与拓扑
领域工作流草图 · 装配 · 检查 · Scene · 序列化 · 语义STEP · STL · GLB · 报告 · Scene 归档
依赖方向
Python 前端 → 稳定 C ABI → C++ Session / ShapeHandle → OpenCascade
现代前端不直接导入 OCC。它只看到不透明的 Session Token 和 Shape ID,而不是 TopoDS_Shape,因此应用代码无需承担 OpenCascade 类型和所有权规则。
原生所有权
每个 Model 拥有一个 Session,Session 拥有该 Model 创建的所有 Shape。
Model
Session Token
Shape ID 1
TopoDS_Shape
Shape ID 2
TopoDS_Shape
Shape ID 3
TopoDS_Shape
句柄不能跨 Session 使用;Model 关闭后其中的句柄全部失效。高成本构造、布尔运算、拓扑、三角化、测量和交换调用停留在 OpenCascade 附近,不会逐对象跨越 Python 边界。
Python 前端
前端承担两类职责:
Model、Shape和Graph提供精简的句柄式原生 API。- 公共领域 Facade 提供草图、装配、语义、序列化、检查、Scene 归档、标准件和求解器中性交接结构。
领域模块有意保持为内置完整功能层之上的轻量公共 Facade。这样即使几何密集型路径在内部迁移,对外 Import 布局仍可保持稳定。
原生运行时
原生源码遵循以下依赖方向:
c_api.cpp → runtime / io / kernel / physics → core
core负责 Shape 存储和共享类型,不放置建模算法。kernel负责精确几何构造与检查。io负责几何交换与序列化格式。runtime解析并执行原生 Graph 批次。physics测量精确 Face 证据和降阶 Connector 响应。c_api.cpp是唯一安装的 ABI 边界。
内部 OCCT 类型和模块头文件不是公共 API。
为什么部分工作保留在 Python
表达式、单位、约束系统、装配、语义标签、Model JSON、Scene Schema 和 Translator Policy 主要是结构化数据编排。把它们搬过 ABI 会增加复杂度,却不能消除几何瓶颈。
因此架构原则不是“所有代码都进 C++”,而是“几何密集型工作在 C++,策略和结构化工作流在 Python”。
交付路径
精确 BREP 始终是事实来源,网格与 GLB 预览只是派生视图:
Python 程序
精确 BREP
同一事实来源产生多个交付视图
测量 + 验证
JSON 证据
STEP
STL
三角化
GLB 预览
这让工程格式和预览都可以与同一份底层几何进行对比。