返回首页 我的新博客

VTK使用改进

利用VTK库开发基于MFC的应用程序
在用VTK库时,感觉很难开发出MFC的应用程序,VTK提供的vtkMFCWindow类封装的太死,在参考vtkMFCWindow类的实现方式后,通过改造单文档应用程序中的View类,直接在View类中就能响应MFC消息,同时又能利用VTK库本身的东西。在我的例子中,能打开VTK格式文件,同时能用鼠标进行移动旋转,缩放等操作,而且响应右键菜单,插入一个3ds文件。
主要修改地方:
在HBVRView.h中增加成员变量和函数:

public:
 vtkRenderer
* GetRenderer() { ASSERT(m_pRenderer); return m_pRenderer; }
 vtkWin32OpenGLRenderWindow
* GetRenderWindow(){return m_pRenderWindow;}
 vtkRenderWindowInteractor
* GetInteractor();

protected:
 vtkRenderer            
*m_pRenderer;
 vtkWin32OpenGLRenderWindow
* m_pRenderWindow;
 
void SetRenderWindow(vtkWin32OpenGLRenderWindow* win);

同时添加所有与鼠标有关的消息响应函数。

在HBVRView.cpp中做如下修改:

BOOL CHBVRView::PreCreateWindow(CREATESTRUCT& cs)
{
 
//设置窗口类型,OpenGL窗口需要这样的设置
 cs.style |=WS_CLIPCHILDREN | WS_CLIPSIBLINGS;

 
return CView::PreCreateWindow(cs);
}


int CHBVRView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
 
if (CView::OnCreate(lpCreateStruct) == -1)
  
return -1;
 
 
// 创建OpenGL窗口
 vtkWin32OpenGLRenderWindow* win = vtkWin32OpenGLRenderWindow::New();
 SetRenderWindow(win);
 win
->Delete();
 
 m_pRenderWindow
->AddRenderer(m_pRenderer);

 
return 0;
}


// 左键操作采用默认操作方式
void CHBVRView::OnLButtonDown(UINT nFlags, CPoint point) 
{
 static_cast
<vtkWin32RenderWindowInteractor*>(this->GetInteractor())->
    OnLButtonDown(
this->GetSafeHwnd(), nFlags, point.x, point.y, 0);
}


// 右键自己处理,弹出菜单,用来导入3ds文件。
void CHBVRView::OnRButtonUp(UINT nFlags, CPoint point) 
{
 ClientToScreen(
&point);
 CMenu menu, 
*pSubMenu = NULL;
 
if (menu.LoadMenu(IDR_VIEW_POPUP))
 
{
  pSubMenu 
= (CMenu *)menu.GetSubMenu(0);
  pSubMenu
->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, GetParent());
  menu.DestroyMenu();
 }

}


posted @ 2009-03-13 09:59  buffer的blogs  阅读(1289)  评论(0编辑  收藏  举报