VTK  9.0.1
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  }
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
vtkGenericEdgeTable::EdgeEntry::CellId
vtkIdType CellId
Definition: vtkGenericEdgeTable.h:209
vtkGenericEdgeTable::PointEntry::operator=
PointEntry & operator=(const PointEntry &other)
Definition: vtkGenericEdgeTable.h:177
vtkGenericEdgeTable::PointEntry::Coord
double Coord[3]
Definition: vtkGenericEdgeTable.h:150
vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkGenericEdgeTable::EdgeEntry::E2
vtkIdType E2
Definition: vtkGenericEdgeTable.h:204
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkGenericEdgeTable::EdgeEntry::ToSplit
int ToSplit
Definition: vtkGenericEdgeTable.h:207
vtkGenericEdgeTable::PointEntry::~PointEntry
~PointEntry()
Definition: vtkGenericEdgeTable.h:162
vtkGenericEdgeTable::EdgeEntry::Reference
int Reference
Definition: vtkGenericEdgeTable.h:206
vtkGenericEdgeTable::PointEntry::numberOfComponents
int numberOfComponents
Definition: vtkGenericEdgeTable.h:152
vtkGenericEdgeTable::PointEntry::PointId
vtkIdType PointId
Definition: vtkGenericEdgeTable.h:149
vtkGenericEdgeTable::EdgeEntry
Definition: vtkGenericEdgeTable.h:200
vtkX3D::point
@ point
Definition: vtkX3D.h:242
vtkGenericEdgeTable::PointEntry::Scalar
double * Scalar
Definition: vtkGenericEdgeTable.h:151
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkGenericEdgeTable::EdgeEntry::operator=
EdgeEntry & operator=(const EdgeEntry &entry)
Definition: vtkGenericEdgeTable.h:229
vtkX3D::size
@ size
Definition: vtkX3D.h:259
vtkObject::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkGenericEdgeTable::LastPointId
vtkIdType LastPointId
Definition: vtkGenericEdgeTable.h:269
vtkObject.h
vtkGenericEdgeTable::HashPoints
vtkEdgeTablePoints * HashPoints
Definition: vtkGenericEdgeTable.h:259
vtkGenericEdgeTable
keep track of edges (defined by pair of integer id's)
Definition: vtkGenericEdgeTable.h:39
vtkGenericEdgeTable::EdgeTable
vtkEdgeTableEdge * EdgeTable
Definition: vtkGenericEdgeTable.h:256
vtkGenericEdgeTable::EdgeEntry::~EdgeEntry
~EdgeEntry()
Definition: vtkGenericEdgeTable.h:216
vtkGenericEdgeTable::PointEntry
Definition: vtkGenericEdgeTable.h:146
vtkGenericEdgeTable::EdgeEntry::EdgeEntry
EdgeEntry(const EdgeEntry &copy)
Definition: vtkGenericEdgeTable.h:218
vtkGenericEdgeTable::EdgeEntry::E1
vtkIdType E1
Definition: vtkGenericEdgeTable.h:203
vtkGenericEdgeTable::PointEntry::Reference
int Reference
Definition: vtkGenericEdgeTable.h:154
vtkGenericEdgeTable::EdgeEntry::PtId
vtkIdType PtId
Definition: vtkGenericEdgeTable.h:208
vtkGenericEdgeTable::NumberOfComponents
vtkIdType NumberOfComponents
Definition: vtkGenericEdgeTable.h:271
vtkGenericEdgeTable::PointEntry::PointEntry
PointEntry(const PointEntry &other)
Definition: vtkGenericEdgeTable.h:164
vtkGenericEdgeTable::EdgeEntry::EdgeEntry
EdgeEntry()
Definition: vtkGenericEdgeTable.h:211