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

OpenCASCADE中合并形体时如何合并公共面?

OpenCASCADE合并长方体公共面的解决方法

默认使用BRepAlgoAPI_Fuse执行融合操作后公共面未被合并,通常是数值公差不匹配或未启用内部元素清理机制导致的,可通过以下步骤解决:

解决步骤

  1. 设置布尔操作的模糊公差
    OpenCASCADE的布尔操作依赖公差阈值,微小数值误差会导致算法无法识别重合面。通过SetFuzzyValue设置合适的公差(如1e-6),让算法忽略微小差异,匹配公共面。

  2. 清理融合后的拓扑结构
    融合操作完成后,需手动移除残留的内部面和边,可使用ShapeUpgrade系列工具完成拓扑清理。

修改后的代码示例

#include <BRepPrimAPI_MakeBox.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <ShapeUpgrade_RemoveInternalEdges.hxx>
#include <ShapeUpgrade_ShapeUpgrade.hxx>

// 创建两个长方体
TopoDS_Shape b1 = BRepPrimAPI_MakeBox(10, 10, 20);
TopoDS_Shape b2 = BRepPrimAPI_MakeBox(gp_Pnt(5, 0, 0), 30, 30, 30);

// 执行融合并设置模糊公差
BRepAlgoAPI_Fuse fuseOp(b1, b2);
fuseOp.SetFuzzyValue(1e-6); // 适配数值精度,识别重合面
fuseOp.Build();
if (!fuseOp.IsDone()) {
    // 处理融合失败的情况
    return;
}
TopoDS_Shape fused = fuseOp.Shape();

// 移除内部边和面
ShapeUpgrade_RemoveInternalEdges edgeRemover;
edgeRemover.SetShape(fused);
edgeRemover.Perform();
TopoDS_Shape cleanedShape = edgeRemover.Shape();

// 进一步全面清理拓扑
ShapeUpgrade_ShapeUpgrade shapeCleaner;
shapeCleaner.Init(cleanedShape);
shapeCleaner.RemoveInternalEdges();
shapeCleaner.Perform();
TopoDS_Shape finalShape = shapeCleaner.Shape();

额外注意事项

  • 确保两个长方体的公共面完全重合,无偏移或部分重叠,否则需先调整几何体的位置/尺寸。
  • 始终通过IsDone()检查布尔操作是否成功,失败时需排查几何模型的合法性。

内容的提问来源于stack exchange,提问作者DKS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:25:54