[vtkusers] Obtaining transformation matrix for vtkPolyData

David Gobbi david.gobbi at gmail.com
Fri Aug 18 17:51:37 EDT 2017


I noticed a mistake in my code as soon as I pressed "Send".  Let me try
again:

The typical solution is to save the transform.  Make it into a member of
your class.  It's convenient to have the transform filter as a member, too.

def __init__(self):
        self.MeshTransform = vtk.vtkTransform()
        self.MeshTransformFilter = vtk.vtkTransformPolyDataFilter()
        self.MeshTransformFilter.SetInput( < insert original, untransformed
data here> )
        self.MeshTransformFilter.SetTransform(self.MeshTransform)

def Rotate(self, alpha, beta, gamma):
        self.MeshTransform.RotateX(alpha)
        self.MeshTransform.RotateY(beta)
        self.MeshTransform.RotateZ(gamma)
        self.MeshTransformFilter.Update();
        self.MeshData.ShallowCopy(self.MeshTransformFilter.GetOutput())

The idea here is to keep a copy of your original, unmodified data to use as
input to vtkTransformPolyData, though depending on what other kinds of
editing you are doing, this might be tricky.

 - David


On Fri, Aug 18, 2017 at 3:50 PM, David Gobbi <david.gobbi at gmail.com> wrote:

> Hi Eric,
>
> The typical solution is to save the transform.  Make it into a member of
> your class.  It's convenient to have the transform filter as a member, too.
>
> def __init__(self):
>         self.MeshTransform = vtk.vtkTransform()
>         self.MeshTransformFilter = vtk.vtkTransformPolyDataFilter()
>         self.MeshTransformFilter.SetInput( < insert original,
> untransformed data here> )
>         self.MeshTransformFilter.SetTransform(self.MeshTransform)
>
> def Rotate(self, alpha, beta, gamma):
>         self.MeshTransform.RotateX(alpha)
>         self.MeshTransform.RotateY(beta)
>         self.MeshTransform.RotateZ(gamma)
>         self.MeshTransformFilter.Update();
>         tf.SetInputData(self.MeshData)
>         self.MeshData.ShallowCopy(self.MeshTransformFilter.GetOutput())
>
> The idea here is to keep a copy of your original, unmodified data to use
> as input to vtkTransformPolyData, though depending on what other kinds of
> editing you are doing, this might be tricky.
>
>  - David
>
>
> On Fri, Aug 18, 2017 at 2:50 PM, Eric Petersen <peer9802 at gmail.com> wrote:
>
>> Thanks David,
>>
>> I've got a class setup for reading/writing STL files along with basic
>> manipulation.  My rotation code is below and called successive times.  I
>> guess the question is does VTK "remember" past transformations on a
>> vtkPolyData object()?  If so, what's the best way of accessing them?
>>
>> def Rotate(self, alpha, beta, gamma):
>>         t = vtk.vtkTransform()
>>         t.RotateX(alpha)
>>         t.RotateY(beta)
>>         t.RotateZ(gamma)
>>         tf = vtk.vtkTransformPolyDataFilter()
>>         tf.SetInputData(self.MeshData)
>>         tf.SetTransform(t)
>>         tf.Update()
>>         self.MeshData.ShallowCopy(tf.GetOutput())
>>
>> On Fri, Aug 18, 2017 at 8:33 AM, David E DeMarle <
>> dave.demarle at kitware.com> wrote:
>>
>>> Howdy Eric,
>>>
>>> How are you doing the transform?
>>> * vtkTransformFIlter?
>>> * vtkActor::Transform?
>>> * manually changing the points in the vtkPolyData object?
>>>
>>> For either of the first two you can get the current matrix (and its
>>> inverse) from the transform object.
>>>
>>> hope that helps
>>>
>>>
>>> David E DeMarle
>>> Kitware, Inc.
>>> Principal Engineer
>>> 21 Corporate Drive
>>> Clifton Park, NY 12065-8662
>>> Phone: 518-881-4909 <(518)%20881-4909>
>>>
>>> On Fri, Aug 18, 2017 at 8:11 AM, Eric Petersen <peer9802 at gmail.com>
>>> wrote:
>>>
>>>> Hello,
>>>>
>>>> I currently have a Python script where I am successively translating,
>>>> and rotating, a vtkPolyData object.  The script currently does not track
>>>> individual transforms but I would like to know the current 4x4 transform
>>>> matrix.  Is there any way to directly obtain this information from the
>>>> vtkPolyData object or am I stuck rewriting the script to track individual
>>>> transformations?
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170818/6eddda68/attachment.html>


More information about the vtkusers mailing list