VTK  9.1.0
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
36class vtkEdgeTableEdge;
37class vtkEdgeTablePoints;
38
39class VTKCOMMONDATAMODEL_EXPORT vtkGenericEdgeTable : public vtkObject
40{
41public:
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
70
77
82
87
92 void Initialize(vtkIdType start);
93
99
104 void SetNumberOfComponents(int count);
105
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
130
135
137
142 void DumpTable();
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
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
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
245protected:
248
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:
264
265 // For point table:
267
268 // Keep track of the last point id we inserted, increment it each time:
270
272
273private:
275 void operator=(const vtkGenericEdgeTable&) = delete;
276};
277
278#endif
EdgeEntry(const EdgeEntry &copy)
EdgeEntry & operator=(const EdgeEntry &entry)
PointEntry & operator=(const PointEntry &other)
PointEntry(int size)
Constructor with a scalar field of ‘size’ doubles.
PointEntry(const PointEntry &other)
keep track of edges (defined by pair of integer id's)
int CheckEdgeReferenceCount(vtkIdType e1, vtkIdType e2)
Return the edge reference count.
vtkEdgeTablePoints * HashPoints
void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref, vtkIdType &ptId)
Split the edge with the indicated point id.
void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref, int toSplit, vtkIdType &ptId)
Split the edge with the indicated point id.
void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref=1)
Insert an edge but do not split it.
int CheckEdge(vtkIdType e1, vtkIdType e2, vtkIdType &ptId)
Method to determine whether an edge is in the table (0 or 1), or not (-1).
void InsertPointAndScalar(vtkIdType ptId, double pt[3], double *s)
Insert point associated with an edge.
vtkEdgeTableEdge * EdgeTable
void RemovePoint(vtkIdType ptId)
Remove a point from the point table.
int CheckPoint(vtkIdType ptId)
Check if a point is already in the point table.
~vtkGenericEdgeTable() override
int CheckPoint(vtkIdType ptId, double point[3], double *scalar)
Check for the existence of a point and return its coordinate value.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard VTK type and print macros.
void IncrementPointReferenceCount(vtkIdType ptId)
Increment the reference count for the indicated point.
vtkIdType HashFunction(vtkIdType e1, vtkIdType e2)
int GetNumberOfComponents()
Return the total number of components for the point-centered attributes.
void Initialize(vtkIdType start)
To specify the starting point id.
void LoadFactor()
For debugging purposes.
int IncrementEdgeReferenceCount(vtkIdType e1, vtkIdType e2, vtkIdType cellId)
Method that increments the referencecount and returns it.
int RemoveEdge(vtkIdType e1, vtkIdType e2)
Method to remove an edge from the table.
void DumpTable()
For debugging purposes.
vtkIdType HashFunction(vtkIdType ptId)
void SetNumberOfComponents(int count)
Set the total number of components for the point-centered attributes.
void InsertPoint(vtkIdType ptId, double point[3])
Insert point associated with an edge.
static vtkGenericEdgeTable * New()
Instantiate an empty edge table.
a simple class to control print indentation
Definition: vtkIndent.h:113
abstract base class for most VTK objects
Definition: vtkObject.h:73
@ point
Definition: vtkX3D.h:242
@ size
Definition: vtkX3D.h:259
int vtkIdType
Definition: vtkType.h:332