VTK
|
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