国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于vtk的自定義交互器的研究

2015-07-24 21:33:20王家林王松
電腦知識與技術(shù) 2015年14期
關(guān)鍵詞:軟件開發(fā)可視化

王家林 王松

摘要:由于vtk在可視化軟件開發(fā)中,其提供的交互器不能滿足開發(fā)者的要求?;趘tk的各種交互類,提出自定義交互器的開發(fā)方法。利用vc++和MFC開發(fā)了基于vtk的可視化軟件,并進(jìn)行可視化操作。通過開發(fā)的交互器與vtk自帶的交互器相比,結(jié)果得出,能夠更加方便地操作視圖,提高了對數(shù)據(jù)可視化的效率。

關(guān)鍵詞:可視化;vtk;軟件開發(fā);MFC;交互器

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)14-0088-02

Abstract:Beacuase the vtks interactor do not meet the requirements of the developers during the visualization software development.Based on the vtks interactor,this paper delevelop user-defined interactor and utilize it.Compared user-defined interactor with the vtk own interactor,which show the user-defined is more convenient to manipilate interface and more efficient for dara visualization.

Key words:Visualization;vtk;software;MFC;Interactor

1 vtk簡介

開源免費可視化工具包VTK[1,6],是目前最為流行的軟件之一,并且具有強(qiáng)大的數(shù)據(jù)圖形顯示功能,優(yōu)越的結(jié)構(gòu)體系,優(yōu)秀的移植性,是以O(shè)penGL[2]圖形庫為基礎(chǔ)開發(fā)的。目前VTK主要用于醫(yī)學(xué)圖像三維重建[3]和虛擬手術(shù)[4],也有國內(nèi)學(xué)者[5]應(yīng)用于橋梁建模。為了直接對數(shù)據(jù)操作,就需要良好的交互操作。但vtk軟件提供的交互操作不能滿足研究者的要求,不利于可視化程序的開發(fā)與應(yīng)用。

圖形(Graphic)模型指通過轉(zhuǎn)換幾何體而形成圖像,達(dá)到顯示對象的目的。圖形模型包括了可視化渲染窗口類(vtkRenderWindow)、渲染器類(vtkRender)和交互器類(vtkRenderWindowInteractor)。它們可以在屏幕上顯示可視化對象或角色并且進(jìn)行交互操作。

可視化模型采用可視化管道機(jī)制(PipeLine)以源數(shù)據(jù)vtkSource為起點,經(jīng)過過濾器(vtkFilter),最終到達(dá)可視化管道機(jī)制的終點—映射器(vtkMapper)。網(wǎng)絡(luò)結(jié)構(gòu)如圖1。

2 vtk軟件中交互式類的簡介

vtkObject[7]在vtk軟件中幾乎是所有類的基類,擁有自動更新,調(diào)試,打印,事件回調(diào)等功能。vtkInteractorStyle繼承于vtkObject,是所有交互方式的父類,并且擁有一些最簡單的交互功能。由于操作需求的不同,在此類的基礎(chǔ)上衍生了一部分交互類。部分交互類如下:

2.1 vtkInteractorStyle

vtkInteractorStyle是其他交互類的基類,提供了與交互器vtkRenderWindowInteractor的接口,能對事件進(jìn)行響應(yīng)。其提供了大量鍵盤事件進(jìn)行響應(yīng)的功能,但沒有響應(yīng)鼠標(biāo)操作的功能。鍵盤操作包括如下部分:

1)按下鍵盤w鍵以線框方式顯示物體

2)按下鍵盤p鍵拾取單個物體

3)按下鍵盤q或e鍵關(guān)閉應(yīng)用程序以及其他鍵盤操作方式。

2.2 vtkInteractorStyleJoystickActor

vtkInteractorStyleJoystickActor開發(fā)了不同于父類的操作方式,能在視圖中對某個獨立的顯示對象進(jìn)行縮放、平移和旋轉(zhuǎn)??s放比例決定于鼠標(biāo)位置與顯示對象中心位置豎直方向的差。差為正時,角色放大,反之縮小。平移是變速移動,速度大小取決于鼠標(biāo)與角色中心的相對距離。旋轉(zhuǎn)時,角色繞其中心轉(zhuǎn)動。此交互方式主要針對單個顯示對象操作,并且操作不影響其他角色。

2.3 vtkInteractorStyleJoystickCamera

