c++ - CGAL:从网格中读取顶点和三角形

标签 c++ mesh cgal

我只是花了几个小时在 Visual Studio C++ 中使用 CGAL,试图了解网格的工作原理。我想要得到的是访问顶点和三角形列表(double[3] 形式的顶点,int[3] 形式的三角形)。这是我正在处理的脚本:

http://doc.cgal.org/latest/Surface_mesher/Surface_mesher_2mesh_a_3d_gray_image_8cpp-example.html

重点是 - 函数 CGAL::output_surface_facets_to_off (out, c2t3); 以 .off 格式输出一个不错的文件(可由 MeshLab 访问),但我不能做任何类似的事情操纵 c2t3tr 变量。我期待的是这样的:

c2t3.vertices(从 0 到 N)和 c2t3.triangles(从 0 到 M),其值为整数的三元组。我得到的是顶点列表、小平面列表、单元列表、边列表……除了在未排序的顶点列表中查找每个顶点编号之外,没有其他方法可以从小平面获取顶点编号。

任何人都可以解决我的问题并指出我做错了什么吗?此外,CGAL 的 API 非常……原始。挖掘源代码也非常困难 - 我找不到 output_surface 函数体。

最佳答案

好的,我在 Complex_2_in_triangulation_3_file_writer.h 文件中找到了答案。显然,CGAL 库正在创建整个顶点图并在该图中寻找小平面顶点。代码部分:

using CGAL::Surface_mesher::number_of_facets_on_surface;

typedef typename C2t3::Triangulation Tr;
typedef typename Tr::Finite_facets_iterator Finite_facets_iterator;
typedef typename Tr::Finite_vertices_iterator Finite_vertices_iterator;
typedef typename Tr::Facet Facet;
typedef typename Tr::Edge Edge;
typedef typename Tr::Vertex_handle Vertex_handle;

std::map<Vertex_handle, int> V;
int inum = 0;
for(Finite_vertices_iterator vit = tr.finite_vertices_begin();
vit != tr.finite_vertices_end();
++vit)
{
    V[vit] = inum++;
}

for( Finite_facets_iterator fit = tr.finite_facets_begin();
fit != tr.finite_facets_end(); ++fit)
{
const typename Tr::Cell_handle cell = fit->first;
const int& index = fit->second;
    if (cell->is_facet_on_surface(index)==true)
    {
    const int index1 = V[cell->vertex(tr.vertex_triple_index(index, 0))];
    const int index2 = V[cell->vertex(tr.vertex_triple_index(index, 1))];
    const int index3 = V[cell->vertex(tr.vertex_triple_index(index, 2))];
    }
}

关于c++ - CGAL:从网格中读取顶点和三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39521720/

相关文章:

c++ - 从 Qt 外部运行时 Qt5 应用程序崩溃

c++ - 编译没有ros的roscpp(使用g++)

python - 使用 SciPy 规则网格在 Python 中进行快速二维插值以进行分散/不规则评估

graphics - 从多边形网格中唯一查找边的算法

javafx - 在javafx中向场景添加多个三角形网格的问题

c++ - 如何将曲面网格变成多面体?

c++ - mac上编译CGAL程序,使用macports安装

c++ - 如何在 C++ 的 NetBeans 中预览 STL 容器(例如 std::map)中的变量?

c++ - 为什么函数不能阻止不同返回类型的构造?

c++ - CGAL union 误解