在CGAL(Computational Geometry Algorithms Library)中,Polygon_mesh_processing模块提供了用于处理多边形网格数据结构的功能。其中,surface_intersection函数是用来计算模型的表面相交线的工具。
cpp
CGAL_Mesh mesh_orcl;
std::vector<CGAL_Mesh::Vertex_index> vertexmap;
for (int j = 0; j < sample; j++)
{
Point_3 p(ins_dir[j].x, ins_dir[j].y, ins_dir[j].z);
CGAL_Mesh::Vertex_index vi = mesh_orcl.add_vertex(p);
vertexmap.push_back(vi);
}
{
Point_3 p(org.x, org.y, org.z);
CGAL_Mesh::Vertex_index vi = mesh_orcl.add_vertex(p);
vertexmap.push_back(vi);
}
for (int j = 0; j < sample - 1; j++)
{
std::vector<CGAL_Mesh::Vertex_index> vr;
vr.push_back(vertexmap[j]);
vr.push_back(vertexmap[j + 1]);
vr.push_back(vertexmap[vertexmap.size() - 1]);
CGAL_Mesh::Face_index fi = mesh_orcl.add_face(vr);
}
std::vector< std::vector<Point_3> > polyline;
PMP::surface_intersection(mesh_T, mesh_orcl, std::back_inserter(polyline));
std::vector<Point_3> line = polyline.at(0);
std::vector<Point3f> tooth_orc_inter;
for (int i = 0; i < line.size(); i++)
{
Point3f p(line.at(i).x(), line.at(i).y(), line.at(i).z());
tooth_orc_inter.push_back(p);
}