草图与工作平面
CadFlow 将坐标上下文与几何分离。Workplane 把局部点和向量转换到模型坐标系,从不修改已有 Shape;SketchDocument 保存声明式二维实体和约束,只在需要时把已求解轮廓下沉为原生几何。
在局部平面上构造
import cadflow as cad
with cad.Model() as model:
with model.workplane(
origin=(10, 0, 5),
normal=(0, 1, 0),
x_dir=(1, 0, 0),
) as plane:
wire = plane.polyline(
((0, 0, 0), (30, 0, 0), (30, 15, 0), (0, 15, 0)),
closed=True,
)
face = model.face(wire)
body = plane.extrude(face, (0, 0, 8))
局部 Z 轴就是平面法向。在混合工作流中可以通过 plane.point() 和 plane.vector() 显式获得世界坐标。
创建约束草图
Sketch Document 是不可变值:每个方法都返回更新后的 Document。
with cad.Model() as model:
with model.workplane(origin=(10, 0, 5), normal=(0, 1, 0)) as plane:
sketch = plane.sketch("mounting_profile")
sketch = sketch.add_point("a", 0, 0).add_point("b", 20, 0)
sketch = sketch.add_point("c", 20, 10).add_point("d", 0, 10)
sketch = (
sketch.add_line("ab", "a", "b")
.add_line("bc", "b", "c")
.add_line("cd", "c", "d")
.add_line("da", "d", "a")
.constrain_horizontal("ab")
.constrain_vertical("bc")
.constrain_fix("a")
)
result = sketch.inspect(strict=False)
assert result.status in {"solved", "underconstrained"}
face = sketch.to_native_face(model, strict=False)
body = model.extrude(face, 0, 8, 0)
当欠约束草图必须中止流水线时使用 strict=True。在交互式或 Agent 修复阶段,strict=False 可以暴露求解诊断,同时保留可检查状态。
约束种类
公共草图层支持几何关系与尺寸关系:
| 类型 | 示例 |
|---|---|
| 关联 | coincident、connect、point-on、midpoint |
| 方向 | horizontal、vertical、parallel、perpendicular、collinear |
| 曲线 | tangent、concentric、equal radius |
| 对称 | symmetric、equal length |
| 尺寸 | distance、X/Y distance、length、angle、radius、diameter |
| 固定 | fix |
下沉边界
约束求解通过 py-slvs 保留在 Python,OpenCascade 构造则位于原生 Session。原生下沉当前直接处理圆和直线环轮廓;需要更丰富的圆弧或 B-spline 草图轮廓时,请使用尚未被小型原生 Facade 覆盖的完整兼容路径。
实践建议
- 给点、实体和草图命名,以获得更有用的诊断。
- 下沉草图之前先检查求解状态。
- 只固定消除刚体自由度所需的几何,避免冗余约束。
- Workplane 必须附着在接收原生 Face 的同一
Model上。 - 把 Sketch Document 视为源状态,把生成的
Shape视为派生几何。