跳到主要内容

Session、Handle 与坐标系

NativeSession

NativeSession 持有一个原生运行时 Session 以及通过它创建的全部 Shape Handle。它在比 Model 更低的层级暴露 C ABI 操作集,适合实现适配器,或在边界明确的多个 Model 前端间共享一个 Session。

from cadflow import Model, NativeSession

session = NativeSession()
try:
with Model(session) as model:
body = model.box(10, 20, 3)
print(body.volume)
# 借入的 session 仍然有效。
finally:
session.close()

Session 方法使用 ShapeHandle。它是包含 Session Token 与原生值的不透明数据对。不要伪造、修改或持久化这些字段;Handle 只对创建它的存活 Session 有意义。

CoordinateFrame

CoordinateFrame 是由原点和正交归一轴定义的不可变右手坐标系,用于转换局部点与向量、组合嵌套构造上下文以及序列化为 JSON-safe 映射。

成员用途
point(local)应用旋转和平移
vector(local)只应用旋转
to_dict() / from_dict(data)序列化或恢复坐标系
WORLD_FRAME全局单位坐标系
current_frame()读取当前上下文中的活动坐标系
use_frame(frame)在上下文管理器内临时压入坐标系

构造时会拒绝退化或非正交轴。坐标必须有限,normalx_dir 不应接近平行。

Workplane

Workplane(origin, normal, x_dir, parent=None, model=None) 派生局部坐标系。原点和方向相对于 parent 或当前 Frame 解释。进入上下文后,该 Frame 会暂时成为活动坐标系。

由 Model 创建的 Workplane 会附着 Model,并启用几何辅助方法:

成员结果
point(value) / vector(value)显式世界坐标元组
polyline(...)circle_profile(...)arc(...)Model 持有的原生曲线或 Wire
interpolate(...)helix(...)Model 持有的原生曲线
extrude(profile, vector)沿转换后的局部向量拉伸
sketch(name=None)位于该 Frame 上的声明式 SketchDocument

独立 Workplane 仍可转换点和创建草图,但需要 Model 的几何辅助方法会抛出 RuntimeError

并发与嵌套

活动 Frame 栈使用 Python 上下文本地状态,因此即使异常退出,嵌套上下文也会恢复之前的 Frame。原生 Session 是显式持有的资源;除非嵌入应用提供串行化,不要假定它支持任意并发访问。

精确成员见 NativeSessionShapeHandleCoordinateFrameWorkplane