VTK
/Users/kitware/Dashboards/MyTests/VTK_BLD_Release_docs/Utilities/Doxygen/dox/Filters/Core/vtkTubeFilter.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkTubeFilter.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 =========================================================================*/
00059 #ifndef vtkTubeFilter_h
00060 #define vtkTubeFilter_h
00061 
00062 #include "vtkFiltersCoreModule.h" // For export macro
00063 #include "vtkPolyDataAlgorithm.h"
00064 
00065 #define VTK_VARY_RADIUS_OFF 0
00066 #define VTK_VARY_RADIUS_BY_SCALAR 1
00067 #define VTK_VARY_RADIUS_BY_VECTOR 2
00068 #define VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR 3
00069 
00070 #define VTK_TCOORDS_OFF                    0
00071 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00072 #define VTK_TCOORDS_FROM_LENGTH            2
00073 #define VTK_TCOORDS_FROM_SCALARS           3
00074 
00075 class vtkCellArray;
00076 class vtkCellData;
00077 class vtkDataArray;
00078 class vtkFloatArray;
00079 class vtkPointData;
00080 class vtkPoints;
00081 
00082 class VTKFILTERSCORE_EXPORT vtkTubeFilter : public vtkPolyDataAlgorithm
00083 {
00084 public:
00085   vtkTypeMacro(vtkTubeFilter,vtkPolyDataAlgorithm);
00086   void PrintSelf(ostream& os, vtkIndent indent);
00087 
00090   static vtkTubeFilter *New();
00091 
00093 
00095   vtkSetClampMacro(Radius,double,0.0,VTK_DOUBLE_MAX);
00096   vtkGetMacro(Radius,double);
00098 
00100 
00101   vtkSetClampMacro(VaryRadius,int,
00102                    VTK_VARY_RADIUS_OFF,VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR);
00103   vtkGetMacro(VaryRadius,int);
00104   void SetVaryRadiusToVaryRadiusOff()
00105     {this->SetVaryRadius(VTK_VARY_RADIUS_OFF);};
00106   void SetVaryRadiusToVaryRadiusByScalar()
00107     {this->SetVaryRadius(VTK_VARY_RADIUS_BY_SCALAR);};
00108   void SetVaryRadiusToVaryRadiusByVector()
00109     {this->SetVaryRadius(VTK_VARY_RADIUS_BY_VECTOR);};
00110   void SetVaryRadiusToVaryRadiusByAbsoluteScalar()
00111     {this->SetVaryRadius(VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR);};
00112   const char *GetVaryRadiusAsString();
00114 
00116 
00118   vtkSetClampMacro(NumberOfSides,int,3,VTK_INT_MAX);
00119   vtkGetMacro(NumberOfSides,int);
00121 
00123 
00125   vtkSetMacro(RadiusFactor,double);
00126   vtkGetMacro(RadiusFactor,double);
00128 
00130 
00132   vtkSetVector3Macro(DefaultNormal,double);
00133   vtkGetVectorMacro(DefaultNormal,double,3);
00135 
00137 
00139   vtkSetMacro(UseDefaultNormal,int);
00140   vtkGetMacro(UseDefaultNormal,int);
00141   vtkBooleanMacro(UseDefaultNormal,int);
00143 
00145 
00148   vtkSetMacro(SidesShareVertices, int);
00149   vtkGetMacro(SidesShareVertices, int);
00150   vtkBooleanMacro(SidesShareVertices, int);
00152 
00154 
00156   vtkSetMacro(Capping,int);
00157   vtkGetMacro(Capping,int);
00158   vtkBooleanMacro(Capping,int);
00160 
00162 
00164   vtkSetClampMacro(OnRatio,int,1,VTK_INT_MAX);
00165   vtkGetMacro(OnRatio,int);
00167 
00169 
00172   vtkSetClampMacro(Offset,int,0,VTK_INT_MAX);
00173   vtkGetMacro(Offset,int);
00175 
00177 
00181   vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00182                    VTK_TCOORDS_FROM_SCALARS);
00183   vtkGetMacro(GenerateTCoords,int);
00184   void SetGenerateTCoordsToOff()
00185     {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00186   void SetGenerateTCoordsToNormalizedLength()
00187     {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00188   void SetGenerateTCoordsToUseLength()
00189     {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00190   void SetGenerateTCoordsToUseScalars()
00191     {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00192   const char *GetGenerateTCoordsAsString();
00194 
00196 
00200   vtkSetClampMacro(TextureLength,double,0.000001,VTK_INT_MAX);
00201   vtkGetMacro(TextureLength,double);
00203 
00205 
00208   vtkSetMacro(OutputPointsPrecision,int);
00209   vtkGetMacro(OutputPointsPrecision,int);
00211 
00212 protected:
00213   vtkTubeFilter();
00214   ~vtkTubeFilter() {}
00215 
00216   // Usual data generation method
00217   int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00218 
00219   double Radius; //minimum radius of tube
00220   int VaryRadius; //controls radius variation
00221   int NumberOfSides; //number of sides to create tube
00222   double RadiusFactor; //maxium allowablew radius
00223   double DefaultNormal[3];
00224   int UseDefaultNormal;
00225   int SidesShareVertices;
00226   int Capping; //control whether tubes are capped
00227   int OnRatio; //control the generation of the sides of the tube
00228   int Offset;  //control the generation of the sides
00229   int GenerateTCoords; //control texture coordinate generation
00230   int OutputPointsPrecision;
00231   double TextureLength; //this length is mapped to [0,1) texture space
00232 
00233   // Helper methods
00234   int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00235                      vtkPoints *inPts, vtkPoints *newPts,
00236                      vtkPointData *pd, vtkPointData *outPD,
00237                      vtkFloatArray *newNormals, vtkDataArray *inScalars,
00238                      double range[2], vtkDataArray *inVectors, double maxNorm,
00239                      vtkDataArray *inNormals);
00240   void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00241                       vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00242                       vtkCellArray *newStrips);
00243   void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00244                              vtkPoints *inPts, vtkDataArray *inScalars,
00245                             vtkFloatArray *newTCoords);
00246   vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00247 
00248   // Helper data members
00249   double Theta;
00250 
00251 private:
00252   vtkTubeFilter(const vtkTubeFilter&);  // Not implemented.
00253   void operator=(const vtkTubeFilter&);  // Not implemented.
00254 };
00255 
00256 #endif