VTK  9.2.6
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, int ref, vtkIdType& ptId);
59 
63  void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref = 1);
64 
69  int RemoveEdge(vtkIdType e1, vtkIdType e2);
70 
76  int CheckEdge(vtkIdType e1, vtkIdType e2, vtkIdType& ptId);
77 
81  int IncrementEdgeReferenceCount(vtkIdType e1, vtkIdType e2, vtkIdType cellId);
82 
86  int CheckEdgeReferenceCount(vtkIdType e1, vtkIdType e2);
87 
92  void Initialize(vtkIdType start);
93 
98  int GetNumberOfComponents();
99 
104  void SetNumberOfComponents(int count);
105 
109  int CheckPoint(vtkIdType ptId);
110 
115  int CheckPoint(vtkIdType ptId, double point[3], double* scalar);
116 
118 
121  void InsertPoint(vtkIdType ptId, double point[3]);
122  // \pre: sizeof(s)==GetNumberOfComponents()
123  void InsertPointAndScalar(vtkIdType ptId, double pt[3], double* s);
125 
129  void RemovePoint(vtkIdType ptId);
130 
134  void IncrementPointReferenceCount(vtkIdType ptId);
135 
137 
142  void DumpTable();
143  void LoadFactor();
145 
147  {
148  public:
150  double Coord[3];
151  double* Scalar; // point data: all point-centered attributes at this point
153 
154  int Reference; // signed char
155 
160  PointEntry(int size);
161 
162  ~PointEntry() { delete[] this->Scalar; }
163 
164  PointEntry(const PointEntry& other)
165  {
166  this->PointId = other.PointId;
167 
168  memcpy(this->Coord, other.Coord, sizeof(double) * 3);
169 
170  int c = other.numberOfComponents;
171  this->numberOfComponents = c;
172  this->Scalar = new double[c];
173  memcpy(this->Scalar, other.Scalar, sizeof(double) * c);
174  this->Reference = other.Reference;
175  }
176 
178  {
179  if (this != &other)
180  {
181  this->PointId = other.PointId;
182 
183  memcpy(this->Coord, other.Coord, sizeof(double) * 3);
184 
185  int c = other.numberOfComponents;
186 
187  if (this->numberOfComponents != c)
188  {
189  delete[] this->Scalar;
190  this->Scalar = new double[c];
191  this->numberOfComponents = c;
192  }
193  memcpy(this->Scalar, other.Scalar, sizeof(double) * c);
194  this->Reference = other.Reference;
195  }
196  return *this;
197  }
198  };
199 
200  class EdgeEntry
201  {
202  public:
205 
206  int Reference; // signed char
207  int ToSplit; // signed char
209  vtkIdType CellId; // CellId the edge refer to at a step in tessellation
210 
212  {
213  this->Reference = 0;
214  this->CellId = -1;
215  }
216  ~EdgeEntry() = default;
217 
218  EdgeEntry(const EdgeEntry& copy)
219  {
220  this->E1 = copy.E1;
221  this->E2 = copy.E2;
222 
223  this->Reference = copy.Reference;
224  this->ToSplit = copy.ToSplit;
225  this->PtId = copy.PtId;
226  this->CellId = copy.CellId;
227  }
228 
230  {
231  if (this == &entry)
232  {
233  return *this;
234  }
235  this->E1 = entry.E1;
236  this->E2 = entry.E2;
237  this->Reference = entry.Reference;
238  this->ToSplit = entry.ToSplit;
239  this->PtId = entry.PtId;
240  this->CellId = entry.CellId;
241  return *this;
242  }
243  };
244 
245 protected:
247  ~vtkGenericEdgeTable() override;
248 
252  void InsertEdge(
253  vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref, int toSplit, vtkIdType& ptId);
254 
255  // Hash table that contiain entry based on edges:
256  vtkEdgeTableEdge* EdgeTable;
257 
258  // At end of process we should be able to retrieve points coord based on pointid
259  vtkEdgeTablePoints* HashPoints;
260 
261  // Main hash functions
262  // For edge table:
263  vtkIdType HashFunction(vtkIdType e1, vtkIdType e2);
264 
265  // For point table:
266  vtkIdType HashFunction(vtkIdType ptId);
267 
268  // Keep track of the last point id we inserted, increment it each time:
270 
272 
273 private:
274  vtkGenericEdgeTable(const vtkGenericEdgeTable&) = delete;
275  void operator=(const vtkGenericEdgeTable&) = delete;
276 };
277 
278 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:62
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:332
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...