[vtkusers] Subclassing vtkInteractorStyle in FourPainView Example

Panayiotis Georgiou ps.georgiou at gmail.com
Wed Sep 11 21:20:10 EDT 2013


Hi Alex,

I have applied the changes you have suggested and it works now :)

Thanks a lot for your help.

Panayiotis

p.s. my apologise for not being more clear in my first message. I wasn't
sure whether it was acceptable to include relatively large pieces of
code/attachments in the messages so I tried to be as concise as possible.


On Thu, Sep 12, 2013 at 1:41 AM, Alex Malyushytskyy <alexmalvtk at gmail.com>wrote:

> >> The major changes compared to the original code is the inclusion in
> QtVTKRenderWindows.cxx of the subclass KeyPressInteractorStyle and the 3
> lines of code where I apply the new style to view1. Both of these changes
> were included in my first post.
>
> The code you posted originally  did not really provide enough information.
> Where it was placed, etc.
> Also if I had your code in attachment it would save me time.
>
> Back to your code. You are setting style, then redefine render window ,
> change interactor etc.
> To fix it:
>
> a) Create instance of KeyPressInteractorStyle per view and replace
>
> vtkSmartPointer<KeyPressInteractorStyle> style =
> vtkSmartPointer<KeyPressInteractorStyle>::New();
>
> with
>
>   vtkSmartPointer<KeyPressInteractorStyle> style1 =
> vtkSmartPointer<KeyPressInteractorStyle>::New();
>   vtkSmartPointer<KeyPressInteractorStyle> style2 =
> vtkSmartPointer<KeyPressInteractorStyle>::New();
>   vtkSmartPointer<KeyPressInteractorStyle> style3 =
> vtkSmartPointer<KeyPressInteractorStyle>::New();
>   vtkSmartPointer<KeyPressInteractorStyle> style4 =
> vtkSmartPointer<KeyPressInteractorStyle>::New();
>
>
> b) remove all your changes related to applying style.
>
>
>
> this->ui->view1->GetInteractor()->SetInteractorStyle(style);
>
> //this->ui->view1->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style);
> //this->ui->view1->GetRenderWindow()->AddRenderer(riw[0]->GetRenderer());
>  style->SetCurrentRenderer(riw[0]->GetRenderer());
>
>
> c) Insert
>
>
> this->ui->view1->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style1);
>
> this->ui->view2->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style2);
>
> this->ui->view3->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style3);
>
> this->ui->view4->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style4);
>
> before
>
>   this->ui->view1->show();
>   this->ui->view2->show();
>   this->ui->view3->show()
>
>
> You will see output messages for every of 4 views when you click buttons
> there.
>
> Regards,
>     Alex
>
> On Wed, Sep 11, 2013 at 3:23 AM, Panayiotis Georgiou <
> ps.georgiou at gmail.com> wrote:
>
>> Hello,
>>
>> I am essentially trying to build on the FourPaneViewer example which you
>> can find from here:
>> https://github.com/Kitware/VTK/tree/master/Examples/GUI/Qt/FourPaneViewer
>>
>> The major changes compared to the original code is the inclusion in
>> QtVTKRenderWindows.cxx of the subclass KeyPressInteractorStyle and the 3
>> lines of code where I apply the new style to view1. Both of these changes
>> were included in my first post.
>>
>> Below I have including the code I am using which consists of 3 files: QtVTKRenderWindows.cxx, QtVTKRenderWindows.h
>> and QtVTKRenderWindowsApp.cxx
>>
>> You can download the .ui file from the above link.
>>
>> Note: you may want to change the path to the Dicom files at
>> reader->SetDirectoryName(...)
>>
>> Thanks for your help.
>>
>> ==================
>> QtVTKRenderWindows.h
>> ==================
>>
>> #ifndef QtVTKRenderWindows_H
>> #define QtVTKRenderWindows_H
>>
>> #include "vtkSmartPointer.h"
>> #include "vtkResliceImageViewer.h"
>> #include "vtkImagePlaneWidget.h"
>> #include "vtkDistanceWidget.h"
>> #include "vtkResliceImageViewerMeasurements.h"
>> #include <QMainWindow>
>>
>> // Forward Qt class declarations
>> class Ui_QtVTKRenderWindows;
>>
>> class QtVTKRenderWindows : public QMainWindow
>> {
>>   Q_OBJECT
>> public:
>>
>>   // Constructor/Destructor
>>   QtVTKRenderWindows(int argc, char *argv[]);
>>   ~QtVTKRenderWindows() {};
>>
>> public slots:
>>   virtual void resliceMode(int);
>>   virtual void Render();
>>
>> protected:
>>   vtkSmartPointer< vtkResliceImageViewer > riw[3];
>>   vtkSmartPointer< vtkImagePlaneWidget > planeWidget[3];
>>   vtkSmartPointer< vtkDistanceWidget > DistanceWidget[3];
>>   vtkSmartPointer< vtkResliceImageViewerMeasurements >
>> ResliceMeasurements;
>>
>> private:
>>
>>   // Designer form
>>   Ui_QtVTKRenderWindows *ui;
>> };
>>
>> #endif // QtVTKRenderWindows_H
>>
>> ====================
>> QtVTKRenderWindows.cxx
>> ====================
>>
>> #include "ui_QtVTKRenderWindows.h"
>> #include "QtVTKRenderWindows.h"
>>
>> #include <vtkRenderer.h>
>> #include <vtkRenderWindow.h>
>> #include "vtkResliceImageViewer.h"
>> #include "vtkResliceCursorLineRepresentation.h"
>> #include "vtkResliceCursorThickLineRepresentation.h"
>> #include "vtkResliceCursorWidget.h"
>> #include "vtkResliceCursorActor.h"
>> #include "vtkResliceCursorPolyDataAlgorithm.h"
>> #include "vtkResliceCursor.h"
>> #include "vtkDICOMImageReader.h"
>> #include "vtkCellPicker.h"
>> #include "vtkProperty.h"
>> #include "vtkPlane.h"
>> #include "vtkImageData.h"
>> #include "vtkCommand.h"
>> #include "vtkPlaneSource.h"
>> #include "vtkLookupTable.h"
>> #include "vtkImageMapToWindowLevelColors.h"
>> #include "vtkInteractorStyleImage.h"
>> #include "vtkImageSlabReslice.h"
>> #include "vtkBoundedPlanePointPlacer.h"
>> #include "vtkDistanceWidget.h"
>> #include "vtkDistanceRepresentation.h"
>> #include "vtkHandleRepresentation.h"
>> #include "vtkResliceImageViewerMeasurements.h"
>> #include "vtkDistanceRepresentation2D.h"
>> #include "vtkPointHandleRepresentation3D.h"
>> #include "vtkPointHandleRepresentation2D.h"
>> #include <qdebug.h>
>>
>> #include <vtkPolyDataMapper.h>
>> #include <vtkObjectFactory.h>
>> #include <vtkActor.h>
>> #include <vtkSmartPointer.h>
>> #include <vtkRenderWindow.h>
>> #include <vtkRenderer.h>
>> #include <vtkRenderWindowInteractor.h>
>> #include <vtkPolyData.h>
>> #include <vtkSphereSource.h>
>> #include <vtkInteractorStyleTrackballCamera.h>
>> #include "QVTKWidget.h"
>> #include <QKeyEvent>
>>
>> // Define interaction style
>> class KeyPressInteractorStyle : public vtkInteractorStyle
>> {
>> public:
>> static KeyPressInteractorStyle* New();
>>  vtkTypeMacro(KeyPressInteractorStyle, vtkInteractorStyle);
>>
>> virtual void OnKeyPress()
>>  {
>> // Get the keypress
>> vtkRenderWindowInteractor *rwi = this->Interactor;
>>  std::string key = rwi->GetKeySym();
>>
>> // Output the key that was pressed
>>  std::cout << "Pressed " << key << std::endl;
>> qDebug()<< "Pressed " << rwi->GetKeySym();
>>
>> // Forward events
>> vtkInteractorStyle::OnKeyPress();
>>  }
>>
>> virtual void OnChar()
>>  {
>>
>> qDebug()<<"keeeey";
>>  }
>>
>> };
>> vtkStandardNewMacro(KeyPressInteractorStyle);
>>
>>
>>
>> //----------------------------------------------------------------------------
>> class vtkResliceCursorCallback : public vtkCommand
>> {
>> public:
>>
>>  static vtkResliceCursorCallback *New()
>> {
>>  return new vtkResliceCursorCallback; }
>>
>> void Execute( vtkObject *caller, unsigned long ev,
>>  void *callData )
>> {
>>
>>  if (ev == vtkCommand::KeyPressEvent)
>> {
>>  QKeyEvent* keyPressed = static_cast<QKeyEvent*>(callData);
>>  qDebug()<<"key pressed: "<<keyPressed->text();
>> }
>>
>> if (ev == vtkResliceCursorWidget::WindowLevelEvent ||
>> ev == vtkCommand::WindowLevelEvent ||
>>  ev == vtkResliceCursorWidget::ResliceThicknessChangedEvent||
>> ev == vtkResliceCursorWidget::ResliceAxesChangedEvent||
>>  ev == vtkResliceCursorWidget::ResetCursorEvent)
>> {
>>  //do nothing
>> }
>>
>>  vtkImagePlaneWidget* ipw =
>> dynamic_cast< vtkImagePlaneWidget* >( caller );
>>  if (ipw)
>> {
>> double* wl = static_cast<double*>( callData );
>>
>> if ( ipw == this->IPW[0] )
>> {
>>
>> this->IPW[1]->SetWindowLevel(wl[0],wl[1],1);
>> this->IPW[2]->SetWindowLevel(wl[0],wl[1],1);
>>
>> }
>> else if( ipw == this->IPW[1] )
>>  {
>> this->IPW[0]->SetWindowLevel(wl[0],wl[1],1);
>>  this->IPW[2]->SetWindowLevel(wl[0],wl[1],1);
>> }
>>  else if (ipw == this->IPW[2])
>> {
>>  this->IPW[0]->SetWindowLevel(wl[0],wl[1],1);
>> this->IPW[1]->SetWindowLevel(wl[0],wl[1],1);
>>  }
>> }
>>
>>  vtkResliceCursorWidget *rcw = dynamic_cast<
>> vtkResliceCursorWidget * >(caller);
>>  if (rcw)
>> {
>> vtkResliceCursorLineRepresentation *rep = dynamic_cast<
>>  vtkResliceCursorLineRepresentation * >(rcw->GetRepresentation());
>> // Although the return value is not used, we keep the get calls
>>  // in case they had side-effects
>> rep->GetResliceCursorActor()->GetCursorAlgorithm()->GetResliceCursor();
>>  for (int i = 0; i < 3; i++)
>> {
>>  vtkPlaneSource *ps = static_cast< vtkPlaneSource * >(
>> this->IPW[i]->GetPolyDataAlgorithm());
>>  ps->SetOrigin(this->RCW[i]->GetResliceCursorRepresentation()->
>> GetPlaneSource()->GetOrigin());
>>  ps->SetPoint1(this->RCW[i]->GetResliceCursorRepresentation()->
>> GetPlaneSource()->GetPoint1());
>>  ps->SetPoint2(this->RCW[i]->GetResliceCursorRepresentation()->
>> GetPlaneSource()->GetPoint2());
>>
>> // If the reslice plane has modified, update it on the 3D widget
>>  this->IPW[i]->UpdatePlacement();
>> }
>>  }
>>
>> if(ev == vtkResliceImageViewer::SliceChangedEvent)
>>  {
>> for (int i = 0; i < 3; i++)
>>  {
>> vtkPlaneSource *ps = static_cast< vtkPlaneSource * >(
>>  this->IPW[i]->GetPolyDataAlgorithm());
>> ps->SetOrigin(this->RCW[i]->GetResliceCursorRepresentation()->
>>  GetPlaneSource()->GetOrigin());
>> ps->SetPoint1(this->RCW[i]->GetResliceCursorRepresentation()->
>>  GetPlaneSource()->GetPoint1());
>> ps->SetPoint2(this->RCW[i]->GetResliceCursorRepresentation()->
>>  GetPlaneSource()->GetPoint2());
>>
>> // If the reslice plane has modified, update it on the 3D widget
>>  this->IPW[i]->UpdatePlacement();
>> }
>>  }
>>
>> // Render everything
>>  for (int i = 0; i < 3; i++)
>> {
>>  this->RCW[i]->Render();
>> }
>>  this->IPW[0]->GetInteractor()->GetRenderWindow()->Render();
>> }
>>
>> vtkResliceCursorCallback() {}
>> vtkImagePlaneWidget* IPW[3];
>>  vtkResliceCursorWidget *RCW[3];
>> };
>>
>>
>> QtVTKRenderWindows::QtVTKRenderWindows( int vtkNotUsed(argc), char
>> *argv[])
>> {
>>  this->ui = new Ui_QtVTKRenderWindows;
>> this->ui->setupUi(this);
>>
>> vtkSmartPointer< vtkDICOMImageReader > reader =
>> vtkSmartPointer< vtkDICOMImageReader >::New();
>>  //reader->SetDirectoryName(argv[1]);
>>
>> reader->SetDirectoryName("C:/Users/Panayiotis/DentalCEsse/qt_interface/build/Release/temp_dental/2/dicom");
>>  reader->Update();
>> int imageDims[3];
>>  reader->GetOutput()->GetDimensions(imageDims);
>>
>>
>>  for (int i = 0; i < 3; i++)
>> {
>>  riw[i] = vtkSmartPointer< vtkResliceImageViewer >::New();
>> }
>>
>> vtkSmartPointer<KeyPressInteractorStyle> style =
>> vtkSmartPointer<KeyPressInteractorStyle>::New();
>>
>> this->ui->view1->GetInteractor()->SetInteractorStyle(style);
>>
>> //this->ui->view1->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style);
>> //this->ui->view1->GetRenderWindow()->AddRenderer(riw[0]->GetRenderer());
>>  style->SetCurrentRenderer(riw[0]->GetRenderer());
>>
>> this->ui->view1->SetRenderWindow(riw[0]->GetRenderWindow());
>>  riw[0]->SetupInteractor(
>> this->ui->view1->GetRenderWindow()->GetInteractor());
>>  this->ui->view2->SetRenderWindow(riw[1]->GetRenderWindow());
>>  riw[1]->SetupInteractor(
>> this->ui->view2->GetRenderWindow()->GetInteractor());
>>
>> this->ui->view3->SetRenderWindow(riw[2]->GetRenderWindow());
>>  riw[2]->SetupInteractor(
>> this->ui->view3->GetRenderWindow()->GetInteractor());
>>
>> for (int i = 0; i < 3; i++)
>> {
>>  // make them all share the same reslice cursor object.
>> vtkResliceCursorLineRepresentation *rep =
>>  vtkResliceCursorLineRepresentation::SafeDownCast(
>> riw[i]->GetResliceCursorWidget()->GetRepresentation());
>>  riw[i]->SetResliceCursor(riw[0]->GetResliceCursor());
>>
>> rep->GetResliceCursorActor()->
>>  GetCursorAlgorithm()->SetReslicePlaneNormal(i);
>>
>> riw[i]->SetInput(reader->GetOutput());
>>  riw[i]->SetSliceOrientation(i);
>> riw[i]->SetResliceModeToAxisAligned();
>>  }
>>
>> vtkSmartPointer<vtkCellPicker> picker =
>>  vtkSmartPointer<vtkCellPicker>::New();
>> picker->SetTolerance(0.005);
>>
>> vtkSmartPointer<vtkProperty> ipwProp =
>> vtkSmartPointer<vtkProperty>::New();
>>
>> vtkSmartPointer< vtkRenderer > ren =
>> vtkSmartPointer< vtkRenderer >::New();
>>
>> this->ui->view4->GetRenderWindow()->AddRenderer(ren);
>> vtkRenderWindowInteractor *iren = this->ui->view4->GetInteractor();
>>  //commenting out the following code succesfully applies the
>> //'style' to view4
>>  //iren->SetInteractorStyle(style);
>> //style->SetCurrentRenderer(ren);
>>
>> for (int i = 0; i < 3; i++)
>> {
>>  planeWidget[i] = vtkSmartPointer<vtkImagePlaneWidget>::New();
>> planeWidget[i]->SetInteractor( iren );
>>  planeWidget[i]->SetPicker(picker);
>> planeWidget[i]->RestrictPlaneToVolumeOn();
>>  double color[3] = {0, 0, 0};
>> color[i] = 1;
>>  planeWidget[i]->GetPlaneProperty()->SetColor(color);
>>
>> color[i] = 0.25;
>>  riw[i]->GetRenderer()->SetBackground( color );
>>
>> planeWidget[i]->SetTexturePlaneProperty(ipwProp);
>>  planeWidget[i]->TextureInterpolateOff();
>> planeWidget[i]->SetResliceInterpolateToCubic();
>>  planeWidget[i]->SetInput(reader->GetOutput());
>> planeWidget[i]->SetPlaneOrientation(i);
>>  planeWidget[i]->SetSliceIndex(imageDims[i]/2);
>> planeWidget[i]->DisplayTextOn();
>>  planeWidget[i]->SetDefaultRenderer(ren);
>> planeWidget[i]->On();
>>  planeWidget[i]->InteractionOn();
>> planeWidget[i]->SetTextureVisibility(0);
>>  }
>>
>> vtkSmartPointer<vtkResliceCursorCallback> cbk =
>>  vtkSmartPointer<vtkResliceCursorCallback>::New();
>>
>> for (int i = 0; i < 3; i++)
>>  {
>> cbk->IPW[i] = planeWidget[i];
>>  cbk->RCW[i] = riw[i]->GetResliceCursorWidget();
>> riw[i]->GetResliceCursorWidget()->AddObserver(
>>  vtkResliceCursorWidget::ResliceAxesChangedEvent, cbk );
>>
>> riw[i]->GetResliceCursorWidget()->AddObserver(
>>  vtkResliceCursorWidget::WindowLevelEvent, cbk );
>>
>> riw[i]->GetResliceCursorWidget()->AddObserver(
>>  vtkResliceCursorWidget::ResliceThicknessChangedEvent, cbk );
>>
>> riw[i]->GetResliceCursorWidget()->AddObserver(
>>  vtkResliceCursorWidget::ResetCursorEvent, cbk );
>>
>> riw[i]->GetInteractorStyle()->AddObserver(
>>  vtkCommand::WindowLevelEvent, cbk );
>>
>> riw[i]->AddObserver(vtkResliceImageViewer::SliceChangedEvent,cbk);
>>
>> // Make them all share the same color map.
>> riw[i]->SetLookupTable(riw[0]->GetLookupTable());
>>  planeWidget[i]->GetColorMap()->SetLookupTable(riw[0]->GetLookupTable());
>>
>> planeWidget[i]->SetColorMap(riw[i]->GetResliceCursorWidget()->GetResliceCursorRepresentation()->GetColorMap());
>>
>> }
>>
>>
>> //riw[0]->GetRenderWindow()->GetInteractor()->AddObserver(vtkCommand::KeyPressEvent,cbk);
>>
>> resliceMode(1);
>> this->ui->resliceModeCheckBox->setChecked(true);
>>
>> this->ui->view1->show();
>> this->ui->view2->show();
>>  this->ui->view3->show();
>>
>> // Set up action signals and slots
>>  this->ui->thickModeCheckBox->setEnabled(0);
>> this->ui->resliceModeCheckBox->setEnabled(0);
>>
>> this->ui->blendModeGroupBox->setEnabled(0);
>> this->ui->resetButton->setEnabled(0);
>>  this->ui->AddDistance1Button->setEnabled(0);
>> };
>>
>> void QtVTKRenderWindows::resliceMode(int mode)
>> {
>> for (int i = 0; i < 3; i++)
>>  {
>> riw[i]->SetResliceMode(mode ? 1 : 0);
>>  riw[i]->GetRenderer()->ResetCamera();
>> riw[i]->Render();
>>  }
>> }
>>
>> void QtVTKRenderWindows::Render()
>> {
>> for (int i = 0; i < 3; i++)
>> {
>>  riw[i]->Render();
>> }
>> this->ui->view3->GetRenderWindow()->Render();
>> }
>>
>> =======================
>> QtVTKRenderWindowsApp.cxx
>> =======================
>>
>> #include <QApplication>
>> #include "QtVTKRenderWindows.h"
>>
>> int main( int argc, char** argv )
>> {
>>   // QT Stuff
>>   QApplication app( argc, argv );
>>
>>   QtVTKRenderWindows myQtVTKRenderWindows(argc, argv);
>>   myQtVTKRenderWindows.show();
>>
>>   return app.exec();
>> }
>>
>>
>>
>> On Tue, Sep 10, 2013 at 8:14 PM, Alex Malyushytskyy <alexmalvtk at gmail.com
>> > wrote:
>>
>>> It might be time to attach compilable code.
>>>
>>>  Alex
>>>
>>>
>>> On Mon, Sep 9, 2013 at 4:53 PM, Panayiotis Georgiou <
>>> ps.georgiou at gmail.com> wrote:
>>>
>>>> Thanks for your reply Alex.
>>>>
>>>> I have tried what you have suggested but it sill doesn't work. I
>>>> believe the problem is on how I apply the new style on the three views. As
>>>> I have noted in my original post, when I apply the customised style on the
>>>> 4th view it works. The way I did that for the 4th view is:
>>>>
>>>> vtkSmartPointer< vtkRenderer > ren = vtkSmartPointer< vtkRenderer
>>>> >::New();
>>>>
>>>>  this->ui->view4->GetRenderWindow()->AddRenderer(ren);
>>>> vtkRenderWindowInteractor *iren = this->ui->view4->GetInteractor();
>>>>  iren->SetInteractorStyle(style);
>>>> style->SetCurrentRenderer(ren);
>>>>
>>>> Any other suggestions?
>>>>
>>>> Thanks.
>>>>
>>>>
>>>> On Mon, Sep 9, 2013 at 9:25 PM, Alex Malyushytskyy <
>>>> alexmalvtk at gmail.com> wrote:
>>>>
>>>>> Override  vtkInteractorStyle::OnChar ( )
>>>>>
>>>>> Make it do nothing.
>>>>>
>>>>> Alex
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Sep 9, 2013 at 9:37 AM, Panayiotis Georgiou <
>>>>> ps.georgiou at gmail.com> wrote:
>>>>>
>>>>>> Dear vtk users,
>>>>>>
>>>>>> I am trying to customize the FourPaneViewer example from the provided
>>>>>> VTK examples. The full code of the example can be found in
>>>>>> VTK_DIR/Examples/GUI/Qt/FourPaneViewer.
>>>>>>
>>>>>> The example embeds in Qt 4 QVTKWidget views and performs reslicing.
>>>>>> One of the views renders (3) vtkImagePlaneWidgets and each of the other 3
>>>>>> views renders a vtkResliceImageViewer.
>>>>>>
>>>>>> What I am trying to achieve is disable in the 3
>>>>>> vtkResliceImageViewers any events triggered by pressing keys on the
>>>>>> keyboard, i.e. I want to restrict the user and allow him to interact with
>>>>>> these widgets using only the mouse.
>>>>>>
>>>>>> The way I have tried to do this is by subclassing the
>>>>>> vtkInteractorStyle class as follows:
>>>>>>
>>>>>>     // Define interaction style
>>>>>>     class KeyPressInteractorStyle : public vtkInteractorStyle
>>>>>>     {
>>>>>>     public:
>>>>>>     static KeyPressInteractorStyle* New();
>>>>>>     vtkTypeMacro(KeyPressInteractorStyle, vtkInteractorStyle);
>>>>>>
>>>>>>     virtual void OnKeyPress()
>>>>>>     {
>>>>>>     // Get the keypress
>>>>>>     vtkRenderWindowInteractor *rwi = this->Interactor;
>>>>>>     std::string key = rwi->GetKeySym();
>>>>>>
>>>>>>     // Output the key that was pressed
>>>>>>     std::cout << "Pressed " << key << std::endl;
>>>>>>     qDebug()<< "Pressed " << rwi->GetKeySym();
>>>>>>
>>>>>>     // Forward events
>>>>>>     vtkInteractorStyle::OnKeyPress();
>>>>>>     }
>>>>>>
>>>>>>     };
>>>>>>     vtkStandardNewMacro(KeyPressInteractorStyle);
>>>>>>
>>>>>> and then for each of the 3 views, the customised interaction style is
>>>>>> applied as follows:
>>>>>>
>>>>>>         vtkSmartPointer<KeyPressInteractorStyle> style =
>>>>>>     vtkSmartPointer<KeyPressInteractorStyle>::New();
>>>>>>
>>>>>>
>>>>>> this->ui->view1->GetRenderWindow()->GetInteractor()->SetInteractorStyle(style);
>>>>>>         style->SetCurrentRenderer(riw[0]->GetRenderer());
>>>>>>
>>>>>>         this->ui->view1->SetRenderWindow(riw[0]->GetRenderWindow());
>>>>>>
>>>>>> riw[0]->SetupInteractor(this->ui->view1->GetRenderWindow()->GetInteractor());
>>>>>>
>>>>>> where view1 is of type QVTKWidget  and riw[i] of type
>>>>>> vtkResliceImageViewer.
>>>>>>
>>>>>> Unfortunately the approach I am using has no effect. The keyboard
>>>>>> events are not captured at all by the interaction style. Nothing is printed
>>>>>> in the console. It should be noted that if I apply the customised style on
>>>>>> the 4th view for vtkImagePlaneWidgets, then it works.
>>>>>>
>>>>>> Can someone help me to fix this? I am new to VTK and any help will be
>>>>>> much appreciated.
>>>>>>
>>>>>> Thanks for your help,
>>>>>>
>>>>>> _______________________________________________
>>>>>> Powered by www.kitware.com
>>>>>>
>>>>>> Visit other Kitware open-source projects at
>>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>>
>>>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>>>
>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130912/60bf2b1a/attachment.htm>


More information about the vtkusers mailing list