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 "vtkHomogeneousTransform.h" 00028 00029 class VTK_COMMON_EXPORT vtkLinearTransform : public vtkHomogeneousTransform 00030 { 00031 public: 00032 00033 vtkTypeMacro(vtkLinearTransform,vtkHomogeneousTransform); 00034 void PrintSelf(ostream& os, vtkIndent indent); 00035 00037 00039 void TransformNormal(const float in[3], float out[3]) { 00040 this->Update(); this->InternalTransformNormal(in,out); }; 00042 00044 00046 void TransformNormal(const double in[3], double out[3]) { 00047 this->Update(); this->InternalTransformNormal(in,out); }; 00049 00051 00053 double *TransformNormal(double x, double y, double z) { 00054 return this->TransformDoubleNormal(x,y,z); } 00055 double *TransformNormal(const double normal[3]) { 00056 return this->TransformDoubleNormal(normal[0],normal[1],normal[2]); }; 00058 00060 00062 float *TransformFloatNormal(float x, float y, float z) { 00063 this->InternalFloatPoint[0] = x; 00064 this->InternalFloatPoint[1] = y; 00065 this->InternalFloatPoint[2] = z; 00066 this->TransformNormal(this->InternalFloatPoint,this->InternalFloatPoint); 00067 return this->InternalFloatPoint; }; 00068 float *TransformFloatNormal(const float normal[3]) { 00069 return this->TransformFloatNormal(normal[0],normal[1],normal[2]); }; 00071 00073 00075 double *TransformDoubleNormal(double x, double y, double z) { 00076 this->InternalDoublePoint[0] = x; 00077 this->InternalDoublePoint[1] = y; 00078 this->InternalDoublePoint[2] = z; 00079 this->TransformNormal(this->InternalDoublePoint,this->InternalDoublePoint); 00080 return this->InternalDoublePoint; }; 00081 double *TransformDoubleNormal(const double normal[3]) { 00082 return this->TransformDoubleNormal(normal[0],normal[1],normal[2]); }; 00084 00086 00088 double *TransformVector(double x, double y, double z) { 00089 return this->TransformDoubleVector(x,y,z); } 00090 double *TransformVector(const double normal[3]) { 00091 return this->TransformDoubleVector(normal[0],normal[1],normal[2]); }; 00093 00095 00097 void TransformVector(const float in[3], float out[3]) { 00098 this->Update(); this->InternalTransformVector(in,out); }; 00100 00102 00104 void TransformVector(const double in[3], double out[3]) { 00105 this->Update(); this->InternalTransformVector(in,out); }; 00107 00109 00111 float *TransformFloatVector(float x, float y, float z) { 00112 this->InternalFloatPoint[0] = x; 00113 this->InternalFloatPoint[1] = y; 00114 this->InternalFloatPoint[2] = z; 00115 this->TransformVector(this->InternalFloatPoint,this->InternalFloatPoint); 00116 return this->InternalFloatPoint; }; 00117 float *TransformFloatVector(const float vec[3]) { 00118 return this->TransformFloatVector(vec[0],vec[1],vec[2]); }; 00120 00122 00124 double *TransformDoubleVector(double x, double y, double z) { 00125 this->InternalDoublePoint[0] = x; 00126 this->InternalDoublePoint[1] = y; 00127 this->InternalDoublePoint[2] = z; 00128 this->TransformVector(this->InternalDoublePoint,this->InternalDoublePoint); 00129 return this->InternalDoublePoint; }; 00130 double *TransformDoubleVector(const double vec[3]) { 00131 return this->TransformDoubleVector(vec[0],vec[1],vec[2]); }; 00133 00136 void TransformPoints(vtkPoints *inPts, vtkPoints *outPts); 00137 00140 virtual void TransformNormals(vtkDataArray *inNms, vtkDataArray *outNms); 00141 00144 virtual void TransformVectors(vtkDataArray *inVrs, vtkDataArray *outVrs); 00145 00147 00149 void TransformPointsNormalsVectors(vtkPoints *inPts, 00150 vtkPoints *outPts, 00151 vtkDataArray *inNms, 00152 vtkDataArray *outNms, 00153 vtkDataArray *inVrs, 00154 vtkDataArray *outVrs); 00156 00158 00160 vtkLinearTransform *GetLinearInverse() 00161 { 00162 return static_cast<vtkLinearTransform *>(this->GetInverse()); 00163 } 00165 00167 00169 void InternalTransformPoint(const float in[3], float out[3]); 00170 void InternalTransformPoint(const double in[3], double out[3]); 00172 00174 00176 virtual void InternalTransformNormal(const float in[3], float out[3]); 00177 virtual void InternalTransformNormal(const double in[3], double out[3]); 00179 00181 00183 virtual void InternalTransformVector(const float in[3], float out[3]); 00184 virtual void InternalTransformVector(const double in[3], double out[3]); 00186 00188 00190 void InternalTransformDerivative(const float in[3], float out[3], 00191 float derivative[3][3]); 00192 void InternalTransformDerivative(const double in[3], double out[3], 00193 double derivative[3][3]); 00195 00196 protected: 00197 vtkLinearTransform() {}; 00198 ~vtkLinearTransform() {}; 00199 private: 00200 vtkLinearTransform(const vtkLinearTransform&); // Not implemented. 00201 void operator=(const vtkLinearTransform&); // Not implemented. 00202 }; 00203 00204 #endif 00205 00206 00207 00208 00209