CGAL Linear_cell_complex (LCC) 成员函数完整列表

1. 核心类与构造

返回值类型函数名参数作用用法
Linear_cell_complex_for_combinatorial_map<d,d2,LCCTraits,Items,Alloc>Linear_cell_complex_for_combinatorial_map()构造空的基于组合图的 d 维线性细胞复合体LCC_3 lcc;
Linear_cell_complex_for_generalized_map<d,d2,LCCTraits,Items,Alloc>Linear_cell_complex_for_generalized_map()构造空的基于广义图的 d 维线性细胞复合体LCC_4 lcc;
Cell_attribute_with_point<LCC,Info_,Tag,OnMerge,OnSplit>Cell_attribute_with_point()构造带点的细胞属性Cell_attribute_with_point<LCC_3, int> attr;
Linear_cell_complex_traits<d,K>Linear_cell_complex_traits()构造线性细胞复合体几何特征类Linear_cell_complex_traits<3, Kernel> traits;
Linear_cell_complex_min_items<d>Linear_cell_complex_min_items()构造最小项类(仅顶点带点属性)Linear_cell_complex_min_items<3> items;

2. 缝合与拆分操作

返回值类型函数名参数作用用法
voidsew<unsigned int i>Dart_descriptor d1, Dart_descriptor d2沿 (i-1) 维细胞缝合两个 i 维细胞,自动合并顶点属性lcc.sew<3>(d1, d2);
voidunsew<unsigned int i>Dart_descriptor d拆分包含 dart d 的 (i-1) 维细胞的 i 维缝合,自动复制顶点属性lcc.unsew<3>(d);
voidremove_cell<unsigned int i>Dart_descriptor d移除包含 dart d 的 i 维细胞lcc.remove_cell<1>(d);
Dart_descriptorinsert_cell_1_in_cell_2Dart_descriptor d1, Dart_descriptor d2在包含 d1 的 2 维细胞中插入 1 维细胞,连接 d1 和 d2 所在顶点lcc.insert_cell_1_in_cell_2(d1, d2);
Dart_descriptorinsert_cell_1_between_two_cells_2Dart_descriptor d1, Dart_descriptor d2在两个 2 维细胞之间插入 1 维细胞,创建孔洞lcc.insert_cell_1_between_two_cells_2(d1, d2);
Dart_descriptorinsert_cell_2_in_cell_3Dart_descriptor d1, Dart_descriptor d2在包含 d1 的 3 维细胞中插入 2 维细胞lcc.insert_cell_2_in_cell_3(d1, d2);

3. 基本几何体构造

返回值类型函数名参数作用用法
Dart_descriptormake_segmentconst Point& p1, const Point& p2创建 1 维线段细胞,返回指向 p1 的 dartlcc.make_segment(Point(0,0,0), Point(1,0,0));
Dart_descriptormake_triangleconst Point& p1, const Point& p2, const Point& p3创建 2 维三角形细胞,返回指向 p1 的 dartlcc.make_triangle(Point(0,0,0), Point(1,0,0), Point(0,1,0));
Dart_descriptormake_quadrangleconst Point& p1, const Point& p2, const Point& p3, const Point& p4创建 2 维四边形细胞,返回指向 p1 的 dartlcc.make_quadrangle(Point(0,0,0), Point(1,0,0), Point(1,1,0), Point(0,1,0));
Dart_descriptormake_tetrahedronconst Point& p1, const Point& p2, const Point& p3, const Point& p4创建 3 维四面体细胞,返回指向 p1 的 dartlcc.make_tetrahedron(Point(-1,0,0), Point(0,2,0), Point(1,0,0), Point(1,1,2));
Dart_descriptormake_hexahedronconst Point& p1, const Point& p2, const Point& p3, const Point& p4, const Point& p5, const Point& p6, const Point& p7, const Point& p8创建 3 维六面体细胞,返回指向 p1 的 dartlcc.make_hexahedron(Point(0,0,0), Point(5,0,0), Point(5,5,0), Point(0,5,0), Point(0,5,4), Point(0,0,4), Point(5,0,4), Point(5,5,4));

