00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00039 #ifndef __vtkSplineFilter_h
00040 #define __vtkSplineFilter_h
00041
00042 #include "vtkPolyDataAlgorithm.h"
00043
00044 #define VTK_SUBDIVIDE_SPECIFIED 0
00045 #define VTK_SUBDIVIDE_LENGTH 1
00046
00047 #define VTK_TCOORDS_OFF 0
00048 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
00049 #define VTK_TCOORDS_FROM_LENGTH 2
00050 #define VTK_TCOORDS_FROM_SCALARS 3
00051
00052 class vtkCellArray;
00053 class vtkCellData;
00054 class vtkFloatArray;
00055 class vtkPointData;
00056 class vtkPoints;
00057 class vtkSpline;
00058
00059 class VTK_GRAPHICS_EXPORT vtkSplineFilter : public vtkPolyDataAlgorithm
00060 {
00061 public:
00062 vtkTypeRevisionMacro(vtkSplineFilter,vtkPolyDataAlgorithm);
00063 void PrintSelf(ostream& os, vtkIndent indent);
00064
00067 static vtkSplineFilter *New();
00068
00070
00072 vtkSetClampMacro(MaximumNumberOfSubdivisions,int,1,VTK_LARGE_INTEGER);
00073 vtkGetMacro(MaximumNumberOfSubdivisions,int);
00075
00077
00078 vtkSetClampMacro(Subdivide,int,VTK_SUBDIVIDE_SPECIFIED,VTK_SUBDIVIDE_LENGTH);
00079 vtkGetMacro(Subdivide,int);
00080 void SetSubdivideToSpecified()
00081 {this->SetSubdivide(VTK_SUBDIVIDE_SPECIFIED);}
00082 void SetSubdivideToLength()
00083 {this->SetSubdivide(VTK_SUBDIVIDE_LENGTH);}
00084 const char *GetSubdivideAsString();
00086
00088
00091 vtkSetClampMacro(NumberOfSubdivisions,int,1,VTK_LARGE_INTEGER);
00092 vtkGetMacro(NumberOfSubdivisions,int);
00094
00096
00099 vtkSetClampMacro(Length,double,0.0000001,VTK_DOUBLE_MAX);
00100 vtkGetMacro(Length,double);
00102
00104
00105 virtual void SetSpline(vtkSpline*);
00106 vtkGetObjectMacro(Spline,vtkSpline);
00108
00110
00115 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
00116 VTK_TCOORDS_FROM_SCALARS);
00117 vtkGetMacro(GenerateTCoords,int);
00118 void SetGenerateTCoordsToOff()
00119 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
00120 void SetGenerateTCoordsToNormalizedLength()
00121 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
00122 void SetGenerateTCoordsToUseLength()
00123 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
00124 void SetGenerateTCoordsToUseScalars()
00125 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
00126 const char *GetGenerateTCoordsAsString();
00128
00130
00134 vtkSetClampMacro(TextureLength,double,0.000001,VTK_LARGE_INTEGER);
00135 vtkGetMacro(TextureLength,double);
00137
00138 protected:
00139 vtkSplineFilter();
00140 ~vtkSplineFilter();
00141
00142
00143 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00144
00145 int MaximumNumberOfSubdivisions;
00146 int Subdivide;
00147 int NumberOfSubdivisions;
00148 double Length;
00149 vtkSpline *Spline;
00150 vtkSpline *XSpline;
00151 vtkSpline *YSpline;
00152 vtkSpline *ZSpline;
00153 int GenerateTCoords;
00154 double TextureLength;
00155
00156
00157 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
00158 vtkPoints *inPts, vtkPoints *newPts, vtkPointData *pd,
00159 vtkPointData *outPD, int genTCoords,
00160 vtkFloatArray *newTCoords);
00161
00162 void GenerateLine(vtkIdType offset, vtkIdType numGenPts, vtkIdType inCellId,
00163 vtkCellData *cd, vtkCellData *outCD, vtkCellArray *newLines);
00164
00165
00166 vtkFloatArray *TCoordMap;
00167
00168 private:
00169 vtkSplineFilter(const vtkSplineFilter&);
00170 void operator=(const vtkSplineFilter&);
00171 };
00172
00173 #endif