使用OpenCASACDE库实现HyperMesh中的toggle edge功能
概述
在HyperMesh的几何清理模块中,Quick Edit面板下的toggle edge功能非常强大,在HyperMesh帮助文档中的解释如下:
Use the lines selector to select line(s).
Left-click a free edge (red) to make it shared (green), or a shared edge to make it suppressed (blue).
Right-click a suppressed edge to make it shared, or a shared edge to make it free.
In either case, the edge must meet the criteria for the type of edge you wish to change it to. For example, toggling a free edge to a shared edge requires the presence of a similar edge within the distance you specify in the tolerance field.
其主要作用就是在容差参数的控制下,实现free edge、shared edge 和 suppressed edge之间的正向或逆向转换,逻辑非常清晰、易懂。其中shared edge还分为共享边和T型边,这里不做讨论。
OpenCASCADE版本:OpenCASCADE-7.4.0-vc14-64
Visual Studio版本:Visual Studio Community 2017
HyperMesh版本:Altair HyperWorks Version 2020

OpenCASCADE中的free edge和shared edge
从free edge和shared edge的定义可知,free edge只和一个面相关,而shared edge则由两个面共享。因此在OpenCASCADE中我们只需要知道这个edge和几个面相关就可以对它进行判断。示例代码如下:

shared edge 到 free edge的转换
想要实现从shared edge 到 free edge的转换可以借助OpenCASACDE中的BRepBuilderAPI_Copy 和 BRepTools_ReShape 两个类,主要思路是复制这个shared edge,并使用这个复制出来的edge去替代与这个shared edge相关的两个surface其中之一的对应的edge,这样这个原来的shared edge就变成了两个free edge。代码如下:
这里的关键点在于使用复制出来的edge去替换时应该只应用于其中一个Face,把得到的新的Face再次进行替换之后再应用到整个模型。
从free edge 到 shared edge的转换
把两个 free edge 转换为 shared edge,即把两个有重合edge的TopoDS_Face通过某种方式转化为TopoDS_Shell,在OpenCASCADE中已经提供了这样的类:BRepBuilderAPI_Sewing,使用方法如下:

总结
借助BRepBuilderAPI_Copy 和 BRepTools_ReShape我们可以实现从shared edge 到 free edge的转换,而使用BRepBuilderAPI_Sewing可以使两个 free edge 转换为 shared edge。对 suppress 和 unsuppress 两个功能的实现还需要进一步探究。
参考
https://dev.opencascade.org/content/sewing-faces-keep-track-sewed-faces
https://dev.opencascade.org/content/local-sewing-opencascade