VTK
vtkGenericEdgeTable.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkGenericEdgeTable.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
30 #ifndef vtkGenericEdgeTable_h
31 #define vtkGenericEdgeTable_h
32 
33 #include "vtkCommonDataModelModule.h" // For export macro
34 #include "vtkObject.h"
35 
36 class vtkEdgeTableEdge;
37 class vtkEdgeTablePoints;
38 
39 class VTKCOMMONDATAMODEL_EXPORT vtkGenericEdgeTable : public vtkObject
40 {
41 public:
45  static vtkGenericEdgeTable *New();
46 
48 
52  void PrintSelf(ostream& os, vtkIndent indent) override;
54 
58  void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId,
59  int ref, vtkIdType &ptId );
60 
64  void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref = 1 );
65 
70  int RemoveEdge(vtkIdType e1, vtkIdType e2);
71 
77  int CheckEdge(vtkIdType e1, vtkIdType e2, vtkIdType &ptId);
78 
82  int IncrementEdgeReferenceCount(vtkIdType e1, vtkIdType e2,
83  vtkIdType cellId);
84 
88  int CheckEdgeReferenceCount(vtkIdType e1, vtkIdType e2);
89 
94  void Initialize(vtkIdType start);
95 
100  int GetNumberOfComponents();
101 
106  void SetNumberOfComponents(int count);
107 
111  int CheckPoint(vtkIdType ptId);
112 
117  int CheckPoint(vtkIdType ptId, double point[3], double *scalar);
118 
120 
123  void InsertPoint(vtkIdType ptId, double point[3]);
124  // \pre: sizeof(s)==GetNumberOfComponents()
125  void InsertPointAndScalar(vtkIdType ptId, double pt[3], double *s);
127 
131  void RemovePoint(vtkIdType ptId);
132 
136  void IncrementPointReferenceCount(vtkIdType ptId );
137 
139 
144  void DumpTable();
145  void LoadFactor();
147 
149 {
150 public:
152  double Coord[3];
153  double *Scalar; // point data: all point-centered attributes at this point
155 
156  int Reference; //signed char
157 
162  PointEntry(int size);
163 
165  {
166  delete[] this->Scalar;
167  }
168 
169  PointEntry(const PointEntry &other)
170  {
171  this->PointId = other.PointId;
172 
173  memcpy(this->Coord,other.Coord,sizeof(double)*3);
174 
175  int c = other.numberOfComponents;
176  this->numberOfComponents = c;
177  this->Scalar = new double[c];
178  memcpy(this->Scalar, other.Scalar, sizeof(double)*c);
179  this->Reference = other.Reference;
180  }
181 
183  {
184  if(this != &other)
185  {
186  this->PointId = other.PointId;
187 
188  memcpy(this->Coord, other.Coord, sizeof(double)*3);
189 
190  int c = other.numberOfComponents;
191 
192  if(this->numberOfComponents!=c)
193  {
194  delete[] this->Scalar;
195  this->Scalar = new double[c];
196  this->numberOfComponents = c;
197  }
198  memcpy(this->Scalar, other.Scalar, sizeof(double)*c);
199  this->Reference = other.Reference;
200  }
201  return *this;
202  }
203 };
204 
206 {
207 public:
210 
211  int Reference; //signed char
212  int ToSplit; //signed char
214  vtkIdType CellId; //CellId the edge refer to at a step in tessellation
215 
217  {
218  this->Reference = 0;
219  this->CellId = -1;
220  }
222 
223  EdgeEntry(const EdgeEntry& copy)
224  {
225  this->E1 = copy.E1;
226  this->E2 = copy.E2;
227 
228  this->Reference = copy.Reference;
229  this->ToSplit = copy.ToSplit;
230  this->PtId = copy.PtId;
231  this->CellId = copy.CellId;
232  }
233 
235  {
236  if(this == &entry)
237  {
238  return *this;
239  }
240  this->E1 = entry.E1;
241  this->E2 = entry.E2;
242  this->Reference = entry.Reference;
243  this->ToSplit = entry.ToSplit;
244  this->PtId = entry.PtId;
245  this->CellId = entry.CellId;
246  return *this;
247  }
248 };
249 
250 protected:
252  ~vtkGenericEdgeTable() override;
253 
257  void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId,
258  int ref, int toSplit, vtkIdType &ptId );
259 
260  //Hash table that contiain entry based on edges:
261  vtkEdgeTableEdge *EdgeTable;
262 
263  //At end of process we should be able to retrieve points coord based on pointid
264  vtkEdgeTablePoints *HashPoints;
265 
266  // Main hash functions
267  //For edge table:
268  vtkIdType HashFunction(vtkIdType e1, vtkIdType e2);
269 
270  //For point table:
271  vtkIdType HashFunction(vtkIdType ptId);
272 
273  // Keep track of the last point id we inserted, increment it each time:
275 
277 
278 private:
279  vtkGenericEdgeTable(const vtkGenericEdgeTable&) = delete;
280  void operator=(const vtkGenericEdgeTable&) = delete;
281 
282 };
283 
284 #endif
285 
abstract base class for most VTK objects
Definition: vtkObject.h:59
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
keep track of edges (defined by pair of integer id's)
int vtkIdType
Definition: vtkType.h:347
vtkEdgeTablePoints * HashPoints
a simple class to control print indentation
Definition: vtkIndent.h:39
PointEntry & operator=(const PointEntry &other)
PointEntry(const PointEntry &other)
EdgeEntry(const EdgeEntry &copy)
EdgeEntry & operator=(const EdgeEntry &entry)
vtkEdgeTableEdge * EdgeTable
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...