CGAL 3D 网格生成是否需要封闭流形以外的条件?

Does CGAL 3D mesh generation require condition except closed manifold?

我正在尝试对给定的冠状动脉模型进行三角测量(请参考图像和文件)。

起初,我尝试在 TetGen 引擎中使用 3D 约束 Delaunay 三角剖分对它们进行三角剖分,但似乎 TetGen 并非始终生成它们。我尝试了大约 40 个封闭边界模型,但只有一半成功。

作为替代方案,我发现CGAL 3D网格生成会根据Delaunay三角剖分生成相似的网格(当然是不一样的)来自 3D 约束 Delaunay 三角剖分)。

我还对 40 个模型进行了测试,这些模型与 TetGen 测试中使用的数据集相同,但似乎只有 1/4 成功。这很奇怪,因为处理的模型比 TetGen 测试中更少。

除闭流形条件(无边界流形)外,CGAL网格生成还有其他条件吗?这是我在测试用例中使用的代码。与CGAL网站的示例代码几乎相同。

// Create input polyhedron
Polyhedron polyhedron;
std::ifstream input(fileName.str());
input >> polyhedron;

// Create domain
Mesh_domain domain(polyhedron);

// Mesh criteria (no cell_size set)
Mesh_criteria criteria(facet_angle = 25, facet_size = 0.15, facet_distance = 0.008,
    cell_radius_edge_ratio = 3);

// Mesh generation
C3t3 c3t3 = CGAL::make_mesh_3<C3t3>(domain, criteria, no_perturb(), no_exude());

findMinAndMax();
cout << "Polygon finish: " << c3t3.number_of_cells_in_complex() << endl;

Here is one of CA model which was used in test case.

The image of CA model

此外,我想在生成的网格中保留给定的模型三角形,例如约束 Delaunay 三角剖分。有什么方法可以在没有特定条件的情况下生成网格吗?

如果您想了解更多,请告诉我。

问题是网格生成器没有构建足够好的初始点集。当前的策略是从对象边界框的中心向随机方向发射光线。或者,可以在表面上随机抽取点样本,或者从骨架上的点射出随机光线。我在 github 上为您提供了一个 hacky 解决方案。第一个参数是您的网格,第二个参数是网格单元格大小,以便对网格上的点进行采样。