VTK
vtkAbstractTransform.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkAbstractTransform.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
38 #ifndef vtkAbstractTransform_h
39 #define vtkAbstractTransform_h
40 
41 #include "vtkCommonTransformsModule.h" // For export macro
42 #include "vtkObject.h"
43 
44 class vtkDataArray;
45 class vtkMatrix4x4;
46 class vtkPoints;
48 
50 {
51 public:
52 
54  void PrintSelf(ostream& os, vtkIndent indent);
55 
57 
59  void TransformPoint(const float in[3], float out[3]) {
60  this->Update(); this->InternalTransformPoint(in,out); };
62 
64 
66  void TransformPoint(const double in[3], double out[3]) {
67  this->Update(); this->InternalTransformPoint(in,out); };
69 
71 
73  double *TransformPoint(double x, double y, double z) {
74  return this->TransformDoublePoint(x,y,z); }
75  double *TransformPoint(const double point[3]) {
76  return this->TransformPoint(point[0],point[1],point[2]); };
78 
80 
82  float *TransformFloatPoint(float x, float y, float z) {
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; };
88  float *TransformFloatPoint(const float point[3]) {
89  return this->TransformFloatPoint(point[0],point[1],point[2]); };
91 
93 
95  double *TransformDoublePoint(double x, double y, double z) {
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; };
101  double *TransformDoublePoint(const double point[3]) {
102  return this->TransformDoublePoint(point[0],point[1],point[2]); };
104 
106 
109  void TransformNormalAtPoint(const float point[3], const float in[3],
110  float out[3]);
111  void TransformNormalAtPoint(const double point[3], const double in[3],
112  double out[3]);
114 
115  double *TransformNormalAtPoint(const double point[3],
116  const double normal[3]) {
117  this->TransformNormalAtPoint(point,normal,this->InternalDoublePoint);
118  return this->InternalDoublePoint; };
119 
121 
124  double *TransformDoubleNormalAtPoint(const double point[3],
125  const double normal[3]) {
126  this->TransformNormalAtPoint(point,normal,this->InternalDoublePoint);
127  return this->InternalDoublePoint; };
129 
131 
134  float *TransformFloatNormalAtPoint(const float point[3],
135  const float normal[3]) {
136  this->TransformNormalAtPoint(point,normal,this->InternalFloatPoint);
137  return this->InternalFloatPoint; };
139 
141 
144  void TransformVectorAtPoint(const float point[3], const float in[3],
145  float out[3]);
146  void TransformVectorAtPoint(const double point[3], const double in[3],
147  double out[3]);
149 
150  double *TransformVectorAtPoint(const double point[3],
151  const double vector[3]) {
152  this->TransformVectorAtPoint(point,vector,this->InternalDoublePoint);
153  return this->InternalDoublePoint; };
154 
156 
159  double *TransformDoubleVectorAtPoint(const double point[3],
160  const double vector[3]) {
161  this->TransformVectorAtPoint(point,vector,this->InternalDoublePoint);
162  return this->InternalDoublePoint; };
164 
166 
169  float *TransformFloatVectorAtPoint(const float point[3],
170  const float vector[3]) {
171  this->TransformVectorAtPoint(point,vector,this->InternalFloatPoint);
172  return this->InternalFloatPoint; };
174 
177  virtual void TransformPoints(vtkPoints *inPts, vtkPoints *outPts);
178 
180 
183  vtkPoints *outPts,
184  vtkDataArray *inNms,
185  vtkDataArray *outNms,
186  vtkDataArray *inVrs,
187  vtkDataArray *outVrs);
189 
196 
201 
203  virtual void Inverse() = 0;
204 
207 
211  void Update();
212 
214 
216  virtual void InternalTransformPoint(const float in[3], float out[3]) = 0;
217  virtual void InternalTransformPoint(const double in[3], double out[3]) = 0;
219 
221 
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;
230 
233 
241 
243  unsigned long GetMTime();
244 
247  virtual void UnRegister(vtkObjectBase *O);
248 
249 protected:
252 
254  virtual void InternalUpdate() {}
255 
258 
259  float InternalFloatPoint[3];
260  double InternalDoublePoint[3];
261 
262 private:
263 
264 //BTX
265  // We need to record the time of the last update, and we also need
266  // to do mutex locking so updates don't collide. These are private
267  // because Update() is not virtual.
268  // If DependsOnInverse is set, then this transform object will
269  // check its inverse on every update, and update itself accordingly
270  // if necessary.
271 //ETX
272  vtkTimeStamp UpdateTime;
273  vtkSimpleCriticalSection *UpdateMutex;
274  vtkSimpleCriticalSection *InverseMutex;
275  int DependsOnInverse;
276 
277 //BTX
278  // MyInverse is a transform which is the inverse of this one.
279 //ETX
280  vtkAbstractTransform *MyInverse;
281 
282  int InUnRegister;
283 
284 private:
285  vtkAbstractTransform(const vtkAbstractTransform&); // Not implemented.
286  void operator=(const vtkAbstractTransform&); // Not implemented.
287 };
288 
289 //BTX
290 //-------------------------------------------------------------------------
291 // A simple data structure to hold both a transform and its inverse.
292 // One of ForwardTransform or InverseTransform might be NULL,
293 // and must be acquired by calling GetInverse() on the other.
295 {
296 public:
298 
301 
304  this->ForwardTransform = this->InverseTransform;
305  this->InverseTransform = tmp; };
306 };
307 
308 // .NAME vtkTransformConcatenation - store a series of transformations.
309 // .SECTION Description
310 // A helper class (not derived from vtkObject) to store a series of
311 // transformations in a pipelined concatenation.
313 {
314 public:
316  return new vtkTransformConcatenation(); };
317  void Delete() { delete this; };
318 
321 
323  void Concatenate(const double elements[16]);
324 
326 
327  void SetPreMultiplyFlag(int flag) { this->PreMultiplyFlag = flag; };
328  int GetPreMultiplyFlag() { return this->PreMultiplyFlag; };
330 
332 
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);
337 
339  void Inverse();
340 
342  int GetInverseFlag() { return this->InverseFlag; };
343 
345  void Identity();
346 
347  // copy the list
349 
351  int GetNumberOfTransforms() { return this->NumberOfTransforms; };
352 
356  int GetNumberOfPreTransforms() { return this->NumberOfPreTransforms; };
357 
359 
361  return this->NumberOfTransforms-this->NumberOfPreTransforms; };
363 
366 
368  unsigned long GetMaxMTime();
369 
370  void PrintSelf(ostream& os, vtkIndent indent);
371 
372 protected:
375 
378 
383 
388 };
389 
390 // .NAME vtkTransformConcatenationStack - Store a stack of concatenations.
391 // .SECTION Description
392 // A helper class (not derived from vtkObject) to store a stack of
393 // concatenations.
395 {
396 public:
398  {
399  return new vtkTransformConcatenationStack();
400  }
401  void Delete()
402  {
403  delete this;
404  }
405 
409 
413 
415 
416 protected:
419 
423 };
424 
425 //ETX
426 
427 #endif
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:39
vtkgl::z
GLdouble GLdouble z
Definition: vtkgl.h:11754
vtkTransformConcatenation::GetNumberOfPostTransforms
int GetNumberOfPostTransforms()
Definition: vtkAbstractTransform.h:360
vtkX3D::vector
@ vector
Definition: vtkX3D.h:237
vtkTransformConcatenation::Concatenate
void Concatenate(const double elements[16])
vtkTransformConcatenation::Scale
void Scale(double x, double y, double z)
vtkTransformConcatenationStack::vtkTransformConcatenationStack
vtkTransformConcatenationStack()
vtkAbstractTransform::CircuitCheck
virtual int CircuitCheck(vtkAbstractTransform *transform)
vtkTransformConcatenation::GetNumberOfTransforms
int GetNumberOfTransforms()
Definition: vtkAbstractTransform.h:351
vtkAbstractTransform
superclass for all geometric transformations
Definition: vtkAbstractTransform.h:50
vtkAbstractTransform::InternalTransformPoint
virtual void InternalTransformPoint(const float in[3], float out[3])=0
vtkTransformConcatenationStack::StackSize
int StackSize
Definition: vtkAbstractTransform.h:420
vtkTransformConcatenationStack::DeepCopy
void DeepCopy(vtkTransformConcatenationStack *stack)
vtkTransformConcatenation::PreMatrixTransform
vtkAbstractTransform * PreMatrixTransform
Definition: vtkAbstractTransform.h:381
vtkTransformConcatenation::GetPreMultiplyFlag
int GetPreMultiplyFlag()
Definition: vtkAbstractTransform.h:328
vtkAbstractTransform::TransformNormalAtPoint
double * TransformNormalAtPoint(const double point[3], const double normal[3])
Definition: vtkAbstractTransform.h:115
vtkAbstractTransform::TransformNormalAtPoint
void TransformNormalAtPoint(const double point[3], const double in[3], double out[3])
vtkTransformConcatenation::SetPreMultiplyFlag
void SetPreMultiplyFlag(int flag)
Definition: vtkAbstractTransform.h:327
vtkAbstractTransform::TransformVectorAtPoint
double * TransformVectorAtPoint(const double point[3], const double vector[3])
Definition: vtkAbstractTransform.h:150
vtkAbstractTransform::Inverse
virtual void Inverse()=0
vtkTransformConcatenationStack
Definition: vtkAbstractTransform.h:395
vtkTransformConcatenation::PostMatrix
vtkMatrix4x4 * PostMatrix
Definition: vtkAbstractTransform.h:380
vtkAbstractTransform::InternalUpdate
virtual void InternalUpdate()
Definition: vtkAbstractTransform.h:254
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:35
vtkTransformConcatenation::Delete
void Delete()
Definition: vtkAbstractTransform.h:317
vtkAbstractTransform::InternalTransformDerivative
virtual void InternalTransformDerivative(const double in[3], double out[3], double derivative[3][3])=0
vtkTransformPair::SwapForwardInverse
void SwapForwardInverse()
Definition: vtkAbstractTransform.h:302
vtkAbstractTransform::TransformFloatPoint
float * TransformFloatPoint(const float point[3])
Definition: vtkAbstractTransform.h:88
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkTransformConcatenation::GetTransform
vtkAbstractTransform * GetTransform(int i)
vtkTransformConcatenation::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkgl::x
GLint GLint GLint GLint GLint x
Definition: vtkgl.h:11318
vtkAbstractTransform::TransformFloatPoint
float * TransformFloatPoint(float x, float y, float z)
Definition: vtkAbstractTransform.h:82
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:55
vtkTransformConcatenation::PreMatrix
vtkMatrix4x4 * PreMatrix
Definition: vtkAbstractTransform.h:379
vtkAbstractTransform::SetInverse
void SetInverse(vtkAbstractTransform *transform)
vtkgl::in
GLuint in
Definition: vtkgl.h:16905
vtkAbstractTransform::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkAbstractTransform::TransformPoint
void TransformPoint(const double in[3], double out[3])
Definition: vtkAbstractTransform.h:66
vtkAbstractTransform::Update
void Update()
vtkAbstractTransform::GetInverse
vtkAbstractTransform * GetInverse()
vtkTransformConcatenationStack::Delete
void Delete()
Definition: vtkAbstractTransform.h:401
vtkAbstractTransform::TransformVectorAtPoint
void TransformVectorAtPoint(const float point[3], const float in[3], float out[3])
vtkAbstractTransform::InternalTransformPoint
virtual void InternalTransformPoint(const double in[3], double out[3])=0
vtkAbstractTransform::TransformDoubleVectorAtPoint
double * TransformDoubleVectorAtPoint(const double point[3], const double vector[3])
Definition: vtkAbstractTransform.h:159
vtkTransformConcatenationStack::Pop
void Pop(vtkTransformConcatenation **concat)
vtkTransformConcatenation::PostMatrixTransform
vtkAbstractTransform * PostMatrixTransform
Definition: vtkAbstractTransform.h:382
vtkTransformConcatenation::NumberOfPreTransforms
int NumberOfPreTransforms
Definition: vtkAbstractTransform.h:385
vtkAbstractTransform::TransformPoint
double * TransformPoint(const double point[3])
Definition: vtkAbstractTransform.h:75
vtkCommonTransformsModule.h
VTKCOMMONTRANSFORMS_EXPORT
#define VTKCOMMONTRANSFORMS_EXPORT
Definition: vtkCommonTransformsModule.h:15
vtkX3D::point
@ point
Definition: vtkX3D.h:236
vtkTransformConcatenation::~vtkTransformConcatenation
~vtkTransformConcatenation()
Update
virtual void Update()
vtkTransformConcatenation::GetNumberOfPreTransforms
int GetNumberOfPreTransforms()
Definition: vtkAbstractTransform.h:356
vtkTransformConcatenationStack::Stack
vtkTransformConcatenation ** Stack
Definition: vtkAbstractTransform.h:421
vtkTransformPair::InverseTransform
vtkAbstractTransform * InverseTransform
Definition: vtkAbstractTransform.h:300
vtkAbstractTransform::TransformFloatNormalAtPoint
float * TransformFloatNormalAtPoint(const float point[3], const float normal[3])
Definition: vtkAbstractTransform.h:134
vtkTransformConcatenation::GetInverseFlag
int GetInverseFlag()
Definition: vtkAbstractTransform.h:342
vtkObjectBase
abstract base class for most VTK objects
Definition: vtkObjectBase.h:60
vtkAbstractTransform::TransformVectorAtPoint
void TransformVectorAtPoint(const double point[3], const double in[3], double out[3])
vtkAbstractTransform::InternalTransformDerivative
virtual void InternalTransformDerivative(const float in[3], float out[3], float derivative[3][3])=0
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkAbstractTransform::TransformPoint
double * TransformPoint(double x, double y, double z)
Definition: vtkAbstractTransform.h:73
vtkMatrix4x4
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:39
vtkTransformConcatenation::InverseFlag
int InverseFlag
Definition: vtkAbstractTransform.h:376
vtkAbstractTransform::UnRegister
virtual void UnRegister(vtkObjectBase *O)
vtkTransformConcatenation::Translate
void Translate(double x, double y, double z)
vtkTransformConcatenation::TransformList
vtkTransformPair * TransformList
Definition: vtkAbstractTransform.h:387
vtkTransformConcatenation::Concatenate
void Concatenate(vtkAbstractTransform *transform)
vtkSimpleCriticalSection
Critical section locking class.
Definition: vtkSimpleCriticalSection.h:68
vtkTransformConcatenation::Identity
void Identity()
vtkTransformConcatenationStack::New
static vtkTransformConcatenationStack * New()
Definition: vtkAbstractTransform.h:397
vtkTransformPair::ForwardTransform
vtkAbstractTransform * ForwardTransform
Definition: vtkAbstractTransform.h:299
vtkObject.h
vtkAbstractTransform::TransformFloatVectorAtPoint
float * TransformFloatVectorAtPoint(const float point[3], const float vector[3])
Definition: vtkAbstractTransform.h:169
vtkTransformPair
Definition: vtkAbstractTransform.h:295
vtkAbstractTransform::~vtkAbstractTransform
~vtkAbstractTransform()
vtkAbstractTransform::TransformDoubleNormalAtPoint
double * TransformDoubleNormalAtPoint(const double point[3], const double normal[3])
Definition: vtkAbstractTransform.h:124
vtkgl::y
GLint GLint GLint GLint GLint GLint y
Definition: vtkgl.h:11318
vtkAbstractTransform::TransformNormalAtPoint
void TransformNormalAtPoint(const float point[3], const float in[3], float out[3])
vtkTransformConcatenation::Inverse
void Inverse()
vtkTransformConcatenation::vtkTransformConcatenation
vtkTransformConcatenation()
vtkTransformConcatenationStack::StackBottom
vtkTransformConcatenation ** StackBottom
Definition: vtkAbstractTransform.h:422
vtkAbstractTransform::DeepCopy
void DeepCopy(vtkAbstractTransform *)
vtkAbstractTransform::GetMTime
unsigned long GetMTime()
vtkTransformConcatenation::NumberOfTransforms
int NumberOfTransforms
Definition: vtkAbstractTransform.h:384
vtkAbstractTransform::TransformPoint
void TransformPoint(const float in[3], float out[3])
Definition: vtkAbstractTransform.h:59
vtkAbstractTransform::TransformPoints
virtual void TransformPoints(vtkPoints *inPts, vtkPoints *outPts)
vtkgl::angle
GLfloat angle
Definition: vtkgl.h:18174
vtkTransformConcatenation::DeepCopy
void DeepCopy(vtkTransformConcatenation *transform)
vtkTransformConcatenation::Rotate
void Rotate(double angle, double x, double y, double z)
vtkAbstractTransform::TransformDoublePoint
double * TransformDoublePoint(const double point[3])
Definition: vtkAbstractTransform.h:101
vtkAbstractTransform::TransformPointsNormalsVectors
virtual void TransformPointsNormalsVectors(vtkPoints *inPts, vtkPoints *outPts, vtkDataArray *inNms, vtkDataArray *outNms, vtkDataArray *inVrs, vtkDataArray *outVrs)
vtkAbstractTransform::vtkAbstractTransform
vtkAbstractTransform()
vtkTransformConcatenation::PreMultiplyFlag
int PreMultiplyFlag
Definition: vtkAbstractTransform.h:377
vtkTransformConcatenation::MaxNumberOfTransforms
int MaxNumberOfTransforms
Definition: vtkAbstractTransform.h:386
vtkTransformPair::vtkTransformPair
vtkTransformPair()
Definition: vtkAbstractTransform.h:297
vtkTransformConcatenationStack::Push
void Push(vtkTransformConcatenation **concat)
vtkgl::transform
GLuint GLenum GLenum transform
Definition: vtkgl.h:16451
vtkTransformConcatenation::New
static vtkTransformConcatenation * New()
Definition: vtkAbstractTransform.h:315
vtkTransformConcatenation
Definition: vtkAbstractTransform.h:313
vtkAbstractTransform::MakeTransform
virtual vtkAbstractTransform * MakeTransform()=0
vtkTransformConcatenation::GetMaxMTime
unsigned long GetMaxMTime()
vtkAbstractTransform::InternalDeepCopy
virtual void InternalDeepCopy(vtkAbstractTransform *)
Definition: vtkAbstractTransform.h:257
vtkTransformConcatenationStack::~vtkTransformConcatenationStack
~vtkTransformConcatenationStack()
vtkAbstractTransform::TransformDoublePoint
double * TransformDoublePoint(double x, double y, double z)
Definition: vtkAbstractTransform.h:95