[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