VTK
dox/Common/Transforms/vtkLinearTransform.h
Go to the documentation of this file.
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