4. 数据导入操作

返回值类型函数名参数作用用法
voidimport_from_triangulation_3LCC& lcc, const Triangulation_3& tr将 3D 三角剖分导入线性细胞复合体import_from_triangulation_3(lcc, tr);
voidimport_from_polyhedron_3LCC& lcc, const Polyhedron_3& p将 3D 多面体导入线性细胞复合体import_from_polyhedron_3(lcc, poly);
voidimport_from_plane_graphLCC& lcc, std::istream& is从输入流读取平面图形并导入import_from_plane_graph(lcc, ifile);
voidload_offLCC& lcc, std::istream& is从 OFF 文件加载 2D 表面到 3D 嵌入的线性细胞复合体load_off(lcc, ifile);

5. 细胞修改操作

返回值类型函数名参数作用用法
Dart_descriptorinsert_barycenter_in_cell<unsigned int i>Dart_descriptor d在包含 dart d 的 i 维细胞中插入重心点,返回指向新顶点的 dart(仅支持 i=1 和 i=2)Dart_descriptor d3 = lcc.insert_barycenter_in_cell<2>(d2);
Dart_descriptorinsert_point_in_cell<unsigned int i>Dart_descriptor d, const Point& p在包含 dart d 的 i 维细胞中插入指定点 p,返回指向新顶点的 dart(仅支持 i=1 和 i=2)lcc.insert_point_in_cell<1>(d1, Point(0.5,0,0));
Dart_descriptorinsert_dangling_cell_1_in_cell_2Dart_descriptor d, const Point& p在包含 dart d 的 2 维细胞中插入悬挂边,一端连接 d 所在顶点,另一端为新点 plcc.insert_dangling_cell_1_in_cell_2(d0, Point(1,1,1));
Dart_descriptorinsert_cell_0_in_cell_1Dart_descriptor d, const Point& p在包含 dart d 的 1 维细胞中插入 0 维细胞(顶点),位置为 plcc.insert_cell_0_in_cell_1(d, Point(0.5,0,0));
Dart_descriptorinsert_cell_0_in_cell_2Dart_descriptor d, const Point& p在包含 dart d 的 2 维细胞中插入 0 维细胞(顶点),位置为 plcc.insert_cell_0_in_cell_2(d, Point(0.5,0.5,0));

6. 属性与几何访问

返回值类型函数名参数作用用法
Point&pointDart_descriptor d获取 / 设置 dart d 所在顶点的点坐标lcc.point(d) = Point(1,2,3);
const Point&pointDart_descriptor d const只读获取 dart d 所在顶点的点坐标Point p = lcc.point(d);
Point&point_of_vertex_attributeVertex_attribute_iterator it获取 / 设置顶点属性迭代器指向的点坐标lcc.point_of_vertex_attribute(it) = Point(1,2,3);
const Point&point_of_vertex_attributeVertex_attribute_const_iterator it const只读获取顶点属性迭代器指向的点坐标Point p = lcc.point_of_vertex_attribute(it);
Info&info<unsigned int i>Dart_descriptor d获取 / 设置 dart d 所在 i 维细胞的附加信息lcc.info<0>(d) = 1;
const Info&info<unsigned int i>Dart_descriptor d const只读获取 dart d 所在 i 维细胞的附加信息int color = lcc.info<0>(d);
Info&info_of_attribute<unsigned int i>Cell_attribute_iterator it获取 / 设置 i 维细胞属性迭代器指向的附加信息lcc.info_of_attribute<0>(it) = 5;
const Info&info_of_attribute<unsigned int i>Cell_attribute_const_iterator it const只读获取 i 维细胞属性迭代器指向的附加信息int color = lcc.info_of_attribute<0>(it);
Vertex_attribute_rangevertex_attributes()返回所有顶点属性的范围,用于遍历for (auto& attr : lcc.vertex_attributes()) { ... }
Vertex_attribute_const_rangevertex_attributes() const只读返回所有顶点属性的范围for (const auto& attr : lcc.vertex_attributes()) { ... }

7. 自动属性管理

