VTK
dox/Common/DataModel/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 "vtkCommonDataModelModule.h" // For export macro
00031 #include "vtkObject.h"
00032 
00033 
00034 class VTKCOMMONDATAMODEL_EXPORT vtkExtentTranslator : public vtkObject
00035 {
00036 public:
00037   static vtkExtentTranslator *New();
00038 
00039   vtkTypeMacro(vtkExtentTranslator,vtkObject);
00040   void PrintSelf(ostream& os, vtkIndent indent);
00041 
00043 
00045   vtkSetVector6Macro(WholeExtent, int);
00046   vtkGetVector6Macro(WholeExtent, int);
00047   vtkSetVector6Macro(Extent, int);
00048   vtkGetVector6Macro(Extent, int);
00049   vtkSetMacro(Piece,int);
00050   vtkGetMacro(Piece,int);
00051   vtkSetMacro(NumberOfPieces,int);
00052   vtkGetMacro(NumberOfPieces,int);
00053   vtkSetMacro(GhostLevel, int);
00054   vtkGetMacro(GhostLevel, int);
00056 
00058 
00063   virtual int PieceToExtent();
00064   virtual int PieceToExtentByPoints();
00065   virtual int PieceToExtentThreadSafe(int piece, int numPieces,
00066                                       int ghostLevel, int *wholeExtent,
00067                                       int *resultExtent, int splitMode,
00068                                       int byPoints);
00070 
00071 
00072 
00074 
00078   void SetSplitModeToBlock()
00079     {this->SplitMode = vtkExtentTranslator::BLOCK_MODE;}
00080   void SetSplitModeToXSlab()
00081     {this->SplitMode = vtkExtentTranslator::X_SLAB_MODE;}
00082  void SetSplitModeToYSlab()
00083     {this->SplitMode = vtkExtentTranslator::Y_SLAB_MODE;}
00084  void SetSplitModeToZSlab()
00085     {this->SplitMode = vtkExtentTranslator::Z_SLAB_MODE;}
00086   vtkGetMacro(SplitMode,int);
00088 
00095   void SetSplitPath(int len, int *splitpath);
00096 
00097 protected:
00098   vtkExtentTranslator();
00099   ~vtkExtentTranslator();
00100 
00102 
00104   int SplitExtent(int piece, int numPieces, int *extent, int splitMode);
00105   int SplitExtentByPoints(int piece, int numPieces, int *extent,
00106                           int splitMode);
00108 
00109   int Piece;
00110   int NumberOfPieces;
00111   int GhostLevel;
00112   int Extent[6];
00113   int WholeExtent[6];
00114   int SplitMode;
00115 
00116   int* SplitPath;
00117   int SplitLen;
00118 
00119 //BTX
00120   // Don't change the numbers here - they are used in the code
00121   // to indicate array indices.
00122   enum Modes {
00123     X_SLAB_MODE=0,
00124     Y_SLAB_MODE=1,
00125     Z_SLAB_MODE=2,
00126     BLOCK_MODE= 3
00127   };
00128 //ETX
00129 
00130 private:
00131   vtkExtentTranslator(const vtkExtentTranslator&);  // Not implemented.
00132   void operator=(const vtkExtentTranslator&);  // Not implemented.
00133 };
00134 
00135 #endif