从Projection_traits_xy_3约束delaunay获取mesh_3'off'

时间:2015-11-24 09:16:21

标签: c++ cgal

我使用projection_traits_xy_3 [1]从2.5D数据计算了2D约束delaunay三角剖分。现在我想得到一个我可以想象的网格。

我已经设法在手册[2]之后用3d delaunay做到了这一点,我怎么能用2.5D CDT来实现呢?

[...]
typedef CGAL::Projection_traits_xy_3<K>  Gt;
typedef CGAL::Constrained_Delaunay_triangulation_2<Gt, Tds> CDT;
[...]
CDT cdt;
cdt.insert(points.begin(),points.end());
[...]
¿?
[...]
std::ofstream out(outdir + "out.off");
Polyhedron output_mesh;
CGAL::output_surface_facets_to_polyhedron(¿?, output_mesh);
out << output_mesh;

[1] http://pastebin.com/HzAwrnW5

[2] http://doc.cgal.org/latest/Point_set_processing_3/index.html#chappoint_set_processing_3 http://doc.cgal.org/latest/Surface_reconstruction_points_3/

2 个答案:

答案 0 :(得分:0)

这里有伪代码将其写入关闭文件

cout << "OFF\n"  << cdt.number_of_vertices() 
      << " "  << cdt.number_of_faces() << " 0" << std::endl;

std::map<vertex_handle,int> indices;
int counter = 0;

for all finite vertices v  {   
  cout << v->point() <<std::endl;
  indices.insert(v, counter++); 
}

for all finite faces f {  
  cout << "3 " << indices[f->vertex(0)]    
       << " "  << indices[f->vertex(1)] 
       << " "  << indices[f->vertex(2)] << std::endl;  
}

答案 1 :(得分:0)

来自@Andreas的建议:

以下是将其写入关闭文件的代码

std::ofstream outstream("output.off");
outstream << "OFF\n"  << cdt.number_of_vertices()
      << " "  << cdt.number_of_faces() << " 0" << std::endl;

std::map<CDT::Vertex_handle,int> indices;
int counter = 0;

for(CDT::Finite_vertices_iterator it = cdt.finite_vertices_begin(); it != cdt.finite_vertices_end(); ++it)
{
  outstream << it->point() << std::endl;
  indices.insert(std::pair<CDT::Vertex_handle,int>(it, counter++));
}

for(CDT::Finite_faces_iterator it = cdt.finite_faces_begin(); it != cdt.finite_faces_end(); ++it)
{
  outstream << "3 " << indices[it->vertex(0)] 
            << " "  << indices[it->vertex(1)]
            << " "  << indices[it->vertex(2)] << std::endl;
}