如何使用CGAL构建仅包含点和边不含面的边缘网格
解答
首先明确:CGAL::Polyhedron_3的设计目标是存储带面的多面体结构,强制要求所有边至少关联一个面,本身确实不支持无面的纯点边结构,不需要硬基于该类实现需求,CGAL有专门适配该场景的组件可以直接使用。
按照你是否需要维护拓扑邻接关系,可以选择对应方案:
- 仅需存储多段线数据、不需要邻接查询:直接使用
CGAL::Polyline_soup_3即可,原生支持单独插入顶点、插入单条线段/整段多段线,不需要定义任何面,结构轻量易操作。 - 需要维护顶点、边的邻接拓扑(比如查询顶点关联的所有边、查询边的端点等):
- 方案1:基于
CGAL::HalfedgeDS自定义最小化半边结构,可仅保留顶点、半边的实例,面属性可以置空甚至完全移除,原生支持单独插入顶点、在两个顶点间创建边的操作。 - 方案2:使用
CGAL::Linear_cell_complex<2,3>,该结构天然支持1维拓扑单元(边),不需要强制构造2维面单元,插入顶点、边的接口开箱即用,还可以直接适配CGAL内置的各类拓扑查询算法。
- 方案1:基于
内容的提问来源于stack exchange,提问作者jjcasmar
相关产品推荐
相关产品推荐

