You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 10:52:15