Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

Graphics/vtkHyperStreamline.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkHyperStreamline.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00054 #ifndef __vtkHyperStreamline_h
00055 #define __vtkHyperStreamline_h
00056 
00057 #include "vtkDataSetToPolyDataFilter.h"
00058 
00059 #define VTK_INTEGRATE_FORWARD 0
00060 #define VTK_INTEGRATE_BACKWARD 1
00061 #define VTK_INTEGRATE_BOTH_DIRECTIONS 2
00062 
00063 #define VTK_INTEGRATE_MAJOR_EIGENVECTOR 0
00064 #define VTK_INTEGRATE_MEDIUM_EIGENVECTOR 1
00065 #define VTK_INTEGRATE_MINOR_EIGENVECTOR 2
00066 
00067 
00068 class vtkHyperArray;
00069 
00070 class VTK_GRAPHICS_EXPORT vtkHyperStreamline : public vtkDataSetToPolyDataFilter
00071 {
00072 public:
00073   vtkTypeRevisionMacro(vtkHyperStreamline,vtkDataSetToPolyDataFilter);
00074   void PrintSelf(ostream& os, vtkIndent indent);
00075 
00080   static vtkHyperStreamline *New();
00081 
00085   void SetStartLocation(vtkIdType cellId, int subId, float pcoords[3]);
00086 
00088 
00091   void SetStartLocation(vtkIdType cellId, int subId, float r, float s,
00092                         float t);
00094 
00097   vtkIdType GetStartLocation(int& subId, float pcoords[3]);
00098 
00102   void SetStartPosition(float x[3]);
00103 
00107   void SetStartPosition(float x, float y, float z);
00108 
00111   float *GetStartPosition();
00112 
00114 
00116   vtkSetClampMacro(MaximumPropagationDistance,float,0.0,VTK_LARGE_FLOAT);
00117   vtkGetMacro(MaximumPropagationDistance,float);
00119 
00121 
00128   vtkSetClampMacro(IntegrationEigenvector,int,
00129                    VTK_INTEGRATE_MAJOR_EIGENVECTOR,
00130                    VTK_INTEGRATE_MINOR_EIGENVECTOR);
00131   vtkGetMacro(IntegrationEigenvector,int);
00132   void SetIntegrationEigenvectorToMajor()
00133     {this->SetIntegrationEigenvector(VTK_INTEGRATE_MAJOR_EIGENVECTOR);};
00134   void SetIntegrationEigenvectorToMedium()
00135     {this->SetIntegrationEigenvector(VTK_INTEGRATE_MEDIUM_EIGENVECTOR);};
00136   void SetIntegrationEigenvectorToMinor()
00137     {this->SetIntegrationEigenvector(VTK_INTEGRATE_MINOR_EIGENVECTOR);};
00139 
00141 
00144   void IntegrateMajorEigenvector()
00145     {this->SetIntegrationEigenvectorToMajor();};
00147 
00149 
00152   void IntegrateMediumEigenvector()
00153     {this->SetIntegrationEigenvectorToMedium();};
00155 
00157 
00160   void IntegrateMinorEigenvector()
00161     {this->SetIntegrationEigenvectorToMinor();};
00163 
00165 
00167   vtkSetClampMacro(IntegrationStepLength,float,0.001,0.5);
00168   vtkGetMacro(IntegrationStepLength,float);
00170 
00172 
00175   vtkSetClampMacro(StepLength,float,0.000001,1.0);
00176   vtkGetMacro(StepLength,float);
00178 
00180 
00181   vtkSetClampMacro(IntegrationDirection,int,
00182                   VTK_INTEGRATE_FORWARD,VTK_INTEGRATE_BOTH_DIRECTIONS);
00183   vtkGetMacro(IntegrationDirection,int);
00184   void SetIntegrationDirectionToForward()
00185     {this->SetIntegrationDirection(VTK_INTEGRATE_FORWARD);};
00186   void SetIntegrationDirectionToBackward()
00187     {this->SetIntegrationDirection(VTK_INTEGRATE_BACKWARD);};
00188   void SetIntegrationDirectionToIntegrateBothDirections()
00189     {this->SetIntegrationDirection(VTK_INTEGRATE_BOTH_DIRECTIONS);};
00191 
00193 
00195   vtkSetClampMacro(TerminalEigenvalue,float,0.0,VTK_LARGE_FLOAT);
00196   vtkGetMacro(TerminalEigenvalue,float);
00198 
00200 
00202   vtkSetClampMacro(NumberOfSides,int,3,VTK_LARGE_INTEGER);
00203   vtkGetMacro(NumberOfSides,int);
00205 
00207 
00211   vtkSetClampMacro(Radius,float,0.0001,VTK_LARGE_FLOAT);
00212   vtkGetMacro(Radius,float);
00214 
00216 
00218   vtkSetMacro(LogScaling,int);
00219   vtkGetMacro(LogScaling,int);
00220   vtkBooleanMacro(LogScaling,int);
00222 
00223 protected:
00224   vtkHyperStreamline();
00225   ~vtkHyperStreamline();
00226 
00227   // Integrate data
00228   void Execute();
00229   void BuildTube();
00230 
00231   // Flag indicates where streamlines start from (either position or location)
00232   int StartFrom;
00233 
00234   // Starting from cell location
00235   vtkIdType StartCell;
00236   int StartSubId;
00237   float StartPCoords[3];
00238 
00239   // starting from global x-y-z position
00240   float StartPosition[3];
00241 
00242   //array of hyperstreamlines
00243   vtkHyperArray *Streamers;
00244   int NumberOfStreamers;
00245 
00246   // length of hyperstreamline in absolute distance
00247   float MaximumPropagationDistance;
00248 
00249   // integration direction
00250   int IntegrationDirection;
00251 
00252   // the length (fraction of cell size) of integration steps
00253   float IntegrationStepLength;
00254 
00255   // the length of the tube segments composing the hyperstreamline
00256   float StepLength;
00257 
00258   // terminal propagation speed
00259   float TerminalEigenvalue;
00260 
00261   // number of sides of tube
00262   int NumberOfSides;
00263 
00264   // maximum radius of tube
00265   float Radius;
00266 
00267   // boolean controls whether scaling is clamped
00268   int LogScaling;
00269 
00270   // which eigenvector to use as integration vector field
00271   int IntegrationEigenvector;
00272 private:
00273   vtkHyperStreamline(const vtkHyperStreamline&);  // Not implemented.
00274   void operator=(const vtkHyperStreamline&);  // Not implemented.
00275 };
00276 
00277 #endif
00278 
00279