VTK  9.6.1
vtkGenericStreamTracer.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
56
57#ifndef vtkGenericStreamTracer_h
58#define vtkGenericStreamTracer_h
59
60#include "vtkFiltersGenericModule.h" // For export macro
62
63#include "vtkInitialValueProblemSolver.h" // Needed for constants
64
65VTK_ABI_NAMESPACE_BEGIN
66class vtkDataArray;
68class vtkIdList;
69class vtkIntArray;
71class vtkDataSet;
74
75class VTKFILTERSGENERIC_EXPORT vtkGenericStreamTracer : public vtkPolyDataAlgorithm
76{
77public:
79 void PrintSelf(ostream& os, vtkIndent indent) override;
80
88
90
95 vtkSetVector3Macro(StartPosition, double);
96 vtkGetVector3Macro(StartPosition, double);
98
100
106
112
113 int FillInputPortInformation(int port, vtkInformation* info) override;
114
121
130
140
142
154 vtkGetObjectMacro(Integrator, vtkInitialValueProblemSolver);
155 void SetIntegratorType(int type);
161
163
170 void SetMaximumPropagation(int unit, double max);
181
182
184
192 void SetMinimumIntegrationStep(int unit, double step);
194 void SetMinimumIntegrationStep(double step);
206
207
209
217 void SetMaximumIntegrationStep(int unit, double step);
219 void SetMaximumIntegrationStep(double step);
231
232
234
243 void SetInitialIntegrationStep(int unit, double step);
245 void SetInitialIntegrationStep(double step);
257
258
260
265 vtkSetMacro(MaximumError, double);
266 vtkGetMacro(MaximumError, double);
268
270
273 vtkSetMacro(MaximumNumberOfSteps, vtkIdType);
274 vtkGetMacro(MaximumNumberOfSteps, vtkIdType);
276
278
282 vtkSetMacro(TerminalSpeed, double);
283 vtkGetMacro(TerminalSpeed, double);
285
287
291 {
295 }
296
297
298 enum
299 {
303 };
304
306
310 vtkSetClampMacro(IntegrationDirection, int, FORWARD, BOTH);
311 vtkGetMacro(IntegrationDirection, int);
316
318
323 vtkSetMacro(ComputeVorticity, vtkTypeBool);
324 vtkGetMacro(ComputeVorticity, vtkTypeBool);
325 vtkBooleanMacro(ComputeVorticity, vtkTypeBool);
327
329
333 vtkSetMacro(RotationScale, double);
334 vtkGetMacro(RotationScale, double);
336
338
343 vtkGetStringMacro(InputVectorsSelection);
344 void SelectInputVectors(const char* fieldName) { this->SetInputVectorsSelection(fieldName); }
346
351
357
358protected:
361
362 // hide the superclass' AddInput() from the user and the compiler
364 {
365 vtkErrorMacro(<< "AddInput() must be called with a vtkGenericDataSet not a vtkDataObject.");
366 }
367
369
377 void CalculateVorticity(vtkGenericAdaptorCell* cell, double pcoords[3],
378 vtkGenericAttribute* attribute, double vorticity[3]);
379
380 void Integrate(vtkGenericDataSet* input0, vtkPolyData* output, vtkDataArray* seedSource,
381 vtkIdList* seedIds, vtkIntArray* integrationDirections, double lastPoint[3],
383 void SimpleIntegrate(
384 double seed[3], double lastPoint[3], double delt, vtkGenericInterpolatedVelocityField* func);
385 int CheckInputs(vtkGenericInterpolatedVelocityField*& func, vtkInformationVector** inputVector);
386 void GenerateNormals(vtkPolyData* output, double* firstNormal);
387
388 int GenerateNormalsInIntegrate;
389
390 vtkSetStringMacro(InputVectorsSelection);
391 char* InputVectorsSelection;
392
393 // starting from global x-y-z position
394 double StartPosition[3];
395
396 static const double EPSILON;
397 double TerminalSpeed;
398
399 double LastUsedTimeStep;
400
401 struct IntervalInformation
402 {
403 double Interval;
404 int Unit;
405 };
406
407 IntervalInformation MaximumPropagation;
408 IntervalInformation MinimumIntegrationStep;
409 IntervalInformation MaximumIntegrationStep;
410 IntervalInformation InitialIntegrationStep;
411
412 void SetIntervalInformation(int unit, double interval, IntervalInformation& currentValues);
413 void SetIntervalInformation(int unit, IntervalInformation& currentValues);
414 static double ConvertToTime(IntervalInformation& interval, double cellLength, double speed);
415 static double ConvertToLength(IntervalInformation& interval, double cellLength, double speed);
416 static double ConvertToCellLength(IntervalInformation& interval, double cellLength, double speed);
417 static double ConvertToUnit(
418 IntervalInformation& interval, int unit, double cellLength, double speed);
419 void ConvertIntervals(
420 double& step, double& minStep, double& maxStep, int direction, double cellLength, double speed);
421
422 void InitializeSeeds(
423 vtkDataArray*& seeds, vtkIdList*& seedIds, vtkIntArray*& integrationDirections);
424
425 int IntegrationDirection;
426
427 // Prototype showing the integrator type to be set by the user.
429
430 double MaximumError;
431 vtkIdType MaximumNumberOfSteps;
432
433 vtkTypeBool ComputeVorticity;
434 double RotationScale;
435
436 vtkGenericInterpolatedVelocityField* InterpolatorPrototype;
437
438private:
440 void operator=(const vtkGenericStreamTracer&) = delete;
441};
442
443VTK_ABI_NAMESPACE_END
444#endif
Proxy object to connect input/output ports.
general representation of visualization data
abstract class to specify dataset behavior
Definition vtkDataSet.h:57
defines cell interface
abstract class defined API for attribute data
defines dataset interface
Interface for obtaining interpolated velocity values.
double GetMaximumPropagation()
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
void SetIntegratorTypeToRungeKutta2()
Set/get the integrator type to be used in the stream line calculation.
void SetIntegrationDirectionToBackward()
Specify whether the streamtrace will be generated in the upstream or downstream direction.
void SetMinimumIntegrationStepUnitToCellLengthUnit()
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
int GetInitialIntegrationStepUnit()
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
double GetMaximumIntegrationStep()
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
int GetMaximumIntegrationStepUnit()
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetInitialIntegrationStepUnitToCellLengthUnit()
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMaximumIntegrationStepUnit(int unit)
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetSourceData(vtkDataSet *source)
Specify the source object used to generate starting points.
void SetInitialIntegrationStep(double step)
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMinimumIntegrationStep(int unit, double step)
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMinimumIntegrationStepUnitToLengthUnit()
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
int GetMaximumPropagationUnit()
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
void SetIntegrationStepUnit(int unit)
Simplified API to set an homogeneous unit across Min/Max/Init IntegrationStepUnit.
void SetMaximumIntegrationStep(int unit, double step)
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMaximumIntegrationStep(double step)
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetIntegrationDirectionToBoth()
Specify whether the streamtrace will be generated in the upstream or downstream direction.
void SetIntegratorTypeToRungeKutta4()
Set/get the integrator type to be used in the stream line calculation.
void SetIntegratorType(int type)
Set/get the integrator type to be used in the stream line calculation.
void SetInitialIntegrationStepUnit(int unit)
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetMaximumPropagationUnitToLengthUnit()
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called by the superclass.
int GetIntegratorType()
Set/get the integrator type to be used in the stream line calculation.
void SetInitialIntegrationStepUnitToTimeUnit()
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetSourceConnection(vtkAlgorithmOutput *algOutput)
Specify the source object used to generate starting points (seeds).
void AddInput(vtkDataObject *)
void SetMaximumPropagation(double max)
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
double GetInitialIntegrationStep()
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMaximumIntegrationStepUnitToCellLengthUnit()
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
int GetMinimumIntegrationStepUnit()
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMinimumIntegrationStep(double step)
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetIntegratorTypeToRungeKutta45()
Set/get the integrator type to be used in the stream line calculation.
int FillInputPortInformation(int port, vtkInformation *info) override
void SetMaximumPropagationUnitToTimeUnit()
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
void SetMaximumPropagationUnitToCellLengthUnit()
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
void AddInputData(vtkGenericDataSet *in)
Add a dataset to the list inputs.
void SetInitialIntegrationStepUnitToLengthUnit()
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetIntegrator(vtkInitialValueProblemSolver *)
Set/get the integrator type to be used in the stream line calculation.
void SelectInputVectors(const char *fieldName)
If you want to generate traces using an arbitrary vector array, then set its name here.
void SetMinimumIntegrationStepUnit(int unit)
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetIntegrationDirectionToForward()
Specify whether the streamtrace will be generated in the upstream or downstream direction.
void SetMaximumIntegrationStepUnitToTimeUnit()
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMaximumPropagationUnit(int unit)
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
virtual void SetIntegrationDirection(int)
Specify whether the streamtrace will be generated in the upstream or downstream direction.
static vtkGenericStreamTracer * New()
Construct object to start from position (0,0,0), integrate forward, terminal speed 1....
void SetMaximumPropagation(int unit, double max)
Specify the maximum length of the streamlines expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT = 1 ...
void SetMaximumIntegrationStepUnitToLengthUnit()
Specify the maximum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
~vtkGenericStreamTracer() override
double GetMinimumIntegrationStep()
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetInitialIntegrationStep(int unit, double step)
Specify the initial step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetMinimumIntegrationStepUnitToTimeUnit()
Specify the minimum step used in the integration expressed in one of the: TIME_UNIT = 0 LENGTH_UNIT =...
void SetInterpolatorPrototype(vtkGenericInterpolatedVelocityField *ivf)
The object used to interpolate the velocity field during integration is of the same class as this pro...
vtkDataSet * GetSource()
Specify the source object used to generate starting points.
list of point or cell ids
Definition vtkIdList.h:24
a simple class to control print indentation
Definition vtkIndent.h:29
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Integrate a set of ordinary differential equations (initial value problem) in time.
dynamic, self-adjusting array of int
Definition vtkIntArray.h:35
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:72
static vtkInformationDoubleKey * EPSILON()
For location selection of points, if distance is greater than this reject.
int vtkTypeBool
Definition vtkABI.h:64
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define vtkDataArray
double MaximumError
int vtkIdType
Definition vtkType.h:368
#define max(a, b)