Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

116 lines
4.2 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkExtentSplitter.h,v $
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.
=========================================================================*/
// .NAME vtkExtentSplitter - Split an extent across other extents.
// .SECTION Description
// vtkExtentSplitter splits each input extent into non-overlapping
// sub-extents that are completely contained within other "source
// extents". A source extent corresponds to some resource providing
// an extent. Each source extent has an integer identifier, integer
// priority, and an extent. The input extents are split into
// sub-extents according to priority, availability, and amount of
// overlap of the source extents. This can be used by parallel data
// readers to read as few piece files as possible.
#ifndef __vtkExtentSplitter_h
#define __vtkExtentSplitter_h
#include "vtkObject.h"
class vtkExtentSplitterInternals;
class VTK_COMMON_EXPORT vtkExtentSplitter : public vtkObject
{
public:
vtkTypeRevisionMacro(vtkExtentSplitter,vtkObject);
void PrintSelf(ostream& os, vtkIndent indent);
static vtkExtentSplitter *New();
// Description:
// Add/Remove a source providing the given extent. Sources with
// higher priority numbers are favored. Source id numbers and
// priorities must be non-negative.
void AddExtentSource(int id, int priority, int x0, int x1,
int y0, int y1, int z0, int z1);
void AddExtentSource(int id, int priority, int* extent);
void RemoveExtentSource(int id);
void RemoveAllExtentSources();
// Description:
// Add an extent to the queue of extents to be split among the
// available sources.
void AddExtent(int x0, int x1, int y0, int y1, int z0, int z1);
void AddExtent(int* extent);
// Description:
// Split the extents currently in the queue among the available
// sources. The queue is empty when this returns. Returns 1 if all
// extents could be read. Returns 0 if any portion of any extent
// was not available through any source.
int ComputeSubExtents();
// Description:
// Get the number of sub-extents into which the original set of
// extents have been split across the available sources. Valid
// after a call to ComputeSubExtents.
int GetNumberOfSubExtents();
// Description:
// Get the sub-extent associated with the given index. Use
// GetSubExtentSource to get the id of the source from which this
// sub-extent should be read. Valid after a call to
// ComputeSubExtents.
int* GetSubExtent(int index);
void GetSubExtent(int index, int* extent);
// Description:
// Get the id of the source from which the sub-extent associated
// with the given index should be read. Returns -1 if no source
// provides the sub-extent.
int GetSubExtentSource(int index);
// Description:
// Get/Set whether "point mode" is on. In point mode, sub-extents
// are generated to ensure every point in the update request is
// read, but not necessarily every cell. This can be used when
// point data are stored in a planar slice per piece with no cell
// data. The default is OFF.
vtkGetMacro(PointMode, int);
vtkSetMacro(PointMode, int);
vtkBooleanMacro(PointMode, int);
protected:
vtkExtentSplitter();
~vtkExtentSplitter();
// Internal utility methods.
void SplitExtent(int* extent, int* subextent);
int IntersectExtents(const int* extent1, const int* extent2, int* result);
int Min(int a, int b);
int Max(int a, int b);
// Internal implementation data.
vtkExtentSplitterInternals* Internal;
// On if reading only all points (but not always all cells) is
// necessary. Used for reading volumes of planar slices storing
// only point data.
int PointMode;
private:
vtkExtentSplitter(const vtkExtentSplitter&); // Not implemented.
void operator=(const vtkExtentSplitter&); // Not implemented.
};
#endif