




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——基于VTK的MFC應(yīng)用程序開(kāi)發(fā)
基于VTK的MFC應(yīng)用程序開(kāi)發(fā)(3)
分類:VTK應(yīng)用例如2023-05-1713:371681人閱讀評(píng)論(17)珍藏舉報(bào)
目錄(?)[+]
之前介紹了基于VTK的單文檔應(yīng)用程序開(kāi)發(fā),并以圖像重采樣為例,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的圖像重采樣的應(yīng)用程序。對(duì)于多文檔應(yīng)用程序,與單文檔應(yīng)用程序基本一致,這里就不再陳述。對(duì)話框應(yīng)用程序是MFC應(yīng)用程序中一個(gè)使用十分廣泛的框架,本節(jié)就以醫(yī)學(xué)圖像可視化中常用的四視圖框架程序的實(shí)現(xiàn)為例,陳述基于VTK的對(duì)話框應(yīng)用程序開(kāi)發(fā)。
1.利用VS和CMake建立一個(gè)空的MFC對(duì)話框程序框架。
利用VS創(chuàng)立一個(gè)MFC對(duì)話框工程vtkDialog,刪除其中的工程文件,完成CMakeLists.txt文件,并添加相應(yīng)的代碼文件和鏈接VTK動(dòng)態(tài)庫(kù),利用CMake配置完畢后,開(kāi)啟生成的工程文件vtkDialog.sln,編譯執(zhí)行,即可得到一個(gè)空的對(duì)話框程序。其中CvtkDialogDlg為該程序的主對(duì)話框類。
2.設(shè)計(jì)用戶界面,添加相應(yīng)的控件
本程序需要實(shí)現(xiàn)的功能有(1)圖像讀取和管理;(2)圖像切分和瀏覽。一個(gè)常見(jiàn)的醫(yī)學(xué)圖像可視化程序,包括四個(gè)視圖,橫斷面視圖,矢狀面視圖,冠狀面視圖和三維視圖。因此,基于以上設(shè)計(jì),我們添加一個(gè)樹(shù)控件,MFC中對(duì)應(yīng)的控件類為CTreeCtrl。樹(shù)控件是最常用的文件管理控件,能夠便利的對(duì)文件進(jìn)行層次化組織和管理。四視圖的實(shí)現(xiàn)則需要四個(gè)控件,這里我們選擇CStatic控件,將其添加至對(duì)話框窗口中。添加完畢后,為控件生成相應(yīng)的Control類型的變量。
依照上述設(shè)計(jì),需要在CStatic中顯示圖像。這就需要對(duì)CStatic類繼續(xù)擴(kuò)展,使其支持VTK可視化管線。一個(gè)可行的方法是,設(shè)計(jì)一個(gè)CStatic類的子類,并在該子類中實(shí)現(xiàn)VTK可視化管線和處理。
3.實(shí)現(xiàn)VTK圖像可視化控件
3.1首先添加一個(gè)MFC類CvtkView
其基類選擇為CStatic,并添加至CMakeLists.txt文件中進(jìn)行管理。
3.2重載CvtkView類PreSubclassWindow()函數(shù)和OnPaint()函數(shù)
PreSubclassWindow函數(shù)負(fù)責(zé)創(chuàng)立VTK可視化管線,OnPaint()函數(shù)負(fù)責(zé)客戶區(qū)內(nèi)場(chǎng)景渲染。
3.3建立VTK可視化管線
VTK可視化管線在其次章中已經(jīng)介紹過(guò),其中最主要包含
vtkAcor,vtkRenderer,vtkRenderWindow,vtkRenderWindowInteractor四個(gè)部分。當(dāng)然根據(jù)需要還可以設(shè)置vtkRenderWindowInteractorStyle,以及光照,材質(zhì),顏色等。在CvtkView類頭文件中定義相關(guān)對(duì)象,并在PreSubclassWindow函數(shù)中實(shí)例化和構(gòu)建可視化管線,代碼如下。
[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.}
相信通過(guò)前面的學(xué)習(xí),這里建立可視化管線的流程已經(jīng)比較熟悉了。需要注意的是,vtkRenderWindow需要通過(guò)函數(shù)vtkRenderWindow::SetParentId()來(lái)建立與控件本身的關(guān)
聯(lián),這樣才能將m_RenderWindow中的渲染內(nèi)容在控件的窗口上進(jìn)行顯示;而vtkRenderWindow::SetSize()則是設(shè)置渲染窗口與當(dāng)前控件客戶區(qū)保持大小一致。大家可能會(huì)有疑問(wèn),怎么沒(méi)有vtkActor?正常的一個(gè)可視化管線中,vtkActor表示需要進(jìn)行渲染或者繪制的對(duì)象。這里需要渲染的對(duì)象是圖像,而與以前不同的是,沒(méi)有直接去定義一個(gè)圖像vtkActor。至于原因暫且不管,隨著該類功能的逐步完善,我們?cè)僭敿?xì)說(shuō)明。VTK渲染管線建立完畢后在OnPaint()函數(shù)中調(diào)用vtkRenderWindow的Render()函數(shù)來(lái)實(shí)現(xiàn)渲染。
到這里一個(gè)基本的VTK顯示控件已經(jīng)實(shí)現(xiàn),在設(shè)計(jì)界面時(shí),通過(guò)MFC自動(dòng)添加的四個(gè)視圖變量類型默認(rèn)為CStatic。由于CvtkView是繼承自CStatic,因此我們可以直接將主對(duì)話框類CvtkDialogDlg頭文件中定義的四個(gè)變量類型修改為CvtkView。然后編譯運(yùn)行程序,是不是已經(jīng)出現(xiàn)了一個(gè)四視圖的原型了(如下圖所示)?由于沒(méi)有添加任何的渲染對(duì)象,因此四個(gè)視圖均為空的黑色窗口。
3.4交互式圖像切分
該控件需要實(shí)現(xiàn)兩個(gè)基本功能:一是交互式圖像切分;二是切片圖像提取。第一個(gè)功能,采用vtkResliceCursorWidget和vtkResliceCursor類。尋常兩個(gè)類同時(shí)使用,每個(gè)vtkResliceCursorWidget對(duì)象中需要定義相應(yīng)的vtkResliceCursor對(duì)象。
vtkResliceCursorWidget通過(guò)定義的“十〞字坐標(biāo)軸,提供用戶便利的切分和交互方式,支持坐標(biāo)軸的旋轉(zhuǎn)和平移;當(dāng)坐標(biāo)系發(fā)生改變時(shí)即調(diào)用vtkResliceCursor來(lái)進(jìn)行圖像切分并進(jìn)行更新到vtkRenderer對(duì)象中。
其次個(gè)功能采用vtkImagePlaneWidget實(shí)現(xiàn)。該類內(nèi)部定義了一個(gè)vtkImageReslice對(duì)象,利用vtkResliceCursor中定義的切分平面來(lái)切分圖像,在其內(nèi)部通過(guò)紋理映射來(lái)繪制到一個(gè)平面上,并在用戶指定的vtkRenderer進(jìn)行顯示。
另外前面在定義可視化管線時(shí),我們并沒(méi)有定義相關(guān)的vtkActor。這主要是由于在視圖顯示圖像時(shí),都是通過(guò)相關(guān)的widget來(lái)實(shí)現(xiàn),我們只需要為widget對(duì)象設(shè)置相應(yīng)的vtkRenderer即可,在其內(nèi)部會(huì)自動(dòng)生成相應(yīng)的vtkActor對(duì)象。根據(jù)以上分析在頭文件中定義相關(guān)對(duì)象并在PreSubclassWindow函數(shù)中進(jìn)行實(shí)例化。
[cpp]viewplaincopy
1.vtkSmartPointerm_ImagePlaneWidget;2.vtkSmartPointerm_ResliceCursorWidget;3.vtkSmartPointerm_ResliceCursor;
4.vtkSmartPointerm_ResliceCursorRe
p;
在實(shí)例化時(shí)需要注意,該視圖類在默認(rèn)狀況下渲染的是vtkResliceCursorWidget對(duì)象的輸出,因此需要為vtkResliceCursorWidget對(duì)象指定相應(yīng)的vtkRenderer對(duì)象,
[cpp]viewplaincopy
1.m_ResliceCursorWidget->SetInteractor(m_RenderWindow->GetInteractor());2.m_ResliceCursorWidget->SetDefaultRenderer(m_Renderer);
這樣在vtkResliceCursorWidget對(duì)象內(nèi)部會(huì)將切片圖像轉(zhuǎn)化為一個(gè)vtkActor對(duì)象并添加至指定的vtkRenderer對(duì)象中進(jìn)行顯示渲染;而vtkImagePlaneWidget中也有一個(gè)重要的函數(shù)vtkImagePlaneWidget::SetDefaultRenderer(vtkRenderer*)用于設(shè)置相應(yīng)的
vtkRenderer來(lái)顯示切片。根據(jù)本程序的設(shè)計(jì),vtkImagePlaneWidget產(chǎn)生的切片需要在三維場(chǎng)景中顯示,因此這里并沒(méi)有調(diào)用。也就是說(shuō),在默認(rèn)狀況下,本控件類只顯示二維切片圖像。
3.5添加圖像設(shè)置函數(shù)并初始化圖像切分對(duì)象
該控件類需要從外部設(shè)置相應(yīng)的處理圖像,因此提供一個(gè)接口函數(shù)來(lái)供外部調(diào)用。在3.4中僅僅定義和創(chuàng)立了交互式圖像切分對(duì)象,并沒(méi)有設(shè)置相應(yīng)的輸入數(shù)據(jù),因此每次有新的數(shù)據(jù)傳入時(shí),需要為其進(jìn)行初始化。
[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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廠地購(gòu)買合同范本
- 2024年松滋市事業(yè)單位統(tǒng)一招聘考試真題
- 2024年清遠(yuǎn)英德市市區(qū)學(xué)校選調(diào)教師(編制)筆試真題
- 2024年廈門市集美實(shí)驗(yàn)學(xué)校教師及產(chǎn)假頂崗教師招聘考試真題
- 2024年梅州蕉嶺縣招聘學(xué)科教師筆試真題
- 2024年平?jīng)鍪徐`臺(tái)縣城鎮(zhèn)公益性崗位人員招聘考試真題
- 袋裝白灰合同范本
- 2024年合肥電動(dòng)汽車充電設(shè)施投資運(yùn)營(yíng)有限公司招聘筆試真題
- 2024年黃岡市事業(yè)單位統(tǒng)一招聘工作人員考試真題
- 2024年安徽蕪湖鳳鳴控股集團(tuán)及其子公司選調(diào)筆試真題
- 《跨境直播運(yùn)營(yíng)》課件-跨境直播的意義和要素
- 3 學(xué)會(huì)反思(教學(xué)設(shè)計(jì))部編版道德與法治六年級(jí)下冊(cè)
- 第一單元 歌唱祖國(guó)-《 中華人民共和國(guó)國(guó)歌》課件 2023-2024學(xué)年人音版初中音樂(lè)七年級(jí)上冊(cè)
- 2024-2030年中國(guó)腎性貧血療法行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 辦公家具采購(gòu)項(xiàng)目質(zhì)量保證售后服務(wù)承諾書
- 2024年時(shí)政試題庫(kù)(b卷)
- 2024助貸委托服務(wù)協(xié)議合同模板
- 2023高考數(shù)學(xué)藝考生一輪復(fù)習(xí)基礎(chǔ)講義(學(xué)生版)
- 教師年度考核表
- 廣東省住院病歷評(píng)分標(biāo)準(zhǔn)
- 中層管理人員競(jìng)聘試題大全
評(píng)論
0/150
提交評(píng)論