VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkTubeFilter.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 =========================================================================*/ 00056 #ifndef __vtkTubeFilter_h 00057 #define __vtkTubeFilter_h 00058 00059 #include "vtkPolyDataAlgorithm.h" 00060 00061 #define VTK_VARY_RADIUS_OFF 0 00062 #define VTK_VARY_RADIUS_BY_SCALAR 1 00063 #define VTK_VARY_RADIUS_BY_VECTOR 2 00064 #define VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR 3 00065 00066 #define VTK_TCOORDS_OFF 0 00067 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1 00068 #define VTK_TCOORDS_FROM_LENGTH 2 00069 #define VTK_TCOORDS_FROM_SCALARS 3 00070 00071 class vtkCellArray; 00072 class vtkCellData; 00073 class vtkDataArray; 00074 class vtkFloatArray; 00075 class vtkPointData; 00076 class vtkPoints; 00077 00078 class VTK_GRAPHICS_EXPORT vtkTubeFilter : public vtkPolyDataAlgorithm 00079 { 00080 public: 00081 vtkTypeRevisionMacro(vtkTubeFilter,vtkPolyDataAlgorithm); 00082 void PrintSelf(ostream& os, vtkIndent indent); 00083 00086 static vtkTubeFilter *New(); 00087 00089 00091 vtkSetClampMacro(Radius,double,0.0,VTK_DOUBLE_MAX); 00092 vtkGetMacro(Radius,double); 00094 00096 00097 vtkSetClampMacro(VaryRadius,int, 00098 VTK_VARY_RADIUS_OFF,VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR); 00099 vtkGetMacro(VaryRadius,int); 00100 void SetVaryRadiusToVaryRadiusOff() 00101 {this->SetVaryRadius(VTK_VARY_RADIUS_OFF);}; 00102 void SetVaryRadiusToVaryRadiusByScalar() 00103 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_SCALAR);}; 00104 void SetVaryRadiusToVaryRadiusByVector() 00105 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_VECTOR);}; 00106 void SetVaryRadiusToVaryRadiusByAbsoluteScalar() 00107 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR);}; 00108 const char *GetVaryRadiusAsString(); 00110 00112 00114 vtkSetClampMacro(NumberOfSides,int,3,VTK_LARGE_INTEGER); 00115 vtkGetMacro(NumberOfSides,int); 00117 00119 00121 vtkSetMacro(RadiusFactor,double); 00122 vtkGetMacro(RadiusFactor,double); 00124 00126 00128 vtkSetVector3Macro(DefaultNormal,double); 00129 vtkGetVectorMacro(DefaultNormal,double,3); 00131 00133 00135 vtkSetMacro(UseDefaultNormal,int); 00136 vtkGetMacro(UseDefaultNormal,int); 00137 vtkBooleanMacro(UseDefaultNormal,int); 00139 00141 00144 vtkSetMacro(SidesShareVertices, int); 00145 vtkGetMacro(SidesShareVertices, int); 00146 vtkBooleanMacro(SidesShareVertices, int); 00148 00150 00151 vtkSetMacro(Capping,int); 00152 vtkGetMacro(Capping,int); 00153 vtkBooleanMacro(Capping,int); 00155 00157 00159 vtkSetClampMacro(OnRatio,int,1,VTK_LARGE_INTEGER); 00160 vtkGetMacro(OnRatio,int); 00162 00164 00167 vtkSetClampMacro(Offset,int,0,VTK_LARGE_INTEGER); 00168 vtkGetMacro(Offset,int); 00170 00172 00176 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF, 00177 VTK_TCOORDS_FROM_SCALARS); 00178 vtkGetMacro(GenerateTCoords,int); 00179 void SetGenerateTCoordsToOff() 00180 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);} 00181 void SetGenerateTCoordsToNormalizedLength() 00182 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);} 00183 void SetGenerateTCoordsToUseLength() 00184 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);} 00185 void SetGenerateTCoordsToUseScalars() 00186 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);} 00187 const char *GetGenerateTCoordsAsString(); 00189 00191 00195 vtkSetClampMacro(TextureLength,double,0.000001,VTK_LARGE_INTEGER); 00196 vtkGetMacro(TextureLength,double); 00198 00199 protected: 00200 vtkTubeFilter(); 00201 ~vtkTubeFilter() {} 00202 00203 // Usual data generation method 00204 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); 00205 00206 double Radius; //minimum radius of tube 00207 int VaryRadius; //controls radius variation 00208 int NumberOfSides; //number of sides to create tube 00209 double RadiusFactor; //maxium allowablew radius 00210 double DefaultNormal[3]; 00211 int UseDefaultNormal; 00212 int SidesShareVertices; 00213 int Capping; //control whether tubes are capped 00214 int OnRatio; //control the generation of the sides of the tube 00215 int Offset; //control the generation of the sides 00216 int GenerateTCoords; //control texture coordinate generation 00217 double TextureLength; //this length is mapped to [0,1) texture space 00218 00219 // Helper methods 00220 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00221 vtkPoints *inPts, vtkPoints *newPts, 00222 vtkPointData *pd, vtkPointData *outPD, 00223 vtkFloatArray *newNormals, vtkDataArray *inScalars, 00224 double range[2], vtkDataArray *inVectors, double maxNorm, 00225 vtkDataArray *inNormals); 00226 void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00227 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD, 00228 vtkCellArray *newStrips); 00229 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00230 vtkPoints *inPts, vtkDataArray *inScalars, 00231 vtkFloatArray *newTCoords); 00232 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts); 00233 00234 // Helper data members 00235 double Theta; 00236 00237 private: 00238 vtkTubeFilter(const vtkTubeFilter&); // Not implemented. 00239 void operator=(const vtkTubeFilter&); // Not implemented. 00240 }; 00241 00242 #endif