VTK程序一般流程PPT学习教案_第1页
VTK程序一般流程PPT学习教案_第2页
VTK程序一般流程PPT学习教案_第3页
VTK程序一般流程PPT学习教案_第4页
VTK程序一般流程PPT学习教案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1VTK程序一般流程程序一般流程一、一、二、二、VTK的数据对象接口的数据对象接口四、视点变换与相机控制四、视点变换与相机控制五、五、 VTK事件交互、事件交互、VTK与与MFC混合编混合编程程六、六、VTK视窗控制与文视窗控制与文本标注本标注七、七、VTK在测量中应用与在测量中应用与VTK数据切割数据切割第1页/共24页第2页/共24页Visualization Toolkit 的机制Visualization Toolkit 是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库OpenGL 的基础上采用面向对象的设计方法发展起来的。它将在可视化开发过程中会经常遇到的细节屏蔽

2、起来,并将一些常用的算法封装起来。比如Visualization Toolkit 将在表面重建中比较常见的Marching Cubes 算法封装起来,以类的形式给以支持,这样在对三维规则点阵数据进行表面重建时就不必再重复编写Marching Cubes 算法的代码而直接使用Visualization Toolkit 中已经提供的vtkMarchingCubes 类。第3页/共24页第4页/共24页第5页/共24页图形流水线:将几何数据转换为图像;可视化流水线:将信息转换为几何数据.另一种看法是:可视化流水线:负责构建几何表示;图形流水线:负责绘制. vtk使用一种lazy评价机制.对于lazy

3、评价机制,通常无需人工地调用Update(),因为filters连接着可视化流水线,当actor接收到绘制本身的要求会将方法回馈到他的mapper,然后Update方法自动发送至可视化流水线。Render方法通常开始数据要求,数据被通过流水线向下投递。依赖于流水线的哪个端口过时,流水线中的filters可能重新执行,将数据送至更新的流水线末端,通过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。定位:定点、方向,

5、还控制视角投影和立体视图.vtkMapper与查找表vtkLookupTable联合使用,用于转换和绘制几何体。Mapper提供可视化流水线和图形模型.vtkLookupTable是vtkScalarsToColors和vtkColorTransferFunction的子类.第8页/共24页vtkRenderer和vtkRenderWindow用来管理图形机与电脑窗口系统的接口.可以生成多个render windows,每个render windows中有多个renderer去绘制.一个render window中可以有多个区域(视窗).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分层,在层级平移、旋转、缩放时合理转换.vtkLODActor在改变几何表示时保持交互帧速率第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演示视窗显示控制、相机控制第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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论