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:
46 
48 
52  void PrintSelf(ostream& os, vtkIndent indent) VTK_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 
71 
77  int CheckEdge(vtkIdType e1, vtkIdType e2, vtkIdType &ptId);
78 
83  vtkIdType cellId);
84 
89 
94  void Initialize(vtkIdType start);
95 
101 
106  void SetNumberOfComponents(int count);
107 
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 
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 
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 tesselation
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() VTK_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:
274  vtkIdType LastPointId;
275 
276  vtkIdType NumberOfComponents;
277 
278 private:
279  vtkGenericEdgeTable(const vtkGenericEdgeTable&) VTK_DELETE_FUNCTION;
280  void operator=(const vtkGenericEdgeTable&) VTK_DELETE_FUNCTION;
281 
282 };
283 
284 #endif
285 
vtkGenericEdgeTable::SetNumberOfComponents
void SetNumberOfComponents(int count)
Set the total number of components for the point-centered attributes.
vtkGenericEdgeTable::EdgeEntry::CellId
vtkIdType CellId
Definition: vtkGenericEdgeTable.h:214
vtkGenericEdgeTable::PointEntry::operator=
PointEntry & operator=(const PointEntry &other)
Definition: vtkGenericEdgeTable.h:182
vtkGenericEdgeTable::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkGenericEdgeTable::PointEntry::Coord
double Coord[3]
Definition: vtkGenericEdgeTable.h:152
vtkIdType
int vtkIdType
Definition: vtkType.h:287
vtkGenericEdgeTable::EdgeEntry::E2
vtkIdType E2
Definition: vtkGenericEdgeTable.h:209
vtkGenericEdgeTable::InsertEdge
void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref=1)
Insert an edge but do not split it.
vtkGenericEdgeTable::vtkGenericEdgeTable
vtkGenericEdgeTable()
vtkGenericEdgeTable::InsertPoint
void InsertPoint(vtkIdType ptId, double point[3])
Insert point associated with an edge.
vtkGenericEdgeTable::PointEntry::PointEntry
PointEntry(int size)
Constructor with a scalar field of ‘size’ doubles.
vtkGenericEdgeTable::LoadFactor
void LoadFactor()
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:60
vtkGenericEdgeTable::CheckPoint
int CheckPoint(vtkIdType ptId)
Check if a point is already in the point table.
vtkGenericEdgeTable::EdgeEntry::ToSplit
int ToSplit
Definition: vtkGenericEdgeTable.h:212
vtkGenericEdgeTable::CheckPoint
int CheckPoint(vtkIdType ptId, double point[3], double *scalar)
Check for the existence of a point and return its coordinate value.
vtkGenericEdgeTable::PointEntry::~PointEntry
~PointEntry()
Definition: vtkGenericEdgeTable.h:164
vtkGenericEdgeTable::EdgeEntry::Reference
int Reference
Definition: vtkGenericEdgeTable.h:211
vtkGenericEdgeTable::PointEntry::numberOfComponents
int numberOfComponents
Definition: vtkGenericEdgeTable.h:154
vtkGenericEdgeTable::PointEntry::PointId
vtkIdType PointId
Definition: vtkGenericEdgeTable.h:151
vtkGenericEdgeTable::EdgeEntry
Definition: vtkGenericEdgeTable.h:206
vtkX3D::point
@ point
Definition: vtkX3D.h:236
vtkGenericEdgeTable::IncrementPointReferenceCount
void IncrementPointReferenceCount(vtkIdType ptId)
Increment the reference count for the indicated point.
vtkGenericEdgeTable::PointEntry::Scalar
double * Scalar
Definition: vtkGenericEdgeTable.h:153
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkGenericEdgeTable::EdgeEntry::operator=
EdgeEntry & operator=(const EdgeEntry &entry)
Definition: vtkGenericEdgeTable.h:234
vtkX3D::size
@ size
Definition: vtkX3D.h:253
vtkGenericEdgeTable::Initialize
void Initialize(vtkIdType start)
To specify the starting point id.
vtkGenericEdgeTable::RemovePoint
void RemovePoint(vtkIdType ptId)
Remove a point from the point table.
vtkGenericEdgeTable::CheckEdgeReferenceCount
int CheckEdgeReferenceCount(vtkIdType e1, vtkIdType e2)
Return the edge reference count.
vtkObject.h
vtkGenericEdgeTable
keep track of edges (defined by pair of integer id's)
Definition: vtkGenericEdgeTable.h:40
vtkGenericEdgeTable::EdgeEntry::~EdgeEntry
~EdgeEntry()
Definition: vtkGenericEdgeTable.h:221
vtkGenericEdgeTable::InsertPointAndScalar
void InsertPointAndScalar(vtkIdType ptId, double pt[3], double *s)
vtkGenericEdgeTable::PointEntry
Definition: vtkGenericEdgeTable.h:149
vtkGenericEdgeTable::IncrementEdgeReferenceCount
int IncrementEdgeReferenceCount(vtkIdType e1, vtkIdType e2, vtkIdType cellId)
Method that increments the referencecount and returns it.
vtkGenericEdgeTable::New
static vtkGenericEdgeTable * New()
Instantiate an empty edge table.
vtkGenericEdgeTable::InsertEdge
void InsertEdge(vtkIdType e1, vtkIdType e2, vtkIdType cellId, int ref, vtkIdType &ptId)
Split the edge with the indicated point id.
vtkGenericEdgeTable::EdgeEntry::EdgeEntry
EdgeEntry(const EdgeEntry &copy)
Definition: vtkGenericEdgeTable.h:223
vtkGenericEdgeTable::EdgeEntry::E1
vtkIdType E1
Definition: vtkGenericEdgeTable.h:208
vtkGenericEdgeTable::RemoveEdge
int RemoveEdge(vtkIdType e1, vtkIdType e2)
Method to remove an edge from the table.
vtkGenericEdgeTable::DumpTable
void DumpTable()
For debugging purposes.
vtkGenericEdgeTable::~vtkGenericEdgeTable
~vtkGenericEdgeTable() override
vtkGenericEdgeTable::PointEntry::Reference
int Reference
Definition: vtkGenericEdgeTable.h:156
vtkGenericEdgeTable::GetNumberOfComponents
int GetNumberOfComponents()
Return the total number of components for the point-centered attributes.
vtkGenericEdgeTable::EdgeEntry::PtId
vtkIdType PtId
Definition: vtkGenericEdgeTable.h:213
vtkGenericEdgeTable::CheckEdge
int CheckEdge(vtkIdType e1, vtkIdType e2, vtkIdType &ptId)
Method to determine whether an edge is in the table (0 or 1), or not (-1).
vtkGenericEdgeTable::PointEntry::PointEntry
PointEntry(const PointEntry &other)
Definition: vtkGenericEdgeTable.h:169
vtkGenericEdgeTable::EdgeEntry::EdgeEntry
EdgeEntry()
Definition: vtkGenericEdgeTable.h:216