Cadquery技术问题:如何在立方体多面创建孔?代码组合后失效
解决CadQuery多面连续打孔失效问题
问题原因
在CadQuery操作链中,完成第一个cboreHole后,当前工作上下文停留在打孔后的局部工作平面,直接调用.faces(">Z")无法正确选中原始立方体的>Z面,导致后续打孔操作失效。
修复方案
方案1:用end()退回至原始实体上下文
每次完成一个面的打孔后,通过end()回到初始实体的上下文,再进行下一个面的选择:
import cadquery as cq s = cq.Workplane().box(200,100,25) s = (s .faces("<X") .workplane() .pushPoints([(10, 0)]) .cboreHole(5, 6, 10, depth=10) .end() # 退回至原始实体的上下文 .faces(">Z") .workplane() .pushPoints([(0, 10)]) .cboreHole(5,6,10,depth=10) ) show_object(s)
方案2:标记初始实体,从标记处重置上下文
先给初始立方体打标签,后续通过标签回到初始实体上下文:
import cadquery as cq s = cq.Workplane().box(200,100,25).tag("base") # 标记初始立方体 s = (s .faces("<X") .workplane() .pushPoints([(10, 0)]) .cboreHole(5, 6, 10, depth=10) .workplaneFromTagged("base") # 回到标记的初始实体 .faces(">Z") .workplane() .pushPoints([(0, 10)]) .cboreHole(5,6,10,depth=10) ) show_object(s)
原理说明
CadQuery的操作链是上下文敏感的,每一步操作会更新当前的工作平面与选中的几何对象。完成打孔后,上下文停留在打孔的局部工作平面,无法直接选中原始实体的其他面。通过end()或workplaneFromTagged()可以重置上下文,回到初始实体,从而正确选择目标面执行后续操作。
内容的提问来源于stack exchange,提问作者underflow
相关产品推荐
相关产品推荐

