CGAL - Boost创建无向图

时间:2013-11-29 14:41:09

标签: c++ boost graph mesh cgal

我使用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对象..感谢您的提前帮助

1 个答案:

答案 0 :(得分:1)

CGAL为其许多类提供“Boost Graph适配器”(至少用于三角测量,排列和多面体表面)。请参阅CGAL BGL page中的详细信息。

基本上所有DCEL或类似结构都可以看作两个图的组合,顶点边缘关系的“主要”和细胞边缘关系的“双重”; CGAL为两者提供了Boost图形适配器。

如果这个开箱即用的图表对你不利,那么你必须回答你的核心问题:如何迭代给定单元格的边缘(即“双”图的边缘)或边缘给定顶点(即“原始”图的边缘)。