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