VTK
vtkHyperStreamline.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkHyperStreamline.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 =========================================================================*/
51 #ifndef vtkHyperStreamline_h
52 #define vtkHyperStreamline_h
53 
54 #include "vtkFiltersGeneralModule.h" // For export macro
55 #include "vtkPolyDataAlgorithm.h"
56 
57 #define VTK_INTEGRATE_FORWARD 0
58 #define VTK_INTEGRATE_BACKWARD 1
59 #define VTK_INTEGRATE_BOTH_DIRECTIONS 2
60 
61 #define VTK_INTEGRATE_MAJOR_EIGENVECTOR 0
62 #define VTK_INTEGRATE_MEDIUM_EIGENVECTOR 1
63 #define VTK_INTEGRATE_MINOR_EIGENVECTOR 2
64 
65 
66 class vtkHyperArray;
67 
68 class VTKFILTERSGENERAL_EXPORT vtkHyperStreamline : public vtkPolyDataAlgorithm
69 {
70 public:
72  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
73 
80  static vtkHyperStreamline *New();
81 
86  void SetStartLocation(vtkIdType cellId, int subId, double pcoords[3]);
87 
92  void SetStartLocation(vtkIdType cellId, int subId, double r, double s,
93  double t);
94 
99  vtkIdType GetStartLocation(int& subId, double pcoords[3]);
100 
106  void SetStartPosition(double x[3]);
107 
113  void SetStartPosition(double x, double y, double z);
114 
118  double *GetStartPosition();
119 
121 
125  vtkSetClampMacro(MaximumPropagationDistance,double,0.0,VTK_DOUBLE_MAX);
126  vtkGetMacro(MaximumPropagationDistance,double);
128 
130 
140  vtkSetClampMacro(IntegrationEigenvector,int,
143  vtkGetMacro(IntegrationEigenvector,int);
145  {this->SetIntegrationEigenvector(VTK_INTEGRATE_MAJOR_EIGENVECTOR);};
147  {this->SetIntegrationEigenvector(VTK_INTEGRATE_MEDIUM_EIGENVECTOR);};
149  {this->SetIntegrationEigenvector(VTK_INTEGRATE_MINOR_EIGENVECTOR);};
151 
158  {this->SetIntegrationEigenvectorToMajor();};
159 
167  {this->SetIntegrationEigenvectorToMedium();};
168 
175  {this->SetIntegrationEigenvectorToMinor();};
176 
178 
182  vtkSetClampMacro(IntegrationStepLength,double,0.001,0.5);
183  vtkGetMacro(IntegrationStepLength,double);
185 
187 
192  vtkSetClampMacro(StepLength,double,0.000001,1.0);
193  vtkGetMacro(StepLength,double);
195 
197 
200  vtkSetClampMacro(IntegrationDirection,int,
202  vtkGetMacro(IntegrationDirection,int);
204  {this->SetIntegrationDirection(VTK_INTEGRATE_FORWARD);};
206  {this->SetIntegrationDirection(VTK_INTEGRATE_BACKWARD);};
208  {this->SetIntegrationDirection(VTK_INTEGRATE_BOTH_DIRECTIONS);};
210 
212 
216  vtkSetClampMacro(TerminalEigenvalue,double,0.0,VTK_DOUBLE_MAX);
217  vtkGetMacro(TerminalEigenvalue,double);
219 
221 
225  vtkSetClampMacro(NumberOfSides,int,3,VTK_INT_MAX);
226  vtkGetMacro(NumberOfSides,int);
228 
230 
236  vtkSetClampMacro(Radius,double,0.0001,VTK_DOUBLE_MAX);
237  vtkGetMacro(Radius,double);
239 
241 
245  vtkSetMacro(LogScaling,int);
246  vtkGetMacro(LogScaling,int);
247  vtkBooleanMacro(LogScaling,int);
249 
250 protected:
252  ~vtkHyperStreamline() VTK_OVERRIDE;
253 
254  // Integrate data
255  int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE;
256  int BuildTube(vtkDataSet *input, vtkPolyData *output);
257 
258  int FillInputPortInformation(int port, vtkInformation *info) VTK_OVERRIDE;
259 
260  // Flag indicates where streamlines start from (either position or location)
261  int StartFrom;
262 
263  // Starting from cell location
264  vtkIdType StartCell;
265  int StartSubId;
266  double StartPCoords[3];
267 
268  // starting from global x-y-z position
269  double StartPosition[3];
270 
271  //array of hyperstreamlines
272  vtkHyperArray *Streamers;
273  int NumberOfStreamers;
274 
275  // length of hyperstreamline in absolute distance
276  double MaximumPropagationDistance;
277 
278  // integration direction
279  int IntegrationDirection;
280 
281  // the length (fraction of cell size) of integration steps
282  double IntegrationStepLength;
283 
284  // the length of the tube segments composing the hyperstreamline
285  double StepLength;
286 
287  // terminal propagation speed
288  double TerminalEigenvalue;
289 
290  // number of sides of tube
291  int NumberOfSides;
292 
293  // maximum radius of tube
294  double Radius;
295 
296  // boolean controls whether scaling is clamped
297  int LogScaling;
298 
299  // which eigenvector to use as integration vector field
300  int IntegrationEigenvector;
301 private:
302  vtkHyperStreamline(const vtkHyperStreamline&) VTK_DELETE_FUNCTION;
303  void operator=(const vtkHyperStreamline&) VTK_DELETE_FUNCTION;
304 };
305 
306 #endif
#define VTK_DOUBLE_MAX
Definition: vtkType.h:163
void IntegrateMinorEigenvector()
Use the minor eigenvector field as the vector field through which to integrate.
Store vtkAlgorithm input/output information.
void SetIntegrationEigenvectorToMinor()
Set / get the eigenvector field through which to ingrate.
abstract class to specify dataset behavior
Definition: vtkDataSet.h:62
#define VTK_INT_MAX
Definition: vtkType.h:153
void SetIntegrationDirectionToForward()
Specify the direction in which to integrate the hyperstreamline.
void SetIntegrationDirectionToBackward()
Specify the direction in which to integrate the hyperstreamline.
int vtkIdType
Definition: vtkType.h:287
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
#define VTK_INTEGRATE_MAJOR_EIGENVECTOR
#define VTK_INTEGRATE_MEDIUM_EIGENVECTOR
static vtkPolyDataAlgorithm * New()
Superclass for algorithms that produce only polydata as output.
#define VTK_INTEGRATE_MINOR_EIGENVECTOR
a simple class to control print indentation
Definition: vtkIndent.h:39
#define VTK_INTEGRATE_FORWARD
void SetIntegrationEigenvectorToMedium()
Set / get the eigenvector field through which to ingrate.
void SetIntegrationEigenvectorToMajor()
Set / get the eigenvector field through which to ingrate.
#define VTK_INTEGRATE_BACKWARD
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
Store zero or more vtkInformation instances.
void SetIntegrationDirectionToIntegrateBothDirections()
Specify the direction in which to integrate the hyperstreamline.
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
void IntegrateMediumEigenvector()
Use the medium eigenvector field as the vector field through which to integrate.
void IntegrateMajorEigenvector()
Use the major eigenvector field as the vector field through which to integrate.
#define VTK_INTEGRATE_BOTH_DIRECTIONS
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
generate hyperstreamline in arbitrary dataset