教学课件第一部分VTK程序一般流程.ppt

上传人:牧羊曲112 文档编号:6288172 上传时间:2023-10-14 格式:PPT 页数:24 大小:607.50KB
返回 下载 相关 举报
教学课件第一部分VTK程序一般流程.ppt_第1页
第1页 / 共24页
教学课件第一部分VTK程序一般流程.ppt_第2页
第2页 / 共24页
教学课件第一部分VTK程序一般流程.ppt_第3页
第3页 / 共24页
教学课件第一部分VTK程序一般流程.ppt_第4页
第4页 / 共24页
教学课件第一部分VTK程序一般流程.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《教学课件第一部分VTK程序一般流程.ppt》由会员分享,可在线阅读,更多相关《教学课件第一部分VTK程序一般流程.ppt(24页珍藏版)》请在三一办公上搜索。

1、报告人:邹水中日 期:,VTK使用总结,内容简介,一、VTK程序一般流程二、VTK的数据对象接口三、VTK的面绘制、体绘制、多平面显示四、视点变换与相机控制五、VTK事件交互、VTK与MFC混合编程六、VTK视窗控制与文本标注七、VTK在测量中应用与VTK数据切割,第一部分 VTK程序一般流程,Visualization Toolkit 的机制Visualization Toolkit 是一个用于可视化应用程序构造与运行的支撑环境,它是在三维函数库OpenGL 的基础上采用面向对象的设计方法发展起来的。它将在可视化开发过程中会经常遇到的细节屏蔽起来,并将一些常用的算法封装起来。比如Visual

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

3、),因为filters连接着可视化流水线,当actor接收到绘制本身的要求会将方法回馈到他的mapper,然后Update方法自动发送至可视化流水线。Render方法通常开始数据要求,数据被通过流水线向下投递。依赖于流水线的哪个端口过时,流水线中的filters可能重新执行,将数据送至更新的流水线末端,通过actor绘制.,可视化模型,VTK 图形模型由以下核心对象组成vtkActor,vtkActor2D,vtkVolume vtkProp 和/或vtpProp3D 的子类vtkLightvtkCameravtkProperty,vtkProperty2DvtkMaper,vtkMapper

4、2D vtkAbstractMapper 的子类vtkTransformvtkLookupTable,vtkColorTransferFunction-vtkScalarsToColors 的子类/for objects that convert scalars to colors vtkRendervtkRenderWindowvtkRenderWindowInteractor,图形模型,vtkLight用来展示和操控场景中的灯光,只在3D中用到.VtkCamera控制3D几何投影到2D。定位:定点、方向,还控制视角投影和立体视图.vtkMapper与查找表vtkLookupTable联合使

5、用,用于转换和绘制几何体。Mapper提供可视化流水线和图形模型.vtkLookupTable是vtkScalarsToColors和vtkColorTransferFunction的子类.,vtkRenderer和vtkRenderWindow用来管理图形机与电脑窗口系统的接口.可以生成多个render windows,每个render windows中有多个renderer去绘制.一个render window中可以有多个区域(视窗).vtkRenderWindowInteractor用于与场景交互,操纵camera,选择对象.vtkWin32OpenGLRenderWindow和vtkW

6、in32RenderWindowInteractorvtkWin32OpenGLRenderWindow 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 functions required by vtkRenderWindowInteractor.,v

