在CGAL(Computational Geometry Algorithms Library)中,Polygon_mesh_processing模块提供了用于处理多边形网格数据结构的功能。其中,surface_intersection函数是用来计算模型的表面相交线的工具。
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);}