NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包

Shape Healing 工具箱提供了一组工具来处理 Open CASCADE Technology (OCCT) 形状的几何和拓扑、完成形状修复与调整任务,使它们尽可能适合 Open CASCADE 技术使用。

1、Shape Healing包用例

以下是一些典型问题的示例,并附有 Shape Healing 如何处理这些问题的说明:

  • 缺少接缝边缘的面

问题:周期性表面(surface)上的面(face)由线框(wire)限定, 这些线在 3d 中闭合但在表面的参数空间中不闭合。 这在 Open CASCADE 中无效。

解决方案:Shape Healing包通过插入结合两条开放线的接缝边缘修复此面,从而闭合参数空间。 请注意,内部线框已正确处理。

  • 线框方向错误

问题:面的线框方向不正确,导致面的内部和外部混合在一起。

解决方案:Shape Healing包可恢复线框的正确方向。

  • 自相交线框

问题:面无效,因为它的边界线框有自相交(在两个相邻边上)。

解决方案:Shape Healing包在交点处切割相交边,从而使边界有效。

  • 缺边

问题:线框中两条边(edge)之间有缝隙,导致线框没有闭合。

解决方案:Shape Healing包通过插入缺失的边来缩小间隙。

2、 Shape Healing包结构

Shape Healing 目前包括几个旨在帮助:

  • 分析形状特征,特别是识别不符合 Open CASCADE 技术有效性规则的形状;
  • 修复形状可能存在的一些问题;
  • 可根据用户需求升级形状特征,如C0支撑表面可升级为C1连续。

下图显示了 API 包的依赖关系:

每个子域都有自己的功能范围:

  • 分析(analysis)—探索形状属性,计算形状特征,检测是否违反 OCCT 要求(形状本身未被修改);
  • 修复(fixing)— 修复形状以满足OCCT要求(形状可能会改变其原始形式:修改、移除、构建子形状等);
  • 升级(upgrade)—形状改进,以提高 Open CASCADE 技术或其他算法的可用性(形状被新形状替换,但几何形状相同);
  • 定制(custom)——修改形状表示以满足特定需求(形状未修改,仅修改其表示形式);
  • 处理(processing)——通过用户可编辑的资源文件管理形状修改的机制。

消息管理用于创建消息,用各种参数填充它们并将它们存储在跟踪文件中。 此工具提供将消息附加到形状的功能,以便对各种运行时事件进行延迟分析。 在本文档中,将仅描述使用形状修复的一般原则。 有关更多详细信息,请参阅相应的头文件。

负责分析、修复和升级形状的工具可以提供有关如何执行这些操作的信息。 用户可以借助状态查询机制获得这些信息。

3、查询工具状态

每个修复和升级工具都有自己的状态,当它们的方法被调用时会被重置。 状态可以包含多个标志,这些标志提供有关如何执行该方法的信息。 为了探索状态,提供了一组名为 StatusXXX() 的方法,例如  ShapeFix_Wire::StatusReorder()。 这些方法接受枚举 ShapeExtend_Status,如果状态设置了相应的标志,则返回 True。 每种方法的标志的含义如下所述。

状态可能包含一组布尔标志(内部由位表示)。 标志由枚举 ShapeExtend_Status 编码。 此枚举提供以下状态系列:

  • ShapeExtend_OK – 情况正常,不需要任何操作,也没有执行。
  • ShapeExtend_DONE – 操作已成功执行。
  • ShapeExtend_FAIL – 操作期间发生错误。

可以使用类提供的 StatusXXX() 方法来测试某些标志是否存在的状态:

if (object.StatusXXX (ShapeExtend_DONE))
{
  // something was done
}

定义了 8 个“DONE”和 8 个“FAIL”标志,名为 ShapeExtend_DONE1 ... ShapeExtend_FAIL8,用于对遇到的情况进行详细分析。 每个方法都为每个标志分配自己的含义,记录在该方法的标头中。 还有三个枚举值用于一次测试多个标志:

  • ShapeExtend_OK——如果没有设置标志;
  • ShapeExtend_DONE——如果至少设置了一个 ShapeExtend_DONEi;
  • ShapeExtend_FAIL——如果至少设置了一个 ShapeExtend_FAILi。

