VTK學習 1 模型分割並儲存

2021-09-02 18:42:58 字數 1924 閱讀 5522

想實現乙個使用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...