Common/vtkCellLinks.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00027 #ifndef __vtkCellLinks_h
00028 #define __vtkCellLinks_h
00029
00030 #include "vtkObject.h"
00031 class vtkDataSet;
00032 class vtkCellArray;
00033
00034 class VTK_COMMON_EXPORT vtkCellLinks : public vtkObject
00035 {
00036 public:
00037
00038
00039 class Link {
00040 public:
00041 unsigned short ncells;
00042 vtkIdType *cells;
00043 };
00044
00045
00046 static vtkCellLinks *New();
00047 vtkTypeRevisionMacro(vtkCellLinks,vtkObject);
00048
00051 void Allocate(vtkIdType numLinks, vtkIdType ext=1000);
00052
00054 Link &GetLink(vtkIdType ptId) {return this->Array[ptId];};
00055
00057 unsigned short GetNcells(vtkIdType ptId) { return this->Array[ptId].ncells;};
00058
00060 void BuildLinks(vtkDataSet *data);
00061
00063 void BuildLinks(vtkDataSet *data, vtkCellArray *Connectivity);
00064
00066 vtkIdType *GetCells(vtkIdType ptId) {return this->Array[ptId].cells;};
00067
00070 vtkIdType InsertNextPoint(int numLinks);
00071
00075 void InsertNextCellReference(vtkIdType ptId, vtkIdType cellId);
00076
00078 void DeletePoint(vtkIdType ptId);
00079
00083 void RemoveCellReference(vtkIdType cellId, vtkIdType ptId);
00084
00088 void AddCellReference(vtkIdType cellId, vtkIdType ptId);
00089
00092 void ResizeCellList(vtkIdType ptId, int size);
00093
00095 void Squeeze();
00096
00098 void Reset();
00099
00106 unsigned long GetActualMemorySize();
00107
00110 void DeepCopy(vtkCellLinks *src);
00111
00112 protected:
00113 vtkCellLinks():Array(NULL),Size(0),MaxId(-1),Extend(1000) {};
00114 ~vtkCellLinks();
00115
00117 void IncrementLinkCount(vtkIdType ptId) { this->Array[ptId].ncells++;};
00118
00119 void AllocateLinks(vtkIdType n);
00120
00122
00123 void InsertCellReference(vtkIdType ptId, unsigned short pos,
00124 vtkIdType cellId);
00126
00127 Link *Array;
00128 vtkIdType Size;
00129 vtkIdType MaxId;
00130 vtkIdType Extend;
00131 Link *Resize(vtkIdType sz);
00132 private:
00133 vtkCellLinks(const vtkCellLinks&);
00134 void operator=(const vtkCellLinks&);
00135 };
00136
00137
00138 inline void vtkCellLinks::InsertCellReference(vtkIdType ptId,
00139 unsigned short pos,
00140 vtkIdType cellId)
00141 {
00142 this->Array[ptId].cells[pos] = cellId;
00143 }
00144
00145 inline void vtkCellLinks::DeletePoint(vtkIdType ptId)
00146 {
00147 this->Array[ptId].ncells = 0;
00148 delete [] this->Array[ptId].cells;
00149 this->Array[ptId].cells = NULL;
00150 }
00151
00152 inline void vtkCellLinks::InsertNextCellReference(vtkIdType ptId,
00153 vtkIdType cellId)
00154 {
00155 this->Array[ptId].cells[this->Array[ptId].ncells++] = cellId;
00156 }
00157
00158 inline void vtkCellLinks::RemoveCellReference(vtkIdType cellId, vtkIdType ptId)
00159 {
00160 vtkIdType *cells=this->Array[ptId].cells;
00161 int ncells=this->Array[ptId].ncells;
00162
00163 for (int i=0; i < ncells; i++)
00164 {
00165 if (cells[i] == cellId)
00166 {
00167 for (int j=i; j < (ncells-1); j++)
00168 {
00169 cells[j] = cells[j+1];
00170 }
00171 this->Array[ptId].ncells--;
00172 break;
00173 }
00174 }
00175 }
00176
00177 inline void vtkCellLinks::AddCellReference(vtkIdType cellId, vtkIdType ptId)
00178 {
00179 this->Array[ptId].cells[this->Array[ptId].ncells++] = cellId;
00180 }
00181
00182 inline void vtkCellLinks::ResizeCellList(vtkIdType ptId, int size)
00183 {
00184 int newSize;
00185 vtkIdType *cells;
00186
00187 newSize = this->Array[ptId].ncells + size;
00188 cells = new vtkIdType[newSize];
00189 memcpy(cells, this->Array[ptId].cells,
00190 this->Array[ptId].ncells*sizeof(vtkIdType));
00191 delete [] this->Array[ptId].cells;
00192 this->Array[ptId].cells = cells;
00193 }
00194
00195 #endif
00196