vtk处理外部事件

来源:互联网 发布:尸者的帝国知乎 编辑:程序博客网 时间:2024/06/13 01:11

Command方式

class CommandSubclass : public vtkCommand{public:    vtkTypeMacro(CommandSubclass , vtkCommand);    static CommandSubclass *New()    {        return new CommandSubclass ;    }    void Execute(vtkObject *caller, unsigned long eventId,void *callData)    {            // 过滤按键信息        if (eventId == vtkCommand::KeyPressEvent)        {            // 过滤ctrl            vtkRenderWindowInteractor* interactor =                dynamic_cast<vtkRenderWindowInteractor*>(caller);            if (interactor->GetControlKey())            {                std::string key = interactor->GetKeySym();                if(key == "a")                cout << "ctrl + a" << endl;            }        }       }};

InteractorStyle方式

class MouseInteractorStyleDoubleClick : public vtkInteractorStyleTrackballCamera{public:    // 先是interactor style进行处理    // 再是Command进行捕获处理    static MouseInteractorStyleDoubleClick* New();    vtkTypeMacro(MouseInteractorStyleDoubleClick, vtkInteractorStyleTrackballCamera);    MouseInteractorStyleDoubleClick() : NumberOfClicks(0), ResetPixelDistance(5)    {        this->PreviousPosition[0] = 0;        this->PreviousPosition[1] = 0;    }    //http://blog.sina.com.cn/s/blog_5e3a1bbb0100esv3.html    // keydown跟keypress区别    //virtual void OnKeyPress()    //{    //  //// Get the keypress    //  //vtkRenderWindowInteractor *rwi = this->Interactor;    //  //std::string key = rwi->GetKeySym();    //  //if (rwi->GetControlKey())    //  //{    //  //  // ctrl+ a    //  //  if (key == "a")    //  //  {    //  //      std::cout << "Ctrl + a" << std::endl;    //  //  }    //  //  //rwi->get    //  //}    //  //vtkInteractorStyleTrackballCamera::OnKeyPress();    //}    virtual void OnLeftButtonUp()    {        vtkRenderWindowInteractor *rwi = this->Interactor;        std::cout << "left mouse" << std::endl;        if (rwi->GetControlKey())        {            std::cout << "Ctrl + left mouse" << std::endl;        }        vtkInteractorStyleTrackballCamera::OnLeftButtonUp();    }private:    unsigned int NumberOfClicks;    int PreviousPosition[2];    int ResetPixelDistance;};vtkStandardNewMacro(MouseInteractorStyleDoubleClick);
原创粉丝点击