You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 22:54:01