我有以下代码:
base = (
cq.Workplane("XY")
.box(10,10,10)
)
top = (
base
.faces(">Z")
.workplane()
.box(5,5,5)
)
如何仅获取
top
框的所有边缘?
edges = top.edges()
包含两个盒子的所有边缘。有没有办法只选择top
框?
我不完全确定你想要实现什么,因为顶盒与底座相交。以下是解决这两种可能情况的方法:
1。如果你想要整个顶盒的边缘:
默认情况下,CadQuery 会合并实体,除非您设置
combine=False
。然后,您可以使用 .vals()
: 单独检索顶部框
base = cq.Workplane("XY").box(10, 10, 10)
top = (
base.faces(">Z")
.workplane()
.box(5, 5, 5, combine=False) # Disable combining
)
combined = base.add(top)
parts = combined.vals()
top_only = parts[1]
top_box_edges = top_only.edges()
show_object(top_box_edges)
2。如果您只想要顶部框的非相交部分:
在这种情况下,您可以使用布尔剪切从顶部框中减去底数 (
top.cut(base)
):
import cadquery as cq
base = cq.Workplane("XY").box(10, 10, 10)
top = (
base.faces(">Z")
.workplane()
.box(5, 5, 5, combine=False) # Disable combining
)
# Get the non-intersecting portion of the top box
non_intersecting = top.cut(base)
non_intersecting_edges = non_intersecting.edges()
show_object(non_intersecting_edges)
希望这对您有帮助!