00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00056 #ifndef __vtkTubeFilter_h
00057 #define __vtkTubeFilter_h
00058
00059 #include "vtkPolyDataAlgorithm.h"
00060
00061 #define VTK_VARY_RADIUS_OFF 0
00062 #define VTK_VARY_RADIUS_BY_SCALAR 1
00063 #define VTK_VARY_RADIUS_BY_VECTOR 2
00064 #define VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR 3
00065
00066 #define VTK_TCOORDS_OFF 0
00067 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00068 #define VTK_TCOORDS_FROM_LENGTH 2
00069 #define VTK_TCOORDS_FROM_SCALARS 3
00070
00071 class vtkCellArray;
00072 class vtkCellData;
00073 class vtkDataArray;
00074 class vtkFloatArray;
00075 class vtkPointData;
00076 class vtkPoints;
00077
00078 class VTK_GRAPHICS_EXPORT vtkTubeFilter : public vtkPolyDataAlgorithm
00079 {
00080 public:
00081 vtkTypeRevisionMacro(vtkTubeFilter,vtkPolyDataAlgorithm);
00082 void PrintSelf(ostream& os, vtkIndent indent);
00083
00086 static vtkTubeFilter *New();
00087
00089
00091 vtkSetClampMacro(Radius,double,0.0,VTK_DOUBLE_MAX);
00092 vtkGetMacro(Radius,double);
00094
00096
00097 vtkSetClampMacro(VaryRadius,int,
00098 VTK_VARY_RADIUS_OFF,VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR);
00099 vtkGetMacro(VaryRadius,int);
00100 void SetVaryRadiusToVaryRadiusOff()
00101 {this->SetVaryRadius(VTK_VARY_RADIUS_OFF);};
00102 void SetVaryRadiusToVaryRadiusByScalar()
00103 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_SCALAR);};
00104 void SetVaryRadiusToVaryRadiusByVector()
00105 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_VECTOR);};
00106 void SetVaryRadiusToVaryRadiusByAbsoluteScalar()
00107 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR);};
00108 const char *GetVaryRadiusAsString();
00110
00112
00114 vtkSetClampMacro(NumberOfSides,int,3,VTK_LARGE_INTEGER);
00115 vtkGetMacro(NumberOfSides,int);
00117
00119
00121 vtkSetMacro(RadiusFactor,double);
00122 vtkGetMacro(RadiusFactor,double);
00124
00126
00128 vtkSetVector3Macro(DefaultNormal,double);
00129 vtkGetVectorMacro(DefaultNormal,double,3);
00131
00133
00135 vtkSetMacro(UseDefaultNormal,int);
00136 vtkGetMacro(UseDefaultNormal,int);
00137 vtkBooleanMacro(UseDefaultNormal,int);
00139
00141
00144 vtkSetMacro(SidesShareVertices, int);
00145 vtkGetMacro(SidesShareVertices, int);
00146 vtkBooleanMacro(SidesShareVertices, int);
00148
00150
00151 vtkSetMacro(Capping,int);
00152 vtkGetMacro(Capping,int);
00153 vtkBooleanMacro(Capping,int);
00155
00157
00159 vtkSetClampMacro(OnRatio,int,1,VTK_LARGE_INTEGER);
00160 vtkGetMacro(OnRatio,int);
00162
00164
00167 vtkSetClampMacro(Offset,int,0,VTK_LARGE_INTEGER);
00168 vtkGetMacro(Offset,int);
00170
00172
00176 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00177 VTK_TCOORDS_FROM_SCALARS);
00178 vtkGetMacro(GenerateTCoords,int);
00179 void SetGenerateTCoordsToOff()
00180 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00181 void SetGenerateTCoordsToNormalizedLength()
00182 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00183 void SetGenerateTCoordsToUseLength()
00184 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00185 void SetGenerateTCoordsToUseScalars()
00186 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00187 const char *GetGenerateTCoordsAsString();
00189
00191
00195 vtkSetClampMacro(TextureLength,double,0.000001,VTK_LARGE_INTEGER);
00196 vtkGetMacro(TextureLength,double);
00198
00199 protected:
00200 vtkTubeFilter();
00201 ~vtkTubeFilter() {}
00202
00203
00204 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00205
00206 double Radius;
00207 int VaryRadius;
00208 int NumberOfSides;
00209 double RadiusFactor;
00210 double DefaultNormal[3];
00211 int UseDefaultNormal;
00212 int SidesShareVertices;
00213 int Capping;
00214 int OnRatio;
00215 int Offset;
00216 int GenerateTCoords;
00217 double TextureLength;
00218
00219
00220 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00221 vtkPoints *inPts, vtkPoints *newPts,
00222 vtkPointData *pd, vtkPointData *outPD,
00223 vtkFloatArray *newNormals, vtkDataArray *inScalars,
00224 double range[2], vtkDataArray *inVectors, double maxNorm,
00225 vtkDataArray *inNormals);
00226 void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00227 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00228 vtkCellArray *newStrips);
00229 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00230 vtkPoints *inPts, vtkDataArray *inScalars,
00231 vtkFloatArray *newTCoords);
00232 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00233
00234
00235 double Theta;
00236
00237 private:
00238 vtkTubeFilter(const vtkTubeFilter&);
00239 void operator=(const vtkTubeFilter&);
00240 };
00241
00242 #endif