如何使用CGAL::IO::write_PLY直接导出均值曲率流骨架为PLY文件
CGAL 骨架导出PLY文件问题解决方案
问题1:能否直接对CGAL平均曲率流骨架调用CGAL::IO::write_PLY?
不可行。CGAL的CGAL::Mean_curvature_flow_skeletonization生成的骨架本质是Boost Graph库的adjacency_list实例,默认没有实现CGAL::IO::write_PLY模板要求的顶点点属性映射规范,你遇到的编译错误就是因为模板实例化时找不到点属性对应的reference类型定义,自行特化属性映射的开发成本很高,不推荐。
问题2:可选的替代实现方案
方案1:修复你现有的surface_mesh转换逻辑
你导出的PLY只有顶点没有边,是因为CGAL::IO::write_PLY针对surface_mesh的默认导出规则仅写入面元素,不会自动导出边,只需要在调用接口时显式开启边写入参数即可:
CGAL::IO::write_PLY(outputStream, mesh, CGAL::parameters::write_edges(true));
只要你确认转换后的surface_mesh边数据正确,调用后即可同时导出顶点和边。
方案2:直接写入线段集合(更简洁)
不需要额外构造网格对象,直接遍历骨架的顶点和边构造点列表与索引边列表,调用线段写入专用接口即可:
// 类型可根据你使用的CGAL内核调整 std::vector<CGAL::Point_3<Kernel>> skel_points; std::vector<std::pair<std::size_t, std::size_t>> skel_edges; // 遍历骨架顶点填充skel_points,记录每个骨架顶点对应的索引 // 遍历骨架边,将两个顶点的索引存入skel_edges // 直接写入点+边 CGAL::IO::write_PLY(outputStream, skel_points, skel_edges);
该方案代码量更少,也不需要处理网格的半边结构逻辑。
内容的提问来源于stack exchange,提问作者Dan Bumbarger
相关产品推荐
相关产品推荐