返回值类型函数名参数作用用法
voidset_automatic_attributes_managementbool enable启用 / 禁用自动属性管理(默认启用),禁用时操作后需手动调用启用以更新属性lcc.set_automatic_attributes_management(false);
boolautomatic_attributes_management() const查询是否启用自动属性管理bool enabled = lcc.automatic_attributes_management();

8. 增量构建器

返回值类型函数名参数作用用法
Linear_cell_complex_incremental_builder_3<LCC>Linear_cell_complex_incremental_builder_3LCC& lcc构造 3D 线性细胞复合体增量构建器Linear_cell_complex_incremental_builder_3<LCC_3> ib(lcc);
std::size_tadd_vertexconst Point& p添加顶点,返回顶点索引ib.add_vertex(Point(0,0,0));
voidbegin_surface()开始构建表面ib.begin_surface();
voidadd_facetconst std::vector<std::size_t>& indices添加面,参数为顶点索引列表ib.add_facet({0,1,2,3});
voidbegin_facet()开始添加单个面ib.begin_facet();
voidadd_vertex_to_facetstd::size_t index向当前面添加顶点索引ib.add_vertex_to_facet(0);
voidend_facet()结束当前面的添加ib.end_facet();
voidend_surface()结束表面构建ib.end_surface();

9. 遍历与查询

返回值类型函数名参数作用用法
One_dart_per_cell_range<i>one_dart_per_cell()返回遍历每个 i 维细胞的一个 dart 的范围for (auto d : lcc.one_dart_per_cell<3>()) { ... }
One_dart_per_incident_cell_range<i,j>one_dart_per_incident_cellDart_descriptor d返回遍历包含 dart d 的 j 维细胞中所有 i 维细胞的一个 dart 的范围for (auto v : lcc.one_dart_per_incident_cell<0,3>(d)) { ... }
Dart_descriptorbetaDart_descriptor d, unsigned int i获取 dart d 的 β_i 关系的 dart(组合图)Dart_descriptor d2 = lcc.beta(d1, 1);
Dart_descriptorbetaDart_descriptor d, unsigned int i1, unsigned int i2, ...连续应用多个 β 关系Dart_descriptor d3 = lcc.beta(d1, 1, 1, 2);
Dart_descriptoralphaDart_descriptor d, unsigned int i获取 dart d 的 α_i 关系的 dart(广义图)Dart_descriptor d2 = lcc.alpha(d1, 1);
Dart_descriptoralphaDart_descriptor d, unsigned int i1, unsigned int i2, ...连续应用多个 α 关系Dart_descriptor d3 = lcc.alpha(d1, 1, 0, 1);
Dart_descriptoropposite<unsigned int i>Dart_descriptor d获取 dart d 的 i 维相反 dartDart_descriptor d2 = lcc.opposite<2>(d1);
Dart_descriptornextDart_descriptor d获取 dart d 的下一个 dart(β_1)Dart_descriptor d2 = lcc.next(d1);
Dart_descriptorpreviousDart_descriptor d获取 dart d 的上一个 dart(β_0)Dart_descriptor d2 = lcc.previous(d1);
std::size_tnumber_of_darts() const返回复合体中 dart 的总数std::size_t nb_darts = lcc.number_of_darts();
std::size_tnumber_of_cells<unsigned int i>() const返回复合体中 i 维细胞的总数std::size_t nb_volumes = lcc.number_of_cells<3>();
boolis_valid() const检查线性细胞复合体是否有效bool valid = lcc.is_valid();
std::ostream&display_characteristicsstd::ostream& os const输出复合体的特征信息(dart 数、各维细胞数等)lcc.display_characteristics(std::cout);

10. 可视化与调试

返回值类型函数名参数作用用法
voiddrawconst LCC& lcc, const GSOptions& gso=GSOptions()打开 Qt 窗口绘制线性细胞复合体(需 CGAL_Qt6 支持)CGAL::draw(lcc);

11. 全局辅助函数

返回值类型函数名参数作用用法
voidtransformLCC& lcc, const Affine_transformation_3& t对线性细胞复合体应用仿射变换transform(lcc, Affine_transformation_3(Translation(), Vector(3,1,1)));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值