我使用Cgal的文档创建了一个3D Volume网格,我成功地可视化了我的c3t3(三角测量3中的Complex 3)对象。网格由几个连接的组件组成,其中我想要使用boost找到它的数量。
在过去处理c2t3(三角测量3中的cimplex 2),迭代顶点,使用vertex_descriptor制作对,然后再次遍历找到顶点的边缘,并使用add_edge创建无向图,最后返回cc的数量
现在,c3t3对象只提供有关顶点nad单元格的迭代器(不是边缘 - 只能隐式找到)。你能帮我把c3t3对象传递给Boost的图形结构吗?
到目前为止我做了:
for (Cell_iterator c_it=c3t3.cells_in_complex_begin(); c_it != c3t3.cells_in_complex_end(); ++c_it)
{
Vertex_descriptor vd1 = boost::add_vertex(graph);
Vertex_descriptor vd2 = boost::add_vertex(graph);
Vertex_descriptor vd3 = boost::add_vertex(graph);
Vertex_descriptor vd4 = boost::add_vertex(graph);
C3t3::Vertex_handle v0 = c_it->vertex(0);
C3t3::Vertex_handle v1 = c_it->vertex(1);
C3t3::Vertex_handle v2 = c_it->vertex(2);
C3t3::Vertex_handle v3 = c_it->vertex(3);
vertex_id_map.insert(std::make_pair(v0, vd1));
vertex_id_map.insert(std::make_pair(v1, vd2));
vertex_id_map.insert(std::make_pair(v2, vd3));
vertex_id_map.insert(std::make_pair(v3, vd4));
}
现在我必须创建边缘,但我不知道在哪里找到正确的边缘对应于我的c3t3对象..感谢您的提前帮助
答案 0 :(得分:1)
CGAL为其许多类提供“Boost Graph适配器”(至少用于三角测量,排列和多面体表面)。请参阅CGAL BGL page中的详细信息。
基本上所有DCEL或类似结构都可以看作两个图的组合,顶点边缘关系的“主要”和细胞边缘关系的“双重”; CGAL为两者提供了Boost图形适配器。
如果这个开箱即用的图表对你不利,那么你必须回答你的核心问题:如何迭代给定单元格的边缘(即“双”图的边缘)或边缘给定顶点(即“原始”图的边缘)。