VTK
dox/Graphics/vtkGlyph3D.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkGlyph3D.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 =========================================================================*/
00085 #ifndef __vtkGlyph3D_h
00086 #define __vtkGlyph3D_h
00087 
00088 #include "vtkPolyDataAlgorithm.h"
00089 
00090 #define VTK_SCALE_BY_SCALAR 0
00091 #define VTK_SCALE_BY_VECTOR 1
00092 #define VTK_SCALE_BY_VECTORCOMPONENTS 2
00093 #define VTK_DATA_SCALING_OFF 3
00094 
00095 #define VTK_COLOR_BY_SCALE  0
00096 #define VTK_COLOR_BY_SCALAR 1
00097 #define VTK_COLOR_BY_VECTOR 2
00098 
00099 #define VTK_USE_VECTOR 0
00100 #define VTK_USE_NORMAL 1
00101 #define VTK_VECTOR_ROTATION_OFF 2
00102 
00103 #define VTK_INDEXING_OFF 0
00104 #define VTK_INDEXING_BY_SCALAR 1
00105 #define VTK_INDEXING_BY_VECTOR 2
00106 
00107 class vtkTransform;
00108 
00109 class VTK_GRAPHICS_EXPORT vtkGlyph3D : public vtkPolyDataAlgorithm
00110 {
00111 public:
00112   vtkTypeMacro(vtkGlyph3D,vtkPolyDataAlgorithm);
00113   void PrintSelf(ostream& os, vtkIndent indent);
00114 
00119   static vtkGlyph3D *New();
00120 
00123   void SetSource(vtkPolyData *pd) {this->SetSource(0,pd);};
00124 
00127   void SetSource(int id, vtkPolyData *pd);
00128 
00130 
00133   void SetSourceConnection(int id, vtkAlgorithmOutput* algOutput);
00134   void SetSourceConnection(vtkAlgorithmOutput* algOutput)
00135     {
00136       this->SetSourceConnection(0, algOutput);
00137     }
00139 
00141   vtkPolyData *GetSource(int id=0);
00142 
00144 
00145   vtkSetMacro(Scaling,int);
00146   vtkBooleanMacro(Scaling,int);
00147   vtkGetMacro(Scaling,int);
00149 
00151 
00152   vtkSetMacro(ScaleMode,int);
00153   vtkGetMacro(ScaleMode,int);
00154   void SetScaleModeToScaleByScalar()
00155     {this->SetScaleMode(VTK_SCALE_BY_SCALAR);};
00156   void SetScaleModeToScaleByVector()
00157     {this->SetScaleMode(VTK_SCALE_BY_VECTOR);};
00158   void SetScaleModeToScaleByVectorComponents()
00159     {this->SetScaleMode(VTK_SCALE_BY_VECTORCOMPONENTS);};
00160   void SetScaleModeToDataScalingOff()
00161     {this->SetScaleMode(VTK_DATA_SCALING_OFF);};
00162   const char *GetScaleModeAsString();
00164 
00166 
00167   vtkSetMacro(ColorMode,int);
00168   vtkGetMacro(ColorMode,int);
00169   void SetColorModeToColorByScale()
00170     {this->SetColorMode(VTK_COLOR_BY_SCALE);};
00171   void SetColorModeToColorByScalar()
00172     {this->SetColorMode(VTK_COLOR_BY_SCALAR);};
00173   void SetColorModeToColorByVector()
00174     {this->SetColorMode(VTK_COLOR_BY_VECTOR);};
00175   const char *GetColorModeAsString();
00177 
00179 
00180   vtkSetMacro(ScaleFactor,double);
00181   vtkGetMacro(ScaleFactor,double);
00183 
00185 
00186   vtkSetVector2Macro(Range,double);
00187   vtkGetVectorMacro(Range,double,2);
00189 
00191 
00192   vtkSetMacro(Orient,int);
00193   vtkBooleanMacro(Orient,int);
00194   vtkGetMacro(Orient,int);
00196 
00198 
00200   vtkSetMacro(Clamping,int);
00201   vtkBooleanMacro(Clamping,int);
00202   vtkGetMacro(Clamping,int);
00204 
00206 
00207   vtkSetMacro(VectorMode,int);
00208   vtkGetMacro(VectorMode,int);
00209   void SetVectorModeToUseVector() {this->SetVectorMode(VTK_USE_VECTOR);};
00210   void SetVectorModeToUseNormal() {this->SetVectorMode(VTK_USE_NORMAL);};
00211   void SetVectorModeToVectorRotationOff()
00212     {this->SetVectorMode(VTK_VECTOR_ROTATION_OFF);};
00213   const char *GetVectorModeAsString();
00215 
00217 
00223   vtkSetMacro(IndexMode,int);
00224   vtkGetMacro(IndexMode,int);
00225   void SetIndexModeToScalar() {this->SetIndexMode(VTK_INDEXING_BY_SCALAR);};
00226   void SetIndexModeToVector() {this->SetIndexMode(VTK_INDEXING_BY_VECTOR);};
00227   void SetIndexModeToOff() {this->SetIndexMode(VTK_INDEXING_OFF);};
00228   const char *GetIndexModeAsString();
00230 
00232 
00236   vtkSetMacro(GeneratePointIds,int);
00237   vtkGetMacro(GeneratePointIds,int);
00238   vtkBooleanMacro(GeneratePointIds,int);
00240 
00242 
00245   vtkSetStringMacro(PointIdsName);
00246   vtkGetStringMacro(PointIdsName);
00248 
00250 
00253   vtkSetMacro(FillCellData,int);
00254   vtkGetMacro(FillCellData,int);
00255   vtkBooleanMacro(FillCellData,int);
00257 
00260   virtual int IsPointVisible(vtkDataSet*, vtkIdType) {return 1;};
00261 
00263 
00266   void SetSourceTransform(vtkTransform*);
00267   vtkGetObjectMacro(SourceTransform, vtkTransform);
00269 
00271   virtual unsigned long GetMTime();
00272 
00273 protected:
00274   vtkGlyph3D();
00275   ~vtkGlyph3D();
00276 
00277   virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00278   virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00279   virtual int FillInputPortInformation(int, vtkInformation *);
00280 
00281   vtkPolyData* GetSource(int idx, vtkInformationVector *sourceInfo);
00282 
00283   vtkPolyData **Source; // Geometry to copy to each point
00284   int Scaling; // Determine whether scaling of geometry is performed
00285   int ScaleMode; // Scale by scalar value or vector magnitude
00286   int ColorMode; // new scalars based on scale, scalar or vector
00287   double ScaleFactor; // Scale factor to use to scale geometry
00288   double Range[2]; // Range to use to perform scalar scaling
00289   int Orient; // boolean controls whether to "orient" data
00290   int VectorMode; // Orient/scale via normal or via vector data
00291   int Clamping; // whether to clamp scale factor
00292   int IndexMode; // what to use to index into glyph table
00293   int GeneratePointIds; // produce input points ids for each output point
00294   int FillCellData; // whether to fill output cell data
00295   char *PointIdsName;
00296   vtkTransform* SourceTransform;
00297 
00298 private:
00299   vtkGlyph3D(const vtkGlyph3D&);  // Not implemented.
00300   void operator=(const vtkGlyph3D&);  // Not implemented.
00301 };
00302 
00304 inline const char *vtkGlyph3D::GetScaleModeAsString(void)
00305 {
00306   if ( this->ScaleMode == VTK_SCALE_BY_SCALAR )
00307     {
00308     return "ScaleByScalar";
00309     }
00310   else if ( this->ScaleMode == VTK_SCALE_BY_VECTOR ) 
00311     {
00312     return "ScaleByVector";
00313     }
00314   else 
00315     {
00316     return "DataScalingOff";
00317     }
00318 }
00319 
00321 inline const char *vtkGlyph3D::GetColorModeAsString(void)
00322 {
00323   if ( this->ColorMode == VTK_COLOR_BY_SCALAR )
00324     {
00325     return "ColorByScalar";
00326     }
00327   else if ( this->ColorMode == VTK_COLOR_BY_VECTOR ) 
00328     {
00329     return "ColorByVector";
00330     }
00331   else 
00332     {
00333     return "ColorByScale";
00334     }
00335 }
00336 
00338 inline const char *vtkGlyph3D::GetVectorModeAsString(void)
00339 {
00340   if ( this->VectorMode == VTK_USE_VECTOR) 
00341     {
00342     return "UseVector";
00343     }
00344   else if ( this->VectorMode == VTK_USE_NORMAL) 
00345     {
00346     return "UseNormal";
00347     }
00348   else 
00349     {
00350     return "VectorRotationOff";
00351     }
00352 }
00353 
00355 inline const char *vtkGlyph3D::GetIndexModeAsString(void)
00356 {
00357   if ( this->IndexMode == VTK_INDEXING_OFF) 
00358     {
00359     return "IndexingOff";
00360     }
00361   else if ( this->IndexMode == VTK_INDEXING_BY_SCALAR) 
00362     {
00363     return "IndexingByScalar";
00364     }
00365   else 
00366     {
00367     return "IndexingByVector";
00368     }
00369 }
00370 
00371 #endif