[vtkusers] Display Coordinates Doesn't Change After Translation

Wenlong Wang scc.wwl at gmail.com
Sat Oct 29 11:23:03 EDT 2011


Hi David and everyone,

I guess I found what the problem is. I tried to translate my *camera* by
(1, 1, 0), and the result shows the *actor* obviously not just moved by 1
but a long distance. So in my app, the camera was expected to be moved by
about 40, that's why the actor is not in the screen anymore.

However, even I know what the problem is, I can still not explain this.

Can anyone help me out of this?

Thank you so much in advance!

Long

2011/10/29 Wenlong Wang <scc.wwl at gmail.com>

> 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/6ffb3232/attachment.htm>


More information about the vtkusers mailing list