[vtkusers] Re: turning auto scaling off in vtk

Obada Mahdi omahdi at gmx.de
Wed Aug 16 23:08:40 EDT 2006


Hi Anja!

Anja Ende wrote:
[undistorted display of preprocessed image using vtkImageViewer2]
> Another curious thing is that if I do not call ResetCamera in my derived
> class, the image gets displayed with a very high zoom factor!
> 
> I really do not understand what is happening with this function here.
> Please, if anyone has some thoughts on this, please please share!

Some thoughts, coming up:

According to the documentation, vtkImageViewer2 provides a simple 3D 
scenario that places an vtkImageActor into the scene (facing the 
camera).  In particular, displaying an image this way involves other 
(projection) transforms defined by camera parameters, just like with any 
other 3D scenario.

>> It seems to be the ResetCamera() function that rescales the image.

What you are experiencing as "auto-scaling" is indeed a result of 
ResetCamera(), which tries to adjust camera parameters in a way such 
that all actors are visible (or, more precisely, such that the enclosing 
sphere of any actor's bounding box fits into the resulting view frustrum 
-- that's why a single rectangular image still doesn't max out the 
render window in either dimension).

Without an initial call to ResetCamera(), camera defaults are used, 
which, in conjunction with your image dimensions and spacing, result in 
that "very high zoom factor" you mentioned.

The vtkImageViewer wrapper class, on the other hand, uses 2D 
actors/mappers, so there is no projection transform to bother with.


I guess the "right" way to deal with this depends on what you want to 
do.  If you just want to display image data exactly as produced by your 
own filtering pipeline, you might be better off with vtkImageViewer (or 
a home-brewed analogon involving vtkActor2D/vtkImageMapper).

If, on the other hand, you'd rather stick with vtkImageViewer2 but want 
to have more control over the transform induced by camera parameters, 
you might want to have a closer look at what vtkCamera and 
vtkRenderer::ResetCamera() do.  I'd say there is a way to set up the 
camera such that the results mimic vtkImageViewer (starting with 
ParallelProjectionOn()), and calls to vtkRenderer::ResetCamera() can be 
observed and acted upon by registering for the ResetCameraEvent -- but 
frankly, I'm not sure if it is worth the effort.


HTH, and apologies if I shared too much :-)

Obada




More information about the vtkusers mailing list