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
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkUnstructuredGridBase.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 vtkUnstructuredGridBase
* @brief dataset represents arbitrary combinations
* of all possible cell types. May be mapped onto a non-standard memory layout.
*
*
* vtkUnstructuredGridBase defines the core vtkUnstructuredGrid API, omitting
* functions that are implementation dependent.
*
* @sa
* vtkMappedDataArray vtkUnstructuredGrid
*/
#ifndef vtkUnstructuredGridBase_h
#define vtkUnstructuredGridBase_h
#include "vtkCommonDataModelModule.h" // For export macro
#include "vtkPointSet.h"
class VTKCOMMONDATAMODEL_EXPORT vtkUnstructuredGridBase : public vtkPointSet
{
public:
vtkAbstractTypeMacro(vtkUnstructuredGridBase, vtkPointSet);
void PrintSelf(ostream& os, vtkIndent indent) override
{
this->Superclass::PrintSelf(os, indent);
}
int GetDataObjectType() override { return VTK_UNSTRUCTURED_GRID_BASE; }
/**
* Allocate memory for the number of cells indicated. extSize is not used.
*/
virtual void Allocate(vtkIdType numCells = 1000, int extSize = 1000) = 0;
/**
* Shallow and Deep copy.
*/
void DeepCopy(vtkDataObject* src) override;
/**
* 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, ...)
* Make sure you have called Allocate() before calling this method
*/
vtkIdType InsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[])
VTK_SIZEHINT(ptIds, npts);
/**
* 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, ...)
* Make sure you have called Allocate() before calling this method
*/
vtkIdType InsertNextCell(int type, vtkIdList* ptIds);
// Description:
// Insert/create a polyhedron cell. npts is the number of unique points in
// the cell. pts is the list of the unique cell point Ids. nfaces is the
// number of faces in the cell. faces is the face-stream
// [numFace0Pts, id1, id2, id3, numFace1Pts,id1, id2, id3, ...].
// All point Ids are global.
// Make sure you have called Allocate() before calling this method
vtkIdType InsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[], vtkIdType nfaces,
const vtkIdType faces[]) VTK_SIZEHINT(ptIds, npts) VTK_SIZEHINT(faces, nfaces);
/**
* 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.
*/
void ReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) VTK_SIZEHINT(pts, npts);
/**
* 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.
*/
virtual void GetIdsOfCellsOfType(int type, vtkIdTypeArray* array) = 0;
/**
* Traverse cells and determine if cells are all of the same type.
*/
virtual int IsHomogeneous() = 0;
//@{
/**
* Retrieve an instance of this class from an information object.
*/
static vtkUnstructuredGridBase* GetData(vtkInformation* info);
static vtkUnstructuredGridBase* GetData(vtkInformationVector* v, int i = 0);
//@}
protected:
vtkUnstructuredGridBase();
~vtkUnstructuredGridBase() override;
virtual vtkIdType InternalInsertNextCell(int type, vtkIdList* ptIds) = 0;
virtual vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[]) = 0;
virtual vtkIdType InternalInsertNextCell(int type, vtkIdType npts, const vtkIdType ptIds[],
vtkIdType nfaces, const vtkIdType faces[]) = 0;
virtual void InternalReplaceCell(vtkIdType cellId, int npts, const vtkIdType pts[]) = 0;
private:
vtkUnstructuredGridBase(const vtkUnstructuredGridBase&) = delete;
void operator=(const vtkUnstructuredGridBase&) = delete;
};
#endif
|