00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00042
#ifndef __vtkPolyData_h
00043
#define __vtkPolyData_h
00044
00045
#include "vtkPointSet.h"
00046
00047
#include "vtkCellTypes.h"
00048
#include "vtkCellLinks.h"
00049
00050
class vtkVertex;
00051
class vtkPolyVertex;
00052
class vtkLine;
00053
class vtkPolyLine;
00054
class vtkTriangle;
00055
class vtkQuad;
00056
class vtkPolygon;
00057
class vtkTriangleStrip;
00058
class vtkEmptyCell;
00059
00060 class VTK_COMMON_EXPORT vtkPolyData :
public vtkPointSet
00061 {
00062
public:
00063
static vtkPolyData *
New();
00064
00065 vtkTypeRevisionMacro(vtkPolyData,
vtkPointSet);
00066
void PrintSelf(ostream& os,
vtkIndent indent);
00067
00069 int GetDataObjectType() {
return VTK_POLY_DATA;}
00070
00073
void CopyStructure(
vtkDataSet *ds);
00074
00076
00077
vtkIdType GetNumberOfCells();
00078
vtkCell *
GetCell(
vtkIdType cellId);
00079
void GetCell(
vtkIdType cellId,
vtkGenericCell *cell);
00080
int GetCellType(
vtkIdType cellId);
00081
void GetCellBounds(
vtkIdType cellId,
double bounds[6]);
00082
void GetCellNeighbors(
vtkIdType cellId,
vtkIdList *ptIds,
00083
vtkIdList *cellIds);
00085
00087
00091
void CopyCells(vtkPolyData *pd,
vtkIdList *idList,
00092
vtkPointLocator *locator = NULL);
00094
00096
void GetCellPoints(
vtkIdType cellId,
vtkIdList *ptIds);
00097
00100
void GetPointCells(
vtkIdType ptId,
vtkIdList *cellIds);
00101
00103
void ComputeBounds();
00104
00109
void Squeeze();
00110
00112
int GetMaxCellSize();
00113
00115
void SetVerts (
vtkCellArray* v);
00116
00119
vtkCellArray *GetVerts();
00120
00122
void SetLines (
vtkCellArray* l);
00123
00126
vtkCellArray *GetLines();
00127
00129
void SetPolys (
vtkCellArray* p);
00130
00133
vtkCellArray *GetPolys();
00134
00136
void SetStrips (
vtkCellArray* s);
00137
00141
vtkCellArray *GetStrips();
00142
00144
00145
vtkIdType GetNumberOfVerts();
00146
vtkIdType GetNumberOfLines();
00147
vtkIdType GetNumberOfPolys();
00148
vtkIdType GetNumberOfStrips();
00150
00155
void Allocate(
vtkIdType numCells=1000,
int extSize=1000);
00156
00158
00167
void Allocate(vtkPolyData *inPolyData,
vtkIdType numCells=1000,
00168
int extSize=1000);
00170
00177
int InsertNextCell(
int type,
int npts,
vtkIdType *pts);
00178
00185
int InsertNextCell(
int type,
vtkIdList *pts);
00186
00189
void Reset();
00190
00192
void BuildCells();
00193
00199
void BuildLinks(
int initialSize=0);
00200
00204
void DeleteCells();
00205
00207
void DeleteLinks();
00208
00210
00211
void GetPointCells(
vtkIdType ptId,
unsigned short& ncells,
00212
vtkIdType* &cells);
00214
00216
00219
void GetCellEdgeNeighbors(
vtkIdType cellId,
vtkIdType p1,
vtkIdType p2,
00220
vtkIdList *cellIds);
00222
00225
void GetCellPoints(
vtkIdType cellId,
vtkIdType& npts,
vtkIdType* &pts);
00226
00229
int IsTriangle(
int v1,
int v2,
int v3);
00230
00236
int IsEdge(
vtkIdType p1,
vtkIdType p2);
00237
00240
int IsPointUsedByCell(
vtkIdType ptId,
vtkIdType cellId);
00241
00247
void ReplaceCell(
vtkIdType cellId,
int npts,
vtkIdType *pts);
00248
00250
00251
void ReplaceCellPoint(
vtkIdType cellId,
vtkIdType oldPtId,
00252
vtkIdType newPtId);
00254
00256
void ReverseCell(
vtkIdType cellId);
00257
00259
00260
void DeletePoint(
vtkIdType ptId);
00261
void DeleteCell(
vtkIdType cellId);
00263
00265
00271
int InsertNextLinkedPoint(
int numLinks);
00272
int InsertNextLinkedPoint(
double x[3],
int numLinks);
00274
00278
int InsertNextLinkedCell(
int type,
int npts,
vtkIdType *pts);
00279
00286
void ReplaceLinkedCell(
vtkIdType cellId,
int npts,
vtkIdType *pts);
00287
00293
void RemoveCellReference(
vtkIdType cellId);
00294
00300
void AddCellReference(
vtkIdType cellId);
00301
00307
void RemoveReferenceToCell(
vtkIdType ptId,
vtkIdType cellId);
00308
00313
void AddReferenceToCell(
vtkIdType ptId,
vtkIdType cellId);
00314
00317
void ResizeCellList(
vtkIdType ptId,
int size);
00318
00320
virtual void Initialize();
00321
00323
00326
void SetUpdateExtent(
int piece,
int numPieces,
int ghostLevel);
00327 void SetUpdateExtent(
int piece,
int numPieces)
00328 {this->
SetUpdateExtent(piece, numPieces, 0);}
00329
void GetUpdateExtent(
int &piece,
int &numPieces,
int &ghostLevel);
00331
00333
00334 vtkGetVector6Macro( UpdateExtent,
int );
00336
00338
00342 void SetUpdateExtent(
int x1,
int x2,
int y1,
int y2,
int z1,
int z2 )
00343 { this->
vtkPointSet::SetUpdateExtent( x1, x2, y1, y2, z1, z2 ); };
00344 void SetUpdateExtent(
int ext[6] )
00345 { this->
vtkPointSet::SetUpdateExtent( ext ); };
00347
00349
00351 vtkGetMacro( Piece,
int );
00352 vtkGetMacro( NumberOfPieces,
int );
00354
00356
00357 vtkGetMacro( GhostLevel,
int );
00359
00365
unsigned long GetActualMemorySize();
00366
00368
00369
void ShallowCopy(
vtkDataObject *src);
00370
void DeepCopy(
vtkDataObject *src);
00372
00375
void RemoveGhostCells(
int level);
00376
00377
protected:
00378 vtkPolyData();
00379 ~vtkPolyData();
00380
00381
00382 vtkVertex *Vertex;
00383 vtkPolyVertex *PolyVertex;
00384 vtkLine *Line;
00385 vtkPolyLine *PolyLine;
00386 vtkTriangle *Triangle;
00387 vtkQuad *Quad;
00388 vtkPolygon *Polygon;
00389 vtkTriangleStrip *TriangleStrip;
00390 vtkEmptyCell *EmptyCell;
00391
00392
00393
00394 vtkCellArray *Verts;
00395 vtkCellArray *Lines;
00396 vtkCellArray *Polys;
00397 vtkCellArray *Strips;
00398
00399
00400 static vtkCellArray *Dummy;
00401
00402
00403
00404 vtkCellTypes *Cells;
00405 vtkCellLinks *Links;
00406
00407
00408
00409
00410
00411
virtual void Crop();
00412
00413
00414
private:
00415
00416
00418
00419
void GetCellNeighbors(
vtkIdType cellId,
vtkIdList& ptIds,
vtkIdList& cellIds)
00420 {this->
GetCellNeighbors(cellId, &ptIds, &cellIds);}
00422
00423
private:
00424 vtkPolyData(
const vtkPolyData&);
00425
void operator=(
const vtkPolyData&);
00426 };
00427
00428 inline void vtkPolyData::GetPointCells(
vtkIdType ptId,
unsigned short& ncells,
00429
vtkIdType* &cells)
00430 {
00431 ncells = this->
Links->
GetNcells(ptId);
00432 cells = this->
Links->
GetCells(ptId);
00433 }
00434
00435 inline int vtkPolyData::IsTriangle(
int v1,
int v2,
int v3)
00436 {
00437
unsigned short int n1;
00438
int i, j, tVerts[3];
00439
vtkIdType *cells, *tVerts2, n2;
00440
00441 tVerts[0] = v1;
00442 tVerts[1] = v2;
00443 tVerts[2] = v3;
00444
00445
for (i=0; i<3; i++)
00446 {
00447 this->
GetPointCells(tVerts[i], n1, cells);
00448
for (j=0; j<n1; j++)
00449 {
00450 this->
GetCellPoints(cells[j], n2, tVerts2);
00451
if ( (tVerts[0] == tVerts2[0] || tVerts[0] == tVerts2[1] ||
00452 tVerts[0] == tVerts2[2]) &&
00453 (tVerts[1] == tVerts2[0] || tVerts[1] == tVerts2[1] ||
00454 tVerts[1] == tVerts2[2]) &&
00455 (tVerts[2] == tVerts2[0] || tVerts[2] == tVerts2[1] ||
00456 tVerts[2] == tVerts2[2]) )
00457 {
00458
return 1;
00459 }
00460 }
00461 }
00462
return 0;
00463 }
00464
00465 inline int vtkPolyData::IsPointUsedByCell(
vtkIdType ptId,
vtkIdType cellId)
00466 {
00467
vtkIdType *pts, npts;
00468
00469 this->
GetCellPoints(cellId, npts, pts);
00470
for (
vtkIdType i=0; i < npts; i++)
00471 {
00472
if ( pts[i] == ptId )
00473 {
00474
return 1;
00475 }
00476 }
00477
00478
return 0;
00479 }
00480
00481 inline void vtkPolyData::DeletePoint(
vtkIdType ptId)
00482 {
00483 this->
Links->
DeletePoint(ptId);
00484 }
00485
00486 inline void vtkPolyData::DeleteCell(
vtkIdType cellId)
00487 {
00488 this->
Cells->
DeleteCell(cellId);
00489 }
00490
00491 inline void vtkPolyData::RemoveCellReference(
vtkIdType cellId)
00492 {
00493
vtkIdType *pts, npts;
00494
00495 this->
GetCellPoints(cellId, npts, pts);
00496
for (
vtkIdType i=0; i<npts; i++)
00497 {
00498 this->
Links->
RemoveCellReference(cellId, pts[i]);
00499 }
00500 }
00501
00502 inline void vtkPolyData::AddCellReference(
vtkIdType cellId)
00503 {
00504
vtkIdType *pts, npts;
00505
00506 this->
GetCellPoints(cellId, npts, pts);
00507
for (
vtkIdType i=0; i<npts; i++)
00508 {
00509 this->
Links->
AddCellReference(cellId, pts[i]);
00510 }
00511 }
00512
00513 inline void vtkPolyData::ResizeCellList(
vtkIdType ptId,
int size)
00514 {
00515 this->
Links->
ResizeCellList(ptId,size);
00516 }
00517
00518 inline void vtkPolyData::ReplaceCellPoint(
vtkIdType cellId,
vtkIdType oldPtId,
00519
vtkIdType newPtId)
00520 {
00521
int i;
00522
vtkIdType *verts, nverts;
00523
00524 this->
GetCellPoints(cellId,nverts,verts);
00525
for ( i=0; i < nverts; i++ )
00526 {
00527
if ( verts[i] == oldPtId )
00528 {
00529 verts[i] = newPtId;
00530
return;
00531 }
00532 }
00533 }
00534
00535
#endif
00536
00537