VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkTubeFilter.h 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 =========================================================================*/ 00059 #ifndef __vtkTubeFilter_h 00060 #define __vtkTubeFilter_h 00061 00062 #include "vtkFiltersCoreModule.h" // For export macro 00063 #include "vtkPolyDataAlgorithm.h" 00064 00065 #define VTK_VARY_RADIUS_OFF 0 00066 #define VTK_VARY_RADIUS_BY_SCALAR 1 00067 #define VTK_VARY_RADIUS_BY_VECTOR 2 00068 #define VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR 3 00069 00070 #define VTK_TCOORDS_OFF 0 00071 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1 00072 #define VTK_TCOORDS_FROM_LENGTH 2 00073 #define VTK_TCOORDS_FROM_SCALARS 3 00074 00075 class vtkCellArray; 00076 class vtkCellData; 00077 class vtkDataArray; 00078 class vtkFloatArray; 00079 class vtkPointData; 00080 class vtkPoints; 00081 00082 class VTKFILTERSCORE_EXPORT vtkTubeFilter : public vtkPolyDataAlgorithm 00083 { 00084 public: 00085 vtkTypeMacro(vtkTubeFilter,vtkPolyDataAlgorithm); 00086 void PrintSelf(ostream& os, vtkIndent indent); 00087 00090 static vtkTubeFilter *New(); 00091 00093 00095 vtkSetClampMacro(Radius,double,0.0,VTK_DOUBLE_MAX); 00096 vtkGetMacro(Radius,double); 00098 00100 00101 vtkSetClampMacro(VaryRadius,int, 00102 VTK_VARY_RADIUS_OFF,VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR); 00103 vtkGetMacro(VaryRadius,int); 00104 void SetVaryRadiusToVaryRadiusOff() 00105 {this->SetVaryRadius(VTK_VARY_RADIUS_OFF);}; 00106 void SetVaryRadiusToVaryRadiusByScalar() 00107 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_SCALAR);}; 00108 void SetVaryRadiusToVaryRadiusByVector() 00109 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_VECTOR);}; 00110 void SetVaryRadiusToVaryRadiusByAbsoluteScalar() 00111 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR);}; 00112 const char *GetVaryRadiusAsString(); 00114 00116 00118 vtkSetClampMacro(NumberOfSides,int,3,VTK_INT_MAX); 00119 vtkGetMacro(NumberOfSides,int); 00121 00123 00125 vtkSetMacro(RadiusFactor,double); 00126 vtkGetMacro(RadiusFactor,double); 00128 00130 00132 vtkSetVector3Macro(DefaultNormal,double); 00133 vtkGetVectorMacro(DefaultNormal,double,3); 00135 00137 00139 vtkSetMacro(UseDefaultNormal,int); 00140 vtkGetMacro(UseDefaultNormal,int); 00141 vtkBooleanMacro(UseDefaultNormal,int); 00143 00145 00148 vtkSetMacro(SidesShareVertices, int); 00149 vtkGetMacro(SidesShareVertices, int); 00150 vtkBooleanMacro(SidesShareVertices, int); 00152 00154 00156 vtkSetMacro(Capping,int); 00157 vtkGetMacro(Capping,int); 00158 vtkBooleanMacro(Capping,int); 00160 00162 00164 vtkSetClampMacro(OnRatio,int,1,VTK_INT_MAX); 00165 vtkGetMacro(OnRatio,int); 00167 00169 00172 vtkSetClampMacro(Offset,int,0,VTK_INT_MAX); 00173 vtkGetMacro(Offset,int); 00175 00177 00181 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF, 00182 VTK_TCOORDS_FROM_SCALARS); 00183 vtkGetMacro(GenerateTCoords,int); 00184 void SetGenerateTCoordsToOff() 00185 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);} 00186 void SetGenerateTCoordsToNormalizedLength() 00187 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);} 00188 void SetGenerateTCoordsToUseLength() 00189 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);} 00190 void SetGenerateTCoordsToUseScalars() 00191 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);} 00192 const char *GetGenerateTCoordsAsString(); 00194 00196 00200 vtkSetClampMacro(TextureLength,double,0.000001,VTK_INT_MAX); 00201 vtkGetMacro(TextureLength,double); 00203 00204 protected: 00205 vtkTubeFilter(); 00206 ~vtkTubeFilter() {} 00207 00208 // Usual data generation method 00209 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); 00210 00211 double Radius; //minimum radius of tube 00212 int VaryRadius; //controls radius variation 00213 int NumberOfSides; //number of sides to create tube 00214 double RadiusFactor; //maxium allowablew radius 00215 double DefaultNormal[3]; 00216 int UseDefaultNormal; 00217 int SidesShareVertices; 00218 int Capping; //control whether tubes are capped 00219 int OnRatio; //control the generation of the sides of the tube 00220 int Offset; //control the generation of the sides 00221 int GenerateTCoords; //control texture coordinate generation 00222 double TextureLength; //this length is mapped to [0,1) texture space 00223 00224 // Helper methods 00225 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00226 vtkPoints *inPts, vtkPoints *newPts, 00227 vtkPointData *pd, vtkPointData *outPD, 00228 vtkFloatArray *newNormals, vtkDataArray *inScalars, 00229 double range[2], vtkDataArray *inVectors, double maxNorm, 00230 vtkDataArray *inNormals); 00231 void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00232 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD, 00233 vtkCellArray *newStrips); 00234 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00235 vtkPoints *inPts, vtkDataArray *inScalars, 00236 vtkFloatArray *newTCoords); 00237 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts); 00238 00239 // Helper data members 00240 double Theta; 00241 00242 private: 00243 vtkTubeFilter(const vtkTubeFilter&); // Not implemented. 00244 void operator=(const vtkTubeFilter&); // Not implemented. 00245 }; 00246 00247 #endif