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 
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 "vtkDataSetToPolyDataFilter.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 vtkDataSetToPolyDataFilter
00067 {
00068 public:
00069   vtkTypeRevisionMacro(vtkHyperStreamline,vtkDataSetToPolyDataFilter);
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   void Execute();
00225   void BuildTube();
00226 
00227   // Flag indicates where streamlines start from (either position or location)
00228   int StartFrom;
00229 
00230   // Starting from cell location
00231   vtkIdType StartCell;
00232   int StartSubId;
00233   double StartPCoords[3];
00234 
00235   // starting from global x-y-z position
00236   double StartPosition[3];
00237 
00238   //array of hyperstreamlines
00239   vtkHyperArray *Streamers;
00240   int NumberOfStreamers;
00241 
00242   // length of hyperstreamline in absolute distance
00243   double MaximumPropagationDistance;
00244 
00245   // integration direction
00246   int IntegrationDirection;
00247 
00248   // the length (fraction of cell size) of integration steps
00249   double IntegrationStepLength;
00250 
00251   // the length of the tube segments composing the hyperstreamline
00252   double StepLength;
00253 
00254   // terminal propagation speed
00255   double TerminalEigenvalue;
00256 
00257   // number of sides of tube
00258   int NumberOfSides;
00259 
00260   // maximum radius of tube
00261   double Radius;
00262 
00263   // boolean controls whether scaling is clamped
00264   int LogScaling;
00265 
00266   // which eigenvector to use as integration vector field
00267   int IntegrationEigenvector;
00268 private:
00269   vtkHyperStreamline(const vtkHyperStreamline&);  // Not implemented.
00270   void operator=(const vtkHyperStreamline&);  // Not implemented.
00271 };
00272 
00273 #endif
00274 
00275