VTK
/Users/kitware/Dashboards/MyTests/VTK_BLD_Release_docs/Utilities/Doxygen/dox/Common/ExecutionModel/vtkExtentTranslator.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    vtkExtentTranslator.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 =========================================================================*/
00027 #ifndef vtkExtentTranslator_h
00028 #define vtkExtentTranslator_h
00029 
00030 #include "vtkCommonExecutionModelModule.h" // For export macro
00031 #include "vtkObject.h"
00032 
00033 class vtkInformationIntegerRequestKey;
00034 class vtkInformationIntegerKey;
00035 
00036 class VTKCOMMONEXECUTIONMODEL_EXPORT vtkExtentTranslator : public vtkObject
00037 {
00038 public:
00039   static vtkExtentTranslator *New();
00040 
00041   vtkTypeMacro(vtkExtentTranslator,vtkObject);
00042   void PrintSelf(ostream& os, vtkIndent indent);
00043 
00045 
00047   vtkSetVector6Macro(WholeExtent, int);
00048   vtkGetVector6Macro(WholeExtent, int);
00049   vtkSetVector6Macro(Extent, int);
00050   vtkGetVector6Macro(Extent, int);
00051   vtkSetMacro(Piece,int);
00052   vtkGetMacro(Piece,int);
00053   vtkSetMacro(NumberOfPieces,int);
00054   vtkGetMacro(NumberOfPieces,int);
00055   vtkSetMacro(GhostLevel, int);
00056   vtkGetMacro(GhostLevel, int);
00058 
00060 
00065   virtual int PieceToExtent();
00066   virtual int PieceToExtentByPoints();
00067   virtual int PieceToExtentThreadSafe(int piece, int numPieces,
00068                                       int ghostLevel, int *wholeExtent,
00069                                       int *resultExtent, int splitMode,
00070                                       int byPoints);
00072 
00073 
00074 
00076 
00080   void SetSplitModeToBlock()
00081     {this->SplitMode = vtkExtentTranslator::BLOCK_MODE;}
00082   void SetSplitModeToXSlab()
00083     {this->SplitMode = vtkExtentTranslator::X_SLAB_MODE;}
00084   void SetSplitModeToYSlab()
00085     {this->SplitMode = vtkExtentTranslator::Y_SLAB_MODE;}
00086   void SetSplitModeToZSlab()
00087     {this->SplitMode = vtkExtentTranslator::Z_SLAB_MODE;}
00088   vtkGetMacro(SplitMode,int);
00090 
00097   void SetSplitPath(int len, int *splitpath);
00098 
00099   // Don't change the numbers here - they are used in the code
00100   // to indicate array indices.
00101   enum Modes
00102   {
00103     X_SLAB_MODE=0,
00104     Y_SLAB_MODE=1,
00105     Z_SLAB_MODE=2,
00106     BLOCK_MODE= 3
00107   };
00108 
00111   static vtkInformationIntegerRequestKey* UPDATE_SPLIT_MODE();
00112 
00113 protected:
00114   vtkExtentTranslator();
00115   ~vtkExtentTranslator();
00116 
00117   static vtkInformationIntegerKey* DATA_SPLIT_MODE();
00118 
00119   friend class vtkInformationSplitModeRequestKey;
00120 
00122 
00124   int SplitExtent(int piece, int numPieces, int *extent, int splitMode);
00125   int SplitExtentByPoints(int piece, int numPieces, int *extent,
00126                           int splitMode);
00128 
00129   int Piece;
00130   int NumberOfPieces;
00131   int GhostLevel;
00132   int Extent[6];
00133   int WholeExtent[6];
00134   int SplitMode;
00135 
00136   int* SplitPath;
00137   int SplitLen;
00138 
00139 private:
00140   vtkExtentTranslator(const vtkExtentTranslator&);  // Not implemented.
00141   void operator=(const vtkExtentTranslator&);  // Not implemented.
00142 };
00143 
00144 #endif