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
00081 vtkSetMacro(VaryWidth,int);
00082 vtkGetMacro(VaryWidth,int);
00083 vtkBooleanMacro(VaryWidth,int);
00085
00087
00089 vtkSetMacro(WidthFactor,double);
00090 vtkGetMacro(WidthFactor,double);
00092
00094
00096 vtkSetVector3Macro(DefaultNormal,double);
00097 vtkGetVectorMacro(DefaultNormal,double,3);
00099
00101
00103 vtkSetMacro(UseDefaultNormal,int);
00104 vtkGetMacro(UseDefaultNormal,int);
00105 vtkBooleanMacro(UseDefaultNormal,int);
00107
00109
00111 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00112 VTK_TCOORDS_FROM_SCALARS);
00113 vtkGetMacro(GenerateTCoords,int);
00114 void SetGenerateTCoordsToOff()
00115 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00116 void SetGenerateTCoordsToNormalizedLength()
00117 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00118 void SetGenerateTCoordsToUseLength()
00119 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00120 void SetGenerateTCoordsToUseScalars()
00121 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00122 const char *GetGenerateTCoordsAsString();
00124
00126
00130 vtkSetClampMacro(TextureLength,double,0.000001,VTK_LARGE_INTEGER);
00131 vtkGetMacro(TextureLength,double);
00133
00134 protected:
00135 vtkRibbonFilter();
00136 ~vtkRibbonFilter();
00137
00138 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00139 double Width;
00140 double Angle;
00141 int VaryWidth;
00142 double WidthFactor;
00143 double DefaultNormal[3];
00144 int UseDefaultNormal;
00145 int GenerateTCoords;
00146 double TextureLength;
00147
00148
00149 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00150 vtkPoints *inPts, vtkPoints *newPts,
00151 vtkPointData *pd, vtkPointData *outPD,
00152 vtkFloatArray *newNormals, vtkDataArray *inScalars,
00153 double range[2], vtkDataArray *inNormals);
00154 void GenerateStrip(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00155 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00156 vtkCellArray *newStrips);
00157 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00158 vtkPoints *inPts, vtkDataArray *inScalars,
00159 vtkFloatArray *newTCoords);
00160 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00161
00162
00163 double Theta;
00164
00165 private:
00166 vtkRibbonFilter(const vtkRibbonFilter&);
00167 void operator=(const vtkRibbonFilter&);
00168 };
00169
00170 #endif