10.例子1-15 - CadQuery 中文文档

本页上的示例可以帮助你学习如何使用 CadQuery 构建对象。

这些示例的组织方式从简单到复杂,因此按顺序进行是吸收它们的最佳方式。

每个示例都列出了示例中使用的 API 元素,以便于参考。示例中引入的项目标有**!**

::: primary Note
我们强烈建议您安装 CQ-editor,这样您就可以与这些示例进行交互式操作。更多信息,请参阅 Installing CadQuery

如果您要这样做,请确保采取以下步骤,使它们发挥作用:

  1. 将 cadquery 导入为 cq
  2. show_object(result) 在末尾添加该行。下面的示例是自动生成的,但它们使用的语法与网站上的模型所需的语法不同。

:::
m_23d03e752d49d17a3f8459aa8bb7efb0_r.png

1、简易矩形板

最简单的例子,一个矩形盒子:

m_4c38bb41bd48a8aac6d2c131006a065d_r.png

result = cq.Workplane("front").box(2.0, 2.0, 0.5)

Api 参考:Workplane()Workplane.box()

2、带孔板

一个矩形盒子,但添加了一个孔。
>Z 选择盒子的最顶面。 孔位于中心,因为工作平面的默认原点是最后一个工作平面的!!#0b5394 投影原点!!,最后一个工作平面的原点为 (0,0,0),投影位于面的中心。 默认孔深贯穿整个零件。

m_3dee72d15d68447355ba470cbb64f81f_r.png

# 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() 会在先前绘制的圆上居中绘制。

默认情况下,矩形和圆形以前一个工作点为中心。

m_e4a321bea491eb66dc8d7f0279504aa2_r.png

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() 完成闭合曲线。
m_ac6c61127cb5ded5482aa16fbb43ae76_r.png

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、移动当前工作点

在这个例子中,需要一个封闭的轮廓,并且有一些内部特征。

此示例还演示了使用多行代码而不是较长的链式命令,当然在这种情况下也可以在一长行中完成。

可以在任何一点建立一个新的工作平面中心。

m_fb9d6b673f7f6746f20bc22079eb5feb_r.png

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(),将会对堆栈中的多个点进行操作。

m_3c0d47a8a22e3d4c8326a60970670b66_r.png

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 打印机。
m_1e81add48714e29640fe641cae01de87_r.png

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() 可以通过由线连接的一系列点创建形状。

此示例使用折线创建工字梁形状的一半,然后对其进行镜像以创建最终轮廓。
image.png

(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、用样条曲线定义边

该示例通过点集合使用样条曲线定义一个边。 在需要复杂轮廓的边缘时非常有用。
m_d2853aa61c733382c4d363b2f88a6099_r.png

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 几何体。 在这个例子中,我们还引入了水平线和垂直线,这使得编码稍微容易一些。

m_278b5b211678e7670daf3f01b4daf755_r.png

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、镜像三维对象

m_59c6219733cb323f9b9d6b815ab19aac_r.png

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、参考面镜像

此示例显示如何围绕选定的面进行镜像。 示例还展示了如何将生成的镜像对象立即与引用的几何体合并。
m_360e2e2d3d0e86a48b704c26511b9402_r.png

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 参数更改此行为。

m_0f0390b1be5f59f4cd4c74fc42e0940f_r.png

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(),它对整个零件进行切割,无论零件有多深。
m_a5cbd46f6d299b3ed244d9f1e238f969_r.png

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、偏移工作平面

工作平面不必完全位于面上。制作工作平面时,可以将其定义在现有面的偏移位置。

本示例使用偏移工作平面制作复合对象,完全有效!
m_faf73a9e73e83d2538d2479f20fe37e2_r.png

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()

文章来源:CadQuery 中文文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值