VTK
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=========================================================================*/
51#ifndef vtkHyperStreamline_h
52#define vtkHyperStreamline_h
53
54#include "vtkFiltersGeneralModule.h" // For export macro
56
57#define VTK_INTEGRATE_FORWARD 0
58#define VTK_INTEGRATE_BACKWARD 1
59#define VTK_INTEGRATE_BOTH_DIRECTIONS 2
60
61#define VTK_INTEGRATE_MAJOR_EIGENVECTOR 0
62#define VTK_INTEGRATE_MEDIUM_EIGENVECTOR 1
63#define VTK_INTEGRATE_MINOR_EIGENVECTOR 2
64
65
66class vtkHyperArray;
67
68class VTKFILTERSGENERAL_EXPORT vtkHyperStreamline : public vtkPolyDataAlgorithm
69{
70public:
72 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
73
81
86 void SetStartLocation(vtkIdType cellId, int subId, double pcoords[3]);
87
92 void SetStartLocation(vtkIdType cellId, int subId, double r, double s,
93 double t);
94
99 vtkIdType GetStartLocation(int& subId, double pcoords[3]);
100
106 void SetStartPosition(double x[3]);
107
113 void SetStartPosition(double x, double y, double z);
114
119
121
125 vtkSetClampMacro(MaximumPropagationDistance,double,0.0,VTK_DOUBLE_MAX);
126 vtkGetMacro(MaximumPropagationDistance,double);
128
130
140 vtkSetClampMacro(IntegrationEigenvector,int,
143 vtkGetMacro(IntegrationEigenvector,int);
145 {this->SetIntegrationEigenvector(VTK_INTEGRATE_MAJOR_EIGENVECTOR);};
147 {this->SetIntegrationEigenvector(VTK_INTEGRATE_MEDIUM_EIGENVECTOR);};
149 {this->SetIntegrationEigenvector(VTK_INTEGRATE_MINOR_EIGENVECTOR);};
151
158 {this->SetIntegrationEigenvectorToMajor();};
159
167 {this->SetIntegrationEigenvectorToMedium();};
168
175 {this->SetIntegrationEigenvectorToMinor();};
176
178
182 vtkSetClampMacro(IntegrationStepLength,double,0.001,0.5);
183 vtkGetMacro(IntegrationStepLength,double);
185
187
192 vtkSetClampMacro(StepLength,double,0.000001,1.0);
193 vtkGetMacro(StepLength,double);
195
197
200 vtkSetClampMacro(IntegrationDirection,int,
202 vtkGetMacro(IntegrationDirection,int);
204 {this->SetIntegrationDirection(VTK_INTEGRATE_FORWARD);};
206 {this->SetIntegrationDirection(VTK_INTEGRATE_BACKWARD);};
208 {this->SetIntegrationDirection(VTK_INTEGRATE_BOTH_DIRECTIONS);};
210
212
216 vtkSetClampMacro(TerminalEigenvalue,double,0.0,VTK_DOUBLE_MAX);
217 vtkGetMacro(TerminalEigenvalue,double);
219
221
225 vtkSetClampMacro(NumberOfSides,int,3,VTK_INT_MAX);
226 vtkGetMacro(NumberOfSides,int);
228
230
236 vtkSetClampMacro(Radius,double,0.0001,VTK_DOUBLE_MAX);
237 vtkGetMacro(Radius,double);
239
241
245 vtkSetMacro(LogScaling,int);
246 vtkGetMacro(LogScaling,int);
247 vtkBooleanMacro(LogScaling,int);
249
250protected:
252 ~vtkHyperStreamline() VTK_OVERRIDE;
253
254 // Integrate data
255 int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE;
256 int BuildTube(vtkDataSet *input, vtkPolyData *output);
257
258 int FillInputPortInformation(int port, vtkInformation *info) VTK_OVERRIDE;
259
260 // Flag indicates where streamlines start from (either position or location)
261 int StartFrom;
262
263 // Starting from cell location
264 vtkIdType StartCell;
265 int StartSubId;
266 double StartPCoords[3];
267
268 // starting from global x-y-z position
269 double StartPosition[3];
270
271 //array of hyperstreamlines
272 vtkHyperArray *Streamers;
273 int NumberOfStreamers;
274
275 // length of hyperstreamline in absolute distance
276 double MaximumPropagationDistance;
277
278 // integration direction
279 int IntegrationDirection;
280
281 // the length (fraction of cell size) of integration steps
282 double IntegrationStepLength;
283
284 // the length of the tube segments composing the hyperstreamline
285 double StepLength;
286
287 // terminal propagation speed
288 double TerminalEigenvalue;
289
290 // number of sides of tube
291 int NumberOfSides;
292
293 // maximum radius of tube
294 double Radius;
295
296 // boolean controls whether scaling is clamped
297 int LogScaling;
298
299 // which eigenvector to use as integration vector field
300 int IntegrationEigenvector;
301private:
302 vtkHyperStreamline(const vtkHyperStreamline&) VTK_DELETE_FUNCTION;
303 void operator=(const vtkHyperStreamline&) VTK_DELETE_FUNCTION;
304};
305
306#endif
abstract class to specify dataset behavior
Definition: vtkDataSet.h:63
generate hyperstreamline in arbitrary dataset
void SetIntegrationEigenvectorToMajor()
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
void SetIntegrationDirectionToBackward()
void SetIntegrationEigenvectorToMedium()
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()
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()
void IntegrateMajorEigenvector()
Use the major eigenvector field as the vector field through which to integrate.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetIntegrationEigenvectorToMinor()
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:40
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:376
@ port
Definition: vtkX3D.h:447
#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
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
int vtkIdType
Definition: vtkType.h:287
#define VTK_DOUBLE_MAX
Definition: vtkType.h:163
#define VTK_INT_MAX
Definition: vtkType.h:153