Cadquery装配异常:堆叠箱体出现重复项,数量不符预期
CadQuery装配体显示异常问题解决
问题原因
你的代码中,box1和box2并非独立的单个箱体:
- 使用
combine=False创建新箱体时,CadQuery会保留之前Workplane中的所有实体,再添加新创建的箱体。因此box1包含原box0实体+新30厚度箱体,共2个实体;box2包含box1的2个实体+新10厚度箱体,共3个实体。 - 将这三个变量全部加入装配体后,会重复叠加之前的实体,最终显示出多余的箱体。
修复方案
方案1:单独创建箱体并通过约束定位
直接创建独立的箱体,利用装配体约束实现精准堆叠:
import cadquery as cq # 创建三个独立箱体 box0 = cq.Workplane("front").box(50, 50, 50) box1 = cq.Workplane("front").box(50, 50, 30) box2 = cq.Workplane("front").box(50, 50, 10) # 创建装配体并添加约束 assy = cq.Assembly() assy.add(box0, name="0") # 让box1的底部与box0的顶部贴合 assy.add(box1, name="1").constrain("0", ">Z", "1", "<Z", "Mate") # 让box2的底部与box1的顶部贴合 assy.add(box2, name="2").constrain("1", ">Z", "2", "<Z", "Mate") # 求解约束完成装配 assy.solve()
方案2:仅保留新创建的箱体
如果坚持基于前一个箱体的表面创建新箱体,只需提取最后创建的单个实体,避免保留历史实体:
import cadquery as cq box0 = cq.Workplane("front").box(50,50,50) # 使用.last()仅获取新创建的30厚度箱体 box1 = box0.faces(">Z").workplane().box(50,50,30, combine=False).last() # 同理提取新创建的10厚度箱体 box2 = box1.faces(">Z").workplane().box(50,50,10, combine=False).last() assy = cq.Assembly() assy.add(box0, name="0").add(box1, name="1").add(box2, name="2")
两种方案都能实现预期的3个箱体堆叠效果,从侧面XY平面看,厚度从上到下依次为10、30、50。
内容的提问来源于stack exchange,提问作者Shrinivas Ganti
相关产品推荐
相关产品推荐

