VTK  9.1.0
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 =========================================================================*/
48 #ifndef vtkHyperStreamline_h
49 #define vtkHyperStreamline_h
50 
51 #include "vtkFiltersGeneralModule.h" // For export macro
52 #include "vtkPolyDataAlgorithm.h"
53 
54 #define VTK_INTEGRATE_FORWARD 0
55 #define VTK_INTEGRATE_BACKWARD 1
56 #define VTK_INTEGRATE_BOTH_DIRECTIONS 2
57 
58 #define VTK_INTEGRATE_MAJOR_EIGENVECTOR 0
59 #define VTK_INTEGRATE_MEDIUM_EIGENVECTOR 1
60 #define VTK_INTEGRATE_MINOR_EIGENVECTOR 2
61 
62 class vtkHyperArray;
63 
64 class VTKFILTERSGENERAL_EXPORT vtkHyperStreamline : public vtkPolyDataAlgorithm
65 {
66 public:
68  void PrintSelf(ostream& os, vtkIndent indent) override;
69 
77 
82  void SetStartLocation(vtkIdType cellId, int subId, double pcoords[3]);
83 
88  void SetStartLocation(vtkIdType cellId, int subId, double r, double s, double t);
89 
94  vtkIdType GetStartLocation(int& subId, double pcoords[3]);
95 
101  void SetStartPosition(double x[3]);
102 
108  void SetStartPosition(double x, double y, double z);
109 
114 
116 
120  vtkSetClampMacro(MaximumPropagationDistance, double, 0.0, VTK_DOUBLE_MAX);
121  vtkGetMacro(MaximumPropagationDistance, double);
123 
125 
135  vtkSetClampMacro(
137  vtkGetMacro(IntegrationEigenvector, int);
138  void SetIntegrationEigenvectorToMajor()
139  {
140  this->SetIntegrationEigenvector(VTK_INTEGRATE_MAJOR_EIGENVECTOR);
141  }
143  {
144  this->SetIntegrationEigenvector(VTK_INTEGRATE_MEDIUM_EIGENVECTOR);
145  }
147  {
148  this->SetIntegrationEigenvector(VTK_INTEGRATE_MINOR_EIGENVECTOR);
149  }
151 
157  void IntegrateMajorEigenvector() { this->SetIntegrationEigenvectorToMajor(); }
158 
165  void IntegrateMediumEigenvector() { this->SetIntegrationEigenvectorToMedium(); }
166 
172  void IntegrateMinorEigenvector() { this->SetIntegrationEigenvectorToMinor(); }
173 
175 
179  vtkSetClampMacro(IntegrationStepLength, double, 0.001, 0.5);
180  vtkGetMacro(IntegrationStepLength, double);
182 
184 
189  vtkSetClampMacro(StepLength, double, 0.000001, 1.0);
190  vtkGetMacro(StepLength, double);
192 
194 
197  vtkSetClampMacro(IntegrationDirection, int, VTK_INTEGRATE_FORWARD, VTK_INTEGRATE_BOTH_DIRECTIONS);
198  vtkGetMacro(IntegrationDirection, int);
199  void SetIntegrationDirectionToForward() { this->SetIntegrationDirection(VTK_INTEGRATE_FORWARD); }
201  {
202  this->SetIntegrationDirection(VTK_INTEGRATE_BACKWARD);
203  }
205  {
206  this->SetIntegrationDirection(VTK_INTEGRATE_BOTH_DIRECTIONS);
207  }
209 
211 
215  vtkSetClampMacro(TerminalEigenvalue, double, 0.0, VTK_DOUBLE_MAX);
216  vtkGetMacro(TerminalEigenvalue, double);
218 
220 
224  vtkSetClampMacro(NumberOfSides, int, 3, VTK_INT_MAX);
225  vtkGetMacro(NumberOfSides, int);
227 
229 
235  vtkSetClampMacro(Radius, double, 0.0001, VTK_DOUBLE_MAX);
236  vtkGetMacro(Radius, double);
238 
240 
244  vtkSetMacro(LogScaling, vtkTypeBool);
245  vtkGetMacro(LogScaling, vtkTypeBool);
246  vtkBooleanMacro(LogScaling, vtkTypeBool);
248 
249 protected:
252 
253  // Integrate data
255  int BuildTube(vtkDataSet* input, vtkPolyData* output);
256 
258 
259  // Flag indicates where streamlines start from (either position or location)
261 
262  // Starting from cell location
265  double StartPCoords[3];
266 
267  // starting from global x-y-z position
268  double StartPosition[3];
269 
270  // array of hyperstreamlines
271  vtkHyperArray* Streamers;
273 
274  // length of hyperstreamline in absolute distance
276 
277  // integration direction
279 
280  // the length (fraction of cell size) of integration steps
282 
283  // the length of the tube segments composing the hyperstreamline
284  double StepLength;
285 
286  // terminal propagation speed
288 
289  // number of sides of tube
291 
292  // maximum radius of tube
293  double Radius;
294 
295  // boolean controls whether scaling is clamped
297 
298  // which eigenvector to use as integration vector field
300 
301 private:
302  vtkHyperStreamline(const vtkHyperStreamline&) = delete;
303  void operator=(const vtkHyperStreamline&) = delete;
304 };
305 
306 #endif
abstract class to specify dataset behavior
Definition: vtkDataSet.h:57
generate hyperstreamline in arbitrary dataset
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
void IntegrateMinorEigenvector()
Use the minor eigenvector field as the vector field through which to integrate.
void IntegrateMediumEigenvector()
Use the medium eigenvector field as the vector field through which to integrate.
~vtkHyperStreamline() override
int BuildTube(vtkDataSet *input, vtkPolyData *output)
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
void SetIntegrationDirectionToBackward()
Specify the direction in which to integrate the hyperstreamline.
void SetIntegrationEigenvectorToMedium()
Set / get the eigenvector field through which to ingrate.
static vtkHyperStreamline * New()
Construct object with initial starting position (0,0,0); integration step length 0....
void SetStartLocation(vtkIdType cellId, int subId, double r, double s, double t)
Specify the start of the hyperstreamline in the cell coordinate system.
double * GetStartPosition()
Get the start position of the hyperstreamline in global x-y-z coordinates.
void SetIntegrationDirectionToForward()
Specify the direction in which to integrate the hyperstreamline.
vtkIdType GetStartLocation(int &subId, double pcoords[3])
Get the starting location of the hyperstreamline in the cell coordinate system.
void SetStartLocation(vtkIdType cellId, int subId, double pcoords[3])
Specify the start of the hyperstreamline in the cell coordinate system.
void SetIntegrationDirectionToIntegrateBothDirections()
Specify the direction in which to integrate the hyperstreamline.
void IntegrateMajorEigenvector()
Use the major eigenvector field as the vector field through which to integrate.
vtkHyperArray * Streamers
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetIntegrationEigenvectorToMinor()
Set / get the eigenvector field through which to ingrate.
void SetStartPosition(double x[3])
Specify the start of the hyperstreamline in the global coordinate system.
void SetStartPosition(double x, double y, double z)
Specify the start of the hyperstreamline in the global coordinate system.
a simple class to control print indentation
Definition: vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Superclass for algorithms that produce only polydata as output.
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:86
@ info
Definition: vtkX3D.h:382
@ port
Definition: vtkX3D.h:453
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_INTEGRATE_BACKWARD
#define VTK_INTEGRATE_MAJOR_EIGENVECTOR
#define VTK_INTEGRATE_MEDIUM_EIGENVECTOR
#define VTK_INTEGRATE_FORWARD
#define VTK_INTEGRATE_MINOR_EIGENVECTOR
#define VTK_INTEGRATE_BOTH_DIRECTIONS
int vtkIdType
Definition: vtkType.h:332
#define VTK_DOUBLE_MAX
Definition: vtkType.h:165
#define VTK_INT_MAX
Definition: vtkType.h:155
#define VTK_SIZEHINT(...)