VTK
vtkTubeFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkTubeFilter.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
59 #ifndef __vtkTubeFilter_h
60 #define __vtkTubeFilter_h
61 
62 #include "vtkPolyDataAlgorithm.h"
63 
64 #define VTK_VARY_RADIUS_OFF 0
65 #define VTK_VARY_RADIUS_BY_SCALAR 1
66 #define VTK_VARY_RADIUS_BY_VECTOR 2
67 #define VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR 3
68 
69 #define VTK_TCOORDS_OFF 0
70 #define VTK_TCOORDS_FROM_NORMALIZED_LENGTH 1
71 #define VTK_TCOORDS_FROM_LENGTH 2
72 #define VTK_TCOORDS_FROM_SCALARS 3
73 
74 class vtkCellArray;
75 class vtkCellData;
76 class vtkDataArray;
77 class vtkFloatArray;
78 class vtkPointData;
79 class vtkPoints;
80 
82 {
83 public:
85  void PrintSelf(ostream& os, vtkIndent indent);
86 
89  static vtkTubeFilter *New();
90 
92 
94  vtkSetClampMacro(Radius,double,0.0,VTK_DOUBLE_MAX);
95  vtkGetMacro(Radius,double);
97 
99 
100  vtkSetClampMacro(VaryRadius,int,
102  vtkGetMacro(VaryRadius,int);
103  void SetVaryRadiusToVaryRadiusOff()
104  {this->SetVaryRadius(VTK_VARY_RADIUS_OFF);};
105  void SetVaryRadiusToVaryRadiusByScalar()
106  {this->SetVaryRadius(VTK_VARY_RADIUS_BY_SCALAR);};
107  void SetVaryRadiusToVaryRadiusByVector()
108  {this->SetVaryRadius(VTK_VARY_RADIUS_BY_VECTOR);};
109  void SetVaryRadiusToVaryRadiusByAbsoluteScalar()
110  {this->SetVaryRadius(VTK_VARY_RADIUS_BY_ABSOLUTE_SCALAR);};
111  const char *GetVaryRadiusAsString();
113 
115 
117  vtkSetClampMacro(NumberOfSides,int,3,VTK_LARGE_INTEGER);
118  vtkGetMacro(NumberOfSides,int);
120 
122 
124  vtkSetMacro(RadiusFactor,double);
125  vtkGetMacro(RadiusFactor,double);
127 
129 
131  vtkSetVector3Macro(DefaultNormal,double);
132  vtkGetVectorMacro(DefaultNormal,double,3);
134 
136 
138  vtkSetMacro(UseDefaultNormal,int);
139  vtkGetMacro(UseDefaultNormal,int);
140  vtkBooleanMacro(UseDefaultNormal,int);
142 
144 
147  vtkSetMacro(SidesShareVertices, int);
148  vtkGetMacro(SidesShareVertices, int);
149  vtkBooleanMacro(SidesShareVertices, int);
151 
153 
154  vtkSetMacro(Capping,int);
155  vtkGetMacro(Capping,int);
156  vtkBooleanMacro(Capping,int);
158 
160 
162  vtkSetClampMacro(OnRatio,int,1,VTK_LARGE_INTEGER);
163  vtkGetMacro(OnRatio,int);
165 
167 
170  vtkSetClampMacro(Offset,int,0,VTK_LARGE_INTEGER);
171  vtkGetMacro(Offset,int);
173 
175 
179  vtkSetClampMacro(GenerateTCoords,int,VTK_TCOORDS_OFF,
181  vtkGetMacro(GenerateTCoords,int);
182  void SetGenerateTCoordsToOff()
183  {this->SetGenerateTCoords(VTK_TCOORDS_OFF);}
184  void SetGenerateTCoordsToNormalizedLength()
185  {this->SetGenerateTCoords(VTK_TCOORDS_FROM_NORMALIZED_LENGTH);}
186  void SetGenerateTCoordsToUseLength()
187  {this->SetGenerateTCoords(VTK_TCOORDS_FROM_LENGTH);}
188  void SetGenerateTCoordsToUseScalars()
189  {this->SetGenerateTCoords(VTK_TCOORDS_FROM_SCALARS);}
190  const char *GetGenerateTCoordsAsString();
192 
194 
198  vtkSetClampMacro(TextureLength,double,0.000001,VTK_LARGE_INTEGER);
199  vtkGetMacro(TextureLength,double);
201 
202 protected:
203  vtkTubeFilter();
205 
206  // Usual data generation method
208 
209  double Radius; //minimum radius of tube
210  int VaryRadius; //controls radius variation
211  int NumberOfSides; //number of sides to create tube
212  double RadiusFactor; //maxium allowablew radius
213  double DefaultNormal[3];
216  int Capping; //control whether tubes are capped
217  int OnRatio; //control the generation of the sides of the tube
218  int Offset; //control the generation of the sides
219  int GenerateTCoords; //control texture coordinate generation
220  double TextureLength; //this length is mapped to [0,1) texture space
221 
222  // Helper methods
223  int GeneratePoints(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
224  vtkPoints *inPts, vtkPoints *newPts,
225  vtkPointData *pd, vtkPointData *outPD,
226  vtkFloatArray *newNormals, vtkDataArray *inScalars,
227  double range[2], vtkDataArray *inVectors, double maxNorm,
228  vtkDataArray *inNormals);
229  void GenerateStrips(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
230  vtkIdType inCellId, vtkCellData *cd, vtkCellData *outCD,
231  vtkCellArray *newStrips);
232  void GenerateTextureCoords(vtkIdType offset, vtkIdType npts, vtkIdType *pts,
233  vtkPoints *inPts, vtkDataArray *inScalars,
234  vtkFloatArray *newTCoords);
235  vtkIdType ComputeOffset(vtkIdType offset,vtkIdType npts);
236 
237  // Helper data members
238  double Theta;
239 
240 private:
241  vtkTubeFilter(const vtkTubeFilter&); // Not implemented.
242  void operator=(const vtkTubeFilter&); // Not implemented.
243 };
244 
245 #endif