欢迎来到天天文库
浏览记录
ID:6710692
大小:248.07 KB
页数:12页
时间:2018-01-23
《基于vtk的mfc应用程序开发》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于VTK的MFC应用程序开发(3)分类: VTK应用示例2013-05-1713:37 1681人阅读 评论(17) 收藏 举报目录(?)[+]之前介绍了基于VTK的单文档应用程序开发,并以图像重采样为例,实现了一个简单的图像重采样的应用程序。对于多文档应用程序,与单文档应用程序基本一致,这里就不再讲述。对话框应用程序是MFC应用程序中一个使用非常广泛的框架,本节就以医学图像可视化中常用的四视图框架程序的实现为例,讲述基于VTK的对话框应用程序开发。1. 利用VS和CMake建立一个空的MFC对话框程序框架。利用VS创建一个MFC对话框工程
2、vtkDialog,删除其中的工程文件,完成CMakeLists.txt文件,并添加相应的代码文件和链接VTK动态库,利用CMake配置完毕后,打开生成的工程文件vtkDialog.sln,编译执行,即可得到一个空的对话框程序。其中CvtkDialogDlg为该程序的主对话框类。2. 设计用户界面,添加相应的控件本程序需要实现的功能有(1)图像读取和管理;(2)图像切分和浏览。一个常见的医学图像可视化程序,包括四个视图,横断面视图,矢状面视图,冠状面视图和三维视图。因此,基于以上设计,我们添加一个树控件,MFC中对应的控件类为CTreeCtr
3、l。树控件是最常用的文件管理控件,能够方便的对文件进行层次化组织和管理。四视图的实现则需要四个控件,这里我们选择CStatic控件,将其添加至对话框窗口中。添加完毕后,为控件生成相应的Control类型的变量。按照上述设计,需要在CStatic中显示图像。这就需要对CStatic类继续扩展,使其支持VTK可视化管线。一个可行的方法是,设计一个CStatic类的子类,并在该子类中实现VTK可视化管线和处理。3. 实现VTK图像可视化控件3.1首先添加一个MFC类CvtkView其基类选择为CStatic,并添加至CMakeLists.txt文件
4、中进行管理。3.2重载CvtkView类PreSubclassWindow()函数和OnPaint()函数PreSubclassWindow函数负责创建VTK可视化管线,OnPaint()函数负责客户区内场景渲染。3.3建立VTK可视化管线VTK可视化管线在第二章中已经介绍过,其中最主要包含vtkAcor,vtkRenderer,vtkRenderWindow,vtkRenderWindowInteractor四个部分。当然根据需要还可以设置vtkRenderWindowInteractorStyle,以及光照,材质,颜色等。在CvtkVie
5、w类头文件中定义相关对象,并在PreSubclassWindow函数中实例化和构建可视化管线,代码如下。[cpp] viewplaincopy1.void CvtkView::PreSubclassWindow() 2.{ 3. // TODO: Add your specialized code here and/or call the base class 4. CRect rect; 5. GetClientRect(rect); 6. 7. m_Renderer = vtkSmartPointer<
6、vtkRenderer>::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_
7、RenderWindow->GetInteractor() == NULL) 15. { 16. vtkSmartPointer RenderWindowInteractor = 17. vtkSmartPointer::New(); 18. RenderWindowInteractor->SetRenderWindow(m_RenderWindow); 19.
8、 RenderWindowInteractor->Initialize(); 20. } 21. 22. m_RenderWindow->St
此文档下载收益归作者所有