00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00045 #ifndef __vtkRibbonFilter_h
00046 #define __vtkRibbonFilter_h
00047
00048 #include "vtkPolyDataToPolyDataFilter.h"
00049
00050 #define VTK_TCOORDS_OFF 0
00051 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00052 #define VTK_TCOORDS_FROM_LENGTH 2
00053 #define VTK_TCOORDS_FROM_SCALARS 3
00054
00055 class vtkCellArray;
00056 class vtkCellData;
00057 class vtkDataArray;
00058 class vtkFloatArray;
00059 class vtkPointData;
00060 class vtkPoints;
00061
00062 class VTK_GRAPHICS_EXPORT vtkRibbonFilter : public vtkPolyDataToPolyDataFilter
00063 {
00064 public:
00065 vtkTypeRevisionMacro(vtkRibbonFilter,vtkPolyDataToPolyDataFilter);
00066 void PrintSelf(ostream& os, vtkIndent indent);
00067
00070 static vtkRibbonFilter *New();
00071
00073
00075 vtkSetClampMacro(Width,float,0,VTK_LARGE_FLOAT);
00076 vtkGetMacro(Width,float);
00078
00080
00082 vtkSetClampMacro(Angle,float,0,360);
00083 vtkGetMacro(Angle,float);
00085
00087
00088 vtkSetMacro(VaryWidth,int);
00089 vtkGetMacro(VaryWidth,int);
00090 vtkBooleanMacro(VaryWidth,int);
00092
00094
00096 vtkSetMacro(WidthFactor,float);
00097 vtkGetMacro(WidthFactor,float);
00099
00101
00103 vtkSetVector3Macro(DefaultNormal,float);
00104 vtkGetVectorMacro(DefaultNormal,float,3);
00106
00108
00110 vtkSetMacro(UseDefaultNormal,int);
00111 vtkGetMacro(UseDefaultNormal,int);
00112 vtkBooleanMacro(UseDefaultNormal,int);
00114
00116
00118 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00119 VTK_TCOORDS_FROM_SCALARS);
00120 vtkGetMacro(GenerateTCoords,int);
00121 void SetGenerateTCoordsToOff()
00122 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00123 void SetGenerateTCoordsToNormalizedLength()
00124 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00125 void SetGenerateTCoordsToUseLength()
00126 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00127 void SetGenerateTCoordsToUseScalars()
00128 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00129 const char *GetGenerateTCoordsAsString();
00131
00133
00137 vtkSetClampMacro(TextureLength,float,0.000001,VTK_LARGE_INTEGER);
00138 vtkGetMacro(TextureLength,float);
00140
00141 protected:
00142 vtkRibbonFilter();
00143 ~vtkRibbonFilter();
00144
00145 void Execute();
00146 float Width;
00147 float Angle;
00148 int VaryWidth;
00149 float WidthFactor;
00150 float DefaultNormal[3];
00151 int UseDefaultNormal;
00152 int GenerateTCoords;
00153 float TextureLength;
00154
00155
00156 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00157 vtkPoints *inPts, vtkPoints *newPts,
00158 vtkPointData *pd, vtkPointData *outPD,
00159 vtkFloatArray *newNormals, vtkDataArray *inScalars,
00160 float range[2], vtkDataArray *inNormals);
00161 void GenerateStrip(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00162 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00163 vtkCellArray *newStrips);
00164 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00165 vtkPoints *inPts, vtkDataArray *inScalars,
00166 vtkFloatArray *newTCoords);
00167 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00168
00169
00170 float Theta;
00171
00172
00173
00174 char *InputVectorsSelection;
00175 vtkSetStringMacro(InputVectorsSelection);
00176
00177 private:
00178 vtkRibbonFilter(const vtkRibbonFilter&);
00179 void operator=(const vtkRibbonFilter&);
00180 };
00181
00182 #endif
00183
00184