07.草图 - CadQuery 中文文档

草图教程

本节的目的是演示如何使用不同的方法构建草图。

Face-based API

构建草图的主要方法是基于构建面并使用布尔运算将它们组合起来。
请添加图片描述

import cadquery as cq

result = (
    cq.Sketch()
    .trapezoid(4, 3, 90)
    .vertices()
    .circle(0.5, mode="s")
    .reset()
    .vertices()
    .fillet(0.25)
    .reset()
    .rarray(0.6, 1, 5, 1)
    .slot(1.5, 0.4, mode="s", angle=90)
)

请注意,选择器已实现,但必须显式重置选择。Sketch 类不实现历史记录,所有修改都就地发生。

Modes

Face API 的每个操作都接受一个模式参数,用来定义如何将创建的对象与现有对象组合。它可以被融合 ( mode='a')、切割 ( mode='s')、相交 ( mode='i') 或只是用于构造的存储 ( mode='c')。在最后一种情况下,必须指定 一个tag以便稍后能够引用该对象。默认情况下,面会融合在一起。请注意上例中减法和加法模式的使用。下面将演示另外两种情况。

请添加图片描述

result = (
    cq.Sketch()
    .rect(1, 2, mode="c", tag="base")
    .vertices(tag="base")
    .circle(0.7)
    .reset()
    .edges("|Y", tag="base")
    .ellipse(1.2, 1, mode="i")
    .reset()
    .rect(2, 2, mode="i")
    .clean()
)

Edge-based API

如果需要,可以通过单独放置边来构建草图。
请添加图片描述

import cadquery as cq

result = (
    cq.Sketch()
    .segment((0.0, 0), (0.0, 2.0))
    .segment((2.0, 0))
    .close()
    .arc((0.6, 0.6), 0.4, 0.0, 360.0)
    .assemble(tag="face")
    .edges("%LINE", tag="face")
    .vertices()
    .chamfer(0.2)
)

构建完成后,必须使用 assemble() 将其转换为基于面的表示。之后,可以应用基于面部的操作。

Convex hull

::: warning 警告
凸面功能目前处于实验阶段。
对于某些特殊用例,凸面可以由直线段和圆构造。
:::

请添加图片描述

result = (
    cq.Sketch()
    .arc((0, 0), 1.0, 0.0, 360.0)
    .arc((1, 1.5), 0.5, 0.0, 360.0)
    .segment((0.0, 2), (-1, 3.0))
    .hull()
)

Constraint-based sketches

::: warning 警告
2D 草图约束和求解器目前处于实验阶段。
最后,如果需要,可以使用几何约束来构建草图。
:::
到目前为止,在此类用例中只能使用线段和圆弧。
请添加图片描述

import cadquery as cq

result = (
    cq.Sketch()
    .segment((0, 0), (0, 3.0), "s1") # 线段
    .arc((0.0, 3.0), (1.5, 1.5), (0.0, 0.0), "a1") # 弧线
    .constrain("s1", "Fixed", None)
    .constrain("s1", "a1", "Coincident", None)
    .constrain("a1", "s1", "Coincident", None)
    .constrain("s1", "a1", "Angle", 45)
    .solve()
    .assemble()
)

实施以下约束。参数作为一个元组传入constrain()。在此表中,0…1指 0 和 1 之间的浮点数,其中 0 将创建相对于元素开头的约束,1 将创建相对于元素结尾的约束。

|名称 |数量 |实体 |参数 |描述 |
|:–|
|Fixed |1 |全部 |None 表示圆弧中心
0…1 表示线段/圆弧上的点 |指定点是固定的 |
|FixedPoint |2 |全部 |没有任何 |固定点 |
|Coincident |2 |全部 |没有任何 |指定点重合 |
|Angle |2 |全部 |角度 |两个实体的切线之间的角度是固定的 |
|Length |1 |全部 |长度 |指定实体具有固定长度 |
|Distance |2 |全部 |无或 0…1、无或 0…1、距离 |两点之间的距离是固定的 |
|Radius |1 |弧 |半径 |指定实体具有固定半径 |
|Orientation |1 |部分 |x,y |指定实体平行于(x,y) |
|ArcAngle |1 |弧 |角度 |指定实体为固定角度跨度 |

Workplane integration

草图创建后,可用于在工作平面上构建各种特征。支持的操作包括extrude()twistExtrude()revolve()sweep()cutBlind()cutThruAll()loft()

草图可以作为单独的实体创建并重复使用,也可以在一个流畅的调用链中临时创建,如下所示。
请注意,草图放置在堆栈顶部的所有位置。
就地构建草图可以按如下方式完成。
请添加图片描述

import cadquery as cq

result = (
    cq.Workplane()
    .box(5, 5, 1)
    .faces(">Z")
    .sketch()
    .regularPolygon(2, 3, tag="outer")
    .regularPolygon(1.5, 3, mode="s")
    .vertices(tag="outer")
    .fillet(0.2)
    .finalize()
    .extrude(0.5)
)

Sketch API 在调用 sketch() 和原始工作平面后可用。

当在构建草图之前选择多个元素时,将创建多个草图。
请添加图片描述

import cadquery as cq

result = (
    cq.Workplane()
    .box(5, 5, 1)
    .faces(">Z")
    .workplane()
    .rarray(2, 2, 2, 2) # 生成一个矩形位置阵列
    .rect(1.5, 1.5)
    .extrude(0.5)
    .faces(">Z")
    .sketch()
    .circle(0.4)
    .wires()
    .distribute(6) # 沿选定的边缘或导线分布位置
    .circle(0.1, mode="a")
    .clean()
    .finalize() # 完成草图绘制并返回父级
    .cutBlind(-0.5, taper=10)
)

有时需要重复使用现有草图,并将其原样放置在工作平面上。
请添加图片描述

import cadquery as cq

s = cq.Sketch().trapezoid(3, 1, 110).vertices().fillet(0.2)   # 构建一个梯形面

result = (
    cq.Workplane()
    .box(5, 5, 5)
    .faces(">X")
    .workplane()
    .transformed((0, 0, -90))
    .placeSketch(s)
    .cutThruAll()
)

使用loft()时需要重用现有草图。
在这里插入图片描述

from cadquery import Workplane, Sketch, Vector, Location

s1 = Sketch().trapezoid(3, 1, 110).vertices().fillet(0.2)

s2 = Sketch().rect(2, 1).vertices().fillet(0.2)

result = Workplane().placeSketch(s1, s2.moved(Location(Vector(0, 0, 3)))).loft()

放样时仅考虑外部线,而忽略内部线。请注意,当前操作仅考虑堆栈顶部的草图(即没有待处理的草图),因此在放样或扫描时,必须将所有相关草图添加到一个地方草图调用中。

文章来源:CadQuery 中文文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值