我有一些 C++ 代码可以从步骤文件生成网格,然后分析这些网格以从不同的观察方向看到面的可见性。我目前使用 CGAL,但我想切换到使用 gmsh 进行网格划分。我遇到的问题是 gmsh 不能很好地啮合平面圆柱面,它使一些面缩进,这弄乱了我的可见性分析。
我查看了 gmsh 文档并使用了它的设置,但我无法解决这个问题。我正在使用的步骤文件是:io1-cm-214.stp。
使用 gmsh 的零件,在零件的中心孔中显示出奇怪的缩进圆柱面:

任何帮助,将不胜感激。
我有一些 C++ 代码可以从步骤文件生成网格,然后分析这些网格以从不同的观察方向看到面的可见性。我目前使用 CGAL,但我想切换到使用 gmsh 进行网格划分。我遇到的问题是 gmsh 不能很好地啮合平面圆柱面,它使一些面缩进,这弄乱了我的可见性分析。
我查看了 gmsh 文档并使用了它的设置,但我无法解决这个问题。我正在使用的步骤文件是:io1-cm-214.stp。
使用 gmsh 的零件,在零件的中心孔中显示出奇怪的缩进圆柱面:

任何帮助,将不胜感激。
我认为您需要知道,当您使用四面体网格对体积进行离散化时,由于三角剖分,您将获得完美曲面的近似值。
您从 STEP 文件格式开始,它不是网格格式,而是CAD格式。CAD格式和网格格式之间的区别在于,STEP、IGES、SAT 等CAD格式显示了歧管的拓扑结构,如果您在 SolidWorks 或 CATIA 中创建圆柱体,我假设您使用过这些软件或至少使用过这些软件类似的用于创建您的 STEP 文件,它们向您展示了一个没有缺陷的完美圆柱体,例如您在此处看到的那些。
另一方面,像 STL、MSH、VTP 等网格格式用微小的三角形来近似流形(或者体积用微小的四面体,但你只看到表面上的三角形)。结果,无论您如何细化网格尺寸,总会有一些微小或微小的缺陷存在。在某些时候,渲染器可能不会向您显示它,我会在最后举一些例子,但是您需要知道仍然存在那些由小三角形逼近表面引起的缺陷。
现在,让我们看一些简单的圆柱体示例。我会在 ParaView 中创建一个圆柱体,但更改分辨率可以让它看起来很平滑,但瑕疵,无论多么微小,仍然存在:
ParaView 创建的第一个不完美圆柱体:
现在,让我们提高分辨率,看看这里会发生什么:
看,对于更高的分辨率,你几乎看不到瑕疵,但它们仍然存在。
所以结论:如果您认为您看到的缺陷可能对您的进一步过程(如模拟)有害,您需要细化您的网格以获得更好的表面近似。