00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00038 #ifndef __vtkRibbonFilter_h
00039 #define __vtkRibbonFilter_h
00040
00041 #include "vtkPolyDataAlgorithm.h"
00042
00043 #define VTK_TCOORDS_OFF 0
00044 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00045 #define VTK_TCOORDS_FROM_LENGTH 2
00046 #define VTK_TCOORDS_FROM_SCALARS 3
00047
00048 class vtkCellArray;
00049 class vtkCellData;
00050 class vtkDataArray;
00051 class vtkFloatArray;
00052 class vtkPointData;
00053 class vtkPoints;
00054
00055 class VTK_GRAPHICS_EXPORT vtkRibbonFilter : public vtkPolyDataAlgorithm
00056 {
00057 public:
00058 vtkTypeRevisionMacro(vtkRibbonFilter,vtkPolyDataAlgorithm);
00059 void PrintSelf(ostream& os, vtkIndent indent);
00060
00063 static vtkRibbonFilter *New();
00064
00066
00068 vtkSetClampMacro(Width,double,0,VTK_DOUBLE_MAX);
00069 vtkGetMacro(Width,double);
00071
00073
00075 vtkSetClampMacro(Angle,double,0,360);
00076 vtkGetMacro(Angle,double);
00078
00080
00082 vtkSetMacro(VaryWidth,int);
00083 vtkGetMacro(VaryWidth,int);
00084 vtkBooleanMacro(VaryWidth,int);
00086
00088
00090 vtkSetMacro(WidthFactor,double);
00091 vtkGetMacro(WidthFactor,double);
00093
00095
00097 vtkSetVector3Macro(DefaultNormal,double);
00098 vtkGetVectorMacro(DefaultNormal,double,3);
00100
00102
00104 vtkSetMacro(UseDefaultNormal,int);
00105 vtkGetMacro(UseDefaultNormal,int);
00106 vtkBooleanMacro(UseDefaultNormal,int);
00108
00110
00112 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00113 VTK_TCOORDS_FROM_SCALARS);
00114 vtkGetMacro(GenerateTCoords,int);
00115 void SetGenerateTCoordsToOff()
00116 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00117 void SetGenerateTCoordsToNormalizedLength()
00118 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00119 void SetGenerateTCoordsToUseLength()
00120 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00121 void SetGenerateTCoordsToUseScalars()
00122 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00123 const char *GetGenerateTCoordsAsString();
00125
00127
00131 vtkSetClampMacro(TextureLength,double,0.000001,VTK_LARGE_INTEGER);
00132 vtkGetMacro(TextureLength,double);
00134
00135 protected:
00136 vtkRibbonFilter();
00137 ~vtkRibbonFilter();
00138
00139 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00140 double Width;
00141 double Angle;
00142 int VaryWidth;
00143 double WidthFactor;
00144 double DefaultNormal[3];
00145 int UseDefaultNormal;
00146 int GenerateTCoords;
00147 double TextureLength;
00148
00149
00150 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00151 vtkPoints *inPts, vtkPoints *newPts,
00152 vtkPointData *pd, vtkPointData *outPD,
00153 vtkFloatArray *newNormals, vtkDataArray *inScalars,
00154 double range[2], vtkDataArray *inNormals);
00155 void GenerateStrip(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00156 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00157 vtkCellArray *newStrips);
00158 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00159 vtkPoints *inPts, vtkDataArray *inScalars,
00160 vtkFloatArray *newTCoords);
00161 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00162
00163
00164 double Theta;
00165
00166 private:
00167 vtkRibbonFilter(const vtkRibbonFilter&);
00168 void operator=(const vtkRibbonFilter&);
00169 };
00170
00171 #endif