VTK
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 
00204 protected:
00205   vtkTubeFilter();
00206   ~vtkTubeFilter() {}
00207 
00208   // Usual data generation method
00209   int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00210 
00211   double Radius; //minimum radius of tube
00212   int VaryRadius; //controls radius variation
00213   int NumberOfSides; //number of sides to create tube
00214   double RadiusFactor; //maxium allowablew radius
00215   double DefaultNormal[3];
00216   int UseDefaultNormal;
00217   int SidesShareVertices;
00218   int Capping; //control whether tubes are capped
00219   int OnRatio; //control the generation of the sides of the tube
00220   int Offset;  //control the generation of the sides
00221   int GenerateTCoords; //control texture coordinate generation
00222   double TextureLength; //this length is mapped to [0,1) texture space
00223 
00224   // Helper methods
00225   int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00226                      vtkPoints *inPts, vtkPoints *newPts,
00227                      vtkPointData *pd, vtkPointData *outPD,
00228                      vtkFloatArray *newNormals, vtkDataArray *inScalars,
00229                      double range[2], vtkDataArray *inVectors, double maxNorm,
00230                      vtkDataArray *inNormals);
00231   void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00232                       vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00233                       vtkCellArray *newStrips);
00234   void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00235                              vtkPoints *inPts, vtkDataArray *inScalars,
00236                             vtkFloatArray *newTCoords);
00237   vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00238 
00239   // Helper data members
00240   double Theta;
00241 
00242 private:
00243   vtkTubeFilter(const vtkTubeFilter&);  // Not implemented.
00244   void operator=(const vtkTubeFilter&);  // Not implemented.
00245 };
00246 
00247 #endif