1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkHierarchicalBoxDataSet.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 vtkHierarchicalBoxDataSet - hierarchical dataset of vtkUniformGrids
// .SECTION Description
// vtkHierarchicalBoxDataSet is a concrete implementation of
// vtkHierarchicalDataSet. The dataset type is restricted to
// vtkUniformGrid. Each dataset has an associated vtkAMRBox that represents
// it's region (similar to extent) in space.
// .SECTION Warning
// To compute the cellId of a cell within a vtkUniformGrid with AMRBox=box,
// you should not use vtkUniformGrid::ComputeCellId( {x,y,z} ) but instead
// use the following pseudo code:
// for (int i=0; i<3; i++)
// {
// cellDims[i] = box.HiCorner[i] - box.LoCorner[i] + 1;
// }
// vtkIdType cellId =
// (z-box.LoCorner[2])*cellDims[0]*cellDims[1] +
// (y-box.LoCorner[1])*cellDims[0] +
// (x-box.LoCorner[0]);
#ifndef __vtkHierarchicalBoxDataSet_h
#define __vtkHierarchicalBoxDataSet_h
#include "vtkHierarchicalDataSet.h"
//BTX
struct vtkHierarchicalBoxDataSetInternal;
//ETX
class vtkDataObject;
class vtkInformationIdTypeKey;
class vtkUniformGrid;
class vtkAMRBox;
class VTK_FILTERING_EXPORT vtkHierarchicalBoxDataSet : public vtkHierarchicalDataSet
{
public:
static vtkHierarchicalBoxDataSet *New();
vtkTypeRevisionMacro(vtkHierarchicalBoxDataSet,vtkHierarchicalDataSet);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Return class name of data type (see vtkType.h for definitions).
virtual int GetDataObjectType() {return VTK_HIERARCHICAL_BOX_DATA_SET;}
//BTX
// Description:
// Set the dataset pointer for a given node. This method does
// not remove the existing parent/child links. It only replaces
// the dataset pointer.
void SetDataSet(unsigned int level, unsigned int id,
vtkAMRBox& box, vtkUniformGrid* dataSet);
void SetDataSet(unsigned int level, unsigned int id, vtkDataObject* dataSet)
{
this->Superclass::SetDataSet(level, id, dataSet);
}
// Description:
// Get a dataset given a level and an id.
vtkUniformGrid* GetDataSet(unsigned int level,
unsigned int id,
vtkAMRBox& box);
//ETX
vtkDataObject* GetDataSet(unsigned int level, unsigned int id)
{ return this->Superclass::GetDataSet(level, id); }
vtkDataObject* GetDataSet(vtkInformation* index)
{ return this->Superclass::GetDataSet(index); }
// Description:
// Sets the refinement of a given level. The spacing at level
// level+1 is defined as spacing(level+1) = spacing(level)/refRatio(level).
// Note that currently, this is not enforced by this class however
// some algorithms might not function properly if the spacing in
// the blocks (vtkUniformGrid) does not match the one described
// by the refinement ratio.
void SetRefinementRatio(unsigned int level, int refRatio);
// Description:
// Returns the refinement of a given level.
int GetRefinementRatio(unsigned int level);
// Description:
// Blank lower level cells if they are overlapped by higher
// level ones.
void GenerateVisibilityArrays();
// Description:
// Shallow and Deep copy.
virtual void ShallowCopy(vtkDataObject *src);
virtual void DeepCopy(vtkDataObject *src);
static vtkInformationIntegerVectorKey* BOX();
static vtkInformationIdTypeKey* NUMBER_OF_BLANKED_POINTS();
// Description:
// Returns the total number of points of all blocks. This will
// iterate over all blocks and call GetNumberOfPoints() so it
// might be expensive. Does not include the number of blanked
// points.
virtual vtkIdType GetNumberOfPoints();
//BTX
// Description:
// Retrieve an instance of this class from an information object.
static vtkHierarchicalBoxDataSet* GetData(vtkInformation* info);
static vtkHierarchicalBoxDataSet* GetData(vtkInformationVector* v, int i=0);
//ETX
// Description:
// Copy the cached scalar range into range.
virtual void GetScalarRange(double range[2]);
// Description:
// Return the cached range.
virtual double *GetScalarRange();
protected:
vtkHierarchicalBoxDataSet();
~vtkHierarchicalBoxDataSet();
// Description:
// Compute the range of the scalars and cache it into ScalarRange
// only if the cache became invalid (ScalarRangeComputeTime).
virtual void ComputeScalarRange();
vtkHierarchicalBoxDataSetInternal* BoxInternal;
// Cached scalar range
double ScalarRange[2];
// Time at which scalar range is computed
vtkTimeStamp ScalarRangeComputeTime;
private:
vtkHierarchicalBoxDataSet(const vtkHierarchicalBoxDataSet&); // Not implemented.
void operator=(const vtkHierarchicalBoxDataSet&); // Not implemented.
};
#endif
|