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 =========================================================================*/ 00027 #ifndef __vtkLinearTransform_h 00028 #define __vtkLinearTransform_h 00029 00030 #include "vtkCommonTransformsModule.h" // For export macro 00031 #include "vtkHomogeneousTransform.h" 00032 00033 class VTKCOMMONTRANSFORMS_EXPORT vtkLinearTransform : public vtkHomogeneousTransform 00034 { 00035 public: 00036 00037 vtkTypeMacro(vtkLinearTransform,vtkHomogeneousTransform); 00038 void PrintSelf(ostream& os, vtkIndent indent); 00039 00041 00043 void TransformNormal(const float in[3], float out[3]) { 00044 this->Update(); this->InternalTransformNormal(in,out); }; 00046 00048 00050 void TransformNormal(const double in[3], double out[3]) { 00051 this->Update(); this->InternalTransformNormal(in,out); }; 00053 00055 00057 double *TransformNormal(double x, double y, double z) { 00058 return this->TransformDoubleNormal(x,y,z); } 00059 double *TransformNormal(const double normal[3]) { 00060 return this->TransformDoubleNormal(normal[0],normal[1],normal[2]); }; 00062 00064 00066 float *TransformFloatNormal(float x, float y, float z) { 00067 this->InternalFloatPoint[0] = x; 00068 this->InternalFloatPoint[1] = y; 00069 this->InternalFloatPoint[2] = z; 00070 this->TransformNormal(this->InternalFloatPoint,this->InternalFloatPoint); 00071 return this->InternalFloatPoint; }; 00072 float *TransformFloatNormal(const float normal[3]) { 00073 return this->TransformFloatNormal(normal[0],normal[1],normal[2]); }; 00075 00077 00079 double *TransformDoubleNormal(double x, double y, double z) { 00080 this->InternalDoublePoint[0] = x; 00081 this->InternalDoublePoint[1] = y; 00082 this->InternalDoublePoint[2] = z; 00083 this->TransformNormal(this->InternalDoublePoint,this->InternalDoublePoint); 00084 return this->InternalDoublePoint; }; 00085 double *TransformDoubleNormal(const double normal[3]) { 00086 return this->TransformDoubleNormal(normal[0],normal[1],normal[2]); }; 00088 00090 00092 double *TransformVector(double x, double y, double z) { 00093 return this->TransformDoubleVector(x,y,z); } 00094 double *TransformVector(const double normal[3]) { 00095 return this->TransformDoubleVector(normal[0],normal[1],normal[2]); }; 00097 00099 00101 void TransformVector(const float in[3], float out[3]) { 00102 this->Update(); this->InternalTransformVector(in,out); }; 00104 00106 00108 void TransformVector(const double in[3], double out[3]) { 00109 this->Update(); this->InternalTransformVector(in,out); }; 00111 00113 00115 float *TransformFloatVector(float x, float y, float z) { 00116 this->InternalFloatPoint[0] = x; 00117 this->InternalFloatPoint[1] = y; 00118 this->InternalFloatPoint[2] = z; 00119 this->TransformVector(this->InternalFloatPoint,this->InternalFloatPoint); 00120 return this->InternalFloatPoint; }; 00121 float *TransformFloatVector(const float vec[3]) { 00122 return this->TransformFloatVector(vec[0],vec[1],vec[2]); }; 00124 00126 00128 double *TransformDoubleVector(double x, double y, double z) { 00129 this->InternalDoublePoint[0] = x; 00130 this->InternalDoublePoint[1] = y; 00131 this->InternalDoublePoint[2] = z; 00132 this->TransformVector(this->InternalDoublePoint,this->InternalDoublePoint); 00133 return this->InternalDoublePoint; }; 00134 double *TransformDoubleVector(const double vec[3]) { 00135 return this->TransformDoubleVector(vec[0],vec[1],vec[2]); }; 00137 00140 void TransformPoints(vtkPoints *inPts, vtkPoints *outPts); 00141 00144 virtual void TransformNormals(vtkDataArray *inNms, vtkDataArray *outNms); 00145 00148 virtual void TransformVectors(vtkDataArray *inVrs, vtkDataArray *outVrs); 00149 00151 00153 void TransformPointsNormalsVectors(vtkPoints *inPts, 00154 vtkPoints *outPts, 00155 vtkDataArray *inNms, 00156 vtkDataArray *outNms, 00157 vtkDataArray *inVrs, 00158 vtkDataArray *outVrs); 00160 00162 00164 vtkLinearTransform *GetLinearInverse() 00165 { 00166 return static_cast<vtkLinearTransform *>(this->GetInverse()); 00167 } 00169 00171 00173 void InternalTransformPoint(const float in[3], float out[3]); 00174 void InternalTransformPoint(const double in[3], double out[3]); 00176 00178 00180 virtual void InternalTransformNormal(const float in[3], float out[3]); 00181 virtual void InternalTransformNormal(const double in[3], double out[3]); 00183 00185 00187 virtual void InternalTransformVector(const float in[3], float out[3]); 00188 virtual void InternalTransformVector(const double in[3], double out[3]); 00190 00192 00194 void InternalTransformDerivative(const float in[3], float out[3], 00195 float derivative[3][3]); 00196 void InternalTransformDerivative(const double in[3], double out[3], 00197 double derivative[3][3]); 00199 00200 protected: 00201 vtkLinearTransform() {} 00202 ~vtkLinearTransform() {} 00203 private: 00204 vtkLinearTransform(const vtkLinearTransform&); // Not implemented. 00205 void operator=(const vtkLinearTransform&); // Not implemented. 00206 }; 00207 00208 #endif 00209 00210 00211 00212 00213