VTK
dox/Filters/ParallelFlowPaths/vtkPStreamTracer.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkPStreamTracer.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 =========================================================================*/
00029 #ifndef __vtkPStreamTracer_h
00030 #define __vtkPStreamTracer_h
00031 
00032 #include "vtkStreamTracer.h"
00033 #include "vtkSmartPointer.h" // This is a leaf node. No need to use PIMPL to avoid compile time penalty.
00034 
00035 class vtkAbstractInterpolatedVelocityField;
00036 class vtkMultiProcessController;
00037 
00038 class PStreamTracerPoint;
00039 class vtkOverlappingAMR;
00040 class AbstractPStreamTracerUtils;
00041 
00042 #include "vtkFiltersParallelFlowPathsModule.h" // For export macro
00043 
00044 class  VTKFILTERSPARALLELFLOWPATHS_EXPORT vtkPStreamTracer : public vtkStreamTracer
00045 {
00046 public:
00047   vtkTypeMacro(vtkPStreamTracer,vtkStreamTracer);
00048   virtual void PrintSelf(ostream& os, vtkIndent indent);
00049 
00051 
00054   virtual void SetController(vtkMultiProcessController* controller);
00055   vtkGetObjectMacro(Controller, vtkMultiProcessController);
00057 
00058   static vtkPStreamTracer * New();
00059 
00060 protected:
00061 
00062   vtkPStreamTracer();
00063   ~vtkPStreamTracer();
00064 
00065   virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00066   virtual int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00067   virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
00068 
00069   vtkMultiProcessController* Controller;
00070 
00071   vtkAbstractInterpolatedVelocityField* Interpolator;
00072   void SetInterpolator(vtkAbstractInterpolatedVelocityField*);
00073 
00074   int EmptyData;
00075 private:
00076   vtkPStreamTracer(const vtkPStreamTracer&);  // Not implemented.
00077   void operator=(const vtkPStreamTracer&);  // Not implemented.
00078 
00079   void Trace( vtkDataSet *input,
00080               int vecType,
00081               const char* vecName,
00082               PStreamTracerPoint* pt,
00083               vtkSmartPointer<vtkPolyData>& output,
00084               vtkAbstractInterpolatedVelocityField* func,
00085               int maxCellSize);
00086 
00087   bool TraceOneStep(vtkPolyData* traceOut,  vtkAbstractInterpolatedVelocityField*, PStreamTracerPoint* pt);
00088 
00089   void Prepend(vtkPolyData* path, vtkPolyData* headh);
00090   int Rank;
00091   int NumProcs;
00092 
00093   friend class AbstractPStreamTracerUtils;
00094   vtkSmartPointer<AbstractPStreamTracerUtils> Utils;
00095 };
00096 #endif