Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages
Common/vtkCellArray.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00058 #ifndef __vtkCellArray_h
00059 #define __vtkCellArray_h
00060
00061 #include "vtkObject.h"
00062
00063 #include "vtkIdTypeArray.h"
00064 #include "vtkCell.h"
00065
00066 class VTK_COMMON_EXPORT vtkCellArray : public vtkObject
00067 {
00068 public:
00069 vtkTypeRevisionMacro(vtkCellArray,vtkObject);
00070
00072 static vtkCellArray *New();
00073
00075
00076 int Allocate(const vtkIdType sz, const int ext=1000)
00077 {return this->Ia->Allocate(sz,ext);}
00079
00081
00082 void Initialize()
00083 {this->Ia->Initialize();}
00085
00087
00088 vtkIdType GetNumberOfCells()
00089 {return this->NumberOfCells;}
00091
00093
00099 vtkIdType EstimateSize(vtkIdType numCells, int maxPtsPerCell)
00100 {return numCells*(1+maxPtsPerCell);}
00102
00106 void InitTraversal() {this->TraversalLocation=0;};
00107
00111 int GetNextCell(vtkIdType& npts, vtkIdType* &pts);
00112
00114
00115 vtkIdType GetSize()
00116 {return this->Ia->GetSize();}
00118
00120
00123 vtkIdType GetNumberOfConnectivityEntries()
00124 {return this->Ia->GetMaxId()+1;}
00126
00129 void GetCell(vtkIdType loc, vtkIdType &npts, vtkIdType* &pts);
00130
00132 vtkIdType InsertNextCell(vtkCell *cell);
00133
00136 vtkIdType InsertNextCell(vtkIdType npts, vtkIdType* pts);
00137
00140 vtkIdType InsertNextCell(vtkIdList *pts);
00141
00146 vtkIdType InsertNextCell(int npts);
00147
00150 void InsertCellPoint(vtkIdType id);
00151
00154 void UpdateCellCount(int npts);
00155
00157
00159 vtkIdType GetInsertLocation(int npts)
00160 {return (this->InsertLocation - npts - 1);};
00162
00164
00165 vtkIdType GetTraversalLocation()
00166 {return this->TraversalLocation;}
00167 void SetTraversalLocation(vtkIdType loc)
00168 {this->TraversalLocation = loc;}
00170
00172
00174 vtkIdType GetTraversalLocation(vtkIdType npts)
00175 {return(this->TraversalLocation-npts-1);}
00177
00180 void ReverseCell(vtkIdType loc);
00181
00183 void ReplaceCell(vtkIdType loc, int npts, vtkIdType *pts);
00184
00187 int GetMaxCellSize();
00188
00190
00191 vtkIdType *GetPointer()
00192 {return this->Ia->GetPointer(0);}
00194
00198 vtkIdType *WritePointer(const vtkIdType ncells, const vtkIdType size);
00199
00207 void SetCells(vtkIdType ncells, vtkIdTypeArray *cells);
00208
00210 void DeepCopy(vtkCellArray *ca);
00211
00213
00214 vtkIdTypeArray* GetData()
00215 {return this->Ia;}
00217
00219 void Reset();
00220
00222
00223 void Squeeze()
00224 {this->Ia->Squeeze();}
00226
00233 unsigned long GetActualMemorySize();
00234
00235 protected:
00236 vtkCellArray();
00237 ~vtkCellArray();
00238
00239 vtkIdType NumberOfCells;
00240 vtkIdType InsertLocation;
00241 vtkIdType TraversalLocation;
00242 vtkIdTypeArray *Ia;
00243 private:
00244 vtkCellArray(const vtkCellArray&);
00245 void operator=(const vtkCellArray&);
00246 };
00247
00248
00249 inline vtkIdType vtkCellArray::InsertNextCell(vtkIdType npts, vtkIdType* pts)
00250 {
00251 vtkIdType i = this->Ia->GetMaxId() + 1;
00252 vtkIdType *ptr = this->Ia->WritePointer(i, npts+1);
00253
00254 for ( *ptr++ = npts, i = 0; i < npts; i++)
00255 {
00256 *ptr++ = *pts++;
00257 }
00258
00259 this->NumberOfCells++;
00260 this->InsertLocation += npts + 1;
00261
00262 return this->NumberOfCells - 1;
00263 }
00264
00265 inline vtkIdType vtkCellArray::InsertNextCell(vtkIdList *pts)
00266 {
00267 vtkIdType npts = pts->GetNumberOfIds();
00268 vtkIdType i = this->Ia->GetMaxId() + 1;
00269 vtkIdType *ptr = this->Ia->WritePointer(i,npts+1);
00270
00271 for ( *ptr++ = npts, i = 0; i < npts; i++)
00272 {
00273 *ptr++ = pts->GetId(i);
00274 }
00275
00276 this->NumberOfCells++;
00277 this->InsertLocation += npts + 1;
00278
00279 return this->NumberOfCells - 1;
00280 }
00281
00282 inline vtkIdType vtkCellArray::InsertNextCell(int npts)
00283 {
00284 this->InsertLocation = this->Ia->InsertNextValue(npts) + 1;
00285 this->NumberOfCells++;
00286
00287 return this->NumberOfCells - 1;
00288 }
00289
00290 inline void vtkCellArray::InsertCellPoint(vtkIdType id)
00291 {
00292 this->Ia->InsertValue(this->InsertLocation++, id);
00293 }
00294
00295 inline void vtkCellArray::UpdateCellCount(int npts)
00296 {
00297 this->Ia->SetValue(this->InsertLocation-npts-1, npts);
00298 }
00299
00300 inline vtkIdType vtkCellArray::InsertNextCell(vtkCell *cell)
00301 {
00302 int npts = cell->GetNumberOfPoints();
00303 vtkIdType i = this->Ia->GetMaxId() + 1;
00304 vtkIdType *ptr = this->Ia->WritePointer(i,npts+1);
00305
00306 for ( *ptr++ = npts, i = 0; i < npts; i++)
00307 {
00308 *ptr++ = cell->PointIds->GetId(i);
00309 }
00310
00311 this->NumberOfCells++;
00312 this->InsertLocation += npts + 1;
00313
00314 return this->NumberOfCells - 1;
00315 }
00316
00317
00318 inline void vtkCellArray::Reset()
00319 {
00320 this->NumberOfCells = 0;
00321 this->InsertLocation = 0;
00322 this->TraversalLocation = 0;
00323 this->Ia->Reset();
00324 }
00325
00326
00327 inline int vtkCellArray::GetNextCell(vtkIdType& npts, vtkIdType* &pts)
00328 {
00329 if ( this->Ia->GetMaxId() >= 0 &&
00330 this->TraversalLocation <= this->Ia->GetMaxId() )
00331 {
00332 npts = this->Ia->GetValue(this->TraversalLocation++);
00333 pts = this->Ia->GetPointer(this->TraversalLocation);
00334 this->TraversalLocation += npts;
00335 return 1;
00336 }
00337 else
00338 {
00339 return 0;
00340 }
00341 }
00342
00343 inline void vtkCellArray::GetCell(vtkIdType loc, vtkIdType &npts,
00344 vtkIdType* &pts)
00345 {
00346 npts=this->Ia->GetValue(loc++);
00347 pts=this->Ia->GetPointer(loc);
00348 }
00349
00350
00351 inline void vtkCellArray::ReverseCell(vtkIdType loc)
00352 {
00353 int i;
00354 vtkIdType tmp;
00355 vtkIdType npts=this->Ia->GetValue(loc);
00356 vtkIdType *pts=this->Ia->GetPointer(loc+1);
00357 for (i=0; i < (npts/2); i++)
00358 {
00359 tmp = pts[i];
00360 pts[i] = pts[npts-i-1];
00361 pts[npts-i-1] = tmp;
00362 }
00363 }
00364
00365 inline void vtkCellArray::ReplaceCell(vtkIdType loc, int npts, vtkIdType *pts)
00366 {
00367 vtkIdType *oldPts=this->Ia->GetPointer(loc+1);
00368 for (int i=0; i < npts; i++)
00369 {
00370 oldPts[i] = pts[i];
00371 }
00372 }
00373
00374 inline vtkIdType *vtkCellArray::WritePointer(const vtkIdType ncells,
00375 const vtkIdType size)
00376 {
00377 this->NumberOfCells = ncells;
00378 this->InsertLocation = 0;
00379 this->TraversalLocation = 0;
00380 return this->Ia->WritePointer(0,size);
00381 }
00382
00383 #endif