将变量添加到CGAL的Point类

时间:2012-04-26 14:59:15

标签: inheritance colors kernel point cgal

我正在尝试向CGAL的Point_3类添加一个颜色变量(unsigned char),以便在进行Delaunay三角测量后可以访问颜色。

我尝试过使用Triangulation_vertex_base_with_info_3来存储这样的颜色(跟http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Triangulation_3/Chapter_main.html#Subsection_39.5.3处的例子一样)

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_vertex_base_with_info_3<unsigned char, K> Vb;
typedef CGAL::Triangulation_data_structure_3<Vb> Tds;
typedef CGAL::Delaunay_triangulation_3<K, Tds> Triangulation;
typedef Triangulation::Point CGAL_Point;

//...
//here I make a vector of pairs of points and their color

std::vector<std::pair<CGAL_Point, unsigned char> > points;

Point currentPoint;
for (int i=0; i<roiPoints.size(); i++){
    currentPoint=roiPoints[i];
    points.push_back(std::make_pair(CGAL_Point(currentPoint.x, currentPoint.y, currentPoint.z), roiColors[i]));
} 

//...
//triangulation
T.clear();
T.insert(points.begin(), points.end());

我真正想要实现的是在进行三角测量后能够通过Triangulation :: Tetrahedron类访问顶点颜色。

假设我在(x,y,z)处有一个点P.在三角测量之后,我找到了包含这个点P的四面体t,我可以访问这个四面体的顶点(使用t.vertex(0..3))。这将返回Point_3类型的顶点,我无法访问之前存储的颜色。

我想一种方法是创建我自己的包含颜色信息的Point类。这很容易,但我不明白如何使用这个类而不是Point_3。我发现我还必须编写自己的内核来执行此操作以及http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23/Chapter_main.html#Section_11.5的示例,但我无法弄清楚我应该使用什么内核作为基类,或者我的内核应该包含哪些函数。

我甚至在stackoverflow上找到了两个类似的主题: Customizing CGAL Kernel with my own Point classCGAL: Inheritance and the kernel 但他们没有帮助我。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

根据您的描述,我认为您只需要在顶点类中添加颜色。 在找到之后,你将拥有单纯形,并且能够访问顶点内的颜色。

参见示例here