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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:23:26