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
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
62class vtkHyperArray;
63
64class VTKFILTERSGENERAL_EXPORT vtkHyperStreamline : public vtkPolyDataAlgorithm
65{
66public:
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
249protected:
252
253 // Integrate data
255 int BuildTube(vtkDataSet* input, vtkPolyData* output);
256
257 int FillInputPortInformation(int port, vtkInformation* info) override;
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
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
301private:
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.
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: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
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(...)