VTK  9.3.1
vtkVectorFieldTopology.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
18 #ifndef vtkVectorFieldTopology_h
19 #define vtkVectorFieldTopology_h
20 
21 #include "vtkFiltersFlowPathsModule.h" // For export macro
22 #include "vtkPolyDataAlgorithm.h"
23 #include "vtkStreamTracer.h" // for vtkStreamSurface::CELL_LENGTH_UNIT
24 
25 VTK_ABI_NAMESPACE_BEGIN
26 class vtkGradientFilter;
27 class vtkImageData;
28 class vtkPolyData;
29 class vtkStreamSurface;
31 
32 class VTKFILTERSFLOWPATHS_EXPORT vtkVectorFieldTopology : public vtkPolyDataAlgorithm
33 {
34 public:
35  static vtkVectorFieldTopology* New();
37  void PrintSelf(ostream& os, vtkIndent indent) override;
38 
40 
46  vtkSetMacro(IntegrationStepUnit, int);
47  vtkGetMacro(IntegrationStepUnit, int);
49 
51 
54  vtkSetMacro(MaxNumSteps, int);
55  vtkGetMacro(MaxNumSteps, int);
57 
59 
63  vtkSetMacro(IntegrationStepSize, double);
64  vtkGetMacro(IntegrationStepSize, double);
66 
68 
72  vtkSetMacro(SeparatrixDistance, double);
73  vtkGetMacro(SeparatrixDistance, double);
75 
77 
80  vtkSetMacro(UseIterativeSeeding, bool);
81  vtkGetMacro(UseIterativeSeeding, bool);
83 
85 
88  vtkSetMacro(ComputeSurfaces, bool);
89  vtkGetMacro(ComputeSurfaces, bool);
91 
93 
96  vtkSetMacro(ExcludeBoundary, bool);
97  vtkGetMacro(ExcludeBoundary, bool);
99 
101 
104  vtkSetMacro(UseBoundarySwitchPoints, bool);
105  vtkGetMacro(UseBoundarySwitchPoints, bool);
107 
109 
118  vtkSetMacro(VectorAngleThreshold, double);
119  vtkGetMacro(VectorAngleThreshold, double);
121 
123 
126  vtkSetMacro(OffsetAwayFromBoundary, double);
127  vtkGetMacro(OffsetAwayFromBoundary, double);
129 
131 
134  vtkSetMacro(EpsilonCriticalPoint, double);
135  vtkGetMacro(EpsilonCriticalPoint, double);
137 
143  void SetInterpolatorType(int interpType);
144 
148  void SetInterpolatorTypeToCellLocator();
149 
153  void SetInterpolatorTypeToDataSetPointLocator();
154 
155 protected:
157  ~vtkVectorFieldTopology() override;
158 
159  int FillInputPortInformation(int port, vtkInformation* info) override;
162 
163 private:
165  void operator=(const vtkVectorFieldTopology&) = delete;
166 
170  int Validate();
171 
179  int ImageDataPrepare(vtkDataSet* dataSetInput, vtkUnstructuredGrid* tridataset);
180 
188  int UnstructuredGridPrepare(vtkDataSet* dataSetInput, vtkUnstructuredGrid* tridataset);
189 
195  int RemoveBoundary(vtkSmartPointer<vtkUnstructuredGrid> tridataset);
196 
204  int ComputeCriticalPoints2D(
206 
214  int ComputeCriticalPoints3D(
216 
227  static void InterpolateVector(
228  double x0, double x1, double x, const double v0[3], const double v1[3], double v[3]);
229 
236  int ComputeBoundarySwitchPoints(
237  vtkPolyData* boundarySwitchPoints, vtkUnstructuredGrid* tridataset);
238 
254  int ComputeSeparatricesBoundarySwitchPoints(vtkPolyData* boundarySwitchPoints,
255  vtkPolyData* separatrices, vtkDataSet* dataset, vtkPoints* interestPoints,
256  int integrationStepUnit, double dist, int maxNumSteps);
257 
275  int ComputeSeparatricesBoundarySwitchLines(vtkPolyData* boundarySwitchLines,
276  vtkPolyData* separatrices, vtkDataSet* dataset, int integrationStepUnit, double dist,
277  int maxNumSteps, bool computeSurfaces, bool useIterativeSeeding);
278 
297  int ComputeSeparatrices(vtkPolyData* criticalPoints, vtkPolyData* separatrices,
298  vtkPolyData* surfaces, vtkDataSet* dataset, vtkPoints* interestPoints, int integrationStepUnit,
299  double dist, double stepSize, int maxNumSteps, bool computeSurfaces, bool useIterativeSeeding);
300 
317  int ComputeSurface(int numberOfSeparatingSurfaces, bool isBackward, double normal[3],
318  double zeroPos[3], vtkPolyData* streamSurfaces, vtkDataSet* dataset, int integrationStepUnit,
319  double dist, double stepSize, int maxNumSteps, bool useIterativeSeeding);
320 
325  enum CriticalType2D
326  {
327  DEGENERATE_2D = -1,
328  SINK_2D = 0,
329  SADDLE_2D = 1,
330  SOURCE_2D = 2,
331  CENTER_2D = 3
332  };
333 
338  enum CriticalTypeDetailed2D
339  {
340  // DEGENERATE2D = -1,
341  ATTRACTING_NODE_2D = 0,
342  ATTRACTING_FOCUS_2D = 1,
343  NODE_SADDLE_2D = 2,
344  REPELLING_NODE_2D = 3,
345  REPELLING_FOCUS_2D = 4,
346  CENTER_DETAILED_2D = 5
347  };
348 
353  enum CriticalType3D
354  {
355  DEGENERATE_3D = -1,
356  SINK_3D = 0,
357  SADDLE_1_3D = 1,
358  SADDLE_2_3D = 2,
359  SOURCE_3D = 3,
360  CENTER_3D = 4
361  };
362 
367  enum CriticalTypeDetailed3D
368  {
369  ATTRACTING_NODE_3D = 0,
370  ATTRACTING_FOCUS_3D = 1,
371  NODE_SADDLE_1_3D = 2,
372  FOCUS_SADDLE_1_3D = 3,
373  NODE_SADDLE_2_3D = 4,
374  FOCUS_SADDLE_2_3D = 5,
375  REPELLING_NODE_3D = 6,
376  REPELLING_FOCUS_3D = 7,
377  CENTER_DETAILED_3D = 8
378  };
379 
387  static int Classify2D(int countComplex, int countPos, int countNeg);
388 
397  static int ClassifyDetailed2D(int countComplex, int countPos, int countNeg);
398 
407  static int Classify3D(int countComplex, int countPos, int countNeg);
408 
418  static int ClassifyDetailed3D(int countComplex, int countPos, int countNeg);
419 
423  int MaxNumSteps = 100;
424 
428  double IntegrationStepSize = 1;
429 
433  double SeparatrixDistance = 1;
434 
438  bool UseIterativeSeeding = false;
439 
443  bool ComputeSurfaces = false;
444 
448  const char* NameOfVectorArray;
449 
454  bool ExcludeBoundary = false;
455 
459  int Dimension = 2;
460 
468  int IntegrationStepUnit = vtkStreamTracer::CELL_LENGTH_UNIT;
469 
476  bool UseBoundarySwitchPoints = false;
477 
483 
492  double VectorAngleThreshold = 1;
493 
501  double OffsetAwayFromBoundary = 1e-3;
502 
506  double EpsilonCriticalPoint = 1e-10;
507 
508  vtkNew<vtkStreamSurface> StreamSurface;
509 };
510 VTK_ABI_NAMESPACE_END
511 #endif
Store vtkAlgorithm input/output information.
abstract class to specify dataset behavior
Definition: vtkDataSet.h:52
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
This is called by the superclass.
Extract the topological skeleton as output datasets.
Hold a reference to a vtkObjectBase instance.
Definition: vtkMeta.h:23
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
static vtkPolyDataAlgorithm * New()
Superclass for algorithms that produce only polydata as output.
a simple class to control print indentation
Definition: vtkIndent.h:28
topologically and geometrically regular array of data
Definition: vtkImageData.h:42
dataset represents arbitrary combinations of all possible cell types
A general filter for gradient estimation.
int FillOutputPortInformation(int port, vtkInformation *info) override
Fill the output port information objects for this algorithm.
int FillInputPortInformation(int port, vtkInformation *info) override
Fill the input port information objects for this algorithm.
Store zero or more vtkInformation instances.
Advect a stream surface in a vector field.
represent and manipulate 3D points
Definition: vtkPoints.h:28
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.