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 =========================================================================*/
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