Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

vtkLinearTransform.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkLinearTransform.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00028 #ifndef __vtkLinearTransform_h
00029 #define __vtkLinearTransform_h
00030 
00031 #include "vtkHomogeneousTransform.h"
00032 
00033 class VTK_COMMON_EXPORT vtkLinearTransform : public vtkHomogeneousTransform
00034 {
00035 public:
00036 
00037   vtkTypeRevisionMacro(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     return (vtkLinearTransform *)this->GetInverse(); }; 
00167 
00169 
00171   void InternalTransformPoint(const float in[3], float out[3]);
00172   void InternalTransformPoint(const double in[3], double out[3]);
00174 
00176 
00178   virtual void InternalTransformNormal(const float in[3], float out[3]);
00179   virtual void InternalTransformNormal(const double in[3], double out[3]);
00181 
00183 
00185   virtual void InternalTransformVector(const float in[3], float out[3]);
00186   virtual void InternalTransformVector(const double in[3], double out[3]);
00188 
00190 
00192   void InternalTransformDerivative(const float in[3], float out[3],
00193                                    float derivative[3][3]);
00194   void InternalTransformDerivative(const double in[3], double out[3],
00195                                    double derivative[3][3]);
00197 
00198 protected:
00199   vtkLinearTransform() {};
00200   ~vtkLinearTransform() {};
00201 private:
00202   vtkLinearTransform(const vtkLinearTransform&);  // Not implemented.
00203   void operator=(const vtkLinearTransform&);  // Not implemented.
00204 };
00205 
00206 #endif
00207 
00208 
00209 
00210 
00211