[vtkusers] VTK5.6.1: One  render window, multiple renders and auto interactor style solution
    Andre Souza 
    a.souz36 at gmail.com
       
    Fri May  6 14:29:22 EDT 2011
    
    
  
Hi everyone,
I'm answering myself here with a solution for my question. I solved my
problem by adding an observer to the interactor object that whatches for a
MouseMoveEvent to call my callback function. - Andre
-------
vtkVolumeInteractionCallback* callback =
vtkVolumeInteractionCallback::New();
  callback->SetInteractor(iren);
  callback->SetImageInteractorStyle(imageStyle);
  callback->SetImageRenderer(rendererImage);
  callback->SetVolumeInteractorStyle(volumeStyle);
  iren->AddObserver(vtkCommand::MouseMoveEvent, callback);
  callback->Delete();
---------
//Callback for automatic change of interaction styles
class vtkVolumeInteractionCallback : public vtkCommand
{
public:
  static vtkVolumeInteractionCallback *New() {
    return new vtkVolumeInteractionCallback; };
 
  vtkVolumeInteractionCallback() {
    this->Interactor = 0;
    this->VolumeIren = 0;
    this->ImageIren = 0;
    this->ImageRenderer = 0;};
  void SetInteractor(vtkRenderWindowInteractor *interactor) {
    this->Interactor = interactor; };
  vtkRenderWindowInteractor *GetInteractor() {
    return this->Interactor; };
  void SetVolumeInteractorStyle(vtkInteractorStyleSwitch* m) { this->
VolumeIren = m; };
  void SetImageInteractorStyle(vtkInteractorStyleImage* m) { this->ImageIren
= m; };
  void SetImageRenderer(vtkRenderer* imageRenderer){ this->ImageRenderer =
imageRenderer; };
  
  virtual void Execute(vtkObject *, unsigned long event, void *)
    {
     vtkRenderWindowInteractor *interactor = this->GetInteractor();
     int lastPos[2];
     interactor->GetLastEventPosition(lastPos);
     int currPos[2];
     interactor->GetEventPosition(currPos);
     double port[4];
       
     if (event == vtkCommand::MouseMoveEvent) {
        vtkRenderer *renderer = interactor->FindPokedRenderer(currPos[0],
currPos[1]);
        if (renderer == ImageRenderer) {
            interactor->SetInteractorStyle(this->ImageIren);        
        }else {
            interactor->SetInteractorStyle(this->VolumeIren);           
        }
        vtkInteractorStyle *style = vtkInteractorStyle::SafeDownCast(
          interactor->GetInteractorStyle());
        if (style)
          {
          style->OnMouseMove();
          }      
   }
  };
 
private: 
  // Pointer to the interactor
  vtkRenderWindowInteractor *Interactor;
  //pointer to interactor volume style
  vtkInteractorStyleSwitch *VolumeIren;
  //pointer to interactor image style
  vtkInteractorStyleImage *ImageIren;
 //pointer to image renderer
  vtkRenderer *ImageRenderer;
};
--
View this message in context: http://vtk.1045678.n5.nabble.com/VTK5-6-1-One-render-window-multiple-renders-and-auto-interactor-style-solution-tp4358940p4376754.html
Sent from the VTK - Users mailing list archive at Nabble.com.
    
    
More information about the vtkusers
mailing list