vtkInteractorStyleJoystickCamera類對相機(jī)進(jìn)行操作,其并不能對單個對象操作,而是改變相機(jī)的位置,從不同角度來觀察整個空間。同樣,此類也可以實現(xiàn)基于相機(jī)變換的縮放,平移和旋轉(zhuǎn)。通過所有顯示對象的幾何中心來確定平移和旋轉(zhuǎn)中心。

2.4 vtkInteractorStyleSwitch

vtkInteractorStyleSwitch 類合并了四個交互類,通過按鍵j,t,c,a來切換不同的交互模式(vtkInteractoStylejoystickactorvtkInteractoStylejoystickcamera,vtkInteractoStyletrackballactor,vtkInteractoStyletrackballcamera)。能夠自由切換四種交互方式,但四種交互方式效率并不高。

3 應(yīng)用需求分析

在GUI應(yīng)用開發(fā)中,對于圖形交互有如下需求:

1) 平移:按下鼠標(biāo)左鍵,通過移動鼠標(biāo)實現(xiàn)顯示對象跟隨鼠標(biāo)進(jìn)行平行移動;

2) 縮放,通過鼠標(biāo)滾輪的前后滾動實現(xiàn)顯示對象的放大、縮小顯示,或者通過彈出菜單切換到縮放模式后,通過鼠標(biāo)的豎向坐標(biāo)實現(xiàn)顯示對象的縮放;

3)旋轉(zhuǎn),按下鼠標(biāo)左鍵,通過移動鼠標(biāo)實現(xiàn)顯示對象繞窗口中心的旋轉(zhuǎn)。

4) 矩形框,按下鼠標(biāo)左鍵,同時移動鼠標(biāo),以鼠標(biāo)按下左鍵的位置和當(dāng)前位置的連線為對角線畫一矩形框。

5) 窗選放大,按下鼠標(biāo)左鍵并移動鼠標(biāo)畫一矩形框,根據(jù)矩形框與窗口的比例放大顯示對象。

6) 點選對象,通過單擊鼠標(biāo)左鍵實現(xiàn)對顯示對象的拾取。

7) 窗選對象,通過按下鼠標(biāo)左鍵并移動鼠標(biāo)畫一矩形框,實現(xiàn)對矩形框內(nèi)所有顯示對象的拾取。

由于上述各項交互中,根據(jù)鼠標(biāo)運動實現(xiàn)的交互行為有重疊之處,因此加入了利用彈出菜單進(jìn)行交互模式切換的功能,見圖2。

通過對VTK交互類的功能分析發(fā)現(xiàn),沒有一個類能夠完全實現(xiàn)了所有的功能。因此,作者通過分析研究現(xiàn)有VTK交互類的實現(xiàn)方法,開發(fā)了一個具有前述各項功能的交互類。

3 軟件的實現(xiàn)方法

MFC[9]是微軟開發(fā)的一個基礎(chǔ)的框架類,能夠響應(yīng)消息,創(chuàng)建控件來開發(fā)一些簡單而實用的軟件。以c++為基礎(chǔ),結(jié)合MFC與VTK共同開發(fā)一個可視化軟件(VTKMFC),以此來現(xiàn)實本文開發(fā)的交互類。

本文開發(fā)的新型交互類vtkWInteractor以vtkInteractorStyle為基類,封裝了以上各類的鼠標(biāo)與鍵盤的響應(yīng)函數(shù)。

3.1 功能函數(shù)的定義

作者設(shè)計的交互類vtkWInteractor中的功能函數(shù)取自其他交互類并在此基礎(chǔ)上改進(jìn)。各功能函數(shù)實現(xiàn)如下:

1)平移,取自vtkInteractorStyleJoystickCamera交互類的pan()函數(shù)。

2)縮放,取自vtkInteractorStyleJoystickCamera交互類的Dolly()函數(shù)。

3)旋轉(zhuǎn),取自vtkInteractorStyleJoystickCamera交互類的Rotate()函數(shù)。

4)矩形框,取自vtkInteractorStyleRubberBand2D交互類的RedrawRubberBand()函數(shù)。

5)窗選放大,取自vtkInteractorStyleRubberBandZoom交互類的Zoom()函數(shù)。

6)點選對象,取自vtkInteractorStyle交互類的OnCha-r()函數(shù)的一部分,vtkInteractorStyle以P鍵來拾取顯示對象,而本文設(shè)計的vtkWInteractor根據(jù)鼠標(biāo)左鍵單擊時的位置來拾取對象。

7)窗選對象,根據(jù)vtkInteractorStyleRubberBand2D交互類的RedrawRubberBand()函數(shù)繪制矩形框,再用vtkAreaPicker類中的AreaPick函數(shù)對框內(nèi)的顯示對象進(jìn)行拾取。

