zoukankan      html  css  js  c++  java
  • 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();
     }

    }


  • 相关阅读:
    EF 连接数据库 Mysql (database first ) 一个表对应一个模型
    EF Database first 中,实现 多个表对应一个 实体的 查询
    用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树 (转sam xiao的博客)
    转,竞争中的操作手法
    最近想买的东西
    换书网,互相换书看
    在线模拟城市
     下面我列出了一些和VC商谈时必须解决的问题。
    时代杂志:生活中离不开的25个网站
    运营社区需要心理学
  • 原文地址:https://www.cnblogs.com/buffer/p/1410239.html
Copyright © 2011-2022 走看看