[vtkusers] Problem with vtkImageReslice

David Gobbi dgobbi at atamai.com
Tue Nov 1 11:45:55 EST 2005


Hi Øystein,

I saw a similar error once, and it was because my application was 
setting the DisplayExtent of a vtkImageActor incorrectly.  Since 
vtkImageViewer2 uses vtkImageActor, I suspect that this is the same problem.

In your callback, get rid of   reslice->Update()   and replace it with this:

  ImageViewer->UpdateDisplayExtent()

 - David

Øystein Skotheim wrote:

> Hello. I am tring to use vtkImageReslice in combination with 
> vtkImagePlaneWidget. I use a callback on the InteractionEvent of the 
> ImagePlaneWidget to get information about the selected plane. Then I 
> want to display this slice as a 2D zoomable image with vtkImageViewer2.
>
> The problem is that I get the following error from VTK when I change 
> the position or orientation of the plane in vtkImagePlaneWidget:
>
> ERROR: In 
> /Users/oystein/cvs/VTK/Filtering/vtkStreamingDemandDrivenPipeline.cxx, 
> line 630 vtkStreamingDemandDrivenPipeline (0x27fb880): The update 
> extent specified in the information for output port 0 on algorithm 
> vtkImageReslice(0x27e9ef0) is 0 255 0 255 0 0, which is outside the 
> whole extent 0 255 0 98 0 0.
>
> Can anyone give me a hint on how I can resolve this problem?
>
> I use VTK from CVS together with Qt (vtkqt is a QVTKWidget)
>
> This is how I set up the pipeline:
>
>   /* Create filter for reslicing */
>   Reslicer = vtkImageReslice::New();
>   Reslicer->SetInput(volume.getVtkVolume());
>   Reslicer->SetOutputDimensionality(2);
>   Reslicer->SetInterpolationModeToCubic();
>   Reslicer->AutoCropOutputOn();
>
>   /* Initially set reslice axes and origin */
>   Reslicer->SetResliceAxesDirectionCosines(1,0,0, 0,1,0, 0,0,1);
>   Reslicer->SetResliceAxesOrigin(0,0,0);
>
>   /* Set up helper class for viewing 2D images in the scene */
>   ImageViewer = vtkImageViewer2::New();
>   ImageViewer->SetInput(Reslicer->GetOutput());
>
>   /* Set up interactor */
>   QVTKInteractor *interactor = QVTKInteractor::New();
>   vtkInteractorStyleImage *style = vtkInteractorStyleImage::New();
>   interactor->SetInteractorStyle(style); style->Delete();
>
>   /* Let vtkImageViewer2 control the GUI manager render window */
>   vtkqt->SetRenderWindow(ImageViewer->GetRenderWindow());
>   interactor->SetRenderWindow(vtkqt->GetRenderWindow());
>
>   ImageViewer->SetupInteractor(interactor);
>   ImageViewer->Render();
>
> --cut--
>
> This is the callback for the InteractionEvent of the Image Plane Widget:
>
> class cbPlaneChangedOrientation : public vtkCommand
> {
>  public:
>   static cbPlaneChangedOrientation *New() { return new 
> cbPlaneChangedOrientation; }
>
>   virtual void Execute(vtkObject *caller, unsigned long, void*)
>   {
>
>     double o[3], normal[3];
>     double p1[3], v1[3], vv1;
>     double p2[3], v2[3], vv2;
>     int DisplayExtent[6];
>
>     vtkImagePlaneWidget *ipw = 
> reinterpret_cast<vtkImagePlaneWidget*>(caller);
>
>     ipw->GetNormal(normal);
>     ipw->GetOrigin(o);
>     ipw->GetPoint1(p1);
>     ipw->GetPoint2(p2);
>
>     // Calculate direction cosines for ImageReslice
>     v1[0] = p1[0]-o[0]; v2[0] = p2[0]-o[0];
>     v1[1] = p1[1]-o[1]; v2[1] = p2[1]-o[1];
>     v1[2] = p1[2]-o[2]; v2[2] = p2[2]-o[2];
>
>     // Normalize vectors
>     vv1 = sqrt(v1[0]*v1[0]+v1[1]*v1[1]+v1[2]*v1[2]);
>     vv2 = sqrt(v2[0]*v2[0]+v2[1]*v2[1]+v2[2]*v2[2]);
>
>     v1[0] /= vv1; v1[1] /= vv1; v1[2] /= vv1;
>     v2[0] /= vv2; v2[1] /= vv2; v2[2] /= vv2;
>
>     ImageSliceRenderer::Reslicer->SetResliceAxesOrigin(o);
>   
> ImageSliceRenderer::Reslicer->SetResliceAxesDirectionCosines(v1,v2,normal); 
>
>     ImageSliceRenderer::Reslicer->Update();
>
>     GUIManager::instance().getRenderWidget()->render();
>
>   }
> };
>
> Thanks a lot in advance!
>
> ---
>
> Øystein Skotheim, Research Scientist
> SINTEF ICT, Dept. of Optical Measurement Systems
> N-7465 Trondheim, Norway
>
>------------------------------------------------------------------------
>
>_______________________________________________
>This is the private VTK discussion list. 
>Please keep messages on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>Follow this link to subscribe/unsubscribe:
>http://www.vtk.org/mailman/listinfo/vtkusers
>  
>




More information about the vtkusers mailing list