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();
     }

    }


  • 相关阅读:
    The bean ‘XXXXX.FeignClientSpecification‘ could not be registered.
    爱数产品
    RSA加解密时报algid parse error, not a sequence错误
    PostgreSQL 查看数据库,索引,表,表空间大小
    Vue3工程示例
    Vue3工程用Vue2示例
    Vue工程添加组件调用
    Vue 项目结构
    命令行创建Vue项目
    Vue 自定义指令
  • 原文地址:https://www.cnblogs.com/buffer/p/1410239.html
Copyright © 2011-2022 走看看