




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、會計(jì)學(xué)1VTK程序一般流程程序一般流程一、一、二、二、VTK的數(shù)據(jù)對象接口的數(shù)據(jù)對象接口四、視點(diǎn)變換與相機(jī)控制四、視點(diǎn)變換與相機(jī)控制五、五、 VTK事件交互、事件交互、VTK與與MFC混合編混合編程程六、六、VTK視窗控制與文視窗控制與文本標(biāo)注本標(biāo)注七、七、VTK在測量中應(yīng)用與在測量中應(yīng)用與VTK數(shù)據(jù)切割數(shù)據(jù)切割第1頁/共24頁第2頁/共24頁Visualization Toolkit 的機(jī)制Visualization Toolkit 是一個用于可視化應(yīng)用程序構(gòu)造與運(yùn)行的支撐環(huán)境,它是在三維函數(shù)庫OpenGL 的基礎(chǔ)上采用面向?qū)ο蟮脑O(shè)計(jì)方法發(fā)展起來的。它將在可視化開發(fā)過程中會經(jīng)常遇到的細(xì)節(jié)屏蔽
2、起來,并將一些常用的算法封裝起來。比如Visualization Toolkit 將在表面重建中比較常見的Marching Cubes 算法封裝起來,以類的形式給以支持,這樣在對三維規(guī)則點(diǎn)陣數(shù)據(jù)進(jìn)行表面重建時(shí)就不必再重復(fù)編寫Marching Cubes 算法的代碼而直接使用Visualization Toolkit 中已經(jīng)提供的vtkMarchingCubes 類。第3頁/共24頁第4頁/共24頁第5頁/共24頁圖形流水線:將幾何數(shù)據(jù)轉(zhuǎn)換為圖像;可視化流水線:將信息轉(zhuǎn)換為幾何數(shù)據(jù).另一種看法是:可視化流水線:負(fù)責(zé)構(gòu)建幾何表示;圖形流水線:負(fù)責(zé)繪制. vtk使用一種lazy評價(jià)機(jī)制.對于lazy
3、評價(jià)機(jī)制,通常無需人工地調(diào)用Update(),因?yàn)閒ilters連接著可視化流水線,當(dāng)actor接收到繪制本身的要求會將方法回饋到他的mapper,然后Update方法自動發(fā)送至可視化流水線。Render方法通常開始數(shù)據(jù)要求,數(shù)據(jù)被通過流水線向下投遞。依賴于流水線的哪個端口過時(shí),流水線中的filters可能重新執(zhí)行,將數(shù)據(jù)送至更新的流水線末端,通過actor繪制.可視化模型可視化模型第6頁/共24頁VTK 圖形模型由以下核心對象組成vtkActor,vtkActor2D,vtkVolume vtkProp 和/或vtpProp3D 的子類vtkLightvtkCameravtkProperty
4、,vtkProperty2DvtkMaper,vtkMapper2D vtkAbstractMapper 的子類vtkTransformvtkLookupTable,vtkColorTransferFunction- vtkScalarsToColors 的子類/for objects that convert scalars to colors vtkRendervtkRenderWindowvtkRenderWindowInteractor圖形模型圖形模型第7頁/共24頁vtkLight用來展示和操控場景中的燈光,只在3D中用到.VtkCamera控制3D幾何投影到2D。定位:定點(diǎn)、方向,
5、還控制視角投影和立體視圖.vtkMapper與查找表vtkLookupTable聯(lián)合使用,用于轉(zhuǎn)換和繪制幾何體。Mapper提供可視化流水線和圖形模型.vtkLookupTable是vtkScalarsToColors和vtkColorTransferFunction的子類.第8頁/共24頁vtkRenderer和vtkRenderWindow用來管理圖形機(jī)與電腦窗口系統(tǒng)的接口.可以生成多個render windows,每個render windows中有多個renderer去繪制.一個render window中可以有多個區(qū)域(視窗).vtkRenderWindowInteractor用于與
6、場景交互,操縱camera,選擇對象.vtkWin32OpenGLRenderWindow和vtkWin32RenderWindowInteractorvtkWin32OpenGLRenderWindow is a concrete implementation of the abstract class vtkRenderWindow. vtkWin32OpenGLRenderer interfaces to the standard OpenGL graphics library in the Windows/NT environment.implements Win32 specific
7、 functions required by vtkRenderWindowInteractor. 第9頁/共24頁vtkActor的子類vtkAssembly,vtkFollower,vtkLODActor等.vtkAssembly允許actors分層,在層級平移、旋轉(zhuǎn)、縮放時(shí)合理轉(zhuǎn)換.vtkLODActor在改變幾何表示時(shí)保持交互幀速率第10頁/共24頁示例代碼1演示VTK一般流程及常用類的使用第11頁/共24頁vtkVolume16Reader *v16 = vtkVolume16Reader:New();v16-SetDataDimensions(64,64);v16-SetDataB
8、yteOrderToLittleEndian();v16-SetFilePrefix (D:/VTK 5.4/VTKData/Data/headsq/quarter);v16-SetImageRange(1, 93);v16-SetDataSpacing (3.2, 3.2, 1.5);vtkContourFilter *skinExtractor = vtkContourFilter:New();skinExtractor-SetInputConnection( v16-GetOutputPort();skinExtractor-SetValue(0, 500);vtkPolyDataNor
9、mals *skinNormals = vtkPolyDataNormals:New();skinNormals-SetInputConnection(skinExtractor-GetOutputPort();skinNormals-SetFeatureAngle(60.0);/if the surface normal between two adjacent triangles is = FeatureAngle, an edge exists vtkStripper *skinStripper = vtkStripper:New();skinStripper-SetInputConne
10、ction(skinNormals-GetOutputPort();vtkPolyDataMapper *skinMapper = vtkPolyDataMapper:New();skinMapper-SetInputConnection(skinStripper-GetOutputPort();skinMapper-ScalarVisibilityOff();示例代碼1第12頁/共24頁vtkActor *skin = vtkActor:New();skin-SetMapper(skinMapper);skin-GetProperty()-SetDiffuseColor(1, .49, .2
11、5);skin-GetProperty()-SetSpecular(.3);skin-GetProperty()-SetSpecularPower(20);vtkLookupTable *bwLut = vtkLookupTable:New();bwLut-SetTableRange (0, 2000);bwLut-SetSaturationRange(0, 1);bwLut-SetHueRange (0, 1);bwLut-SetValueRange (0.5, 1);bwLut-Build(); /effective built/ The result is an image of typ
12、e VTK_UNSIGNED_CHAR vtkImageMapToColors *saggitalColors = vtkImageMapToColors:New();saggitalColors-SetInputConnection(v16-GetOutputPort();saggitalColors-SetLookupTable(bwLut);vtkImageActor *saggital = vtkImageActor:New();saggital-SetInput(saggitalColors-GetOutput();saggital-SetDisplayExtent(32,32, 0
13、,63, 0,92);第13頁/共24頁vtkRenderer *aRenderer = vtkRenderer:New();vtkRenderWindow *renWin = vtkRenderWindow:New();renWin-AddRenderer(aRenderer);vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor:New();iren-SetRenderWindow(renWin);vtkCamera *aCamera = vtkCamera:New();aCamera-SetViewUp (0, 0, -1
14、);aCamera-SetPosition (0, 1, 0);aCamera-SetFocalPoint (0, 0, 0);aCamera-ComputeViewPlaneNormal();aRenderer-AddActor(saggital);skin-GetProperty()-SetOpacity(0.5);aRenderer-SetActiveCamera(aCamera);aRenderer-Render();aRenderer-ResetCamera ();aCamera-Dolly(1.5);aRenderer-SetBackground(1,1,1);aRenderer-
15、ResetCameraClippingRange ();renWin-SetSize(640, 480);iren-Initialize();iren-Start(); 第14頁/共24頁示例代碼3演示視窗顯示控制、相機(jī)控制第15頁/共24頁class vtkWidgetWindowLevelCallback : public vtkCommandpublic: static vtkWidgetWindowLevelCallback *New() return new vtkWidgetWindowLevelCallback; void Execute( vtkObject *caller,
16、unsigned long vtkNotUsed( event ), void *callData ) vtkImagePlaneWidget* self = reinterpret_cast( caller ); if(!self) return; double* wl = static_cast( callData ); 第16頁/共24頁if ( self = this-WidgetX ) this-WidgetY-SetWindowLevel(wl0,wl1); this-WidgetZ-SetWindowLevel(wl0,wl1); else if( self = this-Wid
17、getY ) this-WidgetX-SetWindowLevel(wl0,wl1); this-WidgetZ-SetWindowLevel(wl0,wl1); else if (self = this-WidgetZ) this-WidgetX-SetWindowLevel(wl0,wl1); this-WidgetY-SetWindowLevel(wl0,wl1); 第17頁/共24頁 vtkWidgetWindowLevelCallback():WidgetX( 0 ), WidgetY( 0 ), WidgetZ ( 0 ) vtkImagePlaneWidget* WidgetX
18、; vtkImagePlaneWidget* WidgetY; vtkImagePlaneWidget* WidgetZ;int main( int argc, char *argv ) vtkRenderer* ren1 = vtkRenderer:New(); vtkRenderer* ren2 = vtkRenderer:New(); vtkRenderer* ren3 = vtkRenderer:New(); vtkRenderer* ren = vtkRenderer:New(); vtkRenderWindow* renWin = vtkRenderWindow:New(); vt
19、kRenderWindowInteractor* iren = vtkRenderWindowInteractor:New(); iren-SetRenderWindow(renWin); renWin-AddRenderer(ren1); renWin-AddRenderer(ren2); renWin-AddRenderer(ren3); renWin-AddRenderer(ren);第18頁/共24頁vtkDICOMImageReader *v16 = vtkDICOMImageReader:New();v16-SetDataByteOrderToLittleEndian();v16-
20、SetDirectoryName(E:/MedImageData/336);v16-Update();vtkOutlineFilter* outline = vtkOutlineFilter:New();outline-SetInputConnection(v16-GetOutputPort();vtkPolyDataMapper* outlineMapper = vtkPolyDataMapper:New();outlineMapper-SetInputConnection(outline-GetOutputPort();vtkActor* outlineActor = vtkActor:N
21、ew();outlineActor-SetMapper( outlineMapper); 第19頁/共24頁vtkWidgetWindowLevelCallback* cbk = vtkWidgetWindowLevelCallback:New();cbk-WidgetX = planeWidgetX;cbk-WidgetY = planeWidgetY;cbk-WidgetZ = planeWidgetZ;/ planeWidgetX-AddObserver( vtkCommand:EndWindowLevelEvent, cbk );/planeWidgetY-AddObserver( v
22、tkCommand:EndWindowLevelEvent, cbk );/planeWidgetZ-AddObserver( vtkCommand:EndWindowLevelEvent, cbk );cbk-Delete();vtkImageMapToColors* colorMap1 = vtkImageMapToColors:New();colorMap1-PassAlphaToOutputOff();colorMap1-SetActiveComponent(0);colorMap1-SetOutputFormatToLuminance();colorMap1-SetInput(pla
23、neWidgetX-GetResliceOutput();colorMap1-SetLookupTable(planeWidgetX-GetLookupTable();vtkImageActor* imageActor1 = vtkImageActor:New();imageActor1-PickableOff();imageActor1-SetInput(colorMap1-GetOutput();第20頁/共24頁 ren-AddActor( outlineActor); ren1-AddActor( imageActor1); ren2-AddActor( imageActor2); r
24、en3-AddActor( imageActor3); ren-SetBackground( 0.1, 0.1, 0.2); ren1-SetBackground( 0.1, 0.2, 0.1); ren2-SetBackground( 0.2, 0.1, 0.2); ren3-SetBackground( 0.2, 0.2, 0.2); renWin-SetSize( 600, 400); ren-SetViewport(0,0.5,0.5,1); ren1-SetViewport(0.5,0.5,1,1); ren2-SetViewport(0,0,0.5,0.5); ren3-SetVi
25、ewport(0.5,0,1,0.5); renWin-Render();第21頁/共24頁 ren-GetActiveCamera()-Elevation(110); ren-GetActiveCamera()-SetViewUp(0, 0, -1); ren-GetActiveCamera()-Azimuth(45); ren-GetActiveCamera()-Dolly(1.15); ren-ResetCameraClippingRange(); iren-Initialize(); iren-Start(); renWin-Render(); iren-SetKeyCode(z); iren-InvokeEvent(vtkCommand:CharEvent,NULL); iren-SetKeyCode(z); iren-InvokeEvent(vtkCommand:Char
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣告應(yīng)急預(yù)案管理辦法
- 影視版權(quán)登記管理辦法
- 各類資金賬戶管理辦法
- 護(hù)理管理人員管理辦法
- 肝臟中醫(yī)課件
- 室內(nèi)培訓(xùn)課件舞蹈圖片
- 肝癌晚期護(hù)理
- 二七區(qū)全區(qū)統(tǒng)考數(shù)學(xué)試卷
- 芬蘭八年級的數(shù)學(xué)試卷
- 肚子響中醫(yī)辯證課件
- 中國硒化汞行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報(bào)告2024-2029版
- 水庫安保服務(wù)方案
- INSAR技術(shù)在城市地面沉降監(jiān)測中的應(yīng)用
- 產(chǎn)品審核VDA6.5培訓(xùn)課件
- 艾滋病乙肝梅毒知識講座
- 九年級化學(xué)下冊 第11單元 課題2 化學(xué)肥料課件 新人教版
- 暖氣片報(bào)價(jià)單范本
- 臨床醫(yī)學(xué)研究中心年度考核細(xì)則
- PSSE軟件操作說明
- 22S803 圓形鋼筋混凝土蓄水池
- 級配碎石試驗(yàn)段施工總結(jié)報(bào)告
評論
0/150
提交評論