本页上的示例可以帮助你学习如何使用 CadQuery 构建对象。
这些示例的组织方式从简单到复杂,因此按顺序进行是吸收它们的最佳方式。
每个示例都列出了示例中使用的 API 元素,以便于参考。示例中引入的项目标有**!**
::: primary Note
我们强烈建议您安装 CQ-editor,这样您就可以与这些示例进行交互式操作。更多信息,请参阅 Installing CadQuery。
如果您要这样做,请确保采取以下步骤,使它们发挥作用:
- 将 cadquery 导入为
cq
show_object(result)
在末尾添加该行。下面的示例是自动生成的,但它们使用的语法与网站上的模型所需的语法不同。
:::
1、简易矩形板
最简单的例子,一个矩形盒子:
result = cq.Workplane("front").box(2.0, 2.0, 0.5)
Api 参考:Workplane()
Workplane.box()
2、带孔板
一个矩形盒子,但添加了一个孔。
>Z
选择盒子的最顶面。 孔位于中心,因为工作平面的默认原点是最后一个工作平面的!!#0b5394 投影原点!!,最后一个工作平面的原点为 (0,0,0),投影位于面的中心。 默认孔深贯穿整个零件。
# The dimensions of the box. These can be modified rather than changing the
# object's code directly.
length = 80.0
height = 60.0
thickness = 10.0
center_hole_dia = 22.0
# Create a box based on the dimensions above and add a 22mm center hole
result = (cq.Workplane("XY").box(length, height, thickness).faces(">Z").workplane().hole(center_hole_dia))
Api 参考:Workplane.hole()
Workplane.box()
3、挤压棱柱体
使用挤压构建棱柱体。 绘制操作后,将前一个对象的中心放入栈中,作为下一次操作的参考。 所以在这个例子中, rect()
会在先前绘制的圆上居中绘制。
默认情况下,矩形和圆形以前一个工作点为中心。
result = cq.Workplane("front").circle(2.0).rect(0.5, 0.75).extrude(0.5)
Api 参考: Workplane.circle()
Workplane.rect()
Workplane.extrude()
Workplane()
4、使用线和弧构建轮廓
有时你需要使用直线和弧线构建复杂的轮廓。 此示例通过 2D 操作构建棱柱实体。
2D 操作维护当前点,该点最初位于原点。 使用 close()
完成闭合曲线。
result = (
cq.Workplane("front")
.lineTo(2.0, 0)
.lineTo(2.0, 1.0)
.threePointArc((1.0, 1.5), (0.0, 1.0))
.close()
.extrude(0.25)
)
Api 参考:Workplane.threePointArc()
Workplane.lineTo()
Workplane.extrude()
Workplane()
5、移动当前工作点
在这个例子中,需要一个封闭的轮廓,并且有一些内部特征。
此示例还演示了使用多行代码而不是较长的链式命令,当然在这种情况下也可以在一长行中完成。
可以在任何一点建立一个新的工作平面中心。
result = cq.Workplane("front").circle(
5.0
) # current point is the center of the circle, at (0, 0)
result = result.center(1.5, 0.0).rect(0.5, 0.5) # new work center is (1.5, 0.0)
result = result.center(-1.5, 1.5).circle(0.25) # new work center is (0.0, 1.5).
# The new center is specified relative to the previous center, not global coordinates!
result = result.extrude(0.25)
注意:
center
参数是相对位置
第一个 center(1.5, 0.0)
是相对于(0, 0)
,即默认的中心点
第二个 center(-1.5, 1.5)
是相对于 (1.5, 0.0)
,因为第一个center改变了中心点位置
Api 参考: Workplane.center()
Workplane()
Workplane.circle()
Workplane.rect()
Workplane.extrude()
6、使用点列表
有时你需要在不同位置创建多个特征,使用 Workplane.center()
太麻烦了。
可以使用点列表一次构造多个对象。 大多数构造方法,如 Workplane.circle()
和 Workplane.rect()
,将会对堆栈中的多个点进行操作。
r = cq.Workplane("front").circle(2.0) # make base
r = r.pushPoints(
[(1.5, 0), (0, 1.5), (-1.5, 0), (0, -1.5)]
) # now four points are on the stack
r = r.circle(0.25) # circle will operate on all four points
result = r.extrude(0.125) # make prism
Api 参考:Workplane.pushPoints()
Workplane()
Workplane.circle()
Workplane.extrude()
7、多边形
如果愿意,你可以为栈上的每个点创建多边形。 适用于固件无法修正小孔尺寸的 3d 打印机。
result = (
cq.Workplane("front")
.box(3.0, 4.0, 0.25)
.pushPoints([(0, 0.75), (0, -0.75)])
.polygon(6, 1.0)
.cutThruAll()
)
Api 参考: Workplane.polygon()
Workplane.pushPoints()
Workplane.box()
8、折线
Workplane.polyline()
可以通过由线连接的一系列点创建形状。
此示例使用折线创建工字梁形状的一半,然后对其进行镜像以创建最终轮廓。
(L, H, W, t) = (100.0, 20.0, 20.0, 1.0)
pts = [
(0, H/2.0),
(W/2.0, H/2.0),
(W/2.0, (H/2.0 - t)),
(t/2.0, (H/2.0 - t)),
(t/2.0, (t - H/2.0)),
(W/2.0, (t - H/2.0)),
(W/2.0, H/-2.0),
(0, H/-2.0)
]
result = cq.Workplane("front").polyline(pts).mirrorY().extrude(L)
Api 参考: Workplane.polyline()
Workplane()
Workplane.mirrorY()
Workplane.extrude()
9、用样条曲线定义边
该示例通过点集合使用样条曲线定义一个边。 在需要复杂轮廓的边缘时非常有用。
s = cq.Workplane("XY")
sPnts = [
(2.75, 1.5),
(2.5, 1.75),
(2.0, 1.5),
(1.5, 1.0),
(1.0, 1.25),
(0.5, 1.0),
(0, 1.0),
]
r = (
s.lineTo(3.0, 0)
.lineTo(3.0, 1.0)
.spline(sPnts, includeCurrent=True)
.close()
)
result = r.extrude(0.5)
Api 参考:Workplane.spline()
Workplane()
Workplane.close()
Workplane.lineTo()
Workplane.extrude()
10、镜像几何形状
当你的几何形状对称时,可以镜像 2D 几何体。 在这个例子中,我们还引入了水平线和垂直线,这使得编码稍微容易一些。
r = cq.Workplane("front").hLine(1.0) # 1.0 is the distance, not coordinate
r = (
r.vLine(0.5)
.hLine(-0.25)
.vLine(-0.25)
.hLineTo(0.0)
) # hLineTo allows using xCoordinate not distance
result = r.mirrorY().extrude(0.25) # mirror the geometry and extrude
Api 参考: Workplane.hLine()
Workplane.vLine()
Workplane.hLineTo()
Workplane.mirrorY()
Workplane.mirrorX()
Workplane()
Workplane.extrude()
11、镜像三维对象
result0 = (
cq.Workplane("XY")
.moveTo(10, 0)
.lineTo(5, 0)
.threePointArc((3.9393, 0.4393), (3.5, 1.5))
.threePointArc((3.0607, 2.5607), (2, 3))
.lineTo(1.5, 3)
.threePointArc((0.4393, 3.4393), (0, 4.5))
.lineTo(0, 13.5)
.threePointArc((0.4393, 14.5607), (1.5, 15))
.lineTo(28, 15)
.lineTo(28, 13.5)
.lineTo(24, 13.5)
.lineTo(24, 11.5)
.lineTo(27, 11.5)
.lineTo(27, 10)
.lineTo(22, 10)
.lineTo(22, 13.2)
.lineTo(14.5, 13.2)
.lineTo(14.5, 10)
.lineTo(12.5, 10)
.lineTo(12.5, 13.2)
.lineTo(5.5, 13.2)
.lineTo(5.5, 2)
.threePointArc((5.793, 1.293), (6.5, 1))
.lineTo(10, 1)
.close()
)
result = result0.extrude(100)
result = result.rotate((0, 0, 0), (1, 0, 0), 90)
result = result.translate(result.val().BoundingBox().center.multiply(-1))
mirXY_neg = result.mirror(mirrorPlane="XY", basePointVector=(0, 0, -30))
mirXY_pos = result.mirror(mirrorPlane="XY", basePointVector=(0, 0, 30))
mirZY_neg = result.mirror(mirrorPlane="ZY", basePointVector=(-30, 0, 0))
mirZY_pos = result.mirror(mirrorPlane="ZY", basePointVector=(30, 0, 0))
result = result.union(mirXY_neg).union(mirXY_pos).union(mirZY_neg).union(mirZY_pos)
Api References:Workplane.moveTo()
Workplane.lineTo()
Workplane.threePointArc()
Workplane.extrude()
Workplane.mirror()
Workplane.union()
Workplane.rotate()
12、参考面镜像
此示例显示如何围绕选定的面进行镜像。 示例还展示了如何将生成的镜像对象立即与引用的几何体合并。
result = (cq.Workplane("XY")
.line(0, 1)
.line(1, 0)
.line(0, -.5)
.close()
.extrude(1))
result = result.mirror(result.faces(">X"), union=True)
Api References:Workplane.line()
Workplane.close()
Workplane.extrude()
Workplane.faces()
Workplane.mirror()
Workplane.union()
13、在面上创建工作平面
此示例说明如何在先前创建的特征的面上定位新工作平面。
::: primary Note
以这种方式使用工作平面是 CadQuery 的一个关键特性。 与典型的 3d 脚本语言不同,使用工作平面使你无需跟踪变量中各种特征的位置,并允许模型通过删除冗余尺寸进行自我调整。
:::
Workplane.faces()
方法允许你选择生成的实体的面。 它接受一个选择器字符串或对象,允许你以单个面为目标,并面向该面生成一个工作平面。
请记住,默认情况下,!!#ff0000 新工作平面的原点,是通过从所选面形成一个平面,并将先前的原点投影到该平面上来计算的!!。 可以通过 Workplane.workplane()
的 centerOption
参数更改此行为。
result = cq.Workplane("front").box(2, 3, 0.5) # make a basic prism
result = (
result.faces(">Z")
.workplane()
.hole(0.5)
) # find the top-most face and make a hole
Api References:Workplane.faces()
StringSyntaxSelector()
Selectors Reference
Workplane.workplane()
Workplane.box()
Workplane()
14、在顶点上定位工作平面
通常, Workplane.workplane()
方法需要选择一个面。 但是,如果在选中一个面后且立即选择顶点,将 centerOption
参数设置为 CenterOfMass
时,Workplane.workplane()
会将工作平面定位在面上,原点位于顶点而不是面的中心。
本示例还介绍了 Workplane.cutThruAll(),它对整个零件进行切割,无论零件有多深。
result = cq.Workplane("front").box(3, 2, 0.5) # make a basic prism
result = (
result.faces(">Z")
.vertices("<XY")
.workplane(centerOption="CenterOfMass")
) # select the lower left vertex and make a workplane
result = result.circle(1.0).cutThruAll() # cut the corner out
Api References:Workplane.cutThruAll()
Selectors Reference
Workplane.vertices()
Workplane.box()
Workplane()
StringSyntaxSelector()
15、偏移工作平面
工作平面不必完全位于面上。制作工作平面时,可以将其定义在现有面的偏移位置。
本示例使用偏移工作平面制作复合对象,完全有效!
result = cq.Workplane("front").box(3, 2, 0.5) # make a basic prism
result = result.faces("<X").workplane(
offset=0.75
) # workplane is offset from the object surface
result = result.circle(1.0).extrude(0.5) # disc
Api References:Workplane.extrude()
Selectors Reference
Workplane.box()
Workplane()