CadQuery 选择器字符串允许过滤各种类型的对象列表。最常用的是边、面和顶点,但也可以过滤所有对象类型。
使用以下方法创建对象列表,每个方法收集一种形状:
cadquery.Workplane.vertices()
cadquery.Workplane.edges()
cadquery.Workplane.faces()
cadquery.Workplane.shells()
cadquery.Workplane.solids()
每个方法都接受一个选择器对象或一个字符串。字符串选择器用来使用对象非常简单快捷。如果传入字符串模式,CadQuery 将自动使用关联的选择器对象。
::: primary Note
字符串选择器只是具体选择器类的快捷方式,您可以使用或扩展它们。有关每个选择器类如何工作的完整说明,请参阅CadQuery 类摘要。
如果您发现内置选择器不够用,您可以轻松插入自己的选择器。请参阅扩展 CadQuery 以了解具体操作方法。
:::
组合选择器
选择器可以进行逻辑组合,目前定义的运算符包括and、or、not和exc[ept](设置差值)。例如:
result = cq.Workplane("XY").box(2, 2, 2).edges("|Z and >Y").chamfer(0.2)
还可以使用更复杂的表达式:
result = (
cq.Workplane("XY")
.box(2, 2, 2)
.faces(">Z")
.shell(-0.2)
.faces(">Z")
.edges("not(<X or >X or <Y or >Y)")
.chamfer(0.1)
)
过滤面 Faces
所有类型的字符串选择器都适用于面。在大多数情况下,选择器指的是面的 法向量 方向。
::: warning
如果一个面不是平面,选择器在面的质心处进行评估。这可能会导致意想不到的结果。
:::
下面列表中使用的轴用于说明:任何轴在每种情况下都可以类似地工作。
选择器 | 选择 | |
---|---|---|
+Z | 法线朝向+z方向的面(即Z方向最顶端的面) | cadquery.DirectionSelector |
|Z | 法线平行于 z 方向的面 (即法线和Z方向平行,图中上下两个面) | cadquery.ParallelDirSelector |
-X | x 负方向法线面 | cadquery.DirectionSelector |
#Z | 法线正交(垂直)于 z 方向的面 (即法线与Z方向垂直,如图中前后左右4个面) | cadquery.PerpendicularDirSelector |
%Plane | 平面类型的面,如图中前后左右上下6个面 | cadquery.TypeSelector |
>Y | 正 y 方向最远的面 | cadquery.DirectionMinMaxSelector |
<Y | 负 y 方向最远的面 | cadquery.DirectionMinMaxSelector |
>Y[0] >Y[-1] | 按法线方向从负到正,正数编号从0开始,负数编号从 -1 开始>Y[0] 等于 >Y[-4] | cadquery.DirectionNthSelector |
<Y[0] <Y[-1] | 法线方向从正到负,正数编号从0开始,负数编号从 -1 开始 <Y[0] 等于 <Y[-4] | cadquery.DirectionNthSelector |
>>Y[-1] | y 方向第一远的面 相比,>> 强调面的朝向,> 强调法线的朝向 | cadquery.CenterNthSelector |
<<Y[0] | y 方向第一近的面 与 < 相比,<< 强调面的朝向,< 强调法线的朝向 | cadquery.CenterNthSelector |
过滤边 Edges
选择器通常指的是边缘的方向。
::: warning Note
除了类型 (%) 和中心 (>>) 之外,任何字符串选择器都不会选择非线性边缘。应用这些过滤器时,永远不会返回非线性边缘。
:::
下面列表中使用的轴用于说明:任何轴在每种情况下都可以类似地工作。
选择器 | 选择 | |
---|---|---|
+Z | 边的方向与 Z 正方向一致 左图:+Z选中红色边线 右图:沿Y轴旋转180度后,因为改变了边的方向,因此+Z无法选中红色的边线 | cadquery.DirectionSelector |
|Z | 边平行于 z 方向,不管边的方向如何,只要和Z平行即可 对于上边两张图都可以使用 |Z 选中红色部分的边线 | cadquery.ParallelDirSelector |
-X | 边的方向与 x 负方向一致 | cadquery.DirectionSelector |
#Z | 垂直于 z 方向的边 | cadquery.PerpendicularDirSelector |
%Line | 类型为线的边 | cadquery.TypeSelector |
>Y | 正 y 方向最远的边 | cadquery.DirectionMinMaxSelector |
<Y | 负 y 方向最远的边 | cadquery.DirectionMinMaxSelector |
>Y[0] | 正 y 方向,第一近的平行边 | cadquery.DirectionNthSelector |
>Y[-1] | 正 y 方向,第一远的平行边 | cadquery.DirectionNthSelector |
>>Y[0] | 正 y 方向第一近的边缘 与 > 相比,>> 强调线与正Y方向的位置,> 强调必须是平行边 | cadquery.CenterNthSelector |
<<Y[-1] | 负 y 方向第一远的边缘 | cadquery.CenterNthSelector |
过滤顶点 Vertices
只有少数过滤器类型适用于顶点。顶点的位置是过滤器的主题。
|选择器 |选择 |选择器类 |
|:–|
|>Y |正 y 方向最远的顶点 |cadquery.DirectionMinMaxSelector
|
|<Y |负 y 方向最远的顶点 |cadquery.DirectionMinMaxSelector
|
|>>Y[-2] |y 方向第二远的顶点
!!#ff0000 >> 与 > 对于顶点来说暂未发现区别 !! |cadquery.CenterNthSelector
|
|<<Y[0] |y 方向中第一近的顶点 |cadquery.CenterNthSelector
|
用户定义的方向
可以使用用户定义的向量作为选择器的基础。例如:
result = cq.Workplane("XY").box(10, 10, 10)
# chamfer only one edge
result = result.edges(">(-1, 1, 0)").chamfer(1)
拓扑选择器
也可以利用拓扑关系来选择对象。目前支持以下方法:
祖先允许选择包含当前所选对象的所有对象。
result = cq.Workplane("XY").box(10, 10, 10).faces(">Z").edges("<Y")
result = result.ancestors("Face")
同类对象允许选择所有通过指定类型元素连接的同类对象。
result = cq.Workplane("XY").box(10, 10, 10).faces(">Z")
result = result.siblings("Edge")
将选择器与形状和草图对象一起使用
可以将选择器与cadquery.Shape
和cadquery.Sketch
对象一起使用。这包括链接和组合。
box = cq.Solid.makeBox(1,2,3)
# select top and bottom wires
result = cq.Workplane(obj=box).faces(">Z or <Z").wires()