Hello everybody,<div><br></div><div>I am writing a program using ImageViewer2 to display 2D images, in which I have to be able to select regions (by clicking and dragging the left mouse button). The image viewer should be embedded in a QVTKWidget.</div>
<div><br></div><div>The problem is that I cannot get the both (displaying the image and selecting regions) working at the same time, but only one of them. Let me detail.</div><div><br></div><div>1. If I use
ImageViewer2: </div><div> <font face="'courier new', monospace">vtkSmartPointer<vtkInteractorStyleRubberBand2D> style = vtkSmartPointer<vtkInteractorStyleRubberBand2D>::New();</font></div><div>
<font face="'courier new', monospace"> <font color="#ff0000">style->AddObserver ( vtkCommand::SelectionChangedEvent, selectionChangedCallback );</font></font></div><div><font face="'courier new', monospace"><br>
</font></div><div><div><font face="'courier new', monospace"> vtkSmartPointer<vtkImageViewer2> imageViewer = vtkSmartPointer<vtkImageViewer2>::New();</font></div><div><font face="'courier new', monospace"> vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();</font></div>
<div><font face="'courier new', monospace"><br></font></div><div><font face="'courier new', monospace"> <span style="background-color:rgb(255,255,255)"><font color="#ff0000">renderWindowInteractor->SetInteractorStyle (style);</font></span></font></div>
<div><div><font face="'courier new', monospace"> imageViewer->SetInput(vtkImage);</font></div><div><font face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>imageViewer->SetupInteractor(renderWindowInteractor);</font></div>
<div><font face="'courier new', monospace"><br></font></div><div><font face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>vtkRenderer* renderer = imageViewer->GetRenderer();</font></div>
<div><font face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>renderer->ResetCamera();</font></div><div><font face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>imageViewer->SetSize(widget->geometry().width(),widget->geometry().height());</font></div>
<div><font face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>imageViewer->SetRenderWindow(widget->GetRenderWindow());</font></div><div><font face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>imageViewer->Render();<span class="Apple-tab-span" style="white-space:pre">        </span></font></div>
</div><div><font face="'courier new', monospace"> renderWindowInteractor->SetRenderWindow ( renderWindow );</font></div><div><font face="'courier new', monospace"> renderWindowInteractor->Initialize();</font></div>
<div><br></div><div>then the program can display the image, but it does not allow selecting regions. I think what's wrong here is that the interactor style did not change (am I right?). So to get the event handler working, we have to <b>change the interactor style of the image viewer</b>. Is there any way to do it?</div>
<div><br></div><div>2. If I don't use ImageViewer2:</div><div><br></div><div> <font face="'courier new', monospace"> // Create an actor</font></div><div><font face="'courier new', monospace"> vtkSmartPointer<vtkImageActor> actor = vtkSmartPointer<vtkImageActor>::New();</font></div>
<div><font face="'courier new', monospace"> actor->SetInput( vtkImage);</font></div><div><font face="'courier new', monospace"><br></font></div><div><font face="'courier new', monospace"> // Setup renderer</font></div>
<div><font face="'courier new', monospace"> vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();</font></div><div><font face="'courier new', monospace"> renderer->AddActor ( actor );</font></div>
<div><font face="'courier new', monospace"> renderer->ResetCamera();</font></div><div><font face="'courier new', monospace"><br></font></div><div><div><font face="'courier new', monospace"> vtkSmartPointer<vtkRenderWindow> renderWindow=widget->GetRenderWindow();</font></div>
<div><font face="'courier new', monospace"> renderWindow->AddRenderer(renderer);</font></div></div><div><div><font face="'courier new', monospace"> vtkSmartPointer<vtkInteractorStyleRubberBand2D> style = vtkSmartPointer<vtkInteractorStyleRubberBand2D>::New();</font></div>
<div><font face="'courier new', monospace"> <font color="#ff0000">style->AddObserver ( vtkCommand::SelectionChangedEvent, selectionChangedCallback );</font></font></div><div><font face="'courier new', monospace"> </font></div>
<div><font face="'courier new', monospace"> // Setup render window interactor</font></div><div><font face="'courier new', monospace"> vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = </font></div>
<div><font face="'courier new', monospace"> vtkSmartPointer<vtkRenderWindowInteractor>::New();</font></div><div><font face="'courier new', monospace"> renderWindowInteractor->SetInteractorStyle ( style );</font></div>
</div><div><div><font face="'courier new', monospace"> renderWindowInteractor->SetRenderWindow ( renderWindow );</font></div><div><font face="'courier new', monospace"> renderWindowInteractor->Initialize(); </font></div>
<div><font face="'courier new', monospace"> renderWindowInteractor->Start();</font></div></div><div><br></div><div>then I can very well select regions in the widget, but the image does not show up.</div>
<div><br></div><div><br></div><div>I would really appreciate if someone can help.</div><div><br></div><div>Thank you for reading.</div>_____________________ <br><br><i>Huu Dien Khue LE</i><br>- Automated Systems, Instrumentation and Computer Engineering student <div>
at l'Ecole Nationale d'Ingénieurs du Val de Loire (ENIVL), Blois, France; <br>- Master of Computer Science student at l'Ecole Polytechnique de l'Université de Tours, France. <br>- Home: 10 rue Ronceraie, 41000 Blois, France<br>
- Phone: +33 (0)9 82 50 90 09<br>- Mobile: +33 (0)6 66 67 84 70<br></div><br>
</div>