[vtkusers] vtkImageActor and scaling

endlosschleife1 endlosschleife1 at googlemail.com
Tue Nov 30 06:09:25 EST 2010


Hi David,

that did it in combination with a reset on the camera after I get it from
the renderer (otherwise  in my case the image was shifted partly out of the
viewport). Thank you!

What would be the equivalent if I would use a vtkActor2D? The possible
reason to do that in my case is that the window level lookup table operation
that I need in the vtkImageActor implementation seems to be very slow
compared to when I set the window/level of the vtkImageMapper for a
vtkActor2D (24ms slower per 512x512 image). I will need to look at that as
well, since I assumed that the vtkImageMapper just uses the same lookup
table operations, but that's a different story...
The same code doesn't apply any scaling to 2D actors. I also tried
retrieving the camera and applying a transform(vtkCamera::ApplyTransform) or
setting the position of the 2D actor (SetPosition / SetPosition2). All of
that didn't have any effect.

Thanks,
Mark



2010/11/29 David Gobbi <david.gobbi at gmail.com>

> Hi Mark,
>
> The camera method you want is SetParallelScale(), it sets the height of
> viewport when ParallelProjection is on.
>
>   David
>
>   On Mon, Nov 29, 2010 at 8:24 AM, endlosschleife1 <
> endlosschleife1 at googlemail.com> wrote:
>
>>   Hi all,
>>
>> I'm a bit confused about how cameras are initialized. I would like to
>> scale a 2D image (scale a DICOM image to best fit a viewport size). I first
>> did this via vtkImageResample and that works fine, but now I would like
>> to try this with accelarated scaling and so I wanted to do that as part of
>> the visualization pipeline (I hope that means that it is actually using
>> OpenGL). I replaced my original vtkActor2D/vtkImageMapper with a
>> vtkImageActor. The following works (pseudo code):
>>
>> Variant 1:
>> - add imageActor to renderer, and renderer to renderwindow. Then call
>> Render() on renderwindow.
>> -> The image displays as expected in the original size.
>>
>> Variant 2:
>> - same as in Variant 1 (including Render() call)
>> - renderer->GetActiveCamera()->ParallelProjectionOn()
>> - renderer->GetActiveCamera()->Zoom(zoomFactor);
>> -> The image displays with the desired scaling.
>>
>> But variant 2 only works because I called Render() first. I assume this
>> somehow initializes the camera of the renderer with exactly the attributes
>> that I need, but when I call GetActiveCamera without rendering first this
>> (just calling the getter-method) will already) will give a different result
>> (in my case a grey box in the upper right corner of the viewport). I'm now
>> about to reverse engineer the camera settings after variant 1 was executed
>> and set all the camera attributes to the desired initial values (position,
>> viewUp, clipping range etc.), but I'm wondering if I'm just missing the more
>> appropriate and convenient way to do this (after all the vtkImageActor seems
>> to be all about convenience).
>>
>> Thank you.
>>
>> Mark
>>
>>
>>
>> _______________________________________________
>> 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/20101130/a0c7b545/attachment.htm>


More information about the vtkusers mailing list