[vtkusers] Problem moving a sphere through the 3D space

Yumin Yuan yumin.yuan at kitware.com
Thu Jan 10 13:35:28 EST 2013


Ok, now I think I know what you need

  // Project a point x onto plane defined by origin and normal. The
  // projected point is returned in xproj. NOTE : normal assumed to
  // have magnitude 1.
  static void vtkPlane::ProjectPoint(double x[3], double origin[3],
double normal[3],
                           double xproj[3]);

Try something like this:

vtkPlane::ProjectPoint(point, previouscenter,
camera->GetViewPlaneNormal(), newcenter)

Then, set the "newcenter" to be the sphere center.

Yumin

On Thu, Jan 10, 2013 at 12:23 PM, Imanol Muñoz Pandiella
<imanolm at lsi.upc.edu> wrote:
> Thanks for answer but I think that I haven't explain well what is my
> problem.
>
> I don't want to preserve the z value in the world coordinate system. I want
> to preserve the z value of the observer coordinate system.
>
> I want to move the sphere in the plane that crosses the center of the sphere
> and is perpendicular to the ray which starts in the observers and ends in
> the center of the sphere.
>
> Do I have explained myself better? Apologise for my English...
>
> El 09/01/2013 16:28, Yumin Yuan escribió:
>
>> Try this:
>>
>> double center[3];
>> mSphere->GetCenter(center);
>> mSphere->SetCenter(point[0],point[1],center[2]);
>>
>> Yumin
>>
>> On Wed, Jan 9, 2013 at 6:32 AM, Imanol Muñoz Pandiella
>> <imanolm at lsi.upc.edu> wrote:
>>>
>>> Hello,
>>>
>>> in my vtk application i am visualizing a sphere in the space. I would
>>> like
>>> to move the sphere with the mouse along the x and y axis of the camera's
>>> reference frame. I mean, i don't want to modify the position in the z
>>> axis
>>> of the camera's reference frame.
>>>
>>> In this way, I'm using the following code during the mouse movement to
>>> obtain the new position of the sphere after an interaction with the
>>> mouse:
>>>
>>> double point[3];
>>> mCellPicker->Pick(mStyle->GetInteractor()->GetEventPosition()[0],
>>> mStyle->GetInteractor()->GetEventPosition()[1],
>>>                                      0,
>>>
>>> mStyle->GetInteractor()->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
>>> mCellPicker->GetPickPosition(point);
>>> mSphere->SetCenter(point[0],point[1],point[2]);
>>>
>>> where mCellPicker and mStle are declared as follows:
>>> vtkCellPicker *mCellPicker;
>>> vtkInteractorStyleTrackballCamera* mStyle;
>>>
>>> The problem is the position of the sphere is modified in the x and y axis
>>> of
>>> the camera's reference frame and also, in the z axis. In this axis the
>>> sphere is placed in the middle of the zMin and zMax of the volume space.
>>>
>>> To ensure that the picker is not interacting with the rest of the actors
>>> of
>>> the scene, i use the following code whe the mouse button is pressed down
>>> without setting the actor list of the picker supposing that the picker
>>> will
>>> use an empty actor's list:
>>> mCellPicker->PickFromListOn();
>>>
>>> and the following code when the mouse button is released:
>>> mCellPicker->PickFromListOff();
>>>
>>> I have seen in another application that it can be done with a
>>> vtkPointWidget, and the translation works fine. The problem is I need
>>> this
>>> functionality to spheres, cylinders, semi-spheres, ...
>>>
>>> What am I doing wrong? How can I translate the sphere through the volume
>>> space without modifying the position of it in the z axis of the camera's
>>> reference frame?
>>>
>>> Thank you very much for your help!
>>>
>>> --
>>> Imanol Muñoz i Pandiella.
>>>
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the VTK FAQ at:
>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.vtk.org/mailman/listinfo/vtkusers
>
>
>
> --
> Imanol Muñoz i Pandiella.
>



More information about the vtkusers mailing list