想實現乙個使用vtk來進行模型分割的功能。主要用到了vtk的vtkclippolydata和vtkplane兩個類。
在實現這個分割功能之前,先看下怎麼樣實現多個視窗顯示的功能。
qt與vtk的渲染結合
在配置好了vtk的執行環境之後,我們就可以直接在qtdedigner的介面裡面,將任意乙個qwidget類提公升為qvtkopenglwidget型別。這樣,我們首先要提公升兩個qwidget提公升。
初始化顯示視窗
我們先在qt的乙個介面類的標頭檔案裡面宣告一些需要的子類
vtksmartpointerrenderwindowinteractor;
vtksmartpointerrenderwindowleft;
vtksmartpointerrenderwindowright;
vtksmartpointerleftrenderer;
vtksmartpointerrightrender;
之後再進行初始化,下面是初始化函式的內容:
renderwindowinteractor = vtksmartpointer::new();
leftrenderer = vtksmartpointer::new();
rightrender = vtksmartpointer::new();
renderwindowleft = vtksmartpointer::new();
renderwindowright = vtksmartpointer::new();
renderwindowleft->addrenderer(leftrenderer);
renderwindowright->addrenderer(rightrender);
ui->leftrender->setrenderwindow(renderwindowleft); //這是前面一步由qwidget提公升而來的qvtkopenglwidget類
ui->rightrender->setrenderwindow(renderwindowright);
renderwindowleft->render();
renderwindowright->render();
到這裡我們就獲得了兩個可以分別渲染不同內容的視窗。
顯示模型
我們需要顯示乙個stl模型在左邊的顯示視窗裡面,如下圖:
下面是我們裝載並顯示的相關實現:
void mainwindow::loadstl()
切割模型
下面是切割得到的資料:
上述實現了對乙個三維模型的切片和顯示,如下是切割的**實現:
void mainwindow::clipanddisplay()
完善切割面
上面的**可以看到,得到的介面其實是空的。因為在進行clip的時候,介面輪廓並沒有變成乙個三角麵片,在這裡,我們繼續優化上述**,讓介面顯示出來。
**如下:
依然存在的問題
第三步驟實現的介面顯示,是依賴於opengl的顯示技術,而不是真的將乙個介面進行三角剖分後與原始的資料結合。 這裡對於clip和麵的分割操作,從目前的測試看,還沒有找到對應的分割後匯出完成資料的介面。
VTK學習筆記(1)
cmake 是乙個跨平台的工程構建工具,可以根據不同的平台生成與平台相關的工程配置檔案。同時,cmake簡化了工程構建過程,只要給工程裡的每個目錄都寫乙個cmakelists.txt指令碼檔案,就可以通過cmake生成該工程的編譯檔案。cmake支援in place構建 生成二進位制檔案和原始檔在同...
VTK學習筆記 視覺化模型
視覺化模型 圖形模型的主要作用是用圖形描述幾何體構成的場景,視覺化流水線的主要作用是把幾何資料 如立方體的頂點座標 轉換成圖形資料和負責構建幾何體,vtk 使用資料流的方式把幾何體資料轉換成圖形資料,主要有兩個基本類和資料轉換相關,它們是vtkdataobject類和vtkprocessobject...
機器學習模型儲存
在訓練完成機器學習模型後,經常將滿足需要的機器學習模型進行儲存,本文以svm演算法為例,講解模型儲存和呼叫的方法。joblib.dump 模型,模型命名 將訓練模型儲存起來如 from sklearn.svm import svc from sklearn.metrics import classi...