2012-04-26 71 views
1

我試圖給CGAL的Point_3類添加一個顏色變量(無符號字符),以便在做Delaunay三角測量後可以訪問顏色。將變量添加到CGAL的Point類

我曾嘗試使用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()); 

什麼其實我是想實現的是能夠通過三角測量來訪問頂點顏色::四面體類做三角剖分後。

假設我在(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的例子,但我不知道我應該使用什麼內核作爲基類或我的內核甚至應包含什麼功能。

我甚至發現了兩個類似的主題在這裏計算器: Customizing CGAL Kernel with my own Point classCGAL: Inheritance and the kernel 但他們並沒有幫助我。

謝謝你的幫助!

回答

1

從你的描述中,我認爲你只需要在頂點類中添加顏色。 定位後,您將擁有單工並可以訪問頂點內的顏色。

查看示例here

+0

我已經使用鏈接的例子來設置頂點的顏色(請參閱我已附加的代碼),但是我沒有設法通過使用定位的四面體訪問顏色。你能更具體地說我該怎麼做?謝謝! – ppalasek 2012-04-26 15:24:53

+0

我明白了! Cell_iterator ci = T.locate(CGAL_Point(x,y,z));現在我可以用ci-> vertex(index) - > info()來訪問顏色,其中index = 0..3。我不知道我可以從cell_iterator訪問頂點。謝謝! – ppalasek 2012-04-26 16:16:06