[vtkusers] give direction to cylinder

Bill Lorensen bill.lorensen at gmail.com
Thu Jul 19 12:37:28 EDT 2012


To rotate about a given point you must
Translate to the point
Rotate
Translate back


On Thu, Jul 19, 2012 at 12:25 PM, Gonzalo Amadio <gonzaloamadio at gmail.com>wrote:

> I thought I would solve my problem. But no. Well, in fact the problem is
> with the rotation.
> The aim of what I am doing is trying to position the cylinder in such way
> that is around a line I have.
> My idea is, positionning it on the center of the line, and then rotating,
> so it is in the same direction of the line.
>
> I have a line segment, which I know
>
> originLine[3] = myOrigin;   //origin of the line
>> dir[3] = myDirection;         //direction of the line
>> double lengthLine = 10;    //length
>
>
> y could position the cylinder in the center of the line with :
>
> double cen[3];
>> cen[0] = centerTip[0] + dir[0] * (lenght)/2 ;
>> cen[1] = centerTip[1] + dir[1] * (lenght)/2 ;
>> cen[2] = centerTip[2] + dir[2] * (lenght)/2 ;
>
>
> Then, the part where I am not sure if it is how it has to be done.
> I obtain the angles between the dir vector and axis. And pass that angles
> to RotateX, RotateY, RotateZ.
>
> double alpha, beta, gamma; //angles between dir and axis x, y, z
>> respectively.
>> double norm;
>> norm = sqrt (dir[0]*dir[0] + dir[1]*dir[1] + dir[2]*dir[2]);
>>
>
>
> alpha =   acos (dir[0] / norm);
>> beta =     acos (dir[1] / norm);
>> gamma = acos (dir[2] / norm);
>
>
>> vtkSmartPointer<vtkTransform> transform =
>> vtkSmartPointer<vtkTransform>::New();
>> transform->Translate(-cen[0],-cen[1],-cen[2]);
>> transform->PostMultiply();
>> transform->RotateX(alpha);
>> transform->RotateY(beta);
>> transform->RotateZ(gamma);
>> transform->Translate(cen[0],cen[1],cen[2]);
>>
>
>
> vtkSmartPointer<vtkTransformPolyDataFilter> transF =
>> vtkSmartPointer<vtkTransformPolyDataFilter>::New();
>> transF->SetInput(cylinderSource->GetOutput());
>> transF->SetTransform(transform);
>> transF->Update();
>
>
> There is no way of setting to the cylinder an origin and end point?, so
> all this part of the orientation can be avoided.
>
> Someone can help me with this? .
>
> Thank you!
>
>
>
> 2012/7/18 David Doria <daviddoria at gmail.com>
>
>> On Wed, Jul 18, 2012 at 1:53 PM, Gonzalo Amadio <gonzaloamadio at gmail.com>wrote:
>>
>>> Well, here is my code, now it seems to work .
>>>
>>> vtkSmartPointer<vtkCylinderSource> cylinderSource =
>>>> vtkSmartPointer<vtkCylinderSource>::New();
>>>> cylinderSource->SetCenter(center[0], center[1], center[2]);
>>>>
>>>
>>>
>>> vtkSmartPointer<vtkTransform> transform =
>>>> vtkSmartPointer<vtkTransform>::New();
>>>>  transform->Translate(-center[0],-center[1],-center[2]);
>>>> transform->PostMultiply();  //This was the fundamental line, if I have
>>>> not put this line, the second translation goes to a wrong place.
>>>> transform->RotateX(90);
>>>> transform->Translate(centerV[0],centerV[1],centerV[2]);
>>>>
>>>
>>>
>>> vtkSmartPointer<vtkTransformPolyDataFilter> transF =
>>>> vtkSmartPointer<vtkTransformPolyDataFilter>::New();
>>>> transF->SetInput(cylinderSource->GetOutput());
>>>> transF->SetTransform(transform);
>>>> transF->Update();
>>>>
>>>
>>>
>>> vtkSmartPointer<vtkPolyData> cylinder = transF->GetOutput();
>>>
>>>
>> You may find Lecture 2: Transforms from here:
>> http://www.vtk.org/Wiki/VTK/Presentations
>>
>> useful as well, but it seems you've already solved the problem.
>>
>> David
>>
>
>
>
> --
> --------
> Gonzalo Amadio
>
>
> _______________________________________________
> 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
>
>


-- 
Unpaid intern in BillsBasement at noware dot com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120719/559fd998/attachment.htm>


More information about the vtkusers mailing list