[vtkusers] help: how to use vtkInteractorStyle::SetLeftButtonPressMethod()

Alexander Sendobry alexander.sendobry at igd.fraunhofer.de
Fri Jan 27 05:24:22 EST 2006


Hello,

I'm writing a small tool for a very huge program.
througout the whole program there is defined a 
vtkInteractorStyleTrackballActor to zoom / pan and rotate images.

Now i want to implement a function that does a pickCallback (it is 
called Measure Callback) if you press the left mouse button. For this 
purpose i want to use the class vtkInteractorStyleUser to tell the program:
- If  the left button ist pressed, do a pickcallback and don't rotate 
the image.
- All the other functionality of vtkInteractorStyleTrackballActor should 
be left unchanged.

I don't understand how to use the method 
"vtkInteractorStyle::SetLeftButtonPressMethod(void(*f)(void *), void 
*arg)"  correctly. what does the call "void(*f)(void *)" mean?
In a former question by someone else i read, that you can only define a 
C function, but not a C++ function, is that right?
How must the function void(*f)(void *) look like?

The following is a snippet of my code.
there is only defined an wxVTKRenderWindowInteractor, for interaction 
between wxWidgets and VTK. so i did a dynamic_cast to 
vtkWin32RenderWindowInteractor*.
afterwards i do another dynamic_cast back to 
wxVTKRenderWindowInteractor*, and it should work.
My only Problem can be found in the line
*iasu->SetLeftButtonPressMethod(......);
*How can i tell the Interactor not to rotate when pressing (and holding 
down) the left mouse button, but to do a Measure Callback, as defined in 
the last line of this few lines

  // init Measure callback
  m_pMeasureCallback = vtkMeasureCallback::New(this);
  //Define interactor and interactorStyle
  vtkInteractorStyleUser* iasu = vtkInteractorStyleUser::New();
  vtkWin32RenderWindowInteractor* pvtkWin32Interactor = 
dynamic_cast<vtkWin32RenderWindowInteractor*>(m_pWXVTKRenderWindowInteractor);
  iasu->SetLeftButtonPressMethod();
  pvtkWin32Interactor->SetInteractorStyle(iasu);

  
m_pMeasureCallback->SetInteractor(dynamic_cast<wxVTKRenderWindowInteractor*>(pvtkWin32Interactor));
  //m_pWXVTKRenderWindowInteractor->SetIgnoreLeftMButton(false);
  
m_pWXVTKRenderWindowInteractor->AddObserver(vtkCommand::LeftButtonPressEvent, 
m_pMeasureCallback);
  m_pRenderer->AddObserver(vtkCommand::LeftButtonPressEvent, 
m_pMeasureCallback);


With the following commented line it is possible to do a Callback with 
the left mouse button, but the image will also be rotated, if you don't 
have calm fingers.....
//m_pWXVTKRenderWindowInteractor->SetIgnoreLeftMButton(false);

Thank you for your answers
Alexander Sendobry





More information about the vtkusers mailing list