VTK
|
Allows datasets with arbitrary storage layouts to be used with VTK. More...
#include <vtkMappedUnstructuredGrid.h>
Public Member Functions | |
void | PrintSelf (ostream &os, vtkIndent indent) |
void | CopyStructure (vtkDataSet *pd) |
void | ShallowCopy (vtkDataObject *src) |
vtkIdType | GetNumberOfCells () |
vtkCell * | GetCell (vtkIdType cellId) |
void | GetCell (vtkIdType cellId, vtkGenericCell *cell) |
int | GetCellType (vtkIdType cellId) |
void | GetCellPoints (vtkIdType cellId, vtkIdList *ptIds) |
vtkCellIterator * | NewCellIterator () |
void | GetPointCells (vtkIdType ptId, vtkIdList *cellIds) |
int | GetMaxCellSize () |
void | GetIdsOfCellsOfType (int type, vtkIdTypeArray *array) |
int | IsHomogeneous () |
void | Allocate (vtkIdType numCells, int extSize=1000) |
vtkIdType | InsertNextCell (int type, vtkIdList *ptIds) |
vtkIdType | InsertNextCell (int type, vtkIdType npts, vtkIdType *ptIds) |
vtkIdType | InsertNextCell (int type, vtkIdType npts, vtkIdType *ptIds, vtkIdType nfaces, vtkIdType *faces) |
void | ReplaceCell (vtkIdType cellId, int npts, vtkIdType *pts) |
unsigned long | GetMTime () |
void | SetImplementation (ImplementationType *impl) |
ImplementationType * | GetImplementation () |
![]() | |
vtkMappedUnstructuredGrid< Implementation, CellIterator > * | NewInstance () const |
![]() | |
vtkAbstractTypeMacro (vtkUnstructuredGridBase, vtkPointSet) void PrintSelf(ostream &os | |
int | GetDataObjectType () |
void | DeepCopy (vtkDataObject *src) |
![]() | |
vtkPointSet * | NewInstance () const |
void | PrintSelf (ostream &os, vtkIndent indent) |
void | Initialize () |
void | CopyStructure (vtkDataSet *pd) |
vtkCellIterator * | NewCellIterator () |
unsigned long | GetMTime () |
void | ComputeBounds () |
void | Squeeze () |
unsigned long | GetActualMemorySize () |
vtkIdType | GetNumberOfPoints () |
double * | GetPoint (vtkIdType ptId) |
void | GetPoint (vtkIdType ptId, double x[3]) |
virtual vtkIdType | FindPoint (double x[3]) |
vtkIdType | FindPoint (double x, double y, double z) |
virtual vtkIdType | FindCell (double x[3], vtkCell *cell, vtkIdType cellId, double tol2, int &subId, double pcoords[3], double *weights) |
virtual vtkIdType | FindCell (double x[3], vtkCell *cell, vtkGenericCell *gencell, vtkIdType cellId, double tol2, int &subId, double pcoords[3], double *weights) |
virtual void | SetPoints (vtkPoints *) |
virtual vtkPoints * | GetPoints () |
void | ShallowCopy (vtkDataObject *src) |
virtual void | Register (vtkObjectBase *o) |
virtual void | UnRegister (vtkObjectBase *o) |
![]() | |
vtkDataSet * | NewInstance () const |
virtual void | CopyAttributes (vtkDataSet *ds) |
virtual void | GetCellBounds (vtkIdType cellId, double bounds[6]) |
virtual void | GetCellTypes (vtkCellTypes *types) |
vtkCellData * | GetCellData () |
vtkPointData * | GetPointData () |
double * | GetBounds () |
void | GetBounds (double bounds[6]) |
double * | GetCenter () |
void | GetCenter (double center[3]) |
double | GetLength () |
virtual void | GetScalarRange (double range[2]) |
double * | GetScalarRange () |
int | CheckAttributes () |
virtual vtkFieldData * | GetAttributesAsFieldData (int type) |
virtual vtkIdType | GetNumberOfElements (int type) |
bool | HasAnyGhostCells () |
bool | HasAnyGhostPoints () |
vtkUnsignedCharArray * | GetPointGhostArray () |
void | UpdatePointGhostArrayCache () |
vtkUnsignedCharArray * | AllocatePointGhostArray () |
vtkUnsignedCharArray * | GetCellGhostArray () |
void | UpdateCellGhostArrayCache () |
vtkUnsignedCharArray * | AllocateCellGhostArray () |
virtual void | GetCellNeighbors (vtkIdType cellId, vtkIdList *ptIds, vtkIdList *cellIds) |
vtkIdType | FindPoint (double x, double y, double z) |
virtual vtkCell * | FindAndGetCell (double x[3], vtkCell *cell, vtkIdType cellId, double tol2, int &subId, double pcoords[3], double *weights) |
virtual void | GenerateGhostArray (int zeroExt[6]) |
virtual void | GenerateGhostArray (int zeroExt[6], bool cellOnly) |
virtual bool | HasAnyBlankCells () |
virtual bool | HasAnyBlankPoints () |
![]() | |
vtkDataObject * | NewInstance () const |
void | ReleaseData () |
unsigned long | GetUpdateTime () |
virtual void | CopyInformationToPipeline (vtkInformation *vtkNotUsed(info)) |
void | DataHasBeenGenerated () |
virtual void | PrepareForNewData () |
virtual int | GetExtentType () |
virtual void | Crop (const int *updateExtent) |
virtual vtkDataSetAttributes * | GetAttributes (int type) |
virtual int | GetAttributeTypeForArray (vtkAbstractArray *arr) |
virtual vtkInformation * | GetInformation () |
virtual void | SetInformation (vtkInformation *) |
virtual int | GetDataReleased () |
virtual void | SetFieldData (vtkFieldData *) |
virtual vtkFieldData * | GetFieldData () |
virtual void | CopyInformationFromPipeline (vtkInformation *vtkNotUsed(info)) |
void | GlobalReleaseDataFlagOn () |
void | GlobalReleaseDataFlagOff () |
![]() | |
vtkObject * | NewInstance () const |
virtual void | DebugOn () |
virtual void | DebugOff () |
bool | GetDebug () |
void | SetDebug (bool debugFlag) |
virtual void | Modified () |
unsigned long | AddObserver (unsigned long event, vtkCommand *, float priority=0.0f) |
unsigned long | AddObserver (const char *event, vtkCommand *, float priority=0.0f) |
vtkCommand * | GetCommand (unsigned long tag) |
void | RemoveObserver (vtkCommand *) |
void | RemoveObservers (unsigned long event, vtkCommand *) |
void | RemoveObservers (const char *event, vtkCommand *) |
int | HasObserver (unsigned long event, vtkCommand *) |
int | HasObserver (const char *event, vtkCommand *) |
void | RemoveObserver (unsigned long tag) |
void | RemoveObservers (unsigned long event) |
void | RemoveObservers (const char *event) |
void | RemoveAllObservers () |
int | HasObserver (unsigned long event) |
int | HasObserver (const char *event) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(), float priority=0.0f) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, bool(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
int | InvokeEvent (unsigned long event, void *callData) |
int | InvokeEvent (const char *event, void *callData) |
int | InvokeEvent (unsigned long event) |
int | InvokeEvent (const char *event) |
![]() | |
const char * | GetClassName () const |
virtual void | Delete () |
virtual void | FastDelete () |
void | Print (ostream &os) |
void | SetReferenceCount (int) |
void | PrintRevisions (ostream &) |
virtual void | PrintHeader (ostream &os, vtkIndent indent) |
virtual void | PrintTrailer (ostream &os, vtkIndent indent) |
int | GetReferenceCount () |
Protected Types | |
typedef vtkMappedUnstructuredGrid< Implementation, CellIterator > | ThisType |
Protected Attributes | |
vtkSmartPointer< ImplementationType > | Impl |
![]() | |
vtkPoints * | Points |
vtkPointLocator * | Locator |
![]() | |
vtkCellData * | CellData |
vtkPointData * | PointData |
vtkCallbackCommand * | DataObserver |
vtkTimeStamp | ComputeTime |
double | Bounds [6] |
double | Center [3] |
double | ScalarRange [2] |
vtkTimeStamp | ScalarRangeComputeTime |
vtkUnsignedCharArray * | PointGhostArray |
vtkUnsignedCharArray * | CellGhostArray |
bool | PointGhostArrayCached |
bool | CellGhostArrayCached |
![]() | |
vtkFieldData * | FieldData |
int | DataReleased |
vtkTimeStamp | UpdateTime |
vtkInformation * | Information |
![]() | |
bool | Debug |
vtkTimeStamp | MTime |
vtkSubjectHelper * | SubjectHelper |
![]() | |
vtkAtomicInt32 | ReferenceCount |
vtkWeakPointerBase ** | WeakPointers |
Allows datasets with arbitrary storage layouts to be used with VTK.
This class fulfills the vtkUnstructuredGridBase API while delegating to a arbitrary implementation of the dataset topology. The purpose of vtkMappedUnstructuredGrid is to allow external data structures to be used directly in a VTK pipeline, e.g. for in-situ analysis of a running simulation.
When introducing an external data structure into VTK, there are 3 principle components of the dataset to consider:
Points and attributes can be handled by subclassing vtkMappedDataArray and implementing that interface to adapt the external data structures into VTK. The vtkMappedDataArray subclasses can then be used as the vtkPoints's Data member (for points/nodes) or added directly to vtkPointData, vtkCellData, or vtkFieldData for attribute information. Filters used in the pipeline will need to be modified to remove calls to vtkDataArray::GetVoidPointer and use vtkTypedDataArrayIterators instead. See vtkDataArrayIteratorMacro.h for a (relatively) simple way to write processing algorithms that will use efficient raw memory accesses for standard VTK data arrays and safe iterators for non-standard data arrays in a single templated implementation.
Introducing an arbitrary topology implementation into VTK requires the use of the vtkMappedUnstructuredGrid class. Unlike the data array counterpart, the mapped unstructured grid is not subclassed, but rather takes an adaptor class as a template argument. This is to allow cheap shallow copies of the data by passing the reference-counted implementation object to new instances of vtkMappedUnstructuredGrid.
The implementation class should derive from vtkObject (for reference counting) and implement the usual vtkObject API requirements, such as a static New() method and PrintSelf function. The following methods must also be implemented:
These methods should provide the same functionality as defined in vtkUnstructuredGrid. See that class's documentation for more information.
Note that since the implementation class is used as a compile-time template parameter in vtkMappedUnstructuredGrid, the above methods do not need be virtuals. The compiler will statically bind the calls, making dynamic vtable lookups unneccessary and giving a slight performance boost.
Adapting a filter or algorithm to safely traverse the vtkMappedUnstructuredGrid's topology requires removing calls the following implementation-dependent vtkUnstructuredGrid methods:
A custom vtkCellIterator implementation may be specified for a particular vtkMappedUnstructuredGrid as the second template parameter. By default, vtkMappedUnstructuredGridCellIterator will be used, which increments an internal cell id counter and performs random-access lookup as-needed. More efficient implementations may be used with data structures better suited for sequential access, see vtkUnstructuredGridCellIterator for an example.
A set of four macros are provided to generate a concrete subclass of vtkMappedUnstructuredGrid with a specified implementation, cell iterator, and export declaration. They are:
To instantiate a vtkMappedUnstructuredGrid subclass created by the above macro, the follow pattern is encouraged:
The vtkCPExodusIIElementBlock class provides an example of vtkMappedUnstructuredGrid usage, adapting the Exodus II data structures for the VTK pipeline.
Definition at line 154 of file vtkMappedUnstructuredGrid.h.
typedef vtkTypeTemplate<vtkMappedUnstructuredGrid<Implementation, CellIterator>, vtkUnstructuredGridBase> vtkMappedUnstructuredGrid< Implementation, CellIterator >::Superclass |
Definition at line 161 of file vtkMappedUnstructuredGrid.h.
typedef Implementation vtkMappedUnstructuredGrid< Implementation, CellIterator >::ImplementationType |
Definition at line 162 of file vtkMappedUnstructuredGrid.h.
typedef CellIterator vtkMappedUnstructuredGrid< Implementation, CellIterator >::CellIteratorType |
Definition at line 163 of file vtkMappedUnstructuredGrid.h.
|
protected |
Definition at line 195 of file vtkMappedUnstructuredGrid.h.
|
protected |
|
protected |
|
virtual |
Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from vtkDataSet.
|
virtual |
Copy the geometric and topological structure of an object. Note that the invoking object and the object pointed to by the parameter ds must be of the same type. THIS METHOD IS NOT THREAD SAFE.
Implements vtkDataSet.
|
virtual |
Shallow and Deep copy.
Reimplemented from vtkDataSet.
|
virtual |
Determine the number of cells composing the dataset. THIS METHOD IS THREAD SAFE
Implements vtkDataSet.
|
virtual |
Get cell with cellId such that: 0 <= cellId < NumberOfCells. THIS METHOD IS NOT THREAD SAFE.
Implements vtkDataSet.
|
virtual |
Get cell with cellId such that: 0 <= cellId < NumberOfCells. This is a thread-safe alternative to the previous GetCell() method. THIS METHOD IS THREAD SAFE IF FIRST CALLED FROM A SINGLE THREAD AND THE DATASET IS NOT MODIFIED
Implements vtkDataSet.
|
virtual |
Get type of cell with cellId such that: 0 <= cellId < NumberOfCells. THIS METHOD IS THREAD SAFE IF FIRST CALLED FROM A SINGLE THREAD AND THE DATASET IS NOT MODIFIED
Implements vtkDataSet.
|
virtual |
Topological inquiry to get points defining cell. THIS METHOD IS THREAD SAFE IF FIRST CALLED FROM A SINGLE THREAD AND THE DATASET IS NOT MODIFIED
Implements vtkDataSet.
|
virtual |
Return an iterator that traverses the cells in this data set.
Reimplemented from vtkDataSet.
|
virtual |
Topological inquiry to get cells using point. THIS METHOD IS THREAD SAFE IF FIRST CALLED FROM A SINGLE THREAD AND THE DATASET IS NOT MODIFIED
Implements vtkDataSet.
|
virtual |
Convenience method returns largest cell size in dataset. This is generally used to allocate memory for supporting data structures. THIS METHOD IS THREAD SAFE
Implements vtkDataSet.
|
virtual |
Fill vtkIdTypeArray container with list of cell Ids. This method traverses all cells and, for a particular cell type, inserts the cell Id into the container.
Implements vtkUnstructuredGridBase.
|
virtual |
Traverse cells and determine if cells are all of the same type.
Implements vtkUnstructuredGridBase.
|
virtual |
Allocate memory for the number of cells indicated. extSize is not used.
Implements vtkUnstructuredGridBase.
|
virtual |
Insert/create cell in object by a list of point ids defining cell topology. Most cells require just a type which implicitly defines a set of points and their ordering. For non-polyhedron cell type, ptIds is the list of global Ids of unique cell points. For polyhedron cell, a special ptIds input format is required: (numCellFaces, numFace0Pts, id1, id2, id3, numFace1Pts,id1, id2, id3, ...)
Implements vtkUnstructuredGridBase.
|
virtual |
Insert/create cell in object by type and list of point ids defining cell topology. Most cells require just a type which implicitly defines a set of points and their ordering. For non-polyhedron cell type, npts is the number of unique points in the cell. pts are the list of global point Ids. For polyhedron cell, a special input format is required. npts is the number of faces in the cell. ptIds is the list of face stream: (numFace0Pts, id1, id2, id3, numFace1Pts,id1, id2, id3, ...)
Implements vtkUnstructuredGridBase.
|
virtual |
Implements vtkUnstructuredGridBase.
|
virtual |
Replace the points defining cell "cellId" with a new set of points. This operator is (typically) used when links from points to cells have not been built (i.e., BuildLinks() has not been executed). Use the operator ReplaceLinkedCell() to replace a cell when cell structure has been built.
Implements vtkUnstructuredGridBase.
|
virtual |
Datasets are composite objects and need to check each part for MTime THIS METHOD IS THREAD SAFE
Reimplemented from vtkDataSet.
void vtkMappedUnstructuredGrid< Implementation, CellIterator >::SetImplementation | ( | ImplementationType * | impl | ) |
ImplementationType* vtkMappedUnstructuredGrid< Implementation, CellIterator >::GetImplementation | ( | ) |
|
protected |
Definition at line 197 of file vtkMappedUnstructuredGrid.h.