forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vtkStaticCellLinksTemplate.h
127 lines (106 loc) · 3.76 KB
/
vtkStaticCellLinksTemplate.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*=========================================================================
Program: Visualization Toolkit
Module: vtkStaticCellLinksTemplate.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkStaticCellLinksTemplate
* @brief object represents upward pointers from points
* to list of cells using each point (template implementation)
*
*
* vtkStaticCellLinksTemplate is a supplemental object to vtkCellArray and
* vtkCellTypes, enabling access from points to the cells using the
* points. vtkStaticCellLinksTemplate is an array of links, each link represents a
* list of cell ids using a particular point. The information provided by
* this object can be used to determine neighbors and construct other local
* topological information. This class is a faster implementation of
* vtkCellLinks. However, it cannot be incrementally constructed; it is meant
* to be constructed once (statically) and must be rebuilt if the cells
* change.
*
* This is a templated implementation for vtkStaticCellLinks. The reason for
* the templating is to gain performance and reduce memory by using smaller
* integral types to represent ids. For example, if the maximum id can be
* represented by an int (as compared to a vtkIdType), it is possible to
* reduce memory requirements by half and increase performance up to
* 30%. This templated class can be used directly; alternatively the
* non-templated class vtkStaticCellLinks can be used for convenience;
* although it uses vtkIdType and thereby loses some speed and memory
* advantage.
*
* @sa
* vtkCellLinks vtkStaticCellLinks
*/
#ifndef vtkStaticCellLinksTemplate_h
#define vtkStaticCellLinksTemplate_h
class vtkDataSet;
class vtkPolyData;
class vtkUnstructuredGrid;
class vtkCellArray;
template <typename TIds>
class vtkStaticCellLinksTemplate
{
public:
/**
* Default constructor. BuildLinks() does most of the work.
*/
vtkStaticCellLinksTemplate() :
LinksSize(0), NumPts(0), NumCells(0), Links(nullptr), Offsets(nullptr)
{
}
/**
* Virtual destructor, anticipating future subclassing.
*/
virtual ~vtkStaticCellLinksTemplate()
{this->Initialize();}
/**
* Make sure any previously created links are cleaned up.
*/
virtual void Initialize();
/**
* Build the link list array. Satisfy superclass' API.
*/
virtual void BuildLinks(vtkDataSet *ds);
/**
* Build the link list array for vtkPolyData.
*/
void BuildLinks(vtkPolyData *pd);
/**
* Build the link list array for vtkUnstructuredGrid.
*/
void BuildLinks(vtkUnstructuredGrid *ugrid);
/**
* Get the number of cells using the point specified by ptId.
*/
TIds GetNumberOfCells(vtkIdType ptId)
{
return (this->Offsets[ptId+1] - this->Offsets[ptId]);
}
/**
* Return a list of cell ids using the point.
*/
const TIds *GetCells(vtkIdType ptId)
{
return this->Links + this->Offsets[ptId];
}
protected:
// The various templated data members
TIds LinksSize;
TIds NumPts;
TIds NumCells;
// These point to the core data structures
TIds *Links; //contiguous runs of cell ids
TIds *Offsets; //offsets for each point into the link array
private:
vtkStaticCellLinksTemplate(const vtkStaticCellLinksTemplate&) = delete;
void operator=(const vtkStaticCellLinksTemplate&) = delete;
};
#include "vtkStaticCellLinksTemplate.txx"
#endif
// VTK-HeaderTest-Exclude: vtkStaticCellLinksTemplate.h