3.2 實例應(yīng)用與效果展示

在vtk可視化管道中加入六面體(vtkCubeSource),在渲染窗口中顯示,并在窗口中單擊右鍵彈出菜單,應(yīng)用界面如圖2。

右鍵彈出菜單,依次選擇操作方式,對窗口中的角色進(jìn)行操作。僅憑鼠標(biāo)右鍵、中鍵和右鍵就能夠完成各種操作。操作方式類似于日常的電腦界面操作方式,所以使用者可以很快的熟悉。各種操作方式的效果如圖3。

圖中得到的操作畫面能全視角的對物體進(jìn)行觀察,且窗選對象之后能夠?qū)崿F(xiàn)對物體本身的轉(zhuǎn)化,但本文欠妥沒能實現(xiàn)這一功能。

4 結(jié)束語

基于VTK自帶交互類的缺點,開發(fā)更為通用且高效的交互類是很有必要的。本文對VTK自帶交互類進(jìn)行研究并 開發(fā)了新的交互類vtkWInteractor。從方法上給VTK進(jìn)一步的研究帶來啟示,研究了如何快捷的繼承VTK自帶交互類的特點。并且基于VTK開發(fā)的vtkWInteractor類可以運用于今后的軟件開發(fā),通過加入新設(shè)計的交互類實現(xiàn)數(shù)據(jù)的可視化交互。

參考文獻(xiàn):

[1] 周振環(huán), 肖汝. ITK和VTK及其應(yīng)用新進(jìn)展[J]. 計算機(jī)應(yīng)用究, 2009, 26(6): 2027-2031.

[2] 王蘭美, 趙繼成, 秦華東. OpenGL及其在VC++下的開發(fā)應(yīng)用[J]. 武漢大學(xué)學(xué)報: 工學(xué)版, 2006, 39(4): 62-65.

[3] 陳潔敏. 基于VTK的醫(yī)學(xué)圖像體繪制及交互實現(xiàn)[J]. 現(xiàn)代計算機(jī): 專業(yè)版, 2009(8): 176-178.

[4] 王利, 姜紅, 張兆臣, 等. 基于VTK的虛擬手術(shù)系統(tǒng)中的關(guān)鍵技術(shù)[J]. 中國醫(yī)療設(shè)備, 2009, 24(5): 58-59.

[5] 馬林, 李興田. 三維可視化方法研究與應(yīng)用[J]. 蘭州交通大學(xué)報, 2013, 32(6): 77-81.

[6] Will S, Martin K, Lorensen B.The Visualization Toolkit An Object-Oriented Approach To 3D Graphics[M]. 3rd ed. Kitware, 2002.

[7] Will Schroeder. The VTK Users Guide[M]. Kitware, 2002.

[8] 謝裕敏, 舒輝, 陳建敏, 等. MFC消息響應(yīng)函數(shù)的逆向定位[J]. 計算機(jī)應(yīng)用, 2009(5): 1393-1396.

猜你喜歡
軟件開發(fā)可視化
自然資源可視化決策系統(tǒng)
北京測繪(2022年6期)2022-08-01 09:19:06
思維可視化
師道·教研(2022年1期)2022-03-12 05:46:47
基于Power BI的油田注水運行動態(tài)分析與可視化展示
云南化工(2021年8期)2021-12-21 06:37:54
自然資源可視化決策系統(tǒng)
北京測繪(2021年7期)2021-07-28 07:01:18
基于CGAL和OpenGL的海底地形三維可視化
“融評”:黨媒評論的可視化創(chuàng)新
傳媒評論(2019年4期)2019-07-13 05:49:14
信息安全環(huán)境下的計算機(jī)軟件開發(fā)研究
計算機(jī)軟件開發(fā)中的分層技術(shù)運用
建模技術(shù)在軟件開發(fā)中的應(yīng)用
軟件開發(fā)中數(shù)據(jù)庫設(shè)計理論的實踐
湟源县| 西乌| 正宁县| 固阳县| 绿春县| 广元市| 亳州市| 延安市| 商河县| 鲁甸县| 浑源县| 安徽省| 陕西省| 陵川县| 海阳市| 社旗县| 潢川县| 保山市| 临泽县| 靖西县| 新泰市| 吕梁市| 安新县| 南涧| 阿坝县| 宁乡县| 东山县| 安平县| 正安县| 大冶市| 秦皇岛市| 随州市| 阿拉尔市| 来凤县| 壶关县| 文山县| 怀柔区| 连江县| 无锡市| 巴彦县| 黄骅市|