VTK
dox/Common/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 =========================================================================*/
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