其原理是將源物件資料設定成純黑色,背景設定成純白色,然後離屏渲染出一副黑白影象,在這幅影象上提取標量值為255的等值線,最終生成源物件當前檢視的輪廓物件
其大致流程如下
取模型的中心點及z軸正半軸方向作為法向量構造乙個vtkplane物件
遍歷模型所有的點,連線點與平面中心點構成向量,求該項量與平面法向量的點積,結果作為該點的屬性值
將屬性陣列設定給模型的點集(注意scalarvisibilityoff()一定加上,避免將屬性當做顏色來處理了)
構建vtkcontourfilter物件,將模型資料設定到資料來源中,並根據屬性的最大最小值generatevalues生成指定的幾個標量值
最終提取出指定的多個輪廓(其實就是獲取了到平面距離為指定值的點集)
reader->getoutput()->getpointdata()->setscalars(scalars);
auto range = reader->getoutput()->getpointdata()->getscalars()->getrange();
// create cutter
vtksmartpointercutter = vtksmartpointer::new();
cutter->setinputconnection(reader->getoutputport());
cutter->computescalarsoff();
cutter->computenormalsoff();
int numberofcuts = 10;
//生成給定的標量值
cutter->generatevalues(numberofcuts, 0.99 * range[0], 0.99 * range[1]);//設定需要抽取的標量值
//避免點的屬性值被當做顏色來處理了
// create cut actor
vtksmartpointercutteractor = vtksmartpointer::new();
cutteractor->getproperty()->setcolor(colors->getcolor3d("banana").getdata());
cutteractor->getproperty()->setlinewidth(2);
// create model actor
vtksmartpointermodelactor = vtksmartpointer::new();
modelactor->getproperty()->setcolor(colors->getcolor3d("flesh").getdata());
// create renderers and add actors of plane and model
vtksmartpointerrenderer = vtksmartpointer::new();
renderer->addactor(cutteractor);
renderer->addactor(modelactor);
// add renderer to renderwindow and render
vtksmartpointerrenderwindow = vtksmartpointer::new();
renderwindow->addrenderer(renderer);
renderwindow->setsize(600, 600);
vtksmartpointerinteractor = vtksmartpointer::new();
interactor->setrenderwindow(renderwindow);
renderer->setbackground(colors->getcolor3d("burlywood").getdata());
renderer->getactivecamera()->setposition(0, -1, 0);
renderer->getactivecamera()->setfocalpoint(0, 0, 0);
renderer->getactivecamera()->setviewup(0, 0, 1);
renderer->getactivecamera()->azimuth(30);
renderer->getactivecamera()->elevation(30);
renderer->resetcamera();
renderwindow->render();
interactor->start();
return exit_success;
}
VTK學習(八)vtk管線
vtk module init vtkinteractionstyle int main int argc,char argv vtk兩個重要概念,一,渲染引擎,負責資料的視覺化表達。二,視覺化管線,指用於獲取資料,處理資料以及把資料寫入檔案或者把資料傳入渲染引擎進行顯示。資料物件,處理物件,資料流...
VTK 學習筆記
vtk 是乙個物件導向的系統,高效使用 vtk的關鍵,是要逐漸較好地理解底層的物件模型,這樣做是為了去掉數百個物件的神秘外衣。理解力達到一定程度,你很容易建立應用程式。也許你想知道許多物件的功能,只有反覆練習 例子,才能對物件有所理解。在本使用者指南中,我們努力提供有用的物件組合來滿足你的應用。接下...
VTK學習筆記 使用VTK互動功能
即使不會使用vtk互動功能,不要緊。先從概念入手。一般乙個舞台上,有這麼幾個元素 演員 燈光 照相機 觀眾 和觀眾互動的行為 再來看看vtk圖形模型主要物件,你會發現很類似這個實際生活的舞台。1.vtk圖形模型主要物件 1 演員 actor 代表場景中繪製的實體。通過引數的調節可以設定角色的位置,方...