如何使用CGAL Arrangement_2区?

How to use CGAL Arrangement_2 zone?

虽然Arrangement_2模块的zone自由函数有一些相关的文档,但是在任何示例文件中都没有提及,用法也不明显。

假设我有一个基于 CGAL::Arr_linear_traits_2 的点和线段排列,我想打印出沿着给定 Segment_2 行走时访问过的所有面孔。我该怎么做?

其实用法还是很明显的。要让所有元素相交,这段代码就足够了:

void segment_intersect(Arrangement_2 &arr, Segment_2 &c)
{
  std::vector<CGAL::Object> zone_elems;
  CGAL::zone(arr, c, std::back_inserter(zone_elems));
}

我还没有找到如何从向量中提取面孔。

您需要使用"assign"函数:

void segment_intersect(Arrangement_2 &arr, Segment_2 &c)
{
  std::vector<CGAL::Object> zone_elems;
  Arrangement_2::Face_handle face;
  CGAL::zone(arr, c, std::back_inserter(zone_elems));
  for ( int i = 0; i < (int)zone_elems.size(); ++i )
    {
      if ( assign(face, zone_elems[i]) )
         //print the face index...
    }
}