4、修复算法

修复有问题(违反 OCCT 要求)几何形状的算法位于包 ShapeFix 中。

ShapeFix 包的每一类都处理一种特定类型的形状或一些问题。

在使用 ShapeFix 之前,没有必要检测问题,因为 ShapeFix 包的所有组件都会在使用 ShapeAnalysis 包中的相应工具修复现有问题之前对存在的问题进行分析,然后修复发现的问题。

ShapeFix 包当前包括以下功能:

  • 在缺少的地方添加 2D 曲线或 3D 曲线,
  • 当 2D 曲线与 3D 曲线的偏差超过给定的公差值时,纠正该偏差,
  • 将形状的公差值限制在给定范围内,
  • 为形状设置给定的公差值,
  • 修复导线相邻边缘之间的连接,
  • 正确的自相交线,
  • 添加接缝边
  • 修正 3D 和 2D 曲线之间的间隙,
  • 合并并删除小的边
  • 修正壳和实体的方向。

5、Shap Healing快速上手

修复几何形状的最简单方法是在具有默认参数的整个形状上使用类 ShapeFix_Shape 和 ShapeFix_Wireframe。 这些工具的组合可以解决形状可能存在的大部分问题。 动作顺序如下:

  1. 创建工具 ShapeFix_Shape 并按形状对其进行初始化:
Handle(ShapeFix_Shape) aFixShape = new ShapeFix_Shape();
aFixShape->Init(theShape);

2. 设置基本精度、最大/最小允许公差:

aFixShape->SetPrecision (thePrec);
aFixShape->SetMaxTolerance (theMaxTol);
aFixShape->SetMinTolerance (theMintol);

其中:

  • thePrec—基本精度。
  • theMaxTol – 最大允许公差。 当无效维度大于基本精度或检测到该问题的子形状公差时,将检测所有问题。 最大公差值限制了解决问题的增加公差,例如修复未连接和自相交的电线。 如果纠正检测到的问题需要大于最大允许公差的值,则无法修复该问题。 在计算 ShapeFix_SameParameter() 方法和 ShapeFix_Edge::FixVertexTolerance() 方法中的边公差时,不考虑最大公差。 有关详细信息,请参见边缘修复工具。
  • theMintol – 最小允许公差。 它定义了边的最小允许长度。 如果线修复工具中的 ModifyTopologyMode 设置为 true,检测到的长度小于指定最小公差的边将被删除。 详见电线维修工具。

3. 启动修复

aFixShape->Perform();

4. 得到结果

TopoDS_Shape aResult = aFixShape->Shape();

在某些情况下,仅使用 ShapeFix_Shape 可能是不够的。 可以使用工具合并和移除小边以及修复 2D 和 3D 曲线之间的间隙。

5. 创建 ShapeFix_Wireframe 工具并按形状对其进行初始化

Handle(ShapeFix_Wireframe) aFixWire = new ShapeFix_Wireframe (theShape);

或者:

Handle(ShapeFix_Wireframe) aFixWire = new ShapeFix_Wireframe();
aFixWire->Load (theShape);

6. 设置基本精度和最大允许公差:

aFixWire->SetPrecision (thePrec);
aFixWire->SetMaxTolerance (theMaxTol);

请参阅上面的 thePrec 和 theMaxTol 的描述。
7. 合并和移除小边

aFixWire->DropSmallEdgesMode() = true;
aFixWire->FixSmallEdges();

注意:默认模式下不会移除小边,但在许多情况下移除小边对于修复形状非常有用。
8. 修复 2D 和 3D 曲线的间隙

aFixWire->FixWireGaps();

9. 得到结果

TopoDS_Shape aResult = aFixWire->Shape();

原文链接:OpenCascade Shape Healing Toolkit

BimAnt翻译整理,转载请标明出处