You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/3rd/VTK7.1/include/vtkExtentTranslator.h

154 lines
4.7 KiB
C

/*=========================================================================
Program: Visualization Toolkit
Module: vtkExtentTranslator.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkExtentTranslator
* @brief Generates a structured extent from unstructured.
*
*
* vtkExtentTranslator generates a structured extent from an unstructured
* extent. It uses a recursive scheme that splits the largest axis. A hard
* coded extent can be used for a starting point.
*/
#ifndef vtkExtentTranslator_h
#define vtkExtentTranslator_h
#include "vtkCommonExecutionModelModule.h" // For export macro
#include "vtkObject.h"
class vtkInformationIntegerRequestKey;
class vtkInformationIntegerKey;
class VTKCOMMONEXECUTIONMODEL_EXPORT vtkExtentTranslator : public vtkObject
{
public:
static vtkExtentTranslator *New();
vtkTypeMacro(vtkExtentTranslator,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
//@{
/**
* Set the Piece/NumPieces. Set the WholeExtent and then call PieceToExtent.
* The result can be obtained from the Extent ivar.
*/
vtkSetVector6Macro(WholeExtent, int);
vtkGetVector6Macro(WholeExtent, int);
vtkSetVector6Macro(Extent, int);
vtkGetVector6Macro(Extent, int);
vtkSetMacro(Piece,int);
vtkGetMacro(Piece,int);
vtkSetMacro(NumberOfPieces,int);
vtkGetMacro(NumberOfPieces,int);
vtkSetMacro(GhostLevel, int);
vtkGetMacro(GhostLevel, int);
//@}
//@{
/**
* These are the main methods that should be called. These methods
* are responsible for converting a piece to an extent. The signatures
* without arguments are only thread safe when each thread accesses a
* different instance. The signatures with arguments are fully thread
* safe.
*/
virtual int PieceToExtent();
virtual int PieceToExtentByPoints();
virtual int PieceToExtentThreadSafe(int piece, int numPieces,
int ghostLevel, int *wholeExtent,
int *resultExtent, int splitMode,
int byPoints);
//@}
/**
* How should the streamer break up extents. Block mode
* tries to break an extent up into cube blocks. It always chooses
* the largest axis to split.
* Slab mode first breaks up the Z axis. If it gets to one slice,
* then it starts breaking up other axes.
*/
void SetSplitModeToBlock()
{this->SplitMode = vtkExtentTranslator::BLOCK_MODE;}
void SetSplitModeToXSlab()
{this->SplitMode = vtkExtentTranslator::X_SLAB_MODE;}
void SetSplitModeToYSlab()
{this->SplitMode = vtkExtentTranslator::Y_SLAB_MODE;}
void SetSplitModeToZSlab()
{this->SplitMode = vtkExtentTranslator::Z_SLAB_MODE;}
vtkGetMacro(SplitMode,int);
/**
* By default the translator creates N structured subextents by repeatedly
* splitting the largest current dimension until there are N pieces.
* If you do not want it always split the largest dimension, for instance when the
* shortest dimension is the slowest changing and thus least coherent in memory,
* use this to tell the translator which dimensions to split.
*/
void SetSplitPath(int len, int *splitpath);
// Don't change the numbers here - they are used in the code
// to indicate array indices.
enum Modes
{
X_SLAB_MODE=0,
Y_SLAB_MODE=1,
Z_SLAB_MODE=2,
BLOCK_MODE= 3
};
/**
* Key used to request a particular split mode.
* This is used by vtkStreamingDemandDrivenPipeline.
*/
static vtkInformationIntegerRequestKey* UPDATE_SPLIT_MODE();
protected:
vtkExtentTranslator();
~vtkExtentTranslator() VTK_OVERRIDE;
static vtkInformationIntegerKey* DATA_SPLIT_MODE();
friend class vtkInformationSplitModeRequestKey;
//@{
/**
* Returns 0 if no data exist for a piece.
* The whole extent Should be passed in as the extent.
* It is modified to return the result.
*/
int SplitExtent(int piece, int numPieces, int *extent, int splitMode);
int SplitExtentByPoints(int piece, int numPieces, int *extent,
int splitMode);
//@}
int Piece;
int NumberOfPieces;
int GhostLevel;
int Extent[6];
int WholeExtent[6];
int SplitMode;
int* SplitPath;
int SplitLen;
private:
vtkExtentTranslator(const vtkExtentTranslator&) VTK_DELETE_FUNCTION;
void operator=(const vtkExtentTranslator&) VTK_DELETE_FUNCTION;
};
#endif