[vtkusers] Display Coordinates Doesn't Change After Translation

Wenlong Wang scc.wwl at gmail.com
Sat Oct 29 09:44:53 EDT 2011


Hi David,

Thank you so much for your reply.

You said transform the actor. I guess that's the way I am using. I used
vtkActor::SetUserTransform() to pass my transformation to the actor. After
that, I think the actor should be moved to another position on the screen.
But in this way, the coordinates of points on my actor don't change.

Then I tried vtkCamera::SetUserTransform(). The actor disappeared after
translation. I tested the coordinates and found the coordingates changed to
very large value, e+64. And I think that explains why the actor disappears.

Here is the code clip I wrote

//--------------------------------------------------------
*transform->Scale(0.8, 0.8, 0.8);
transform->RotateZ(33.5);
transform->Translate(translation_vector[0]*0.8, translation_vector[1]*0.8,
0);

camera->SetUserTransform(transform);     //I pass the transformation to
camera because the point coordinates don't change if I pass it to actor
renderer->SetActiveCamera(camera);
renWindow->Render();
//---------------------------------------------------------
*
Actually, I even tried to set the translation parameters manually. For
example, the starting point is (204, 367, 0) (Display coordinates), and I
set the transformation like transform->Translate(20, 20, 0). The result
point from the clip above is (4386, 4902, 0) (Display coordinates);

I think there must be something I missed during the transformation. Could
it because the PreMultiply or PostMultiply?

Thank you very much for your help.

Long

2011/10/29 David Doria <daviddoria at gmail.com>

> On Sat, Oct 29, 2011 at 5:24 AM, Wenlong Wang <scc.wwl at gmail.com> wrote:
>
>> Dear all,
>>
>> I'm trying to translate my actor (a polydata mesh) with vtkTransform and
>> vtkTransformFilter. What I want to do is translate my actor and get the
>> difference of display coordinates of some specific points.
>>
>> My current method is like follows
>> *
>> //-----------Translation finished above----------------------
>> for (int i = 0; i< 14; i++)
>>     {
>>         points->GetPoint(landmarks[i], newcoord[i]);
>>         ren->SetWorldPoint(newcoord[i]);
>>         ren->WorldToDisplay();
>>         ren->GetDisplayPoint(newcoord[i]);
>>     }
>> //-----------------------------------------------------------------------
>> *
>>
>> However, the display coordinates after the translation are the same as
>> before translation. And as I tested, the actor position and camera
>> position were not changed after the translation. Even the actor did move to
>> another position on the screen.
>>
>> Is there any other method to achieve it?
>>
>> Thank you very much for your kindly help.
>>
>> Best wishes
>> Long
>>
>
> Why don't you just transform the actor instead of the data?
>
> Take a look at these:
>
>
> https://docs.google.com/present/edit?id=0AcyIfGqnlfSoZGdqaGhnMnJfMjY1aGJqZGZ4ZnQ&hl=en
> http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/TransformActor
>
> David
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20111029/d01f7600/attachment.htm>


More information about the vtkusers mailing list