[vtkusers] How to use vtkTransform with vtkImagePlaneWidget
Uril Yakubov
uyakubov at rotman-baycrest.on.ca
Wed Nov 5 16:05:46 EST 2008
Hi Dean,
I have fixed the problem. It was the center of the image for x, y and z.
eval $transform Translate -99.609375 -99.609375 -85.5
eval $transform RotateX 1 # Rotation around X
eval $transform Translate 99.609375 99.609375 85.5
Thank a lot.
Uril.
On Wed, 2008-10-29 at 10:46 -0400, Uril Yakubov wrote:
> Hi Dean,
>
> Thank you for help.
>
> I have question. I executed code that you sent me and came to the
> conclusion that rotation centered by origin and I need centered at the
> center of the image. Using GetWholeExtent of the Image data I got xMin,
> xMax, yMin, yMax, zMin, zMax. I have for example xMin = 0 xMax = 255
> yMin = 0 yMax = 255 zMin = 0 zMax = 57 so I calculated center of the
> image 127, 127, 28.
>
> set pt1 [planeWidgetZ GetPoint1 ]
> set pt2 [planeWidgetZ GetPoint2 ]
> set wo [planeWidgetZ GetOrigin ]
> set normal [planeWidgetZ GetNormal ]
>
> set transform [vtkTransform New]
> $transform PostMultiply
>
> eval $transform Translate -127.0 -127.0 -28.0
> eval $transform RotateX 1 # Rotation around X
> eval $transform Translate 127.0 127.0 28.0
>
>
> set points [vtkPoints New ]
> eval $points InsertNextPoint $pt1
> eval $points InsertNextPoint $pt2
> eval $points InsertNextPoint $wo
>
> set newpoints [vtkPoints New ]
> eval $transform TransformPoints $points $newpoints
>
> eval planeWidgetZ SetPoint1 [$newpoints GetPoint 0 ]
> eval planeWidgetZ SetPoint2 [$newpoints GetPoint 1 ]
> eval planeWidgetZ SetOrigin [$newpoints GetPoint 2 ]
> eval planeWidgetZ UpdatePlacement
>
> set pt11 [$newpoints GetPoint 0 ]
> set pt12 [$newpoints GetPoint 1 ]
> set pt13 [$newpoints GetPoint 2 ]
>
> Now it is better but still it is not exactly centered at the center of
> the image. Do you now what could be the problem?
>
>
>
> Thank you,
>
> Uril.
>
>
>
>
> On Thu, 2008-08-07 at 08:12 -0400, Dean Inglis wrote:
> > Hi Uril,
> >
> >
> >
> > If you look at the doxygen documentation for this class,
> >
> > you will see that you can recover the center and normal of the plane,
> >
> > GetCenter GetNormal, as well as the three points defining a pair of
> >
> > orthonormal axes corresponding to its bottom and left side edges:
> >
> > GetOrigin, GetPoint1, GetPoint2. vtkTransform can be used
> >
> > to rotate those points around the plane normal,
> >
> > as long as you know the origin of the image data that it slices
> > through:
> >
> >
> >
> > vtkImagePlaneWidget widget
> >
> > widget->GetPoint1(pt1);
> >
> > widget->GetPoint2(pt2);
> >
> > widget->GetOrigin(wo);
> >
> > widget->GetNormal(n);
> >
> >
> >
> > vtkImageData image
> >
> > image->GetOrigin(io);
> >
> >
> >
> > vtkTransform transform
> >
> > // may have to be transform->PreMultiply() or
> > transform->PostMultiply() here … I always forget
> >
> > transform->Translate(io);
> >
> > transform->RotateWXYZ(angle,n[0], n[1], n[2]);
> >
> > transform->Translate(-io[0], -io[1], -io[2]);
> >
> >
> >
> >
> >
> > vtkPoints points
> >
> > points->InsertNextPoint(pt1);
> >
> > points->InsertNextPoint(pt2);
> >
> > points->InsertNextPoint(wo);
> >
> >
> >
> > vtkPoints newpoints
> >
> >
> >
> > transform->TransformPoints(points,newpoints);
> >
> >
> >
> > widget->SetPoint1(newpoints->GetPoint(0));
> >
> > widget->SetPoint2(newpoints->GetPoint(1));
> >
> > widget->SetOrigin(newpoints->GetPoint(2));
> >
> > widget->UpdatePlacement();
> >
> >
> >
> >
> >
> >
> >
> > Dean
> >
> >
>
> _______________________________________________
> 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