0

我正在使用OpenCascade将 STEP/IGES 作为网格导入到我的软件中。效果很好。

但是我需要小三角形,而我得到的三角形有时非常大(在平坦区域),或者非常细长(例如,在啮合圆柱体时)。最好的办法是分割三角形的边缘大于某个绝对值。也避免 T 顶点。

我无法在谷歌上搜索任何关于它的内容......所以,目前,我将网格传递给OpenMesh,应用OpenMesh::Subdivider::Uniform::LongestEdgeT运算符,然后将其传递回我的软件。当我管理几个 M 三角形时,既繁琐又昂贵……

问题:

  1. OpenCascade中是否有等价物?
  2. 或者一个简单的代码片段来实现我自己的循环来做到这一点?

谢谢 !

4

1 回答 1

0

Open CASCADE技术自带的网格划分算法BRepMesh_IncrementalMesh主要针对两个使用场景:

  • 3D 查看器中的可视化。大而长的三角形不会损害呈现,因为顶点法线确保适当的平滑阴影。偏转参数允许管理演示质量。
  • 使用三角测量作为近似值的计算算法(与处理精确几何的相同算法相比,加快计算速度)。在这种情况下,偏转参数决定了算法的目标精度。大而长的三角形在这里不应引起问题,因为与精确几何形状的偏差由网格参数控制。

然而,在某些类别的算法中,网格元素的形状非常重要。求解器(数值模拟)属于此类类别之一,其中不幸的网格元素可能导致数值不稳定或其他问题。真正重要/导致问题的原因取决于特定的算法——这可能包括元素偏度、元素纵横比、元素大小和元素网格。一些求解器在四边形而不是三角形上工作得更好。

如果您查看BRepMesh_IncrementalMesh算法的网格划分结果,您可能会注意到不仅大的延长三角形,而且整个网格结构对于求解器算法来说都不是最优的:

BRepMesh

您可以考虑以下几种选择:

  • 三角剖分细化算法。这种算法处理现有的三角剖分并尝试修复一些属性,如偏度。我想这对你的问题有什么作用。这种后处理算法可能会以良好的性能给出令人满意的结果,但最终结果将很大程度上取决于原始网格划分算法的属性。目前,OCCT 没有任何细化工具,尽管您可以自己编写这样的算法(我不能给你一个小的代码片段,因为这样的算法并不像乍一看那么小)。

    精致的 BRepMesh

  • 考虑替代网格划分算法。可能不完整的列表:
    • Express Mesh by Open Cascade(因此,直接处理 OCCT 形状)。该工具生成具有良好的类似网格结构(用于光滑表面)、可配置元素大小和四主导生成选项的三角剖分。虽然这是一个商业产品。 ExpressMesh
    • Netgen网格器。这个开源工具提供与 OCCT 的绑定,虽然它专注于 3D 四面体网格生成,但它也可用于生成常见的三角形网格。我不能说这个工具有什么好处——当我多年前看到它的工作时,它相当缓慢且不稳定。
    • MeshGems表面网格划分。另一个提供 OCCT 接口的商业工具。从未使用过此产品,因此无法对此发表任何意见。
  • 考虑改进 BRepMesh_IncrementalMesh。由于 OCCT 是一个开源框架,您可以考虑使用更多参数扩展其网格划分算法并为项目做出贡献。
于 2020-06-06T12:32:42.130 回答