版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
本文格式為Word版,下載可任意編輯——基于VTK的MFC應用程序開發(fā)
基于VTK的MFC應用程序開發(fā)(3)
分類:VTK應用例如2023-05-1713:371681人閱讀評論(17)珍藏舉報
目錄(?)[+]
之前介紹了基于VTK的單文檔應用程序開發(fā),并以圖像重采樣為例,實現(xiàn)了一個簡單的圖像重采樣的應用程序。對于多文檔應用程序,與單文檔應用程序基本一致,這里就不再陳述。對話框應用程序是MFC應用程序中一個使用十分廣泛的框架,本節(jié)就以醫(yī)學圖像可視化中常用的四視圖框架程序的實現(xiàn)為例,陳述基于VTK的對話框應用程序開發(fā)。
1.利用VS和CMake建立一個空的MFC對話框程序框架。
利用VS創(chuàng)立一個MFC對話框工程vtkDialog,刪除其中的工程文件,完成CMakeLists.txt文件,并添加相應的代碼文件和鏈接VTK動態(tài)庫,利用CMake配置完畢后,開啟生成的工程文件vtkDialog.sln,編譯執(zhí)行,即可得到一個空的對話框程序。其中CvtkDialogDlg為該程序的主對話框類。
2.設計用戶界面,添加相應的控件
本程序需要實現(xiàn)的功能有(1)圖像讀取和管理;(2)圖像切分和瀏覽。一個常見的醫(yī)學圖像可視化程序,包括四個視圖,橫斷面視圖,矢狀面視圖,冠狀面視圖和三維視圖。因此,基于以上設計,我們添加一個樹控件,MFC中對應的控件類為CTreeCtrl。樹控件是最常用的文件管理控件,能夠便利的對文件進行層次化組織和管理。四視圖的實現(xiàn)則需要四個控件,這里我們選擇CStatic控件,將其添加至對話框窗口中。添加完畢后,為控件生成相應的Control類型的變量。
依照上述設計,需要在CStatic中顯示圖像。這就需要對CStatic類繼續(xù)擴展,使其支持VTK可視化管線。一個可行的方法是,設計一個CStatic類的子類,并在該子類中實現(xiàn)VTK可視化管線和處理。
3.實現(xiàn)VTK圖像可視化控件
3.1首先添加一個MFC類CvtkView
其基類選擇為CStatic,并添加至CMakeLists.txt文件中進行管理。
3.2重載CvtkView類PreSubclassWindow()函數(shù)和OnPaint()函數(shù)
PreSubclassWindow函數(shù)負責創(chuàng)立VTK可視化管線,OnPaint()函數(shù)負責客戶區(qū)內(nèi)場景渲染。
3.3建立VTK可視化管線
VTK可視化管線在其次章中已經(jīng)介紹過,其中最主要包含
vtkAcor,vtkRenderer,vtkRenderWindow,vtkRenderWindowInteractor四個部分。當然根據(jù)需要還可以設置vtkRenderWindowInteractorStyle,以及光照,材質(zhì),顏色等。在CvtkView類頭文件中定義相關對象,并在PreSubclassWindow函數(shù)中實例化和構建可視化管線,代碼如下。
[cpp]viewplaincopy
1.voidCvtkView::PreSubclassWindow()2.{
3.//TODO:Addyourspecializedcodehereand/orcallthebaseclass4.CRectrect;
5.GetClientRect(rect);6.
7.m_Renderer=vtkSmartPointer::New();8.
9.m_RenderWindow=vtkSmartPointer::New();10.m_RenderWindow->SetParentId(this->m_hWnd);
11.m_RenderWindow->SetSize(rect.Width(),rect.Height());12.m_RenderWindow->AddRenderer(m_Renderer);13.
14.if(m_RenderWindow->GetInteractor()==NULL)15.{
16.vtkSmartPointerRenderWindowInteractor=
17.vtkSmartPointer::New();18.RenderWindowInteractor->SetRenderWindow(m_RenderWindow);19.RenderWindowInteractor->Initialize();20.}21.
22.m_RenderWindow->Start();23.CStatic::PreSubclassWindow();24.}
相信通過前面的學習,這里建立可視化管線的流程已經(jīng)比較熟悉了。需要注意的是,vtkRenderWindow需要通過函數(shù)vtkRenderWindow::SetParentId()來建立與控件本身的關
聯(lián),這樣才能將m_RenderWindow中的渲染內(nèi)容在控件的窗口上進行顯示;而vtkRenderWindow::SetSize()則是設置渲染窗口與當前控件客戶區(qū)保持大小一致。大家可能會有疑問,怎么沒有vtkActor?正常的一個可視化管線中,vtkActor表示需要進行渲染或者繪制的對象。這里需要渲染的對象是圖像,而與以前不同的是,沒有直接去定義一個圖像vtkActor。至于原因暫且不管,隨著該類功能的逐步完善,我們再詳細說明。VTK渲染管線建立完畢后在OnPaint()函數(shù)中調(diào)用vtkRenderWindow的Render()函數(shù)來實現(xiàn)渲染。
到這里一個基本的VTK顯示控件已經(jīng)實現(xiàn),在設計界面時,通過MFC自動添加的四個視圖變量類型默認為CStatic。由于CvtkView是繼承自CStatic,因此我們可以直接將主對話框類CvtkDialogDlg頭文件中定義的四個變量類型修改為CvtkView。然后編譯運行程序,是不是已經(jīng)出現(xiàn)了一個四視圖的原型了(如下圖所示)?由于沒有添加任何的渲染對象,因此四個視圖均為空的黑色窗口。
3.4交互式圖像切分
該控件需要實現(xiàn)兩個基本功能:一是交互式圖像切分;二是切片圖像提取。第一個功能,采用vtkResliceCursorWidget和vtkResliceCursor類。尋常兩個類同時使用,每個vtkResliceCursorWidget對象中需要定義相應的vtkResliceCursor對象。
vtkResliceCursorWidget通過定義的“十〞字坐標軸,提供用戶便利的切分和交互方式,支持坐標軸的旋轉(zhuǎn)和平移;當坐標系發(fā)生改變時即調(diào)用vtkResliceCursor來進行圖像切分并進行更新到vtkRenderer對象中。
其次個功能采用vtkImagePlaneWidget實現(xiàn)。該類內(nèi)部定義了一個vtkImageReslice對象,利用vtkResliceCursor中定義的切分平面來切分圖像,在其內(nèi)部通過紋理映射來繪制到一個平面上,并在用戶指定的vtkRenderer進行顯示。
另外前面在定義可視化管線時,我們并沒有定義相關的vtkActor。這主要是由于在視圖顯示圖像時,都是通過相關的widget來實現(xiàn),我們只需要為widget對象設置相應的vtkRenderer即可,在其內(nèi)部會自動生成相應的vtkActor對象。根據(jù)以上分析在頭文件中定義相關對象并在PreSubclassWindow函數(shù)中進行實例化。
[cpp]viewplaincopy
1.vtkSmartPointerm_ImagePlaneWidget;2.vtkSmartPointerm_ResliceCursorWidget;3.vtkSmartPointerm_ResliceCursor;
4.vtkSmartPointerm_ResliceCursorRe
p;
在實例化時需要注意,該視圖類在默認狀況下渲染的是vtkResliceCursorWidget對象的輸出,因此需要為vtkResliceCursorWidget對象指定相應的vtkRenderer對象,
[cpp]viewplaincopy
1.m_ResliceCursorWidget->SetInteractor(m_RenderWindow->GetInteractor());2.m_ResliceCursorWidget->SetDefaultRenderer(m_Renderer);
這樣在vtkResliceCursorWidget對象內(nèi)部會將切片圖像轉(zhuǎn)化為一個vtkActor對象并添加至指定的vtkRenderer對象中進行顯示渲染;而vtkImagePlaneWidget中也有一個重要的函數(shù)vtkImagePlaneWidget::SetDefaultRenderer(vtkRenderer*)用于設置相應的
vtkRenderer來顯示切片。根據(jù)本程序的設計,vtkImagePlaneWidget產(chǎn)生的切片需要在三維場景中顯示,因此這里并沒有調(diào)用。也就是說,在默認狀況下,本控件類只顯示二維切片圖像。
3.5添加圖像設置函數(shù)并初始化圖像切分對象
該控件類需要從外部設置相應的處理圖像,因此提供一個接口函數(shù)來供外部調(diào)用。在3.4中僅僅定義和創(chuàng)立了交互式圖像切分對象,并沒有設置相應的輸入數(shù)據(jù),因此每次有新的數(shù)據(jù)傳入時,需要為其進行初始化。
[cpp]viewplaincopy
1.voidCvtkView::SetImageData(vtkSmartPointerImageData)
2.{
3.if(ImageData==NULL)return;4.
5.m_ImageData=ImageData;6.SetupReslice();7.}
8.voidCvtkView::SetupReslice()9.{
10.if(m_ImageData==NULL)return;11.intdims[3];
12.m_ImageData->GetDimensions(dims);13.
14.////////////////////////////////////////////////////////////////////////
//
15.m_ImagePlaneWidget->SetInput(m_ImageData);
16.m_ImagePlaneWidget->SetPlaneOrientation(m_Direction);17.m_ImagePlaneWidget->SetSliceIndex(dims[m_Direction]/2);18.m_ImagePlaneWidget->On();
19.m_ImagePlaneWidget->InteractionOn();20.
21.////////////////////////////////////////////////////////////////////////
//
22.m_ResliceCursor->SetCenter(m_ImageData->GetCenter());23.m_ResliceCursor->SetImage(m_ImageData);24.m_ResliceCursor->SetThickMode(0);25.
26.m_ResliceCursorRep->GetResliceCursorActor()->
27.GetCursorAlgorithm()->SetResliceCursor(m_ResliceCursor);28.m_ResliceCursorRep->GetResliceCursorActor()->
29.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年營業(yè)線施工安全培訓試題題庫(含參考答案)
- 2025年勞務員之勞務員專業(yè)管理實務考試題庫及答案
- 鋼筋混凝土住宅施工方案
- 種植業(yè)技術考核試題及答案
- 2025年第一季度心血管內(nèi)科GCP培訓考試題及答案
- 2025年人力資源管理師考試企業(yè)人力資源管理師(四級)試題及答案
- 2025年工地三級安全教育試題及答案
- 碼頭工程糾紛專用!建設工程施工合同糾紛要素式起訴狀模板
- 建設工程施工合同糾紛要素式起訴狀模板(完整版)無遺漏條款
- 大專生求職面試技巧總結
- 安全帽使用規(guī)范制度
- 2026國家電投集團蘇州審計中心選聘15人筆試模擬試題及答案解析
- 2026年桐城師范高等專科學校單招職業(yè)技能考試題庫及答案1套
- 霧化吸入操作教學課件
- 2025年小學圖書館自查報告
- 【語文】廣東省佛山市羅行小學一年級上冊期末復習試卷
- 2025年醫(yī)療器械注冊代理協(xié)議
- 新疆三校生考試題及答案
- 2025新疆亞新煤層氣投資開發(fā)(集團)有限責任公司第三批選聘/招聘筆試歷年參考題庫附帶答案詳解
- 圍手術期心肌梗塞的護理
- 超市門口鑰匙管理制度
評論
0/150
提交評論