00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00041 #ifndef __vtkRibbonFilter_h
00042 #define __vtkRibbonFilter_h
00043
00044 #include "vtkPolyDataToPolyDataFilter.h"
00045
00046 #define VTK_TCOORDS_OFF 0
00047 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00048 #define VTK_TCOORDS_FROM_LENGTH 2
00049 #define VTK_TCOORDS_FROM_SCALARS 3
00050
00051 class vtkCellArray;
00052 class vtkCellData;
00053 class vtkDataArray;
00054 class vtkFloatArray;
00055 class vtkPointData;
00056 class vtkPoints;
00057
00058 class VTK_GRAPHICS_EXPORT vtkRibbonFilter : public vtkPolyDataToPolyDataFilter
00059 {
00060 public:
00061 vtkTypeRevisionMacro(vtkRibbonFilter,vtkPolyDataToPolyDataFilter);
00062 void PrintSelf(ostream& os, vtkIndent indent);
00063
00066 static vtkRibbonFilter *New();
00067
00069
00071 vtkSetClampMacro(Width,double,0,VTK_DOUBLE_MAX);
00072 vtkGetMacro(Width,double);
00074
00076
00078 vtkSetClampMacro(Angle,double,0,360);
00079 vtkGetMacro(Angle,double);
00081
00083
00084 vtkSetMacro(VaryWidth,int);
00085 vtkGetMacro(VaryWidth,int);
00086 vtkBooleanMacro(VaryWidth,int);
00088
00090
00092 vtkSetMacro(WidthFactor,double);
00093 vtkGetMacro(WidthFactor,double);
00095
00097
00099 vtkSetVector3Macro(DefaultNormal,double);
00100 vtkGetVectorMacro(DefaultNormal,double,3);
00102
00104
00106 vtkSetMacro(UseDefaultNormal,int);
00107 vtkGetMacro(UseDefaultNormal,int);
00108 vtkBooleanMacro(UseDefaultNormal,int);
00110
00112
00114 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00115 VTK_TCOORDS_FROM_SCALARS);
00116 vtkGetMacro(GenerateTCoords,int);
00117 void SetGenerateTCoordsToOff()
00118 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00119 void SetGenerateTCoordsToNormalizedLength()
00120 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00121 void SetGenerateTCoordsToUseLength()
00122 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00123 void SetGenerateTCoordsToUseScalars()
00124 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00125 const char *GetGenerateTCoordsAsString();
00127
00129
00133 vtkSetClampMacro(TextureLength,double,0.000001,VTK_LARGE_INTEGER);
00134 vtkGetMacro(TextureLength,double);
00136
00138
00141 vtkGetStringMacro(InputVectorsSelection);
00142 void SelectInputVectors(const char *fieldName)
00143 {this->SetInputVectorsSelection(fieldName);}
00145
00146 protected:
00147 vtkRibbonFilter();
00148 ~vtkRibbonFilter();
00149
00150 void Execute();
00151 double Width;
00152 double Angle;
00153 int VaryWidth;
00154 double WidthFactor;
00155 double DefaultNormal[3];
00156 int UseDefaultNormal;
00157 int GenerateTCoords;
00158 double TextureLength;
00159
00160
00161 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00162 vtkPoints *inPts, vtkPoints *newPts,
00163 vtkPointData *pd, vtkPointData *outPD,
00164 vtkFloatArray *newNormals, vtkDataArray *inScalars,
00165 double range[2], vtkDataArray *inNormals);
00166 void GenerateStrip(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00167 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
00168 vtkCellArray *newStrips);
00169 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00170 vtkPoints *inPts, vtkDataArray *inScalars,
00171 vtkFloatArray *newTCoords);
00172 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
00173
00174
00175 double Theta;
00176
00177
00178
00179 char *InputVectorsSelection;
00180 vtkSetStringMacro(InputVectorsSelection);
00181
00182 private:
00183 vtkRibbonFilter(const vtkRibbonFilter&);
00184 void operator=(const vtkRibbonFilter&);
00185 };
00186
00187 #endif
00188
00189