Common/vtkCellLinks.h Source File

Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Common/vtkCellLinks.h

Go to the documentation of this file.

    00001 /*=========================================================================
    00002
    00003   Program:   Visualization Toolkit
    00004   Module:    $RCSfile: vtkCellLinks.h,v $
    00005   Language:  C++
    00006
    00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
    00008   All rights reserved.
    00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    00010
    00011      This software is distributed WITHOUT ANY WARRANTY; without even
    00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    00013      PURPOSE.  See the above copyright notice for more information.
    00014
    00015 =========================================================================*/
    00045 #ifndef __vtkCellLinks_h
    00046 #define __vtkCellLinks_h
    00047
    00048 #include "vtkObject.h"
    00049 class vtkDataSet;
    00050 class vtkCellArray;
    00051
    00052 class VTK_COMMON_EXPORT vtkCellLinks : public vtkObject
    00053 {
    00054 public:
    00055
    00056   //BTX
    00057   class Link {
    00058   public:
    00059     unsigned short ncells;
    00060     vtkIdType *cells;
    00061   };
    00062   //ETX
    00063
    00064   static vtkCellLinks *New();
    00065   vtkTypeRevisionMacro(vtkCellLinks,vtkObject);
    00066
    00069   void Allocate(vtkIdType numLinks, vtkIdType ext=1000);
    00070
    00072   Link &GetLink(vtkIdType ptId) {return this->Array[ptId];};
    00073
    00075   unsigned short GetNcells(vtkIdType ptId) { return this->Array[ptId].ncells;};
    00076
    00078   void BuildLinks(vtkDataSet *data);
    00079
    00081   void BuildLinks(vtkDataSet *data, vtkCellArray *Connectivity);
    00082
    00084   vtkIdType *GetCells(vtkIdType ptId) {return this->Array[ptId].cells;};
    00085
    00088   vtkIdType InsertNextPoint(int numLinks);
    00089
    00093   void InsertNextCellReference(vtkIdType ptId, vtkIdType cellId);
    00094
    00096   void DeletePoint(vtkIdType ptId);
    00097
    00101   void RemoveCellReference(vtkIdType cellId, vtkIdType ptId);
    00102
    00106   void AddCellReference(vtkIdType cellId, vtkIdType ptId);
    00107
    00110   void ResizeCellList(vtkIdType ptId, int size);
    00111
    00113   void Squeeze();
    00114
    00116   void Reset();
    00117
    00124   unsigned long GetActualMemorySize();
    00125
    00128   void DeepCopy(vtkCellLinks *src);
    00129
    00130 protected:
    00131   vtkCellLinks():Array(NULL),Size(0),MaxId(-1),Extend(1000) {};
    00132   ~vtkCellLinks();
    00133
    00135   void IncrementLinkCount(vtkIdType ptId) { this->Array[ptId].ncells++;};
    00136
    00137   void AllocateLinks(vtkIdType n);
    00138
    00140
    00141   void InsertCellReference(vtkIdType ptId, unsigned short pos,
    00142                            vtkIdType cellId);
    00144
    00145   Link *Array;   // pointer to data
    00146   vtkIdType Size;       // allocated size of data
    00147   vtkIdType MaxId;     // maximum index inserted thus far
    00148   vtkIdType Extend;     // grow array by this point
    00149   Link *Resize(vtkIdType sz);  // function to resize data
    00150 private:
    00151   vtkCellLinks(const vtkCellLinks&);  // Not implemented.
    00152   void operator=(const vtkCellLinks&);  // Not implemented.
    00153 };
    00154
    00155
    00156 inline void vtkCellLinks::InsertCellReference(vtkIdType ptId,
    00157                                               unsigned short pos,
    00158                                               vtkIdType cellId)
    00159 {
    00160   this->Array[ptId].cells[pos] = cellId;
    00161 }
    00162
    00163 inline void vtkCellLinks::DeletePoint(vtkIdType ptId)
    00164 {
    00165   this->Array[ptId].ncells = 0;
    00166   delete [] this->Array[ptId].cells;
    00167   this->Array[ptId].cells = NULL;
    00168 }
    00169
    00170 inline void vtkCellLinks::InsertNextCellReference(vtkIdType ptId,
    00171                                                   vtkIdType cellId)
    00172 {
    00173   this->Array[ptId].cells[this->Array[ptId].ncells++] = cellId;
    00174 }
    00175
    00176 inline void vtkCellLinks::RemoveCellReference(vtkIdType cellId, vtkIdType ptId)
    00177 {
    00178   vtkIdType *cells=this->Array[ptId].cells;
    00179   int ncells=this->Array[ptId].ncells;
    00180
    00181   for (int i=0; i < ncells; i++)
    00182     {
    00183     if (cells[i] == cellId)
    00184       {
    00185       for (int j=i; j < (ncells-1); j++)
    00186         {
    00187         cells[j] = cells[j+1];
    00188         }
    00189       this->Array[ptId].ncells--;
    00190       break;
    00191       }
    00192     }
    00193 }
    00194
    00195 inline void vtkCellLinks::AddCellReference(vtkIdType cellId, vtkIdType ptId)
    00196 {
    00197   this->Array[ptId].cells[this->Array[ptId].ncells++] = cellId;
    00198 }
    00199
    00200 inline void vtkCellLinks::ResizeCellList(vtkIdType ptId, int size)
    00201 {
    00202   int newSize;
    00203   vtkIdType *cells;
    00204
    00205   newSize = this->Array[ptId].ncells + size;
    00206   cells = new vtkIdType[newSize];
    00207   memcpy(cells, this->Array[ptId].cells,
    00208          this->Array[ptId].ncells*sizeof(vtkIdType));
    00209   delete [] this->Array[ptId].cells;
    00210   this->Array[ptId].cells = cells;
    00211 }
    00212
    00213 #endif
    00214