1

我正在尝试向 CGAL 的 Point_3 类添加一个颜色变量(无符号字符),以便在进行 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 但它们对我没有帮助。

谢谢您的帮助!

4

1 回答 1

1

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

请参阅此处的示例。

于 2012-04-26T15:15:34.483 回答