VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: vtkHyperStreamline.h 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00050 #ifndef __vtkHyperStreamline_h 00051 #define __vtkHyperStreamline_h 00052 00053 #include "vtkPolyDataAlgorithm.h" 00054 00055 #define VTK_INTEGRATE_FORWARD 0 00056 #define VTK_INTEGRATE_BACKWARD 1 00057 #define VTK_INTEGRATE_BOTH_DIRECTIONS 2 00058 00059 #define VTK_INTEGRATE_MAJOR_EIGENVECTOR 0 00060 #define VTK_INTEGRATE_MEDIUM_EIGENVECTOR 1 00061 #define VTK_INTEGRATE_MINOR_EIGENVECTOR 2 00062 00063 00064 class vtkHyperArray; 00065 00066 class VTK_GRAPHICS_EXPORT vtkHyperStreamline : public vtkPolyDataAlgorithm 00067 { 00068 public: 00069 vtkTypeMacro(vtkHyperStreamline,vtkPolyDataAlgorithm); 00070 void PrintSelf(ostream& os, vtkIndent indent); 00071 00076 static vtkHyperStreamline *New(); 00077 00081 void SetStartLocation(vtkIdType cellId, int subId, double pcoords[3]); 00082 00084 00087 void SetStartLocation(vtkIdType cellId, int subId, double r, double s, 00088 double t); 00090 00093 vtkIdType GetStartLocation(int& subId, double pcoords[3]); 00094 00098 void SetStartPosition(double x[3]); 00099 00103 void SetStartPosition(double x, double y, double z); 00104 00107 double *GetStartPosition(); 00108 00110 00112 vtkSetClampMacro(MaximumPropagationDistance,double,0.0,VTK_DOUBLE_MAX); 00113 vtkGetMacro(MaximumPropagationDistance,double); 00115 00117 00124 vtkSetClampMacro(IntegrationEigenvector,int, 00125 VTK_INTEGRATE_MAJOR_EIGENVECTOR, 00126 VTK_INTEGRATE_MINOR_EIGENVECTOR); 00127 vtkGetMacro(IntegrationEigenvector,int); 00128 void SetIntegrationEigenvectorToMajor() 00129 {this->SetIntegrationEigenvector(VTK_INTEGRATE_MAJOR_EIGENVECTOR);}; 00130 void SetIntegrationEigenvectorToMedium() 00131 {this->SetIntegrationEigenvector(VTK_INTEGRATE_MEDIUM_EIGENVECTOR);}; 00132 void SetIntegrationEigenvectorToMinor() 00133 {this->SetIntegrationEigenvector(VTK_INTEGRATE_MINOR_EIGENVECTOR);}; 00135 00137 00140 void IntegrateMajorEigenvector() 00141 {this->SetIntegrationEigenvectorToMajor();}; 00143 00145 00148 void IntegrateMediumEigenvector() 00149 {this->SetIntegrationEigenvectorToMedium();}; 00151 00153 00156 void IntegrateMinorEigenvector() 00157 {this->SetIntegrationEigenvectorToMinor();}; 00159 00161 00163 vtkSetClampMacro(IntegrationStepLength,double,0.001,0.5); 00164 vtkGetMacro(IntegrationStepLength,double); 00166 00168 00171 vtkSetClampMacro(StepLength,double,0.000001,1.0); 00172 vtkGetMacro(StepLength,double); 00174 00176 00177 vtkSetClampMacro(IntegrationDirection,int, 00178 VTK_INTEGRATE_FORWARD,VTK_INTEGRATE_BOTH_DIRECTIONS); 00179 vtkGetMacro(IntegrationDirection,int); 00180 void SetIntegrationDirectionToForward() 00181 {this->SetIntegrationDirection(VTK_INTEGRATE_FORWARD);}; 00182 void SetIntegrationDirectionToBackward() 00183 {this->SetIntegrationDirection(VTK_INTEGRATE_BACKWARD);}; 00184 void SetIntegrationDirectionToIntegrateBothDirections() 00185 {this->SetIntegrationDirection(VTK_INTEGRATE_BOTH_DIRECTIONS);}; 00187 00189 00191 vtkSetClampMacro(TerminalEigenvalue,double,0.0,VTK_DOUBLE_MAX); 00192 vtkGetMacro(TerminalEigenvalue,double); 00194 00196 00198 vtkSetClampMacro(NumberOfSides,int,3,VTK_LARGE_INTEGER); 00199 vtkGetMacro(NumberOfSides,int); 00201 00203 00207 vtkSetClampMacro(Radius,double,0.0001,VTK_DOUBLE_MAX); 00208 vtkGetMacro(Radius,double); 00210 00212 00214 vtkSetMacro(LogScaling,int); 00215 vtkGetMacro(LogScaling,int); 00216 vtkBooleanMacro(LogScaling,int); 00218 00219 protected: 00220 vtkHyperStreamline(); 00221 ~vtkHyperStreamline(); 00222 00223 // Integrate data 00224 virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); 00225 int BuildTube(vtkDataSet *input, vtkPolyData *output); 00226 00227 virtual int FillInputPortInformation(int port, vtkInformation *info); 00228 00229 // Flag indicates where streamlines start from (either position or location) 00230 int StartFrom; 00231 00232 // Starting from cell location 00233 vtkIdType StartCell; 00234 int StartSubId; 00235 double StartPCoords[3]; 00236 00237 // starting from global x-y-z position 00238 double StartPosition[3]; 00239 00240 //array of hyperstreamlines 00241 vtkHyperArray *Streamers; 00242 int NumberOfStreamers; 00243 00244 // length of hyperstreamline in absolute distance 00245 double MaximumPropagationDistance; 00246 00247 // integration direction 00248 int IntegrationDirection; 00249 00250 // the length (fraction of cell size) of integration steps 00251 double IntegrationStepLength; 00252 00253 // the length of the tube segments composing the hyperstreamline 00254 double StepLength; 00255 00256 // terminal propagation speed 00257 double TerminalEigenvalue; 00258 00259 // number of sides of tube 00260 int NumberOfSides; 00261 00262 // maximum radius of tube 00263 double Radius; 00264 00265 // boolean controls whether scaling is clamped 00266 int LogScaling; 00267 00268 // which eigenvector to use as integration vector field 00269 int IntegrationEigenvector; 00270 private: 00271 vtkHyperStreamline(const vtkHyperStreamline&); // Not implemented. 00272 void operator=(const vtkHyperStreamline&); // Not implemented. 00273 }; 00274 00275 #endif