CGAL-向Triangle类添加数据的正确方法

时间:2018-10-03 16:00:51

标签: c++ cgal

我已经开始使用CGAL,遇到了我无法解决的问题。我将模型加载为三角形列表,并希望存储每个三角形的其他信息-颜色。我也想使用CGAL的AABB树,但是我注意到我基本上有两个选择:

class DataTriangle {
public:
     Point_3 x;
     Point_3 y;
     Point_3 z;

     int color;         
}
  1. 按照“ AABB_custom_example.cpp”示例创建一个函子,该函子每次将我的DataTriangle转换为CGAL :: Simple_cartesian :: Triangle_3。这会浪费计算时间,因为它每次都会构造一个新的Triangle_3对象。
  2. 我可以制作自己的三角形,并将Triangle_3包括在内:

    class MyTriangle {
        Triangle mTriangleCgal;
        int color;
        const Triangle& getTri() const { return mTriangleCgal; }
    }
    

    然后再次声明My_triangle_primitive仿函数,定义

    typedef K::Point_3    Point;
    typedef K::Triangle_3 Datum;
    typedef const K::Triangle_3& Datum_reference;
    

    并引用下面的三角形。

    Datum_reference datum() { return tri->getTri(); }
    

    此解决方案可以吗?我觉得它不应该通过构造任何新对象来浪费时间。我说的对吗?

  3. 我想到的第三个想法是简单地创建一个自定义迭代器,该迭代器将通过MyTriangles的向量,而不是类本身,而是返回Triangle_3类。我应该能够将此迭代器传递到AABB树构造函数中,并从纯Triangle_3对象构造树,该树应该可以正常工作。

我是否错过了另一种方法,而不是这三种方法?如果没有其他方法,可以使用2号吗?

谢谢

0 个答案:

没有答案