7、tkActor的子类vtkAssembly,vtkFollower,vtkLODActor等.vtkAssembly允许actors分层,在层级平移、旋转、缩放时合理转换.vtkLODActor在改变几何表示时保持交互帧速率,示例代码1演示VTK一般流程及常用类的使用,vtkVolume16Reader*v16=vtkVolume16Reader:New();v16-SetDataDimensions(64,64);v16-SetDataByteOrderToLittleEndian();v16-SetFilePrefix(D:/VTK 5.4/VTKData/Data/headsq/quar

8、ter);v16-SetImageRange(1,93);v16-SetDataSpacing(3.2,3.2,1.5);vtkContourFilter*skinExtractor=vtkContourFilter:New();skinExtractor-SetInputConnection(v16-GetOutputPort();skinExtractor-SetValue(0,500);vtkPolyDataNormals*skinNormals=vtkPolyDataNormals:New();skinNormals-SetInputConnection(skinExtractor-G

9、etOutputPort();skinNormals-SetFeatureAngle(60.0);/if the surface normal between two adjacent triangles is=FeatureAngle,an edge exists vtkStripper*skinStripper=vtkStripper:New();skinStripper-SetInputConnection(skinNormals-GetOutputPort();vtkPolyDataMapper*skinMapper=vtkPolyDataMapper:New();skinMapper

10、-SetInputConnection(skinStripper-GetOutputPort();skinMapper-ScalarVisibilityOff();,示例代码1,vtkActor*skin=vtkActor:New();skin-SetMapper(skinMapper);skin-GetProperty()-SetDiffuseColor(1,.49,.25);skin-GetProperty()-SetSpecular(.3);skin-GetProperty()-SetSpecularPower(20);vtkLookupTable*bwLut=vtkLookupTabl

11、e: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 type VTK_UNSIGNED_CHAR vtkImageMapToColors*saggitalColors=vtkImageMapToColors:New();saggitalColors-SetInputConnection(v16-GetOu

12、tputPort();saggitalColors-SetLookupTable(bwLut);vtkImageActor*saggital=vtkImageActor:New();saggital-SetInput(saggitalColors-GetOutput();saggital-SetDisplayExtent(32,32,0,63,0,92);,vtkRenderer*aRenderer=vtkRenderer:New();vtkRenderWindow*renWin=vtkRenderWindow:New();renWin-AddRenderer(aRenderer);vtkRe

13、nderWindowInteractor*iren=vtkRenderWindowInteractor:New();iren-SetRenderWindow(renWin);vtkCamera*aCamera=vtkCamera:New();aCamera-SetViewUp(0,0,-1);aCamera-SetPosition(0,1,0);aCamera-SetFocalPoint(0,0,0);aCamera-ComputeViewPlaneNormal();aRenderer-AddActor(saggital);skin-GetProperty()-SetOpacity(0.5);

14、aRenderer-SetActiveCamera(aCamera);aRenderer-Render();aRenderer-ResetCamera();aCamera-Dolly(1.5);aRenderer-SetBackground(1,1,1);aRenderer-ResetCameraClippingRange();renWin-SetSize(640,480);iren-Initialize();iren-Start();,示例代码3演示视窗显示控制、相机控制,class vtkWidgetWindowLevelCallback:public vtkCommandpublic:s

15、tatic vtkWidgetWindowLevelCallback*New()return new vtkWidgetWindowLevelCallback;void Execute(vtkObject*caller,unsigned long vtkNotUsed(event),void*callData)vtkImagePlaneWidget*self=reinterpret_cast(caller);if(!self)return;double*wl=static_cast(callData);,if(self=this-WidgetX)this-WidgetY-SetWindowLe

16、vel(wl0,wl1);this-WidgetZ-SetWindowLevel(wl0,wl1);else if(self=this-WidgetY)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);,vtkWidgetWindowLevelCallback():WidgetX(0),WidgetY

17、(0),WidgetZ(0)vtkImagePlaneWidget*WidgetX;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=vtkRenderWin

18、dow:New();vtkRenderWindowInteractor*iren=vtkRenderWindowInteractor:New();iren-SetRenderWindow(renWin);renWin-AddRenderer(ren1);renWin-AddRenderer(ren2);renWin-AddRenderer(ren3);renWin-AddRenderer(ren);,vtkDICOMImageReader*v16=vtkDICOMImageReader:New();v16-SetDataByteOrderToLittleEndian();v16-SetDire

19、ctoryName(E:/MedImageData/336);v16-Update();vtkOutlineFilter*outline=vtkOutlineFilter:New();outline-SetInputConnection(v16-GetOutputPort();vtkPolyDataMapper*outlineMapper=vtkPolyDataMapper:New();outlineMapper-SetInputConnection(outline-GetOutputPort();vtkActor*outlineActor=vtkActor:New();outlineActo

20、r-SetMapper(outlineMapper);,vtkWidgetWindowLevelCallback*cbk=vtkWidgetWindowLevelCallback:New();cbk-WidgetX=planeWidgetX;cbk-WidgetY=planeWidgetY;cbk-WidgetZ=planeWidgetZ;/planeWidgetX-AddObserver(vtkCommand:EndWindowLevelEvent,cbk);/planeWidgetY-AddObserver(vtkCommand:EndWindowLevelEvent,cbk);/plan

21、eWidgetZ-AddObserver(vtkCommand:EndWindowLevelEvent,cbk);cbk-Delete();,vtkImageMapToColors*colorMap1=vtkImageMapToColors:New();colorMap1-PassAlphaToOutputOff();colorMap1-SetActiveComponent(0);colorMap1-SetOutputFormatToLuminance();colorMap1-SetInput(planeWidgetX-GetResliceOutput();colorMap1-SetLooku

22、pTable(planeWidgetX-GetLookupTable();vtkImageActor*imageActor1=vtkImageActor:New();imageActor1-PickableOff();imageActor1-SetInput(colorMap1-GetOutput();,ren-AddActor(outlineActor);ren1-AddActor(imageActor1);ren2-AddActor(imageActor2);ren3-AddActor(imageActor3);ren-SetBackground(0.1,0.1,0.2);ren1-Set

23、Background(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-SetViewport(0.5,0,1,0.5);renWin-Render();,ren-GetActiveCamera()-Elevation(110);ren-GetActiveCa

24、mera()-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:CharEvent,NULL);ire

25、n-Start();,vtkCellPicker*picker=vtkCellPicker:New();picker-SetTolerance(0.005);vtkProperty*ipwProp=vtkProperty:New();/assign default props to the ipws texture plane actorvtkImagePlaneWidget*planeWidgetX=vtkImagePlaneWidget:New();planeWidgetX-SetInteractor(iren);planeWidgetX-SetKeyPressActivationValu

26、e(x);planeWidgetX-SetPicker(picker);planeWidgetX-RestrictPlaneToVolumeOn();planeWidgetX-GetPlaneProperty()-SetColor(1,0,0);planeWidgetX-SetTexturePlaneProperty(ipwProp);planeWidgetX-TextureInterpolateOff();planeWidgetX-SetResliceInterpolateToNearestNeighbour();planeWidgetX-SetInput(v16-GetOutput();planeWidgetX-SetPlaneOrientationToXAxes();planeWidgetX-SetSliceIndex(32);planeWidgetX-GetTexturePlaneProperty()-SetOpacity(1);planeWidgetX-DisplayTextOn();planeWidgetX-On();planeWidgetX-InteractionOn();,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号