[vtkusers] Re: Mouse Event Problem
    Scott J. Pearson 
    scottjp at CLEMSON.EDU
       
    Mon May 16 11:14:48 EDT 2005
    
    
  
We use a vtkCommand::MouseMoveEvent to handle mouse movements. Thus, one can
do something along the lines of the following code.
int currentEvent_;
int lastX_, lastY_;
const int PANNING = 1;
const int NOTHING = 2;
void left_button_press(vtkObject *caller, unsigned long eid,
                       void *clientdata, void *calldata)
{
   currentEvent_ = PANNING;
   POINT pos;
   ::GetCursorPos(&pos);
   lastX_ = pos.x;
   lastY_ = pos.y;
}
void left_button_release(vtkObject *caller, unsigned long eid,
                         void *clientdata, void *calldata)
{
   currentEvent_ = NOTHING;
}
void mouse_move_event(vtkObject *caller, unsigned long eid,
                      void *clientdata, void *calldata)
{
   if (currentEvent_ == PANNING)
   {
      POINT pos;
      ::GetCursorPos(&pos);
      ...   // act on the new pos vis-à-vis lastX_ and lastY_
      lastX_ = pos.x;
      lastY_ = pos.y;
   }
}
void VtkControl::VtkControl()
{
   //...
   unsigned eventID1 = vtkCommand::LeftButtonPressEvent;
   vtkCallbackCommand *cb1 = vtkCallbackCommand::New();
   cb1->SetCallback(left_button_press);
   iren->AddObserver(eventID1, cb1);
   unsigned eventID2 = vtkCommand::LeftButtonReleaseEvent;
   vtkCallbackCommand *cb2 = vtkCallbackCommand::New();
   cb2->SetCallback(left_button_release);
   iren->AddObserver(eventID2, cb2);
   unsigned eventID3 = vtkCommand::MouseMoveEvent;
   vtkCallbackCommand *cb3 = vtkCallbackCommand::New();
   cb3->SetCallback(mouse_move_event);
   iren->AddObserver(eventID3, cb3);
   //...
}
    
    
More information about the vtkusers
mailing list