[vtkusers] Display Coordinates Doesn't Change After Translation

Wenlong Wang scc.wwl at gmail.com
Mon Oct 31 09:50:31 EDT 2011


Hi David and everyone,

I think the problem is solved. I got this conclusion based on my current
result, but I'm not sure if it would come out again in my MFC app. Anyway,
it is solve in my console app.

The way to do it is you have to resize the vtkRenderWindow instead of
letting VTK create a window with default value. I put
renderWindow->SetSize(500, 500) into my source code and suddenly the right
values come out.

I'm not sure the earlier problem is caused by my terrible coding skills or
the bug of VTK itself. I still would like to hear from you all if there is
any solution under my earlier situation.

Thank you all.

Wenlong

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

> Hi, David
>
> Sorry the last mail missed somthing.
>
> The current situdation is, I set the transform like (1, 1, 0), and a new
> polydata object was created and translated to another place. I catch the
> new polydata with a pointer. In this case, I think the out coming of my
> code should show that the display coordinates of points on the new sphere
> has the value like ( X_originnal + X_translate, Y_original+Y_Translate, 0),
> since I didn't translate it in Z direction.
>
> But the result shows the X and Y coordinates were not changed at all, only
> the Z has slight difference. Why is this happened? It really strange.
>
> Thank you so much.
>
> Wenlong
>
>
> 2011/10/31 Wenlong Wang <scc.wwl at gmail.com>
>
>> Hi, David,
>>
>> Thank you for your help.
>>
>> Here is the code shows the problem I encountered.
>>
>>     *vtkSphereSource* s = vtkSphereSource::New();
>>     s->Update();
>>
>>     vtkTransform* trans = vtkTransform::New();
>>     trans->Translate(1, 1, 0);
>>
>>     vtkTransformPolyDataFilter* tf = vtkTransformPolyDataFilter::New();
>>     tf->SetInputConnection(s->GetOutputPort());
>>     tf->SetTransform(trans);
>>     tf->Update();
>>
>>     vtkPolyDataMapper* originalMapper = vtkPolyDataMapper::New();
>>     originalMapper->SetInputConnection(s->GetOutputPort());
>>
>>     vtkActor* originalActor = vtkActor::New();
>>     originalActor->SetMapper(originalMapper);
>>     originalActor->GetProperty()->SetColor(1, 0, 0);
>>
>>     vtkPolyDataMapper* transformedMapper = vtkPolyDataMapper::New();
>>     transformedMapper->SetInputConnection(tf->GetOutputPort());
>>
>>     vtkActor* transdformedActor = vtkActor::New();
>>     transdformedActor->SetMapper(transformedMapper);
>>     transdformedActor->GetProperty()->SetColor(0 ,1, 0);
>>
>>     vtkCamera* camera = vtkCamera::New();
>>     camera->SetPosition(0, 0, 5);
>>     camera->SetViewUp(0, 1, 0);
>>
>>     vtkRenderer* ren = vtkRenderer::New();
>>     ren->AddActor(originalActor);
>>     ren->AddActor(transdformedActor);
>>     ren->SetActiveCamera(camera);
>>
>>     vtkRenderWindow* renWin = vtkRenderWindow::New();
>>     renWin->AddRenderer(ren);
>>
>>     vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
>>     iren->SetRenderWindow(renWin);
>>
>>     //------------------Start to convert the world coordinates to display
>> coordinates--------------
>>     vtkPoints* points = vtkPoints::New();
>>     vtkPolyData* polydata = vtkPolyData::New();
>>
>>     polydata = tf->GetOutput();
>>     points = polydata->GetPoints();
>>
>>     double p[3], r[3];
>>     for (int i = 0; i< 50; i++)
>>     {
>>         points->GetPoint(i, p);
>>         ren->SetWorldPoint(p);
>>         ren->WorldToDisplay();
>>         ren->GetDisplayPoint(r);
>>     }**
>>     renWin->Render();
>>     iren->Start();*
>>
>> On the screen, the sphere did translate to another place. However, when I
>> check the display coordinates store in point *r*, I found the X and Y
>> are not changed, only Z has slight difference.
>>
>> Thank you again for your time.
>>
>> Wenlong
>>
>>
>> 2011/10/30 David Doria <daviddoria at gmail.com>
>>
>>> On Sat, Oct 29, 2011 at 1:47 PM, Wenlong Wang <scc.wwl at gmail.com> wrote:
>>>
>>>> Hi David,
>>>>
>>>> I tried the example about vtkTransformPolyDataFilter and applied it to
>>>> my actor. But seems the coordinates didn't change in the way I discribed in
>>>> my earlier mail.
>>>>
>>>> So is that because I didn't use it right? Or I should use other methods
>>>> to get access to the new dataset generated by vtkTransformPolyDataFilter?
>>>>
>>>> Thank you very much.
>>>>
>>>> Long
>>>
>>>
>>> I suggest you send the smallest possible compilable code that you can to
>>> demonstrate the problem. Something like simply display a vtkSphereSource.
>>> Describe the behavior the code produces, and the behavior that you are
>>> aiming for.
>>>
>>> David
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20111031/66e041d7/attachment.htm>


More information about the vtkusers mailing list