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.

198 lines
5.8 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkOverlappingAMR.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 vtkOverlappingAMR
* @brief hierarchical dataset of vtkUniformGrids
*
*
* vtkOverlappingAMR extends vtkUniformGridAMR by exposing access to the
* amr meta data, which stores all structural information represented
* by an vtkAMRInformation object
*
* @sa
* vtkAMRInformation
*/
#ifndef vtkOverlappingAMR_h
#define vtkOverlappingAMR_h
#include "vtkCommonDataModelModule.h" // For export macro
#include "vtkUniformGridAMR.h"
class vtkAMRBox;
class vtkCompositeDataIterator;
class vtkUniformGrid;
class vtkAMRInformation;
class vtkInformationIdTypeKey;
class VTKCOMMONDATAMODEL_EXPORT vtkOverlappingAMR : public vtkUniformGridAMR
{
public:
static vtkOverlappingAMR* New();
/**
* Return class name of data type (see vtkType.h for definitions).
*/
int GetDataObjectType() override { return VTK_OVERLAPPING_AMR; }
vtkTypeMacro(vtkOverlappingAMR, vtkUniformGridAMR);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Return a new iterator (the iterator has to be deleted by the user).
*/
VTK_NEWINSTANCE vtkCompositeDataIterator* NewIterator() override;
//@{
/**
* Get/Set the global origin of the amr data set
*/
void SetOrigin(const double origin[3]);
double* GetOrigin();
//@}
//@{
/**
* Get/Set the grid spacing at a given level
*/
void SetSpacing(unsigned int level, const double spacing[3]);
void GetSpacing(unsigned int level, double spacing[3]);
//@}
//@{
/**
* Set/Get the AMRBox for a given block
*/
void SetAMRBox(unsigned int level, unsigned int id, const vtkAMRBox& box);
const vtkAMRBox& GetAMRBox(unsigned int level, unsigned int id);
//@}
/**
* Returns the bounding information of a data set.
*/
void GetBounds(unsigned int level, unsigned int id, double bb[6]);
/**
* Returns the origin of an AMR block
*/
void GetOrigin(unsigned int level, unsigned int id, double origin[3]);
static vtkInformationIdTypeKey* NUMBER_OF_BLANKED_POINTS();
/**
* Retrieve an instance of this class from an information object.
*/
static vtkOverlappingAMR* GetData(vtkInformation* info)
{
return vtkOverlappingAMR::SafeDownCast(Superclass::GetData(info));
}
static vtkOverlappingAMR* GetData(vtkInformationVector* v, int i = 0)
{
return vtkOverlappingAMR::SafeDownCast(Superclass::GetData(v, i));
}
/**
* 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);
/**
* Returns the refinement of a given level.
*/
int GetRefinementRatio(unsigned int level);
//@{
/**
* Set/Get the source id of a block. The source id is produced by an
* AMR source, e.g. a file reader might set this to be a file block id
*/
void SetAMRBlockSourceIndex(unsigned int level, unsigned int id, int sourceId);
int GetAMRBlockSourceIndex(unsigned int level, unsigned int id);
//@}
/**
* Returns the refinement ratio for the position pointed by the iterator.
*/
int GetRefinementRatio(vtkCompositeDataIterator* iter);
/**
* Return whether parent child information has been generated
*/
bool HasChildrenInformation();
/**
* Generate the parent/child relationships - needed to be called
* before GetParents or GetChildren can be used!
*/
void GenerateParentChildInformation();
/**
* Return a pointer to Parents of a block. The first entry is the number
* of parents the block has followed by its parent ids in level-1.
* If none exits it returns nullptr.
*/
unsigned int* GetParents(unsigned int level, unsigned int index, unsigned int& numParents);
/**
* Return a pointer to Children of a block. The first entry is the number
* of children the block has followed by its children ids in level+1.
* If none exits it returns nullptr.
*/
unsigned int* GetChildren(unsigned int level, unsigned int index, unsigned int& numChildren);
/**
* Prints the parents and children of a requested block (Debug Routine)
*/
void PrintParentChildInfo(unsigned int level, unsigned int index);
// Unhide superclass method
void GetBounds(double b[6]) { Superclass::GetBounds(b); }
/**
* Given a point q, find the highest level grid that contains it.
*/
bool FindGrid(double q[3], unsigned int& level, unsigned int& gridId);
/**
* Get/Set the internal representation of amr meta meta data
*/
vtkAMRInformation* GetAMRInfo() override { return Superclass::GetAMRInfo(); }
void SetAMRInfo(vtkAMRInformation* info) override { return Superclass::SetAMRInfo(info); }
//@{
/**
* Check whether the data set is internally consistent, e.g.
* whether the meta data and actual data blocks match.
* Incorrectness will be reported as error messages
*/
void Audit();
protected:
vtkOverlappingAMR();
~vtkOverlappingAMR() override;
//@}
private:
vtkOverlappingAMR(const vtkOverlappingAMR&) = delete;
void operator=(const vtkOverlappingAMR&) = delete;
};
#endif