VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkLinearTransform.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00024 #ifndef __vtkLinearTransform_h 00025 #define __vtkLinearTransform_h 00026 00027 #include "vtkCommonTransformsModule.h" // For export macro 00028 #include "vtkHomogeneousTransform.h" 00029 00030 class VTKCOMMONTRANSFORMS_EXPORT vtkLinearTransform : public vtkHomogeneousTransform 00031 { 00032 public: 00033 00034 vtkTypeMacro(vtkLinearTransform,vtkHomogeneousTransform); 00035 void PrintSelf(ostream& os, vtkIndent indent); 00036 00038 00040 void TransformNormal(const float in[3], float out[3]) { 00041 this->Update(); this->InternalTransformNormal(in,out); }; 00043 00045 00047 void TransformNormal(const double in[3], double out[3]) { 00048 this->Update(); this->InternalTransformNormal(in,out); }; 00050 00052 00054 double *TransformNormal(double x, double y, double z) { 00055 return this->TransformDoubleNormal(x,y,z); } 00056 double *TransformNormal(const double normal[3]) { 00057 return this->TransformDoubleNormal(normal[0],normal[1],normal[2]); }; 00059 00061 00063 float *TransformFloatNormal(float x, float y, float z) { 00064 this->InternalFloatPoint[0] = x; 00065 this->InternalFloatPoint[1] = y; 00066 this->InternalFloatPoint[2] = z; 00067 this->TransformNormal(this->InternalFloatPoint,this->InternalFloatPoint); 00068 return this->InternalFloatPoint; }; 00069 float *TransformFloatNormal(const float normal[3]) { 00070 return this->TransformFloatNormal(normal[0],normal[1],normal[2]); }; 00072 00074 00076 double *TransformDoubleNormal(double x, double y, double z) { 00077 this->InternalDoublePoint[0] = x; 00078 this->InternalDoublePoint[1] = y; 00079 this->InternalDoublePoint[2] = z; 00080 this->TransformNormal(this->InternalDoublePoint,this->InternalDoublePoint); 00081 return this->InternalDoublePoint; }; 00082 double *TransformDoubleNormal(const double normal[3]) { 00083 return this->TransformDoubleNormal(normal[0],normal[1],normal[2]); }; 00085 00087 00089 double *TransformVector(double x, double y, double z) { 00090 return this->TransformDoubleVector(x,y,z); } 00091 double *TransformVector(const double normal[3]) { 00092 return this->TransformDoubleVector(normal[0],normal[1],normal[2]); }; 00094 00096 00098 void TransformVector(const float in[3], float out[3]) { 00099 this->Update(); this->InternalTransformVector(in,out); }; 00101 00103 00105 void TransformVector(const double in[3], double out[3]) { 00106 this->Update(); this->InternalTransformVector(in,out); }; 00108 00110 00112 float *TransformFloatVector(float x, float y, float z) { 00113 this->InternalFloatPoint[0] = x; 00114 this->InternalFloatPoint[1] = y; 00115 this->InternalFloatPoint[2] = z; 00116 this->TransformVector(this->InternalFloatPoint,this->InternalFloatPoint); 00117 return this->InternalFloatPoint; }; 00118 float *TransformFloatVector(const float vec[3]) { 00119 return this->TransformFloatVector(vec[0],vec[1],vec[2]); }; 00121 00123 00125 double *TransformDoubleVector(double x, double y, double z) { 00126 this->InternalDoublePoint[0] = x; 00127 this->InternalDoublePoint[1] = y; 00128 this->InternalDoublePoint[2] = z; 00129 this->TransformVector(this->InternalDoublePoint,this->InternalDoublePoint); 00130 return this->InternalDoublePoint; }; 00131 double *TransformDoubleVector(const double vec[3]) { 00132 return this->TransformDoubleVector(vec[0],vec[1],vec[2]); }; 00134 00137 void TransformPoints(vtkPoints *inPts, vtkPoints *outPts); 00138 00141 virtual void TransformNormals(vtkDataArray *inNms, vtkDataArray *outNms); 00142 00145 virtual void TransformVectors(vtkDataArray *inVrs, vtkDataArray *outVrs); 00146 00148 00150 void TransformPointsNormalsVectors(vtkPoints *inPts, 00151 vtkPoints *outPts, 00152 vtkDataArray *inNms, 00153 vtkDataArray *outNms, 00154 vtkDataArray *inVrs, 00155 vtkDataArray *outVrs); 00157 00159 00161 vtkLinearTransform *GetLinearInverse() 00162 { 00163 return static_cast<vtkLinearTransform *>(this->GetInverse()); 00164 } 00166 00168 00170 void InternalTransformPoint(const float in[3], float out[3]); 00171 void InternalTransformPoint(const double in[3], double out[3]); 00173 00175 00177 virtual void InternalTransformNormal(const float in[3], float out[3]); 00178 virtual void InternalTransformNormal(const double in[3], double out[3]); 00180 00182 00184 virtual void InternalTransformVector(const float in[3], float out[3]); 00185 virtual void InternalTransformVector(const double in[3], double out[3]); 00187 00189 00191 void InternalTransformDerivative(const float in[3], float out[3], 00192 float derivative[3][3]); 00193 void InternalTransformDerivative(const double in[3], double out[3], 00194 double derivative[3][3]); 00196 00197 protected: 00198 vtkLinearTransform() {}; 00199 ~vtkLinearTransform() {}; 00200 private: 00201 vtkLinearTransform(const vtkLinearTransform&); // Not implemented. 00202 void operator=(const vtkLinearTransform&); // Not implemented. 00203 }; 00204 00205 #endif 00206 00207 00208 00209 00210