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
198 lines
5.8 KiB
C
3 weeks ago
|
/*=========================================================================
|
||
|
|
||
|
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
|