Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Graphics/vtkTubeFilter.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkTubeFilter.h,v $ 00005 Language: C++ 00006 00007 Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 00008 All rights reserved. 00009 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00010 00011 This software is distributed WITHOUT ANY WARRANTY; without even 00012 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00013 PURPOSE. See the above copyright notice for more information. 00014 00015 =========================================================================*/ 00060 #ifndef __vtkTubeFilter_h 00061 #define __vtkTubeFilter_h 00062 00063 #include "vtkPolyDataToPolyDataFilter.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 00069 #define VTK_TCOORDS_OFF 0 00070 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1 00071 #define VTK_TCOORDS_FROM_LENGTH 2 00072 #define VTK_TCOORDS_FROM_SCALARS 3 00073 00074 class vtkCellArray; 00075 class vtkCellData; 00076 class vtkDataArray; 00077 class vtkFloatArray; 00078 class vtkPointData; 00079 class vtkPoints; 00080 00081 class VTK_GRAPHICS_EXPORT vtkTubeFilter : public vtkPolyDataToPolyDataFilter 00082 { 00083 public: 00084 vtkTypeRevisionMacro(vtkTubeFilter,vtkPolyDataToPolyDataFilter); 00085 void PrintSelf(ostream& os, vtkIndent indent); 00086 00089 static vtkTubeFilter *New(); 00090 00092 00094 vtkSetClampMacro(Radius,float,0.0,VTK_LARGE_FLOAT); 00095 vtkGetMacro(Radius,float); 00097 00099 00100 vtkSetClampMacro(VaryRadius,int, 00101 VTK_VARY_RADIUS_OFF,VTK_VARY_RADIUS_BY_VECTOR); 00102 vtkGetMacro(VaryRadius,int); 00103 void SetVaryRadiusToVaryRadiusOff() 00104 {this->SetVaryRadius(VTK_VARY_RADIUS_OFF);}; 00105 void SetVaryRadiusToVaryRadiusByScalar() 00106 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_SCALAR);}; 00107 void SetVaryRadiusToVaryRadiusByVector() 00108 {this->SetVaryRadius(VTK_VARY_RADIUS_BY_VECTOR);}; 00109 const char *GetVaryRadiusAsString(); 00111 00113 00115 vtkSetClampMacro(NumberOfSides,int,3,VTK_LARGE_INTEGER); 00116 vtkGetMacro(NumberOfSides,int); 00118 00120 00122 vtkSetMacro(RadiusFactor,float); 00123 vtkGetMacro(RadiusFactor,float); 00125 00127 00129 vtkSetVector3Macro(DefaultNormal,float); 00130 vtkGetVectorMacro(DefaultNormal,float,3); 00132 00134 00136 vtkSetMacro(UseDefaultNormal,int); 00137 vtkGetMacro(UseDefaultNormal,int); 00138 vtkBooleanMacro(UseDefaultNormal,int); 00140 00142 00145 vtkSetMacro(SidesShareVertices, int); 00146 vtkGetMacro(SidesShareVertices, int); 00147 vtkBooleanMacro(SidesShareVertices, int); 00149 00151 00152 vtkSetMacro(Capping,int); 00153 vtkGetMacro(Capping,int); 00154 vtkBooleanMacro(Capping,int); 00156 00158 00160 vtkSetClampMacro(OnRatio,int,1,VTK_LARGE_INTEGER); 00161 vtkGetMacro(OnRatio,int); 00163 00165 00168 vtkSetClampMacro(Offset,int,0,VTK_LARGE_INTEGER); 00169 vtkGetMacro(Offset,int); 00171 00173 00177 vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF, 00178 VTK_TCOORDS_FROM_SCALARS); 00179 vtkGetMacro(GenerateTCoords,int); 00180 void SetGenerateTCoordsToOff() 00181 {this->SetGenerateTCoords(VTK_TCOORDS_OFF);} 00182 void SetGenerateTCoordsToNormalizedLength() 00183 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);} 00184 void SetGenerateTCoordsToUseLength() 00185 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);} 00186 void SetGenerateTCoordsToUseScalars() 00187 {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);} 00188 const char *GetGenerateTCoordsAsString(); 00190 00192 00196 vtkSetClampMacro(TextureLength,float,0.000001,VTK_LARGE_INTEGER); 00197 vtkGetMacro(TextureLength,float); 00199 00200 protected: 00201 vtkTubeFilter(); 00202 ~vtkTubeFilter() {} 00203 00204 // Usual data generation method 00205 void Execute(); 00206 00207 float Radius; //minimum radius of tube 00208 int VaryRadius; //controls radius variation 00209 int NumberOfSides; //number of sides to create tube 00210 float RadiusFactor; //maxium allowablew radius 00211 float DefaultNormal[3]; 00212 int UseDefaultNormal; 00213 int SidesShareVertices; 00214 int Capping; //control whether tubes are capped 00215 int OnRatio; //control the generation of the sides of the tube 00216 int Offset; //control the generation of the sides 00217 int GenerateTCoords; //control texture coordinate generation 00218 float TextureLength; //this length is mapped to [0,1) texture space 00219 00220 // Helper methods 00221 int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00222 vtkPoints *inPts, vtkPoints *newPts, 00223 vtkPointData *pd, vtkPointData *outPD, 00224 vtkFloatArray *newNormals, vtkDataArray *inScalars, 00225 float range[2], vtkDataArray *inVectors, float maxNorm, 00226 vtkDataArray *inNormals); 00227 void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00228 vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD, 00229 vtkCellArray *newStrips); 00230 void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts, 00231 vtkPoints *inPts, vtkDataArray *inScalars, 00232 vtkFloatArray *newTCoords); 00233 vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts); 00234 00235 // Helper data members 00236 float Theta; 00237 00238 private: 00239 vtkTubeFilter(const vtkTubeFilter&); // Not implemented. 00240 void operator=(const vtkTubeFilter&); // Not implemented. 00241 }; 00242 00243 #endif