38 #ifndef __vtkAbstractTransform_h
39 #define __vtkAbstractTransform_h
41 #include "vtkCommonTransformsModule.h"
42 #include "vtkObject.h"
47 class vtkSimpleCriticalSection;
54 void PrintSelf(ostream& os, vtkIndent indent);
60 this->Update(); this->InternalTransformPoint(in,out); };
67 this->Update(); this->InternalTransformPoint(in,out); };
74 return this->TransformDoublePoint(x,y,z); }
76 return this->TransformPoint(point[0],point[1],point[2]); };
83 this->InternalFloatPoint[0] = x;
84 this->InternalFloatPoint[1] = y;
85 this->InternalFloatPoint[2] = z;
86 this->TransformPoint(this->InternalFloatPoint,this->InternalFloatPoint);
87 return this->InternalFloatPoint; };
89 return this->TransformFloatPoint(point[0],point[1],point[2]); };
96 this->InternalDoublePoint[0] = x;
97 this->InternalDoublePoint[1] = y;
98 this->InternalDoublePoint[2] = z;
99 this->TransformPoint(this->InternalDoublePoint,this->InternalDoublePoint);
100 return this->InternalDoublePoint; };
102 return this->TransformDoublePoint(point[0],point[1],point[2]); };
109 void TransformNormalAtPoint(
const float point[3],
const float in[3],
111 void TransformNormalAtPoint(
const double point[3],
const double in[3],
116 const double normal[3]) {
117 this->TransformNormalAtPoint(point,normal,this->InternalDoublePoint);
118 return this->InternalDoublePoint; };
125 const double normal[3]) {
126 this->TransformNormalAtPoint(point,normal,this->InternalDoublePoint);
127 return this->InternalDoublePoint; };
135 const float normal[3]) {
136 this->TransformNormalAtPoint(point,normal,this->InternalFloatPoint);
137 return this->InternalFloatPoint; };
144 void TransformVectorAtPoint(
const float point[3],
const float in[3],
146 void TransformVectorAtPoint(
const double point[3],
const double in[3],
151 const double vector[3]) {
152 this->TransformVectorAtPoint(point,vector,this->InternalDoublePoint);
153 return this->InternalDoublePoint; };
160 const double vector[3]) {
161 this->TransformVectorAtPoint(point,vector,this->InternalDoublePoint);
162 return this->InternalDoublePoint; };
170 const float vector[3]) {
171 this->TransformVectorAtPoint(point,vector,this->InternalFloatPoint);
172 return this->InternalFloatPoint; };
177 virtual void TransformPoints(vtkPoints *inPts, vtkPoints *outPts);
182 virtual void TransformPointsNormalsVectors(vtkPoints *inPts,
185 vtkDataArray *outNms,
187 vtkDataArray *outVrs);
203 virtual void Inverse() = 0;
216 virtual void InternalTransformPoint(
const float in[3],
float out[3]) = 0;
217 virtual void InternalTransformPoint(
const double in[3],
double out[3]) = 0;
225 virtual void InternalTransformDerivative(
const float in[3],
float out[3],
226 float derivative[3][3]) = 0;
227 virtual void InternalTransformDerivative(
const double in[3],
double out[3],
228 double derivative[3][3]) = 0;
243 unsigned long GetMTime();
247 virtual void UnRegister(vtkObjectBase *O);
259 float InternalFloatPoint[3];
260 double InternalDoublePoint[3];
272 vtkTimeStamp UpdateTime;
273 vtkSimpleCriticalSection *UpdateMutex;
274 vtkSimpleCriticalSection *InverseMutex;
275 int DependsOnInverse;
323 void Concatenate(
const double elements[16]);
333 void Translate(
double x,
double y,
double z);
334 void Rotate(
double angle,
double x,
double y,
double z);
335 void Scale(
double x,
double y,
double z);
361 return this->NumberOfTransforms-this->NumberOfPreTransforms; };
368 unsigned long GetMaxMTime();
370 void PrintSelf(ostream& os, vtkIndent indent);
represent and manipulate 4x4 transformation matrices