00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00057 #ifndef __vtkRibbonFilter_h
00058 #define __vtkRibbonFilter_h
00059
00060 #include "vtkPolyDataToPolyDataFilter.h"
00061
00062 #define VTK_TCOORDS_OFF 0
00063 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00064 #define VTK_TCOORDS_FROM_LENGTH 2
00065 #define VTK_TCOORDS_FROM_SCALARS 3
00066
00067 class vtkCellArray;
00068 class vtkCellData;
00069 class vtkDataArray;
00070 class vtkFloatArray;
00071 class vtkPointData;
00072 class vtkPoints;
00073
00074 class VTK_GRAPHICS_EXPORT vtkRibbonFilter : public vtkPolyDataToPolyDataFilter
00075 {
00076 public:
00077 vtkTypeRevisionMacro(vtkRibbonFilter,vtkPolyDataToPolyDataFilter);
00078 void PrintSelf(ostream& os, vtkIndent indent);
00079
00082 static vtkRibbonFilter *New();
00083
00085
00087 vtkSetClampMacro(Width,float,0,VTK_LARGE_FLOAT);
00088 vtkGetMacro(Width,float);
00090
00092
00094 vtkSetClampMacro(Angle,float,0,360);
00095 vtkGetMacro(Angle,float);
00097
00099
00100 vtkSetMacro(VaryWidth,int);
00101 vtkGetMacro(VaryWidth,int);
00102 vtkBooleanMacro(VaryWidth,int);
00104
00106
00108 vtkSetMacro(WidthFactor,float);
00109 vtkGetMacro(WidthFactor,float);
00111
00113
00115 vtkSetVector3Macro(DefaultNormal,float);
00116 vtkGetVectorMacro(DefaultNormal,float,3);
00118
00120
00122 vtkSetMacro(UseDefaultNormal,int);
00123 vtkGetMacro(UseDefaultNormal,int);
00124 vtkBooleanMacro(UseDefaultNormal,int);
00126
00128
00130 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00131 VTK_TCOORDS_FROM_SCALARS);
00132 vtkGetMacro(GenerateTCoords,int);
00133 void SetGenerateTCoordsToOff()
00134 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00135 void SetGenerateTCoordsToNormalizedLength()
00136 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00137 void SetGenerateTCoordsToUseLength()
00138 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00139 void SetGenerateTCoordsToUseScalars()
00140 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00141 const char *GetGenerateTCoordsAsString();
00143
00145
00149 vtkSetClampMacro(TextureLength,float,0.000001,VTK_LARGE_INTEGER);
00150 vtkGetMacro(TextureLength,float);
00152
00153 protected:
00154 vtkRibbonFilter();
00155 ~vtkRibbonFilter();
00156
00157 void Execute();
00158 float Width;
00159 float Angle;
00160 int VaryWidth;
00161 float WidthFactor;
00162 float DefaultNormal[3];
00163 int UseDefaultNormal;
00164 int GenerateTCoords;
00165 float TextureLength;
00166
00167
00168 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00169 vtkPoints *inPts, vtkPoints *newPts,
00170 vtkPointData *pd, vtkPointData *outPD,
00171 vtkFloatArray *newNormals, vtkDataArray *inScalars,
00172 float range[2], vtkDataArray *inNormals);
00173 void GenerateStrip(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00174 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00175 vtkCellArray *newStrips);
00176 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00177 vtkPoints *inPts, vtkDataArray *inScalars,
00178 vtkFloatArray *newTCoords);
00179 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00180
00181
00182 float Theta;
00183
00184
00185
00186 char *InputVectorsSelection;
00187 vtkSetStringMacro(InputVectorsSelection);
00188
00189 private:
00190 vtkRibbonFilter(const vtkRibbonFilter&);
00191 void operator=(const vtkRibbonFilter&);
00192 };
00193
00194 #endif
00195
00196