VTK學習筆記八

2021-09-25 01:18:18 字數 2291 閱讀 8638

其原理是將源物件資料設定成純黑色,背景設定成純白色,然後離屏渲染出一副黑白影象,在這幅影象上提取標量值為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 代表場景中繪製的實體。通過引數的調節可以設定角色的位置,方...