VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkRibbonFilter.h,v $ 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 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; //controls whether width varies with scalar data 00142 double WidthFactor; 00143 double DefaultNormal[3]; 00144 int UseDefaultNormal; 00145 int GenerateTCoords; //control texture coordinate generation 00146 double TextureLength; //this length is mapped to [0,1) texture space 00147 00148 // Helper methods 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 // Helper data members 00163 double Theta; 00164 00165 private: 00166 vtkRibbonFilter(const vtkRibbonFilter&); // Not implemented. 00167 void operator=(const vtkRibbonFilter&); // Not implemented. 00168 }; 00169 00170 #endif