聚合全网技术文章,根据你的阅读喜好进行个性推荐
请问CGAL中,我可以从Mesh中获取到Face_range,但是我无法自己构造它?
操作系统:Windows11 语言:C++ 编译器:VS2022社区版
在CGAL中,Face_range是一个由一系列Face_handle组成的范围(range),可以通过Mesh类的faces()方法来获取Mesh中所有的面(Face_handle),例如:
faces()
#include <CGAL/Simple_cartesian.h> #include <CGAL/Polyhedron_3.h> typedef CGAL::Simple_cartesian<double> Kernel; typedef CGAL::Polyhedron_3<Kernel> Polyhedron; int main() { // 构造Polyhedron对象 Polyhedron P; // 添加顶点 P.make_tetrahedron(); // 构造Face_range对象 auto faces = P.faces(); // 遍历Face_range for (auto f = faces.begin(); f != faces.end(); ++f) { // 处理Face_handle } return 0; }
如果需要自己构造Face_range对象,可以使用CGAL::Iterator_range和CGAL::counting_iterator来实现,例如:
#include <CGAL/Iterator_range.h> #include <CGAL/iterator.h> typedef CGAL::Simple_cartesian<double> Kernel; typedef CGAL::Polyhedron_3<Kernel> Polyhedron; int main() { // 构造Polyhedron对象 Polyhedron P; // 添加顶点 P.make_tetrahedron(); // 手动构造Face_range对象 auto faces = CGAL::make_iterator_range(CGAL::counting_iterator<Polyhedron::Face_index>(0), CGAL::counting_iterator<Polyhedron::Face_index>(P.size_of_facets())); // 遍历Face_range for (auto f = faces.begin(); f != faces.end(); ++f) { // 处理Face_handle } return 0; }
需要注意的是,手动构造Face_range对象时,需要提供Face_index类型的迭代器,用于表示Face_handle在Mesh中的索引。可以使用CGAL::counting_iterator和Mesh的size_of_facets()方法来构造迭代器范围。
size_of_facets()
在CGAL中,Face_range是一个由一系列Face_handle组成的范围(range),可以通过Mesh类的
faces()
方法来获取Mesh中所有的面(Face_handle),例如:如果需要自己构造Face_range对象,可以使用CGAL::Iterator_range和CGAL::counting_iterator来实现,例如:
需要注意的是,手动构造Face_range对象时,需要提供Face_index类型的迭代器,用于表示Face_handle在Mesh中的索引。可以使用CGAL::counting_iterator和Mesh的
size_of_facets()
方法来构造迭代器范围。