00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00032 #ifndef __vtkUnstructuredGrid_h
00033 #define __vtkUnstructuredGrid_h
00034
00035 #include "vtkPointSet.h"
00036
00037 class vtkCellArray;
00038 class vtkCellLinks;
00039 class vtkConvexPointSet;
00040 class vtkEmptyCell;
00041 class vtkHexahedron;
00042 class vtkIdList;
00043 class vtkIdTypeArray;
00044 class vtkLine;
00045 class vtkPixel;
00046 class vtkPolyLine;
00047 class vtkPolyVertex;
00048 class vtkPolygon;
00049 class vtkPyramid;
00050 class vtkPentagonalPrism;
00051 class vtkHexagonalPrism;
00052 class vtkQuad;
00053 class vtkQuadraticEdge;
00054 class vtkQuadraticHexahedron;
00055 class vtkQuadraticWedge;
00056 class vtkQuadraticPyramid;
00057 class vtkQuadraticQuad;
00058 class vtkQuadraticTetra;
00059 class vtkQuadraticTriangle;
00060 class vtkTetra;
00061 class vtkTriangle;
00062 class vtkTriangleStrip;
00063 class vtkUnsignedCharArray;
00064 class vtkVertex;
00065 class vtkVoxel;
00066 class vtkWedge;
00067 class vtkTriQuadraticHexahedron;
00068 class vtkQuadraticLinearWedge;
00069 class vtkQuadraticLinearQuad;
00070 class vtkBiQuadraticQuad;
00071 class vtkBiQuadraticQuadraticWedge;
00072 class vtkBiQuadraticQuadraticHexahedron;
00073 class vtkBiQuadraticTriangle;
00074 class vtkCubicLine;
00075 class vtkPolyhedron;
00076 class vtkIdTypeArray;
00077
00078 class VTK_FILTERING_EXPORT vtkUnstructuredGrid : public vtkPointSet
00079 {
00080 public:
00081 static vtkUnstructuredGrid *New();
00082
00083 vtkTypeMacro(vtkUnstructuredGrid,vtkPointSet);
00084 void PrintSelf(ostream& os, vtkIndent indent);
00085
00087
00088 int GetDataObjectType() {return VTK_UNSTRUCTURED_GRID;};
00089 virtual void Allocate(vtkIdType numCells=1000, int extSize=1000);
00091
00100 vtkIdType InsertNextCell(int type, vtkIdType npts, vtkIdType *ptIds);
00101
00108 vtkIdType InsertNextCell(int type, vtkIdList *ptIds);
00109
00110
00111
00112
00113
00114
00115
00116 vtkIdType InsertNextCell(int type, vtkIdType npts, vtkIdType *ptIds,
00117 vtkIdType nfaces, vtkIdType *faces);
00118
00120
00121 void Reset();
00122 virtual void CopyStructure(vtkDataSet *ds);
00123 vtkIdType GetNumberOfCells();
00124 virtual vtkCell *GetCell(vtkIdType cellId);
00125 virtual void GetCell(vtkIdType cellId, vtkGenericCell *cell);
00126 virtual void GetCellBounds(vtkIdType cellId, double bounds[6]);
00127 virtual void GetCellPoints(vtkIdType cellId, vtkIdList *ptIds);
00128 void GetPointCells(vtkIdType ptId, vtkIdList *cellIds);
00130
00131 int GetCellType(vtkIdType cellId);
00132 vtkUnsignedCharArray* GetCellTypesArray() { return this->Types; }
00133 vtkIdTypeArray* GetCellLocationsArray() { return this->Locations; }
00134 void Squeeze();
00135 void Initialize();
00136 int GetMaxCellSize();
00137 void BuildLinks();
00138 vtkCellLinks *GetCellLinks() {return this->Links;};
00139 virtual void GetCellPoints(vtkIdType cellId, vtkIdType& npts,
00140 vtkIdType* &pts);
00141
00147 void GetFaceStream(vtkIdType cellId, vtkIdList *ptIds);
00148
00154 void GetFaceStream(vtkIdType cellId, vtkIdType& nfaces, vtkIdType* &ptIds);
00155
00157
00169 void SetCells(int type, vtkCellArray *cells);
00170 void SetCells(int *types, vtkCellArray *cells);
00171 void SetCells(vtkUnsignedCharArray *cellTypes, vtkIdTypeArray *cellLocations,
00172 vtkCellArray *cells);
00173 void SetCells(vtkUnsignedCharArray *cellTypes, vtkIdTypeArray *cellLocations,
00174 vtkCellArray *cells, vtkIdTypeArray *faceLocations,
00175 vtkIdTypeArray *faces);
00177
00178 vtkCellArray *GetCells() {return this->Connectivity;};
00179 void ReplaceCell(vtkIdType cellId, int npts, vtkIdType *pts);
00180 vtkIdType InsertNextLinkedCell(int type, int npts, vtkIdType *pts);
00181 void RemoveReferenceToCell(vtkIdType ptId, vtkIdType cellId);
00182 void AddReferenceToCell(vtkIdType ptId, vtkIdType cellId);
00183 void ResizeCellList(vtkIdType ptId, int size);
00184
00186
00189 virtual void GetCellNeighbors(vtkIdType cellId, vtkIdList *ptIds,
00190 vtkIdList *cellIds);
00192
00196 void GetUpdateExtent(int &piece, int &numPieces, int &ghostLevel);
00197
00199
00200 virtual int* GetUpdateExtent();
00201 virtual void GetUpdateExtent(int& x0, int& x1, int& y0, int& y1,
00202 int& z0, int& z1);
00203 virtual void GetUpdateExtent(int extent[6]);
00205
00207
00209 virtual int GetPiece();
00210 virtual int GetNumberOfPieces();
00212
00214 virtual int GetGhostLevel();
00215
00221 unsigned long GetActualMemorySize();
00222
00224
00225 virtual void ShallowCopy(vtkDataObject *src);
00226 virtual void DeepCopy(vtkDataObject *src);
00228
00232 void GetIdsOfCellsOfType(int type, vtkIdTypeArray *array);
00233
00235 int IsHomogeneous();
00236
00239 void RemoveGhostCells(int level);
00240
00241
00243
00244 static vtkUnstructuredGrid* GetData(vtkInformation* info);
00245 static vtkUnstructuredGrid* GetData(vtkInformationVector* v, int i=0);
00246
00248
00250 vtkIdType *GetFaces(vtkIdType cellId);
00251
00253
00254 vtkIdTypeArray* GetFaces(){return this->Faces;};
00255 vtkIdTypeArray* GetFaceLocations(){return this->FaceLocations;};
00257
00264 int InitializeFacesRepresentation(vtkIdType numPrevCells);
00265
00267
00276 static void DecomposeAPolyhedronCell(vtkCellArray *polyhedronCellArray,
00277 vtkIdType & nCellpts,
00278 vtkIdType & nCellfaces,
00279 vtkCellArray *cellArray,
00280 vtkIdTypeArray *faces);
00282
00283 static void DecomposeAPolyhedronCell(vtkIdType * polyhedronCellStream,
00284 vtkIdType & nCellpts,
00285 vtkIdType & nCellfaces,
00286 vtkCellArray *cellArray,
00287 vtkIdTypeArray *faces);
00288
00290
00299 static void DecomposeAPolyhedronCell(vtkIdType nCellFaces,
00300 vtkIdType * inFaceStream,
00301 vtkIdType & nCellpts,
00302 vtkCellArray * cellArray,
00303 vtkIdTypeArray * faces);
00305
00307
00311 static void ConvertFaceStreamPointIds(vtkIdList * faceStream,
00312 vtkIdType * idMap);
00314
00316
00320 static void ConvertFaceStreamPointIds(vtkIdType nfaces,
00321 vtkIdType * faceStream,
00322 vtkIdType * idMap);
00324
00325
00326 protected:
00327 vtkUnstructuredGrid();
00328 ~vtkUnstructuredGrid();
00329
00330
00331 vtkVertex *Vertex;
00332 vtkPolyVertex *PolyVertex;
00333 vtkLine *Line;
00334 vtkPolyLine *PolyLine;
00335 vtkTriangle *Triangle;
00336 vtkTriangleStrip *TriangleStrip;
00337 vtkPixel *Pixel;
00338 vtkQuad *Quad;
00339 vtkPolygon *Polygon;
00340 vtkTetra *Tetra;
00341 vtkVoxel *Voxel;
00342 vtkHexahedron *Hexahedron;
00343 vtkWedge *Wedge;
00344 vtkPyramid *Pyramid;
00345 vtkPentagonalPrism *PentagonalPrism;
00346 vtkHexagonalPrism *HexagonalPrism;
00347 vtkQuadraticEdge *QuadraticEdge;
00348 vtkQuadraticTriangle *QuadraticTriangle;
00349 vtkQuadraticQuad *QuadraticQuad;
00350 vtkQuadraticTetra *QuadraticTetra;
00351 vtkQuadraticHexahedron *QuadraticHexahedron;
00352 vtkQuadraticWedge *QuadraticWedge;
00353 vtkQuadraticPyramid *QuadraticPyramid;
00354 vtkQuadraticLinearQuad *QuadraticLinearQuad;
00355 vtkBiQuadraticQuad *BiQuadraticQuad;
00356 vtkTriQuadraticHexahedron *TriQuadraticHexahedron;
00357 vtkQuadraticLinearWedge *QuadraticLinearWedge;
00358 vtkBiQuadraticQuadraticWedge *BiQuadraticQuadraticWedge;
00359 vtkBiQuadraticQuadraticHexahedron *BiQuadraticQuadraticHexahedron;
00360 vtkBiQuadraticTriangle *BiQuadraticTriangle;
00361 vtkCubicLine *CubicLine;
00362 vtkConvexPointSet *ConvexPointSet;
00363 vtkPolyhedron *Polyhedron;
00364 vtkEmptyCell *EmptyCell;
00365
00366
00367
00368 vtkCellArray *Connectivity;
00369 vtkCellLinks *Links;
00370 vtkUnsignedCharArray *Types;
00371 vtkIdTypeArray *Locations;
00372
00373
00374
00375
00376
00377
00378 vtkIdTypeArray *Faces;
00379 vtkIdTypeArray *FaceLocations;
00380
00381 private:
00382
00383 vtkUnstructuredGrid(const vtkUnstructuredGrid&);
00384 void operator=(const vtkUnstructuredGrid&);
00385
00386 void Cleanup();
00387
00389
00390 VTK_LEGACY(void GetCellNeighbors(vtkIdType cellId, vtkIdList& ptIds, vtkIdList& cellIds));
00391 };
00393
00394 #endif