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=========================================================================*/
57#ifndef vtkHyperStreamline_h
58#define vtkHyperStreamline_h
59
60#include "vtkFiltersGeneralModule.h" // For export macro
62
63#define VTK_INTEGRATE_FORWARD 0
64#define VTK_INTEGRATE_BACKWARD 1
65#define VTK_INTEGRATE_BOTH_DIRECTIONS 2
66
67#define VTK_INTEGRATE_MAJOR_EIGENVECTOR 0
68#define VTK_INTEGRATE_MEDIUM_EIGENVECTOR 1
69#define VTK_INTEGRATE_MINOR_EIGENVECTOR 2
70
71class vtkHyperArray;
72
73class VTKFILTERSGENERAL_EXPORT vtkHyperStreamline : public vtkPolyDataAlgorithm
74{
75public:
77 void PrintSelf(ostream& os, vtkIndent indent) override;
78
86
91 void SetStartLocation(vtkIdType cellId, int subId, double pcoords[3]);
92
97 void SetStartLocation(vtkIdType cellId, int subId, double r, double s, double t);
98
103 vtkIdType GetStartLocation(int& subId, double pcoords[3]);
104
110 void SetStartPosition(double x[3]);
111
117 void SetStartPosition(double x, double y, double z);
118
123
125
129 vtkSetClampMacro(MaximumPropagationDistance, double, 0.0, VTK_DOUBLE_MAX);
130 vtkGetMacro(MaximumPropagationDistance, double);
132
134
144 vtkSetClampMacro(
146 vtkGetMacro(IntegrationEigenvector, int);
147 void SetIntegrationEigenvectorToMajor()
148 {
149 this->SetIntegrationEigenvector(VTK_INTEGRATE_MAJOR_EIGENVECTOR);
150 }
152 {
153 this->SetIntegrationEigenvector(VTK_INTEGRATE_MEDIUM_EIGENVECTOR);
154 }
156 {
157 this->SetIntegrationEigenvector(VTK_INTEGRATE_MINOR_EIGENVECTOR);
158 }
160
166 void IntegrateMajorEigenvector() { this->SetIntegrationEigenvectorToMajor(); }
167
174 void IntegrateMediumEigenvector() { this->SetIntegrationEigenvectorToMedium(); }
175
181 void IntegrateMinorEigenvector() { this->SetIntegrationEigenvectorToMinor(); }
182
184
188 vtkSetClampMacro(IntegrationStepLength, double, 0.001, 0.5);
189 vtkGetMacro(IntegrationStepLength, double);
191
193
198 vtkSetClampMacro(StepLength, double, 0.000001, 1.0);
199 vtkGetMacro(StepLength, double);
201
203
206 vtkSetClampMacro(IntegrationDirection, int, VTK_INTEGRATE_FORWARD, VTK_INTEGRATE_BOTH_DIRECTIONS);
207 vtkGetMacro(IntegrationDirection, int);
208 void SetIntegrationDirectionToForward() { this->SetIntegrationDirection(VTK_INTEGRATE_FORWARD); }
210 {
211 this->SetIntegrationDirection(VTK_INTEGRATE_BACKWARD);
212 }
214 {
215 this->SetIntegrationDirection(VTK_INTEGRATE_BOTH_DIRECTIONS);
216 }
218
220
224 vtkSetClampMacro(TerminalEigenvalue, double, 0.0, VTK_DOUBLE_MAX);
225 vtkGetMacro(TerminalEigenvalue, double);
227
229
233 vtkSetClampMacro(NumberOfSides, int, 3, VTK_INT_MAX);
234 vtkGetMacro(NumberOfSides, int);
236
238
244 vtkSetClampMacro(Radius, double, 0.0001, VTK_DOUBLE_MAX);
245 vtkGetMacro(Radius, double);
247
249
253 vtkSetMacro(LogScaling, vtkTypeBool);
254 vtkGetMacro(LogScaling, vtkTypeBool);
255 vtkBooleanMacro(LogScaling, vtkTypeBool);
257
258protected:
261
262 // Integrate data
264 int BuildTube(vtkDataSet* input, vtkPolyData* output);
265
267
268 // Flag indicates where streamlines start from (either position or location)
270
271 // Starting from cell location
274 double StartPCoords[3];
275
276 // starting from global x-y-z position
277 double StartPosition[3];
278
279 // array of hyperstreamlines
280 vtkHyperArray* Streamers;
282
283 // length of hyperstreamline in absolute distance
285
286 // integration direction
288
289 // the length (fraction of cell size) of integration steps
291
292 // the length of the tube segments composing the hyperstreamline
294
295 // terminal propagation speed
297
298 // number of sides of tube
300
301 // maximum radius of tube
302 double Radius;
303
304 // boolean controls whether scaling is clamped
306
307 // which eigenvector to use as integration vector field
309
310private:
311 vtkHyperStreamline(const vtkHyperStreamline&) = delete;
312 void operator=(const vtkHyperStreamline&) = delete;
313};
314
315#endif
abstract class to specify dataset behavior
Definition: vtkDataSet.h:66
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.
void SetStartLocation(vtkIdType cellId, int subId, double r, double s, double t)
Specify the start of the hyperstreamline in the cell coordinate system.
static vtkHyperStreamline * New()
Construct object with initial starting position (0,0,0); integration step length 0....
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.
double * GetStartPosition()
Get the start position of the hyperstreamline in global x-y-z coordinates.
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:43
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:95
@ 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(...)