CadQuery核心概念:Workplane工作平面详解
什么是Workplane工作平面
在CadQuery这个参数化CAD建模库中,Workplane(工作平面)是最核心的概念之一。它代表三维空间中的一个二维平面,所有建模操作都是相对于当前工作平面进行的。
工作平面包含三个关键要素:
- 原点位置 - 平面的中心点坐标
- 坐标系 - 定义X、Y、Z方向的局部坐标系
- 参考对象 - 可选的父级工作平面或几何体
工作平面基础操作
创建初始工作平面
默认情况下,CadQuery从XY平面开始:
import cadquery as cq
# 创建XY平面上的工作平面
wp = cq.Workplane("XY")
基于几何体创建新工作平面
在已有几何体上选择面来创建工作平面非常常见:
# 创建一个立方体
box = wp.box(10, 20, 30)
# 选择顶面创建新工作平面
top_plane = box.faces(">Z").workplane()
自定义工作平面
你可以通过多种方式定义自定义工作平面:
# 通过三点定义平面
custom_plane = wp.workplaneFromPoints((0,0,0), (1,0,0), (0,1,0))
# 偏移现有平面
offset_plane = wp.workplane(offset=10)
# 旋转平面
rotated_plane = wp.workplane(rotate=(45, 0, 0))
二维到三维建模流程
工作平面的强大之处在于它允许你在2D平面上设计,然后转换为3D特征。
典型工作流程
- 创建工作平面
- 绘制2D草图(圆、矩形、多边形等)
- 使用拉伸、旋转、扫掠等方式创建3D特征
result = (cq.Workplane("XY")
.circle(5) # 在XY平面画圆
.extrude(10) # 拉伸成圆柱
.faces(">Z") # 选择顶面
.workplane() # 在顶面创建新工作平面
.rect(2, 2) # 画矩形
.extrude(5)) # 拉伸成立方体
选择器与上下文
选择器(Selectors)
选择器允许你选择几何体的特定部分:
# 选择所有垂直边
vertical_edges = result.edges("|Z")
# 选择距离原点最远的面
furthest_face = result.faces(">>[0,0,0]")
上下文实体(Context Solid)
CadQuery会自动跟踪"上下文实体" - 即当前正在修改的主要实体:
# 立方体是上下文实体
box = cq.Workplane("XY").box(1,1,1)
# 添加的圆柱会自动与立方体合并
box = box.faces(">Z").circle(0.5).extrude(1)
如果需要创建独立实体,可以设置combine=False:
separate_cylinder = box.faces(">Z").circle(0.5).extrude(1, combine=False)
高级特性
链式操作
CadQuery支持流畅的链式操作,每个方法返回新的工作平面:
result = (cq.Workplane("XY")
.box(10, 10, 2)
.faces(">Z").workplane()
.circle(3).extrude(5)
.faces(">Z").workplane()
.circle(1).cutThruAll())
标签系统
使用标签可以标记重要的工作平面以便后续引用:
result = (cq.Workplane("XY")
.box(10, 10, 2).tag("base")
.faces(">Z").workplane()
.circle(3).extrude(5).tag("cylinder")
# 后续可以通过标签引用
base_plane = result.workplaneFromTagged("base")
批量操作
许多方法会自动对工作平面上的所有对象进行操作:
# 在立方体每个顶点创建圆
result = (cq.Workplane("XY")
.box(10, 10, 2)
.faces(">Z").vertices().circle(1))
调试技巧
理解工作平面状态对调试很有帮助。可以打印工作平面对象查看其属性:
wp = cq.Workplane("XY").box(1,1,1)
print(wp)
输出示例:
Workplane object:
parent: None
plane: Plane:
origin: (0.0, 0.0, 0.0)
z direction: (0.0, 0.0, 1.0)
objects: [Solid]
modelling context:
pendingWires: []
pendingEdges: []
tags: {}
最佳实践
- 合理使用标签:为关键工作平面添加标签,方便后续引用
- 注意上下文实体:理解哪些操作会自动合并到上下文实体
- 利用链式操作:保持代码整洁和可读性
- 适时使用选择器:熟练使用各种选择语法精确定位几何特征
- 考虑性能:复杂的链式操作可能会影响性能,必要时可以拆分
通过掌握工作平面这一核心概念,你可以充分利用CadQuery的强大功能,创建复杂而精确的参数化3D模型。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考