00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00060 #ifndef __vtkTubeFilter_h
00061 #define __vtkTubeFilter_h
00062
00063 #include "vtkPolyDataToPolyDataFilter.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
00069 #define VTK_TCOORDS_OFF 0
00070 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00071 #define VTK_TCOORDS_FROM_LENGTH 2
00072 #define VTK_TCOORDS_FROM_SCALARS 3
00073
00074 class vtkCellArray;
00075 class vtkCellData;
00076 class vtkDataArray;
00077 class vtkFloatArray;
00078 class vtkPointData;
00079 class vtkPoints;
00080
00081 class VTK_GRAPHICS_EXPORT vtkTubeFilter : public vtkPolyDataToPolyDataFilter
00082 {
00083 public:
00084 vtkTypeRevisionMacro(vtkTubeFilter,vtkPolyDataToPolyDataFilter);
00085 void PrintSelf(ostream& os, vtkIndent indent);
00086
00089 static vtkTubeFilter *New();
00090
00092
00094 vtkSetClampMacro(Radius,float,0.0,VTK_LARGE_FLOAT);
00095 vtkGetMacro(Radius,float);
00097
00099
00100 vtkSetClampMacro(VaryRadius,int,
00101 VTK_VARY_RADIUS_OFF,VTK_VARY_RADIUS_BY_VECTOR);
00102 vtkGetMacro(VaryRadius,int);
00103 void SetVaryRadiusToVaryRadiusOff()
00104 {this->SetVaryRadius(VTK_VARY_RADIUS_OFF);};
00105 void SetVaryRadiusToVaryRadiusByScalar()
00106 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_SCALAR);};
00107 void SetVaryRadiusToVaryRadiusByVector()
00108 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_VECTOR);};
00109 const char *GetVaryRadiusAsString();
00111
00113
00115 vtkSetClampMacro(NumberOfSides,int,3,VTK_LARGE_INTEGER);
00116 vtkGetMacro(NumberOfSides,int);
00118
00120
00122 vtkSetMacro(RadiusFactor,float);
00123 vtkGetMacro(RadiusFactor,float);
00125
00127
00129 vtkSetVector3Macro(DefaultNormal,float);
00130 vtkGetVectorMacro(DefaultNormal,float,3);
00132
00134
00136 vtkSetMacro(UseDefaultNormal,int);
00137 vtkGetMacro(UseDefaultNormal,int);
00138 vtkBooleanMacro(UseDefaultNormal,int);
00140
00142
00145 vtkSetMacro(SidesShareVertices, int);
00146 vtkGetMacro(SidesShareVertices, int);
00147 vtkBooleanMacro(SidesShareVertices, int);
00149
00151
00152 vtkSetMacro(Capping,int);
00153 vtkGetMacro(Capping,int);
00154 vtkBooleanMacro(Capping,int);
00156
00158
00160 vtkSetClampMacro(OnRatio,int,1,VTK_LARGE_INTEGER);
00161 vtkGetMacro(OnRatio,int);
00163
00165
00168 vtkSetClampMacro(Offset,int,0,VTK_LARGE_INTEGER);
00169 vtkGetMacro(Offset,int);
00171
00173
00177 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00178 VTK_TCOORDS_FROM_SCALARS);
00179 vtkGetMacro(GenerateTCoords,int);
00180 void SetGenerateTCoordsToOff()
00181 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00182 void SetGenerateTCoordsToNormalizedLength()
00183 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00184 void SetGenerateTCoordsToUseLength()
00185 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00186 void SetGenerateTCoordsToUseScalars()
00187 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00188 const char *GetGenerateTCoordsAsString();
00190
00192
00196 vtkSetClampMacro(TextureLength,float,0.000001,VTK_LARGE_INTEGER);
00197 vtkGetMacro(TextureLength,float);
00199
00200 protected:
00201 vtkTubeFilter();
00202 ~vtkTubeFilter() {}
00203
00204
00205 void Execute();
00206
00207 float Radius;
00208 int VaryRadius;
00209 int NumberOfSides;
00210 float RadiusFactor;
00211 float DefaultNormal[3];
00212 int UseDefaultNormal;
00213 int SidesShareVertices;
00214 int Capping;
00215 int OnRatio;
00216 int Offset;
00217 int GenerateTCoords;
00218 float TextureLength;
00219
00220
00221 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00222 vtkPoints *inPts, vtkPoints *newPts,
00223 vtkPointData *pd, vtkPointData *outPD,
00224 vtkFloatArray *newNormals, vtkDataArray *inScalars,
00225 float range[2], vtkDataArray *inVectors, float maxNorm,
00226 vtkDataArray *inNormals);
00227 void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00228 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00229 vtkCellArray *newStrips);
00230 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00231 vtkPoints *inPts, vtkDataArray *inScalars,
00232 vtkFloatArray *newTCoords);
00233 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00234
00235
00236 float Theta;
00237
00238 private:
00239 vtkTubeFilter(const vtkTubeFilter&);
00240 void operator=(const vtkTubeFilter&);
00241 };
00242
00243 #endif