[vtkusers] Problem rotating vtkImageSlice
David Gobbi
david.gobbi at gmail.com
Sun Aug 28 15:42:55 EDT 2016
Then remind me again why you're using vtkImageResliceMapper instead of
vtkImageSliceMapper?
On Sun, Aug 28, 2016 at 1:23 PM, Richard Frank <rickfrank at me.com> wrote:
> I'm just trying to rotate the plane in 3 space, not reslicing...
>
> Rick Frank
>
> On Aug 28, 2016, at 3:16 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>
> If you only had one input slice, then why would you be surprised that
> reslicing at 90 degrees gives an output that is only one pixel wide?
>
> On Sun, Aug 28, 2016 at 12:53 PM, Richard Frank <rickfrank at me.com> wrote:
>
>> Hi
>>
>> I'm using the VTK example which creates an in memory single cyan
>> slice.....
>>
>> Thanks
>>
>> Rick Frank
>>
>> On Aug 28, 2016, at 2:42 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>
>> Check the extent of the input image to make sure all of the slices were
>> loaded.
>>
>> On Sun, Aug 28, 2016 at 12:37 PM, Richard Frank <rickfrank at me.com> wrote:
>>
>>> Hi David,
>>>
>>> Sorry about the attachment.
>>>
>>> Well, I'm pretty far along with my work on this, so I'd like to try the
>>> vtkPlane orientation as a solution if possible.
>>>
>>> using the example code, If I create a vtkPlane, set its origin to 0,0,0
>>> and set its normal to 1 0 0 (instead of 0,0,1) and call
>>> imageResliceMapper->SetSlicePlane(plane);
>>>
>>> I see a thin line. Seems correct. If I change the interactor style to
>>> Trackball camera, and rotate the camera around it seems the image is only 1
>>> unit wide however.
>>>
>>> Is there something else I need to do to get the image to map to a plane
>>> with different orientation?
>>>
>>> THanks
>>> Rick Frank
>>>
>>> On Aug 28, 2016, at 12:51 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>>
>>> Hi Frank,
>>>
>>> It looks like you are doing a data transformation when you should be
>>> doing a view transformation. Don't rotate the actor if your goal is to
>>> rotate the view. When you rotate the actor, you are changing the
>>> relationship between data coordinates and world coordinates.
>>>
>>> If you want a sagittal view, then you can rotate the view by moving the
>>> VTK camera. The mapper has a method SliceFacesCameraOn() that can be used
>>> to make the mapper automatically extract a slice in the correct orientation.
>>>
>>> Also, please limit the width of inlined images to around 1000 pixels or
>>> less. Large inlined images make your email hard to read on my system (I
>>> wish that gmail would auto-shrink oversized inlined images, but
>>> unfortunately it displays them full-size, even if they're several times the
>>> size of the display).
>>>
>>> - David
>>>
>>> On Sun, Aug 28, 2016 at 9:56 AM, Richard Frank <rickfrank at me.com> wrote:
>>>
>>>> Hi David,
>>>>
>>>> Thanks for the reply. I'm still a bit confused about what I've tried
>>>> and why it doesn't work....
>>>>
>>>> So, I have 3 slice views and in the screenshot the Axial View is lined
>>>> up appropriately (image position patient is in the correct place, and each
>>>> slice is in correct place etc) with the world coordinates by using the
>>>> image reslice axis and camera etc to align the DICOM coordinates and the
>>>> VTK World coordinates.
>>>>
>>>> I now want to orient the sagittal slice so that it aligns with the
>>>> world coordinates.
>>>>
>>>> (see screen shots)
>>>>
>>>>
>>>> I believe I need to rotate the slice (if I could rotate the actor)
>>>> about Z 90 CCW and then about its new X 0- degrees and then move the camera
>>>> about world Y 90 and the roll the camera 90 to get the sagittal voxels
>>>> DICOM aligned with the World Coordinates.
>>>>
>>>> I tried various parameters for the resliceMapper->SetSlicePlane() but
>>>> the slice just dissapears off screen somewhere so I must be getting
>>>> sometime wrong.
>>>>
>>>> How would I use the SetSlicePlane to achieve this?
>>>>
>>>> Thanks
>>>>
>>>> Rick
>>>>
>>>> On Aug 27, 2016, at 02:51 PM, David Gobbi <david.gobbi at gmail.com>
>>>> wrote:
>>>>
>>>> You should also try vtkImageSliceMapper instead of
>>>> vtkImageResliceMapper,
>>>> perhaps its behavior will better suit your requirements.
>>>>
>>>>
>>>> On Sat, Aug 27, 2016 at 11:51 AM, David Gobbi <david.gobbi at gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Rick,
>>>>>
>>>>> You're seeing this because you are doing an out-of-plane rotation on
>>>>> an image that has only one slice. The rotation is around the image origin,
>>>>> which (in this case) is at the bottom-left corner of the image.
>>>>>
>>>>> The vtkImageResliceMapper has a SetSlicePlane() method:
>>>>> http://www.vtk.org/Wiki/VTK/Image_Rendering_Classes#vtkImage
>>>>> ResliceMapper
>>>>> You must rotate this SlicePlane when you rotate the vtkImageSlice.
>>>>>
>>>>> - David
>>>>>
>>>>>
>>>>>
>>>>> On Sat, Aug 27, 2016 at 10:54 AM, Richard Frank <rickfrank at me.com>
>>>>> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> If I build the example
>>>>>>
>>>>>> VTK/Examples/Cxx/Images/ImageSlice
>>>>>> and add
>>>>>>
>>>>>> imageSlice->RotateX(1);
>>>>>>
>>>>>> Which should, I think, rotate the image actor about its X axis by 1
>>>>>> degree, I instead get
>>>>>>
>>>>>>
>>>>>>
>>>>>> which seems incorrect.
>>>>>>
>>>>>> I can rotate about Z.
>>>>>>
>>>>>> Is there something I'm not doing correctly, or is this a bug?
>>>>>>
>>>>>> I also tried RotateWXYZ(1,1,0,0) and get the same result.
>>>>>>
>>>>>> This is VTK 7
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>> Rick
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20160828/0874b19e/attachment.html>
More information about the vtkusers
mailing list