]> Creatis software - creaRigidRegistration.git/blob - lib/Transformer3D1Point.cxx
de97c9a238bf7ade5d8610f2a103491752481e24
[creaRigidRegistration.git] / lib / Transformer3D1Point.cxx
1
2 #include "Transformer3D1Point.h"
3 /*
4         CONSTRUCTOR: Initializes the two points with empty vectors, the angle in 0.
5 */
6 Transformer3D1Point::Transformer3D1Point() 
7 {
8         std::vector<int> empty (3,0); 
9         _centerPoint=empty;     
10         //If the transform already exists, we delete it before we create a new transform 
11         //and set the matrix with the identity matrix
12         _transform= vtkTransform::New();
13         _matrix = vtkMatrix4x4::New();
14         _matrix->Identity();
15         _transform->SetMatrix(_matrix); 
16 }
17
18 /*
19         DESTRUCTOR
20 */
21 Transformer3D1Point::~Transformer3D1Point()
22 {
23         //We delete the existing transform
24         if (_transform != NULL ) { _transform->Delete(); }
25         if (_matrix != NULL ) { _matrix->Delete(); }
26 }
27
28 /*
29         SETS A NEW TRANSFORM
30 */
31 void Transformer3D1Point::SetTransform(vtkTransform *transform)
32 {
33         _transform=transform;
34 }
35
36 /*
37         SETS CENTER POINT
38 */
39 void Transformer3D1Point::SetCenterPoint(std::vector<int> point)
40 {
41     _centerPoint=point;
42 }
43
44 /*
45         SETS THE ANGLE IN X
46 */
47 void Transformer3D1Point::SetAngleX(double angle)
48 {
49         _angleX=angle;
50 }
51
52 /*
53         SETS THE ANGLE IN Y
54 */
55 void Transformer3D1Point::SetAngleY(double angle)
56 {
57         _angleY=angle;
58 }
59
60 /*
61         SETS THE ANGLE IN Z
62 */
63 void Transformer3D1Point::SetAngleZ(double angle)
64 {
65         _angleZ=angle;
66 }
67
68 /*
69         SETS THE X SCALE
70 */
71 void Transformer3D1Point::SetScaleX(double scaleX)
72 {
73         _scaleX=scaleX/100.0;
74 }
75
76 /*
77         SETS THE Y SCALE
78 */
79 void Transformer3D1Point::SetScaleY(double scaleY)
80 {
81         _scaleY=scaleY/100.0;
82 }
83
84 /*
85  SETS THE Y SCALE
86  */
87 void Transformer3D1Point::SetScaleZ(double scaleZ)
88 {
89         _scaleZ=scaleZ/100.0;
90 }
91
92 /*
93         GETS THE RESULTANT TRANSFORM
94 */
95 vtkTransform *Transformer3D1Point::GetResult()
96 {
97         return _transform;
98 }
99
100 /*
101         MAKES THE TRANSFORMATIONS
102 */
103 void Transformer3D1Point::Run()
104 {       
105         //Clears any old transformations in the pipeline
106         _transform->Identity();
107
108         //Make all transformations in post multiply mode
109         _transform->PostMultiply();
110
111         //Centers the image before applying the transformation
112         _transform->Translate(-_centerPoint[0], -_centerPoint[1], -_centerPoint[2]);
113
114         
115         _transform->RotateWXYZ(_angleY, 0, 1, 0);
116         _transform->RotateWXYZ(_angleX, 1, 0, 0);
117         _transform->RotateWXYZ(_angleZ, 0, 0, 1);
118         _transform->Scale(_scaleX, _scaleY,_scaleZ);
119
120         //Returns the inverse of the transformation (NTU: Have no idea why we have to do this for the image to appear properly)
121         _transform->Inverse();  
122         _transform->Update();
123 }