-
Notifications
You must be signed in to change notification settings - Fork 0
/
_surface_mesh_8h_source.html
334 lines (332 loc) · 369 KB
/
_surface_mesh_8h_source.html
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>OpenGP: /home/drebain/Workspace/research/OpenGPFork/src/OpenGP/SurfaceMesh/SurfaceMesh.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">OpenGP
 <span id="projectnumber">1.1</span>
</div>
<div id="projectbrief">Open Geometry Processing Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li><a href="tutorial.html"><span>Tutorial</span></a></li>
<li><a href="devel.html"><span>Development</span></a></li>
<li><a href="annotated.html"><span>Reference Manual</span></a></li>
<li><a href="https://github.com/OpenGP/OpenGP/issues"><span>Report Bug</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_ceaee8241810cc418efcd8e45299d116.html">OpenGP</a></li><li class="navelem"><a class="el" href="dir_76356426ba5ee61772caa680275af5c5.html">SurfaceMesh</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">SurfaceMesh.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// This file is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// it under the terms of the GNU Library General Public License Version 2</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// as published by the Free Software Foundation.</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// This file is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// GNU Library General Public License for more details.</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">//</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// You should have received a copy of the GNU Library General Public</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// License along with OpenGP. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include <OpenGP/types.h></span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <OpenGP/headeronly.h></span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <OpenGP/SurfaceMesh/internal/Global_properties.h></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include <OpenGP/SurfaceMesh/internal/properties.h></span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">//=============================================================================</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">namespace </span><a class="code" href="namespace_open_g_p.html">OpenGP</a> {</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//=============================================================================</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html"> 24</a></span> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a> : <span class="keyword">public</span> <a class="code" href="class_open_g_p_1_1_global__properties.html">Global_properties</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">public</span>: <span class="comment">//------------------------------------------------------ topology types</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html"> 32</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  {</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a51e9666f53483947689070c8b4011817"> 37</a></span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a51e9666f53483947689070c8b4011817">Base_handle</a>(<span class="keywordtype">int</span> _idx=-1) : idx_(_idx) {}</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2"> 40</a></span>  <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> idx_; }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ae7fc01270256952f8e8b1643d9ea7b0c"> 43</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ae7fc01270256952f8e8b1643d9ea7b0c">reset</a>() { idx_=-1; }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7"> 46</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">is_valid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> idx_ != -1; }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838"> 49</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a>& _rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <span class="keywordflow">return</span> idx_ == _rhs.idx_;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a8f115efcfb25ab71ac70fd747bb32579"> 54</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a8f115efcfb25ab71ac70fd747bb32579">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a>& _rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> idx_ != _rhs.idx_;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a39f905511c1842f9072525f441d551e0"> 59</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a39f905511c1842f9072525f441d551e0">operator<</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a>& _rhs)<span class="keyword"> const </span>{</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">return</span> idx_ < _rhs.idx_;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">int</span> idx_;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  };</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html"> 75</a></span>  <span class="keyword">struct </span><a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> : <span class="keyword">public</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html#a3ecc077334c1a7ae8e68d1cb2b9cf5eb"> 78</a></span>  <span class="keyword">explicit</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html#a3ecc077334c1a7ae8e68d1cb2b9cf5eb">Vertex</a>(<span class="keywordtype">int</span> _idx=-1) : <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a>(_idx) {}</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  std::ostream& operator<<(std::ostream& os)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> os << <span class="charliteral">'v'</span> << <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>(); }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  };</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> </div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html"> 85</a></span>  <span class="keyword">struct </span><a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> : <span class="keyword">public</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html#ad35b131df7a6fe40f76bf81e9a78fdba"> 88</a></span>  <span class="keyword">explicit</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html#ad35b131df7a6fe40f76bf81e9a78fdba">Halfedge</a>(<span class="keywordtype">int</span> _idx=-1) : <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a>(_idx) {}</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  };</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html"> 94</a></span>  <span class="keyword">struct </span><a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> : <span class="keyword">public</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html#a3c08ed01427a43437893b5473cdf2b21"> 97</a></span>  <span class="keyword">explicit</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html#a3c08ed01427a43437893b5473cdf2b21">Edge</a>(<span class="keywordtype">int</span> _idx=-1) : <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a>(_idx) {}</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  };</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html"> 103</a></span>  <span class="keyword">struct </span><a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> : <span class="keyword">public</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html#a066d221b7345276106c659ab7ef357b3"> 106</a></span>  <span class="keyword">explicit</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html#a066d221b7345276106c659ab7ef357b3">Face</a>(<span class="keywordtype">int</span> _idx=-1) : <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">Base_handle</a>(_idx) {}</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  };</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keyword">public</span>: <span class="comment">//-------------------------------------------------- connectivity types</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity.html"> 116</a></span>  <span class="keyword">struct </span><a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity.html">Vertex_connectivity</a></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity.html#a7d81b63019f4039b22d1a86520e6de3f"> 119</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity.html#a7d81b63019f4039b22d1a86520e6de3f">halfedge_</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  };</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html"> 125</a></span>  <span class="keyword">struct </span><a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html">Halfedge_connectivity</a></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  {</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a20237cde29c20287e17b69addb8c946d"> 128</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a20237cde29c20287e17b69addb8c946d">face_</a>;</div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a13a3725cfee6773179494bc6ff6251bd"> 130</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a13a3725cfee6773179494bc6ff6251bd">vertex_</a>;</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#af4f4ede9d13ba023ef577a68c6bb9817"> 132</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#af4f4ede9d13ba023ef577a68c6bb9817">next_halfedge_</a>;</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a9ebbbffb26915be727d6b127ae7483f0"> 134</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a9ebbbffb26915be727d6b127ae7483f0">prev_halfedge_</a>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  };</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity.html"> 140</a></span>  <span class="keyword">struct </span><a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity.html">Face_connectivity</a></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity.html#a6780cf0d0759112bb7e63e52cd1a04ee"> 143</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity.html#a6780cf0d0759112bb7e63e52cd1a04ee">halfedge_</a>;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  };</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="keyword">public</span>: <span class="comment">//------------------------------------------------------ property types</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html"> 153</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property</a> : <span class="keyword">public</span> Property<T></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#ada2187da56d72fc585a7dca15df3e75b"> 158</a></span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#ada2187da56d72fc585a7dca15df3e75b">Vertex_property</a>() {}</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property</a>(Property<T> p) : Property<T>(p) {}</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#a8bf6fcab7ef9dd5b0919df7060f9fb60"> 162</a></span>  <span class="keyword">typename</span> Property<T>::reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#a8bf6fcab7ef9dd5b0919df7060f9fb60">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> Property<T>::operator[](v.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#aef2bdfdb928d86eec1fc40870be9fe6a"> 168</a></span>  <span class="keyword">typename</span> Property<T>::const_reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#aef2bdfdb928d86eec1fc40870be9fe6a">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="keywordflow">return</span> Property<T>::operator[](v.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  };</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> </div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html"> 177</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property</a> : <span class="keyword">public</span> Property<T></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a2e4dcf8be5b0678d13b427f90c5be60f"> 182</a></span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a2e4dcf8be5b0678d13b427f90c5be60f">Halfedge_property</a>() {}</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property</a>(Property<T> p) : Property<T>(p) {}</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a79f91e3b6aa3025a9b1edbc26f1cc8d7"> 186</a></span>  <span class="keyword">typename</span> Property<T>::reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a79f91e3b6aa3025a9b1edbc26f1cc8d7">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">return</span> Property<T>::operator[](h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a3622f89c259957db9a4cd4a046ebf704"> 192</a></span>  <span class="keyword">typename</span> Property<T>::const_reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a3622f89c259957db9a4cd4a046ebf704">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> Property<T>::operator[](h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  };</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html"> 201</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property</a> : <span class="keyword">public</span> Property<T></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  {</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#a35f0097be25d6d2598c6ee5bbc83dc71"> 206</a></span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#a35f0097be25d6d2598c6ee5bbc83dc71">Edge_property</a>() {}</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property</a>(Property<T> p) : Property<T>(p) {}</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#aba22d9b0277fe935c75e7bf20e251be5"> 210</a></span>  <span class="keyword">typename</span> Property<T>::reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#aba22d9b0277fe935c75e7bf20e251be5">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e)</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">return</span> Property<T>::operator[](e.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#add9e58c14d3b5678b55c77dd9a9b97e1"> 216</a></span>  <span class="keyword">typename</span> Property<T>::const_reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#add9e58c14d3b5678b55c77dd9a9b97e1">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e)<span class="keyword"> const</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">return</span> Property<T>::operator[](e.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  };</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> </div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html"> 225</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property</a> : <span class="keyword">public</span> Property<T></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a9a0f62e092bf1c7240279a5a8222220d"> 230</a></span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a9a0f62e092bf1c7240279a5a8222220d">Face_property</a>() {}</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keyword">explicit</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property</a>(Property<T> p) : Property<T>(p) {}</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a3bd8e38bc64f1531aee32ff4d2b3ac9d"> 234</a></span>  <span class="keyword">typename</span> Property<T>::reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a3bd8e38bc64f1531aee32ff4d2b3ac9d">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">return</span> Property<T>::operator[](f.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a543ab9dc7540b80c1a6f0a3431878a96"> 240</a></span>  <span class="keyword">typename</span> Property<T>::const_reference <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a543ab9dc7540b80c1a6f0a3431878a96">operator[]</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)<span class="keyword"> const</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> Property<T>::operator[](f.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  };</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keyword">public</span>: <span class="comment">//------------------------------------------------------ iterator types</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html"> 254</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#af6b35d6d225a0c0c585ddbc5de3b5391"> 259</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#af6b35d6d225a0c0c585ddbc5de3b5391">Vertex_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a>(), <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL) : hnd_(v), mesh_(m)</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  {</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keywordflow">if</span> (mesh_ && mesh_->garbage()) <span class="keywordflow">while</span> (mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  }</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> </div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a809c25425f38578250d5ed2ae10dae20"> 265</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a809c25425f38578250d5ed2ae10dae20">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> hnd_; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#adb63e077cb53520c467e6d292ad56dbd"> 268</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#adb63e077cb53520c467e6d292ad56dbd">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <span class="keywordflow">return</span> (hnd_==rhs.hnd_);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#ae68816f3ba783d8bbe730bfd741b9f06"> 274</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#ae68816f3ba783d8bbe730bfd741b9f06">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> </div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a46d7981f377748c42e96d007a7250739"> 280</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a46d7981f377748c42e96d007a7250739">operator++</a>()</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  {</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  ++hnd_.idx_;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  assert(mesh_);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a4f6d01a057284edb16a2f021ae2a86dd"> 289</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a4f6d01a057284edb16a2f021ae2a86dd">operator--</a>()</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  --hnd_.idx_;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  assert(mesh_);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) --hnd_.idx_;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> </div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> hnd_;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  };</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html"> 306</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a4c47095bfec11c3bf953e94e4cc8b725"> 311</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a4c47095bfec11c3bf953e94e4cc8b725">Halfedge_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a>(), <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL) : hnd_(h), mesh_(m)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span> (mesh_ && mesh_->garbage()) <span class="keywordflow">while</span> (mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#aeeac922c998b45a563d4a1cc13389647"> 317</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#aeeac922c998b45a563d4a1cc13389647">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> hnd_; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a932d29f0bf03ce64943e2e3b02bf41df"> 320</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a932d29f0bf03ce64943e2e3b02bf41df">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">return</span> (hnd_==rhs.hnd_);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a47146f180e9471f41bd5435a20b7efdc"> 326</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a47146f180e9471f41bd5435a20b7efdc">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a2d86a8e9c0b9b3cf8de9bcb423cf2fe9"> 332</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a2d86a8e9c0b9b3cf8de9bcb423cf2fe9">operator++</a>()</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  {</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  ++hnd_.idx_;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  assert(mesh_);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#af5a67b9b9796e4ce893ee25288567621"> 341</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#af5a67b9b9796e4ce893ee25288567621">operator--</a>()</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  {</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  --hnd_.idx_;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  assert(mesh_);</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) --hnd_.idx_;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> hnd_;</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  };</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> </div><div class="line"><a name="l00358"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html"> 358</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  {</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#aeccb3229f74de798afe49c40c888b5cb"> 363</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#aeccb3229f74de798afe49c40c888b5cb">Edge_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a>(), <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL) : hnd_(e), mesh_(m)</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keywordflow">if</span> (mesh_ && mesh_->garbage()) <span class="keywordflow">while</span> (mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#a72eca1025d71f5bd50b9ea46e8626f5b"> 369</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#a72eca1025d71f5bd50b9ea46e8626f5b">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> hnd_; }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#ad2f2a26e22c0511dda207750203d0f33"> 372</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#ad2f2a26e22c0511dda207750203d0f33">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">return</span> (hnd_==rhs.hnd_);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#ad94d4b0f6340fb871480ebf4a68b40a6"> 378</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#ad94d4b0f6340fb871480ebf4a68b40a6">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#aab5cdc15116868b57bc01cc6ae7f6c5a"> 384</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#aab5cdc15116868b57bc01cc6ae7f6c5a">operator++</a>()</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  ++hnd_.idx_;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  assert(mesh_);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#affe5cf912e4bf275443abea5f36d8209"> 393</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#affe5cf912e4bf275443abea5f36d8209">operator--</a>()</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  {</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  --hnd_.idx_;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  assert(mesh_);</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) --hnd_.idx_;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> hnd_;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  };</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div><div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html"> 410</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a></div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#ab0f0cb0bc4caec8f1434f13bb1c4e583"> 415</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#ab0f0cb0bc4caec8f1434f13bb1c4e583">Face_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a>(), <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL) : hnd_(f), mesh_(m)</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (mesh_ && mesh_->garbage()) <span class="keywordflow">while</span> (mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  }</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> </div><div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#aec982d73ff6a9697b08ed63975e64adc"> 421</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#aec982d73ff6a9697b08ed63975e64adc">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> hnd_; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00424"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#a50cb44f014a90feb6e429f59b15c875d"> 424</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#a50cb44f014a90feb6e429f59b15c875d">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">return</span> (hnd_==rhs.hnd_);</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#af5ade74fbfb6b556b019aeb2032f6652"> 430</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#af5ade74fbfb6b556b019aeb2032f6652">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  }</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#a7b6eb05a64716e1b233fd8d876e88c54"> 436</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#a7b6eb05a64716e1b233fd8d876e88c54">operator++</a>()</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  {</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  ++hnd_.idx_;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  assert(mesh_);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) ++hnd_.idx_;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#aacabb8e56f6416007b6bef02b17e52f8"> 445</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#aacabb8e56f6416007b6bef02b17e52f8">operator--</a>()</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  --hnd_.idx_;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  assert(mesh_);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">while</span> (mesh_->garbage() && mesh_->is_valid(hnd_) && mesh_->is_deleted(hnd_)) --hnd_.idx_;</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  }</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> hnd_;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  };</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> <span class="keyword">public</span>: <span class="comment">//-------------------------- containers for C++11 range-based for loops</span></div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__container.html"> 465</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__container.html">Vertex_container</a></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__container.html">Vertex_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a> _begin, <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a> _end) : begin_(_begin), end_(_end) {}</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a> begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> begin_; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a> end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> end_; }</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a> begin_, end_;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  };</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> </div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__container.html"> 480</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__container.html">Halfedge_container</a></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__container.html">Halfedge_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a> _begin, <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a> _end) : begin_(_begin), end_(_end) {}</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a> begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> begin_; }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a> end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> end_; }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a> begin_, end_;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  };</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div><div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_edge__container.html"> 495</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__container.html">Edge_container</a></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  {</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__container.html">Edge_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a> _begin, <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a> _end) : begin_(_begin), end_(_end) {}</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a> begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> begin_; }</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a> end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> end_; }</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a> begin_, end_;</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  };</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00510"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__container.html"> 510</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__container.html">Face_container</a></div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__container.html">Face_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a> _begin, <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a> _end) : begin_(_begin), end_(_end) {}</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a> begin()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> begin_; }</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a> end()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> end_; }</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a> begin_, end_;</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  };</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> </div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> <span class="keyword">public</span>: <span class="comment">//---------------------------------------------------- circulator types</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html"> 529</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div><div class="line"><a name="l00534"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#aac0bae62417ac2630aa829d1094a282a"> 534</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#aac0bae62417ac2630aa829d1094a282a">Vertex_around_vertex_circulator</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a>())</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  : mesh_(m), active_(true)</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  {</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">if</span> (mesh_) halfedge_ = mesh_->halfedge(v);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a2523f42ff5b55bd457adce423b33983a"> 541</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a2523f42ff5b55bd457adce423b33983a">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  assert(mesh_);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordflow">return</span> (active_ && (mesh_==rhs.mesh_) && (halfedge_==rhs.halfedge_));</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> </div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#af73166691cec7e9693facbc43f3ef33f"> 548</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#af73166691cec7e9693facbc43f3ef33f">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  }</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> </div><div class="line"><a name="l00554"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#ac48889eae7300c0ad32e589bc10b11cd"> 554</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#ac48889eae7300c0ad32e589bc10b11cd">operator++</a>()</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  {</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  assert(mesh_);</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  halfedge_ = mesh_->ccw_rotated_halfedge(halfedge_);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  active_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  }</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div><div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a94b70492f8a5285742cb334393c50809"> 563</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a94b70492f8a5285742cb334393c50809">operator--</a>()</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  assert(mesh_);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  halfedge_ = mesh_->cw_rotated_halfedge(halfedge_);</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  }</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span> </div><div class="line"><a name="l00571"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a5a064d7a064060755a8388b71fe62baf"> 571</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a5a064d7a064060755a8388b71fe62baf">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  assert(mesh_);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">return</span> mesh_->to_vertex(halfedge_);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div><div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a1e9704548acdc0fe3667030e51aacfe8"> 578</a></span>  <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedge_.is_valid(); }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#ae8b42347c36439430c0e00c951600198"> 581</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#ae8b42347c36439430c0e00c951600198">halfedge</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedge_; }</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a>& begin() { active_=!halfedge_.is_valid(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a>& end() { active_=<span class="keyword">true</span>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> halfedge_;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordtype">bool</span> active_;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  };</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html"> 599</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  {</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> </div><div class="line"><a name="l00604"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#aac138f46867afd0269f440339ecc2087"> 604</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#aac138f46867afd0269f440339ecc2087">Halfedge_around_vertex_circulator</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a>())</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  : mesh_(m), active_(true)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">if</span> (mesh_) halfedge_ = mesh_->halfedge(v);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#afda011f93bf9dea5c66e0b7bbb886dbb"> 611</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#afda011f93bf9dea5c66e0b7bbb886dbb">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  assert(mesh_);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> (active_ && (mesh_==rhs.mesh_) && (halfedge_==rhs.halfedge_));</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a6497f9ac25ea6300d2d7a067e145a4bd"> 618</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a6497f9ac25ea6300d2d7a067e145a4bd">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a744a4fcac593c476749ac5cf2de35c42"> 624</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a744a4fcac593c476749ac5cf2de35c42">operator++</a>()</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  assert(mesh_);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  halfedge_ = mesh_->ccw_rotated_halfedge(halfedge_);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  active_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  }</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div><div class="line"><a name="l00633"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a045be124cca3d46857e9633e4bf01fb6"> 633</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a045be124cca3d46857e9633e4bf01fb6">operator--</a>()</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  assert(mesh_);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  halfedge_ = mesh_->cw_rotated_halfedge(halfedge_);</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00641"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a32d6a399c7365b15b4fca52aa2735687"> 641</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a32d6a399c7365b15b4fca52aa2735687">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedge_; }</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span> </div><div class="line"><a name="l00644"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#ad95bccb342d0fa9332be4e78c01d59d0"> 644</a></span>  <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedge_.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">is_valid</a>(); }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a>& begin() { active_=!halfedge_.is_valid(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a>& end() { active_=<span class="keyword">true</span>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> halfedge_;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordtype">bool</span> active_;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  };</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> </div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div><div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html"> 662</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#ad4c2c120025c001bbe48a12dc9ae41cd"> 667</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#ad4c2c120025c001bbe48a12dc9ae41cd">Face_around_vertex_circulator</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a>())</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  : mesh_(m), active_(true)</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (mesh_)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  {</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  halfedge_ = mesh_->halfedge(v);</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordflow">if</span> (halfedge_.is_valid() && mesh_->is_boundary(halfedge_))</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keyword">operator</span>++();</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  }</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div><div class="line"><a name="l00679"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#adb53483b2beb51f647a40cb475ab9c30"> 679</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#adb53483b2beb51f647a40cb475ab9c30">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  assert(mesh_);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <span class="keywordflow">return</span> (active_ && (mesh_==rhs.mesh_) && (halfedge_==rhs.halfedge_));</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#ae17fe7e1d54562bac19c43cabfc1e283"> 686</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#ae17fe7e1d54562bac19c43cabfc1e283">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00692"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a767bda66a170334db93e4e629431c847"> 692</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a767bda66a170334db93e4e629431c847">operator++</a>()</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  {</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordflow">do</span> {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  halfedge_ = mesh_->ccw_rotated_halfedge(halfedge_);</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  } <span class="keywordflow">while</span> (mesh_->is_boundary(halfedge_));</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  active_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  }</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00703"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a05673e5162015a3207e8483cba10a3b2"> 703</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a05673e5162015a3207e8483cba10a3b2">operator--</a>()</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">do</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  halfedge_ = mesh_->cw_rotated_halfedge(halfedge_);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keywordflow">while</span> (mesh_->is_boundary(halfedge_));</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00713"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a8342168434afe21b84e1b5123e3ba9d5"> 713</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a8342168434afe21b84e1b5123e3ba9d5">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  <span class="keywordflow">return</span> mesh_->face(halfedge_);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00720"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a53ef587c43954a1787b9b68632411c53"> 720</a></span>  <span class="keyword">operator</span> bool()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedge_.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">is_valid</a>(); }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a>& begin() { active_=!halfedge_.is_valid(); <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a>& end() { active_=<span class="keyword">true</span>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span> </div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> halfedge_;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordtype">bool</span> active_;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  };</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div><div class="line"><a name="l00738"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html"> 738</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a></div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  {</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span> </div><div class="line"><a name="l00743"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#ab5f132200f960ecad220111533b816aa"> 743</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#ab5f132200f960ecad220111533b816aa">Vertex_around_face_circulator</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a>())</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  : mesh_(m), active_(true)</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  {</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">if</span> (mesh_) halfedge_ = mesh_->halfedge(f);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  }</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a4b55b98a7185993f7609d7f8721cbe83"> 750</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a4b55b98a7185993f7609d7f8721cbe83">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  assert(mesh_);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">return</span> (active_ && (mesh_==rhs.mesh_) && (halfedge_==rhs.halfedge_));</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span> </div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a6187c292f7f9737956af1ac38dc7fab7"> 757</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a6187c292f7f9737956af1ac38dc7fab7">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  }</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span> </div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a4ba6daeda871e93f6eeb74ccc7684814"> 763</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a4ba6daeda871e93f6eeb74ccc7684814">operator++</a>()</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  {</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  halfedge_ = mesh_->next_halfedge(halfedge_);</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  active_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span> </div><div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a7715932f23c124982a9390af76c80ee9"> 772</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a7715932f23c124982a9390af76c80ee9">operator--</a>()</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  halfedge_ = mesh_->prev_halfedge(halfedge_);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a9d3335f9ca9229611c9d0a100e71845c"> 780</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a9d3335f9ca9229611c9d0a100e71845c">operator*</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">return</span> mesh_->to_vertex(halfedge_);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  }</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span> </div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a>& begin() { active_=<span class="keyword">false</span>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a>& end() { active_=<span class="keyword">true</span>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span> </div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> halfedge_;</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordtype">bool</span> active_;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  };</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span> </div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> </div><div class="line"><a name="l00802"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html"> 802</a></span>  <span class="keyword">class </span><a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a></div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  {</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keyword">public</span>:</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> </div><div class="line"><a name="l00807"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a2c344f40a602d69f815294dd751b1953"> 807</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a2c344f40a602d69f815294dd751b1953">Halfedge_around_face_circulator</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* m=NULL, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f=<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a>())</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  : mesh_(m), active_(true)</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  {</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordflow">if</span> (mesh_) halfedge_ = mesh_->halfedge(f);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  }</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div><div class="line"><a name="l00814"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#af12cba82f121fabbb39170dcb43ca29f"> 814</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#af12cba82f121fabbb39170dcb43ca29f">operator==</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  assert(mesh_);</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="keywordflow">return</span> (active_ && (mesh_==rhs.mesh_) && (halfedge_==rhs.halfedge_));</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div><div class="line"><a name="l00821"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#aeda1a1a66bb8ee44593b52edf76ee0b8"> 821</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#aeda1a1a66bb8ee44593b52edf76ee0b8">operator!=</a>(<span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a>& rhs)<span class="keyword"> const</span></div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">operator==</a>(rhs);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  }</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span> </div><div class="line"><a name="l00827"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a76d1ba96dd68755c1352bd711c88c2f0"> 827</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a76d1ba96dd68755c1352bd711c88c2f0">operator++</a>()</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  {</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  halfedge_ = mesh_->next_halfedge(halfedge_);</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  active_ = <span class="keyword">true</span>;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  }</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span> </div><div class="line"><a name="l00836"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a76c1636917fa56aedcacc1114727a19e"> 836</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a>& <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a76c1636917fa56aedcacc1114727a19e">operator--</a>()</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  {</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  assert(mesh_ && halfedge_.is_valid());</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  halfedge_ = mesh_->prev_halfedge(halfedge_);</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  }</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span> </div><div class="line"><a name="l00844"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#ae3c82fd4190819facc9be0402192491b"> 844</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#ae3c82fd4190819facc9be0402192491b">operator*</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedge_; }</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a>& begin() { active_=<span class="keyword">false</span>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a>& end() { active_=<span class="keyword">true</span>; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keyword">private</span>:</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keyword">const</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>* mesh_;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> halfedge_;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="comment">// helper for C++11 range-based for-loops</span></div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordtype">bool</span> active_;</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  };</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span> </div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span> </div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span> </div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keyword">public</span>: <span class="comment">//-------------------------------------------- constructor / destructor</span></div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span> </div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  HEADERONLY_INLINE <a class="code" href="class_open_g_p_1_1_surface_mesh.html">SurfaceMesh</a>();</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> </div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <span class="comment">// destructor (is virtual, since we inherit from Geometry_representation)</span></div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  HEADERONLY_INLINE <span class="keyword">virtual</span> ~SurfaceMesh();</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span> </div><div class="line"><a name="l00872"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ac72e63729b0d734578875fac48f2a9fe"> 872</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ac72e63729b0d734578875fac48f2a9fe">SurfaceMesh</a>(<span class="keyword">const</span> SurfaceMesh& rhs) { <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa6d78fffcd3a23bdc104f9b20e10736b">operator=</a>(rhs); }</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span> </div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  HEADERONLY_INLINE SurfaceMesh& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa6d78fffcd3a23bdc104f9b20e10736b">operator=</a>(<span class="keyword">const</span> SurfaceMesh& rhs);</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> </div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  HEADERONLY_INLINE SurfaceMesh& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a8ae02c97058c6fd1a7d56193b9ad4412">assign</a>(<span class="keyword">const</span> SurfaceMesh& rhs);</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> </div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span> </div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> </div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keyword">public</span>: <span class="comment">//------------------------------------------------------------- file IO</span></div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span> </div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span> </div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  HEADERONLY_INLINE <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a18e3b47a0275b670f8b0eae7f3245c63">read</a>(<span class="keyword">const</span> std::string& filename);</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  HEADERONLY_INLINE <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9f2f0dde61493534f3e9a939f9ce83ab">write</a>(<span class="keyword">const</span> std::string& filename) <span class="keyword">const</span>;</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> </div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span> </div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span> </div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> </div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> <span class="keyword">public</span>: <span class="comment">//----------------------------------------------- add new vertex / face</span></div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span> </div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span> </div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span> </div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a84bfcf99e46da0ce35c520bf16ee3e4c">add_vertex</a>(<span class="keyword">const</span> Vec3& p);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a28a835c6dc3bc22e1311651bfe608bc4">add_face</a>(<span class="keyword">const</span> std::vector<Vertex>& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aeae7436db9b2011facfbb21f539dab88">vertices</a>);</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aebc58f8d6601fc7c6953fc69f4e2b59f">add_triangle</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v1, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v2, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v3);</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aacfc2c77dbc0ee05098f55e7ffa063b1">add_quad</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v1, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v2, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v3, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v4);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> </div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span> </div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span> </div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span> <span class="keyword">public</span>: <span class="comment">//--------------------------------------------------- memory management</span></div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> </div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span> </div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div><div class="line"><a name="l00934"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#af369a483aa3382895f0aea7b724996e9"> 934</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#af369a483aa3382895f0aea7b724996e9">vertices_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) vprops_.size(); }</div><div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9"> 936</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9">halfedges_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) hprops_.size(); }</div><div class="line"><a name="l00938"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a19f3252002f5b2af1b0ba25a44238f64"> 938</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a19f3252002f5b2af1b0ba25a44238f64">edges_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) eprops_.size(); }</div><div class="line"><a name="l00940"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a419bb594c7799eb5a4f2e7867bcac2cc"> 940</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a419bb594c7799eb5a4f2e7867bcac2cc">faces_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>) fprops_.size(); }</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span> </div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span> </div><div class="line"><a name="l00944"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a8f0f9d9b2e68891018676897efd6130f"> 944</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a8f0f9d9b2e68891018676897efd6130f">n_vertices</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#af369a483aa3382895f0aea7b724996e9">vertices_size</a>() - deleted_vertices_; }</div><div class="line"><a name="l00946"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a63a0ff34c78f3519f035fe92bac5c523"> 946</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a63a0ff34c78f3519f035fe92bac5c523">n_halfedges</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9">halfedges_size</a>() - 2*deleted_edges_; }</div><div class="line"><a name="l00948"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1ed195cc9997d3578d3a166bff9a5e11"> 948</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1ed195cc9997d3578d3a166bff9a5e11">n_edges</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a19f3252002f5b2af1b0ba25a44238f64">edges_size</a>() - deleted_edges_; }</div><div class="line"><a name="l00950"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a7c43b48dac0688a37c99de847b222532"> 950</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a7c43b48dac0688a37c99de847b222532">n_faces</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a419bb594c7799eb5a4f2e7867bcac2cc">faces_size</a>() - deleted_faces_; }</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span> </div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> </div><div class="line"><a name="l00954"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1e71bb6614d75d42e5432e3d661fb1c4"> 954</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1e71bb6614d75d42e5432e3d661fb1c4">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a8f0f9d9b2e68891018676897efd6130f">n_vertices</a>() == 0; }</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> </div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a3adabfe138616588035426367befdfff">clear</a>();</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a0efd8a1ac6353eda37c5f4aa03d283b5">free_memory</a>();</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span> </div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#af4b13cbfc599914d1491f89b3889fb13">reserve</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nvertices,</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nedges,</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> nfaces );</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span> </div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span> </div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a50bae0a1df19ffd477fda198c7a667bb">garbage_collection</a>();</div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span> </div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span> </div><div class="line"><a name="l00975"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a78d91e464b9c7e86c38de6c6b7ccd9e9"> 975</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a78d91e464b9c7e86c38de6c6b7ccd9e9">is_deleted</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordflow">return</span> vdeleted_[v];</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  }</div><div class="line"><a name="l00981"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a6714d5585eb08f837ed82f0360f93272"> 981</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a6714d5585eb08f837ed82f0360f93272">is_deleted</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  <span class="keywordflow">return</span> edeleted_[<a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa22f2ec07cae930e64cbed22a831a9f0">edge</a>(h)];</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  }</div><div class="line"><a name="l00987"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a16d0de13a19aab692447dd17d582f874"> 987</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a16d0de13a19aab692447dd17d582f874">is_deleted</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e)<span class="keyword"> const</span></div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordflow">return</span> edeleted_[e];</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  }</div><div class="line"><a name="l00993"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a753af7604251aedf6f832671f7cb0cd1"> 993</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a753af7604251aedf6f832671f7cb0cd1">is_deleted</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)<span class="keyword"> const</span></div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keywordflow">return</span> fdeleted_[f];</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span> </div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span> </div><div class="line"><a name="l01000"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a3bddbc9bf3cfa02d3bfb1515b5646236"> 1000</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a3bddbc9bf3cfa02d3bfb1515b5646236">is_valid</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">return</span> (0 <= v.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>()) && (v.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>() < (int)<a class="code" href="class_open_g_p_1_1_surface_mesh.html#af369a483aa3382895f0aea7b724996e9">vertices_size</a>());</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  }</div><div class="line"><a name="l01005"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a15f032b5bf5e859d4588c31eeab2a020"> 1005</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a15f032b5bf5e859d4588c31eeab2a020">is_valid</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keywordflow">return</span> (0 <= h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>()) && (h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>() < (int)<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9">halfedges_size</a>());</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  }</div><div class="line"><a name="l01010"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a7715448e3ceaa0cc2df4c83346be4faa"> 1010</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a7715448e3ceaa0cc2df4c83346be4faa">is_valid</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e)<span class="keyword"> const</span></div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <span class="keywordflow">return</span> (0 <= e.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>()) && (e.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>() < (int)<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a19f3252002f5b2af1b0ba25a44238f64">edges_size</a>());</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  }</div><div class="line"><a name="l01015"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a2594fbf9b5b2569495fbc055782351dd"> 1015</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a2594fbf9b5b2569495fbc055782351dd">is_valid</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)<span class="keyword"> const</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="keywordflow">return</span> (0 <= f.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>()) && (f.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>() < (int)<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a419bb594c7799eb5a4f2e7867bcac2cc">faces_size</a>());</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  }</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span> </div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span> </div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span> </div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span> </div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span> <span class="keyword">public</span>: <span class="comment">//---------------------------------------------- low-level connectivity</span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span> </div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span> </div><div class="line"><a name="l01032"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330"> 1032</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="keywordflow">return</span> vconn_[v].halfedge_;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  }</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span> </div><div class="line"><a name="l01038"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ac762b76d67f6cc49eb17eb19948aa21d"> 1038</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ac762b76d67f6cc49eb17eb19948aa21d">set_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  {</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  vconn_[v].halfedge_ = h;</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  }</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span> </div><div class="line"><a name="l01044"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#aa0c816094824583e72f39d292cd747ed"> 1044</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa0c816094824583e72f39d292cd747ed">is_boundary</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(v));</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  <span class="keywordflow">return</span> (!(h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">is_valid</a>() && <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae68b67a560502aa22a33593e1c5df651">face</a>(h).<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">is_valid</a>()));</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  }</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div><div class="line"><a name="l01051"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#acf74f8181823773775888b347bdfa52d"> 1051</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#acf74f8181823773775888b347bdfa52d">is_isolated</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(v).<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">is_valid</a>();</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  }</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span> </div><div class="line"><a name="l01057"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ae3d30d0b895fb93b5e12278376248420"> 1057</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae3d30d0b895fb93b5e12278376248420">is_manifold</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <span class="comment">// The vertex is non-manifold if more than one gap exists, i.e.</span></div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <span class="comment">// more than one outgoing boundary halfedge.</span></div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  <span class="keywordtype">int</span> n(0);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a> hit = <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1ed6c8ae83c67b452c7e3e24533d622c">halfedges</a>(v), hend=hit;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="keywordflow">if</span> (hit) <span class="keywordflow">do</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  <span class="keywordflow">if</span> (<a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa0c816094824583e72f39d292cd747ed">is_boundary</a>(*hit))</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  ++n;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  }</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="keywordflow">while</span> (++hit!=hend);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  <span class="keywordflow">return</span> n<2;</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  }</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span> </div><div class="line"><a name="l01073"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1f7ba842d55d4bdb110fafc1db07b9bb"> 1073</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1f7ba842d55d4bdb110fafc1db07b9bb">to_vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  <span class="keywordflow">return</span> hconn_[h].vertex_;</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  }</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> </div><div class="line"><a name="l01079"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a24e7990fea324ad5fac69555e6ece8c4"> 1079</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a24e7990fea324ad5fac69555e6ece8c4">from_vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1f7ba842d55d4bdb110fafc1db07b9bb">to_vertex</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae747c6cfedc33361606393f40564d475">opposite_halfedge</a>(h));</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  }</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> </div><div class="line"><a name="l01085"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a35346f4542bbc8b0480a260b2862df8d"> 1085</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a35346f4542bbc8b0480a260b2862df8d">set_vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  {</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  hconn_[h].vertex_ = v;</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  }</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div><div class="line"><a name="l01091"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ae68b67a560502aa22a33593e1c5df651"> 1091</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae68b67a560502aa22a33593e1c5df651">face</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keywordflow">return</span> hconn_[h].face_;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> </div><div class="line"><a name="l01097"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a19b2975c689048710d87cddb6d35ded2"> 1097</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a19b2975c689048710d87cddb6d35ded2">set_face</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  hconn_[h].face_ = f;</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  }</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div><div class="line"><a name="l01103"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a9dd8a038f53e0a394c8a413fa9a91dcb"> 1103</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9dd8a038f53e0a394c8a413fa9a91dcb">next_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  <span class="keywordflow">return</span> hconn_[h].next_halfedge_;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  }</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span> </div><div class="line"><a name="l01109"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a0257f6675248075e80abaa1e7636b261"> 1109</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a0257f6675248075e80abaa1e7636b261">set_next_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> nh)</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  {</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  hconn_[h].next_halfedge_ = nh;</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  hconn_[nh].prev_halfedge_ = h;</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  }</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> </div><div class="line"><a name="l01116"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1d1a4c3db3732d29d049888c9574e825"> 1116</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1d1a4c3db3732d29d049888c9574e825">prev_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  <span class="keywordflow">return</span> hconn_[h].prev_halfedge_;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  }</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span> </div><div class="line"><a name="l01122"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ae747c6cfedc33361606393f40564d475"> 1122</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae747c6cfedc33361606393f40564d475">opposite_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="comment">// @note optimized version of: return Halfedge((h.idx() & 1) ? h.idx()-1 : h.idx()+1);</span></div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keywordflow">return</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a>(h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>() ^ 1);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  }</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> </div><div class="line"><a name="l01130"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a9741a73c925d629cbdb02893d38c6271"> 1130</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9741a73c925d629cbdb02893d38c6271">ccw_rotated_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae747c6cfedc33361606393f40564d475">opposite_halfedge</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1d1a4c3db3732d29d049888c9574e825">prev_halfedge</a>(h));</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  }</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span> </div><div class="line"><a name="l01137"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a91921c2d2a46f08f7c02456ca9275a9e"> 1137</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a91921c2d2a46f08f7c02456ca9275a9e">cw_rotated_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9dd8a038f53e0a394c8a413fa9a91dcb">next_halfedge</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae747c6cfedc33361606393f40564d475">opposite_halfedge</a>(h));</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span> </div><div class="line"><a name="l01143"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#aa22f2ec07cae930e64cbed22a831a9f0"> 1143</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa22f2ec07cae930e64cbed22a831a9f0">edge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">return</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a>(h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>() >> 1);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span> </div><div class="line"><a name="l01149"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#aa8e894247752939a13c64890fc14214c"> 1149</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa8e894247752939a13c64890fc14214c">is_boundary</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)<span class="keyword"> const</span></div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  <span class="keywordflow">return</span> !<a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae68b67a560502aa22a33593e1c5df651">face</a>(h).<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">is_valid</a>();</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> </div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div><div class="line"><a name="l01156"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ae59f9a5eb5f47427ac33b6c826d8dc50"> 1156</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae59f9a5eb5f47427ac33b6c826d8dc50">halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)<span class="keyword"> const</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  assert(i<=1);</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <span class="keywordflow">return</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a>((e.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>() << 1) + i);</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  }</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span> </div><div class="line"><a name="l01163"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ad32dc1efbe1994b6d4f6ee76ba191722"> 1163</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ad32dc1efbe1994b6d4f6ee76ba191722">vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)<span class="keyword"> const</span></div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  assert(i<=1);</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1f7ba842d55d4bdb110fafc1db07b9bb">to_vertex</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(e, i));</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  }</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div><div class="line"><a name="l01170"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a97b67a55a91cfc49fb2bcd373a2dd453"> 1170</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a97b67a55a91cfc49fb2bcd373a2dd453">face</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i)<span class="keyword"> const</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  assert(i<=1);</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae68b67a560502aa22a33593e1c5df651">face</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(e, i));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  }</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> </div><div class="line"><a name="l01178"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#afea5aedb652cc9e55aeae5dd2e6c7e6d"> 1178</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#afea5aedb652cc9e55aeae5dd2e6c7e6d">is_boundary</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e)<span class="keyword"> const</span></div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  <span class="keywordflow">return</span> (<a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa0c816094824583e72f39d292cd747ed">is_boundary</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(e, 0)) || <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa0c816094824583e72f39d292cd747ed">is_boundary</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(e, 1)));</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  }</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> </div><div class="line"><a name="l01184"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a0c47be2092bcf49c1ff0b0b31fff4a39"> 1184</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a0c47be2092bcf49c1ff0b0b31fff4a39">halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)<span class="keyword"> const</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <span class="keywordflow">return</span> fconn_[f].halfedge_;</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  }</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div><div class="line"><a name="l01190"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a71141bb1096708a6baa167401b56ec58"> 1190</a></span>  <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a71141bb1096708a6baa167401b56ec58">set_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h)</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  {</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  fconn_[f].halfedge_ = h;</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  }</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span> </div><div class="line"><a name="l01196"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a3a76bc861133478f96d2b5e48d5c738d"> 1196</a></span>  <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a3a76bc861133478f96d2b5e48d5c738d">is_boundary</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)<span class="keyword"> const</span></div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h = <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(f);</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> hh = h;</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  <span class="keywordflow">do</span></div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  {</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  <span class="keywordflow">if</span> (<a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa0c816094824583e72f39d292cd747ed">is_boundary</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae747c6cfedc33361606393f40564d475">opposite_halfedge</a>(h)))</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  h = <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9dd8a038f53e0a394c8a413fa9a91dcb">next_halfedge</a>(h);</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  }</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  <span class="keywordflow">while</span> (h != hh);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> </div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span> </div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> </div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="keyword">public</span>: <span class="comment">//--------------------------------------------------- property handling</span></div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> </div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> </div><div class="line"><a name="l01223"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ac93a3b5012953c091ec40949a6f474a7"> 1223</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ac93a3b5012953c091ec40949a6f474a7">add_vertex_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  {</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<T></a>(vprops_.add<T>(name, t));</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  }</div><div class="line"><a name="l01230"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a9820779f524dbd1ec4cfd886f1f7e5f8"> 1230</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9820779f524dbd1ec4cfd886f1f7e5f8">add_halfedge_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>  {</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<T></a>(hprops_.add<T>(name, t));</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  }</div><div class="line"><a name="l01237"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1ce75b6bf0efe4f21ef2391399979759"> 1237</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1ce75b6bf0efe4f21ef2391399979759">add_edge_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<T></a>(eprops_.add<T>(name, t));</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  }</div><div class="line"><a name="l01244"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a9bd42b305af291b75b08d643592365ac"> 1244</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9bd42b305af291b75b08d643592365ac">add_face_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  {</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<T></a>(fprops_.add<T>(name, t));</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  }</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span> </div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span> </div><div class="line"><a name="l01252"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a49a79a62cd065f66edc0dff5ddb6687e"> 1252</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a49a79a62cd065f66edc0dff5ddb6687e">get_vertex_property</a>(<span class="keyword">const</span> std::string& name)<span class="keyword"> const</span></div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<T></a>(vprops_.get<T>(name));</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  }</div><div class="line"><a name="l01258"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a5d9c25281115f9859b0c08f30184f99f"> 1258</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a5d9c25281115f9859b0c08f30184f99f">get_halfedge_property</a>(<span class="keyword">const</span> std::string& name)<span class="keyword"> const</span></div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<T></a>(hprops_.get<T>(name));</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  }</div><div class="line"><a name="l01264"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a861117410179fea7aeaa377d9eb83094"> 1264</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a861117410179fea7aeaa377d9eb83094">get_edge_property</a>(<span class="keyword">const</span> std::string& name)<span class="keyword"> const</span></div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<T></a>(eprops_.get<T>(name));</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  }</div><div class="line"><a name="l01270"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a9dab64eda7de98f10f5b9cc9988a3b90"> 1270</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9dab64eda7de98f10f5b9cc9988a3b90">get_face_property</a>(<span class="keyword">const</span> std::string& name)<span class="keyword"> const</span></div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<T></a>(fprops_.get<T>(name));</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  }</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span> </div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span> </div><div class="line"><a name="l01278"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a037d2df1a2ddf83297a81222de6e55c8"> 1278</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a037d2df1a2ddf83297a81222de6e55c8">vertex_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  {</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<T></a>(vprops_.get_or_add<T>(name, t));</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  }</div><div class="line"><a name="l01284"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#abbdd898243df2b8ef06ce23759f0b2c6"> 1284</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#abbdd898243df2b8ef06ce23759f0b2c6">halfedge_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  {</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<T></a>(hprops_.get_or_add<T>(name, t));</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  }</div><div class="line"><a name="l01290"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#aafec0b6da843682831e0740409844a80"> 1290</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aafec0b6da843682831e0740409844a80">edge_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  {</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<T></a>(eprops_.get_or_add<T>(name, t));</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  }</div><div class="line"><a name="l01296"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#aaf2c8bf7e23b6419661bf69417165ef8"> 1296</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<T></a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aaf2c8bf7e23b6419661bf69417165ef8">face_property</a>(<span class="keyword">const</span> std::string& name, <span class="keyword">const</span> T t=T())</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  {</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<T></a>(fprops_.get_or_add<T>(name, t));</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  }</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> </div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span> </div><div class="line"><a name="l01303"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a98b709643c2f6858b4ee8b9e5af730de"> 1303</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a98b709643c2f6858b4ee8b9e5af730de">remove_vertex_property</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<T></a>& p)</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  {</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  vprops_.remove(p);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  }</div><div class="line"><a name="l01308"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a3da93abd9206e122a3feaf01d3988446"> 1308</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a3da93abd9206e122a3feaf01d3988446">remove_halfedge_property</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<T></a>& p)</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>  {</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  hprops_.remove(p);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  }</div><div class="line"><a name="l01313"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a794613deae5d83cef41de5f838f605aa"> 1313</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a794613deae5d83cef41de5f838f605aa">remove_edge_property</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<T></a>& p)</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  {</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  eprops_.remove(p);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  }</div><div class="line"><a name="l01318"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a56c4dfbf137a508b808f65372f7bd4e9"> 1318</a></span>  <span class="keyword">template</span> <<span class="keyword">class</span> T> <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a56c4dfbf137a508b808f65372f7bd4e9">remove_face_property</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<T></a>& p)</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  {</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  fprops_.remove(p);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  }</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> </div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div><div class="line"><a name="l01326"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a84fb77097285be6cdd85d3505e81fbb8"> 1326</a></span>  <span class="keyword">const</span> std::type_info& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a84fb77097285be6cdd85d3505e81fbb8">get_vertex_property_type</a>(<span class="keyword">const</span> std::string& name)</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  {</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keywordflow">return</span> vprops_.get_type(name);</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  }</div><div class="line"><a name="l01332"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a8cbf036a0782f154f3f66b1545d19ffc"> 1332</a></span>  <span class="keyword">const</span> std::type_info& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a8cbf036a0782f154f3f66b1545d19ffc">get_halfedge_property_type</a>(<span class="keyword">const</span> std::string& name)</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  {</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  <span class="keywordflow">return</span> hprops_.get_type(name);</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  }</div><div class="line"><a name="l01338"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a2ec6f27be502753c245aa81615b799d6"> 1338</a></span>  <span class="keyword">const</span> std::type_info& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a2ec6f27be502753c245aa81615b799d6">get_edge_property_type</a>(<span class="keyword">const</span> std::string& name)</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  {</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">return</span> eprops_.get_type(name);</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div><div class="line"><a name="l01344"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ad5162436ae6ba4e5b6282790d979b265"> 1344</a></span>  <span class="keyword">const</span> std::type_info& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ad5162436ae6ba4e5b6282790d979b265">get_face_property_type</a>(<span class="keyword">const</span> std::string& name)</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  {</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <span class="keywordflow">return</span> fprops_.get_type(name);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  }</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div><div class="line"><a name="l01351"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a059a294783211f6729571070197a1668"> 1351</a></span>  std::vector<std::string> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a059a294783211f6729571070197a1668">vertex_properties</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <span class="keywordflow">return</span> vprops_.properties();</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  }</div><div class="line"><a name="l01356"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ab982a61330a2eb4bf0affb4fe8e995b5"> 1356</a></span>  std::vector<std::string> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ab982a61330a2eb4bf0affb4fe8e995b5">halfedge_properties</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>  <span class="keywordflow">return</span> hprops_.properties();</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  }</div><div class="line"><a name="l01361"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a73eb9d72d3df12188ad78ede0b9d4359"> 1361</a></span>  std::vector<std::string> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a73eb9d72d3df12188ad78ede0b9d4359">edge_properties</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <span class="keywordflow">return</span> eprops_.properties();</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  }</div><div class="line"><a name="l01366"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a5edcfb16a0f747263e45f65a47696fd6"> 1366</a></span>  std::vector<std::string> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a5edcfb16a0f747263e45f65a47696fd6">face_properties</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  <span class="keywordflow">return</span> fprops_.properties();</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  }</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a273d70421b6f04ec830daf686bb9c4ae">property_stats</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> </div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> </div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> </div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> </div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="keyword">public</span>: <span class="comment">//--------------------------------------------- iterators & circulators</span></div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> </div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span> </div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span> </div><div class="line"><a name="l01384"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#aaec7881d50ee98937e696f4fe0f50165"> 1384</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aaec7881d50ee98937e696f4fe0f50165">vertices_begin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a>(0), <span class="keyword">this</span>);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  }</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span> </div><div class="line"><a name="l01390"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a5c74d8232746b48b89aebb7b6e5f0cf3"> 1390</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a5c74d8232746b48b89aebb7b6e5f0cf3">vertices_end</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">Vertex_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#af369a483aa3382895f0aea7b724996e9">vertices_size</a>()), <span class="keyword">this</span>);</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>  }</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> </div><div class="line"><a name="l01396"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#aeae7436db9b2011facfbb21f539dab88"> 1396</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__container.html">Vertex_container</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aeae7436db9b2011facfbb21f539dab88">vertices</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__container.html">Vertex_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#aaec7881d50ee98937e696f4fe0f50165">vertices_begin</a>(), <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a5c74d8232746b48b89aebb7b6e5f0cf3">vertices_end</a>());</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  }</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span> </div><div class="line"><a name="l01402"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a32344e0120b2148cb649be85df1b2a34"> 1402</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a32344e0120b2148cb649be85df1b2a34">halfedges_begin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a>(0), <span class="keyword">this</span>);</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>  }</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> </div><div class="line"><a name="l01408"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a0496259a0961b578bed1a422326f1264"> 1408</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a0496259a0961b578bed1a422326f1264">halfedges_end</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">Halfedge_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9">halfedges_size</a>()), <span class="keyword">this</span>);</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  }</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div><div class="line"><a name="l01414"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1ed6c8ae83c67b452c7e3e24533d622c"> 1414</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__container.html">Halfedge_container</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1ed6c8ae83c67b452c7e3e24533d622c">halfedges</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__container.html">Halfedge_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a32344e0120b2148cb649be85df1b2a34">halfedges_begin</a>(), <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a0496259a0961b578bed1a422326f1264">halfedges_end</a>());</div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  }</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span> </div><div class="line"><a name="l01420"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1b5bff4cb258f6cf092eff82ef8c6bdc"> 1420</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1b5bff4cb258f6cf092eff82ef8c6bdc">edges_begin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a>(0), <span class="keyword">this</span>);</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>  }</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> </div><div class="line"><a name="l01426"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a12b29ac46df4f2702545f462e39f1faa"> 1426</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12b29ac46df4f2702545f462e39f1faa">edges_end</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">Edge_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a19f3252002f5b2af1b0ba25a44238f64">edges_size</a>()), <span class="keyword">this</span>);</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  }</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span> </div><div class="line"><a name="l01432"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ae78c15bb2d560895ec5805eaa37fc401"> 1432</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__container.html">Edge_container</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae78c15bb2d560895ec5805eaa37fc401">edges</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__container.html">Edge_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1b5bff4cb258f6cf092eff82ef8c6bdc">edges_begin</a>(), <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12b29ac46df4f2702545f462e39f1faa">edges_end</a>());</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  }</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div><div class="line"><a name="l01438"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a69e9297f435da269b2940d630b4b4dba"> 1438</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a69e9297f435da269b2940d630b4b4dba">faces_begin</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a>(0), <span class="keyword">this</span>);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>  }</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span> </div><div class="line"><a name="l01444"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a9e5f431c69d88d73e601a7403b45a341"> 1444</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9e5f431c69d88d73e601a7403b45a341">faces_end</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">Face_iterator</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a419bb594c7799eb5a4f2e7867bcac2cc">faces_size</a>()), <span class="keyword">this</span>);</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>  }</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span> </div><div class="line"><a name="l01450"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a4542334df20f2b0d613f4035aeef1c46"> 1450</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__container.html">Face_container</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a4542334df20f2b0d613f4035aeef1c46">faces</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__container.html">Face_container</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a69e9297f435da269b2940d630b4b4dba">faces_begin</a>(), <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9e5f431c69d88d73e601a7403b45a341">faces_end</a>());</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>  }</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span> </div><div class="line"><a name="l01456"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#af90ac6206924527eab465ced759f9876"> 1456</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#af90ac6206924527eab465ced759f9876">vertices</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">Vertex_around_vertex_circulator</a>(<span class="keyword">this</span>, v);</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>  }</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span> </div><div class="line"><a name="l01462"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a8ded4b1d1d942acfe87aca39312dc8ce"> 1462</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a8ded4b1d1d942acfe87aca39312dc8ce">halfedges</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">Halfedge_around_vertex_circulator</a>(<span class="keyword">this</span>, v);</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>  }</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span> </div><div class="line"><a name="l01468"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ad47ff184f3a69335a186685b22cbdfb5"> 1468</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ad47ff184f3a69335a186685b22cbdfb5">faces</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const</span></div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">Face_around_vertex_circulator</a>(<span class="keyword">this</span>, v);</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  }</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> </div><div class="line"><a name="l01474"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#addd5a37cf781d21a25f06049b1c2bf32"> 1474</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#addd5a37cf781d21a25f06049b1c2bf32">vertices</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)<span class="keyword"> const</span></div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">Vertex_around_face_circulator</a>(<span class="keyword">this</span>, f);</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>  }</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span> </div><div class="line"><a name="l01480"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#adb556fbd59d9a37022b1e59563e31018"> 1480</a></span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#adb556fbd59d9a37022b1e59563e31018">halfedges</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f)<span class="keyword"> const</span></div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span> <span class="keyword"> </span>{</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">Halfedge_around_face_circulator</a>(<span class="keyword">this</span>, f);</div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>  }</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span> </div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span> </div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span> </div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> </div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span> </div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span> </div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> <span class="keyword">public</span>: <span class="comment">//--------------------------------------------- higher-level operations</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> </div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span> </div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>  HEADERONLY_INLINE <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a86564712b32313fc9c3d866497376d34">is_triangle_mesh</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span> </div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>  HEADERONLY_INLINE <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a8c1c3e680e75c99fcd97a5f32a2ff9d4">is_quad_mesh</a>() <span class="keyword">const</span>;</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span> </div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a603eb43a3b793cf7fbfa09e2ce9b7047">triangulate</a>();</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span> </div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a603eb43a3b793cf7fbfa09e2ce9b7047">triangulate</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f);</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span> </div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> </div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>  HEADERONLY_INLINE <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a355c86fd0511255f4fcc274f892ed037">is_collapse_ok</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h);</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span> </div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ac9e79b6804f0c9877a66f3243c0f452b">collapse</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h);</div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> </div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span> </div><div class="line"><a name="l01536"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a535bc2ad55eb7c716e92a8b4723ce650"> 1536</a></span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a535bc2ad55eb7c716e92a8b4723ce650">split</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f, <span class="keyword">const</span> Vec3& p) { <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v=<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a84bfcf99e46da0ce35c520bf16ee3e4c">add_vertex</a>(p); <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a535bc2ad55eb7c716e92a8b4723ce650">split</a>(f,v); <span class="keywordflow">return</span> v; }</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span> </div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a535bc2ad55eb7c716e92a8b4723ce650">split</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span> </div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> </div><div class="line"><a name="l01551"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a1d4368f7faa1bc8356be123ed8f1c94e"> 1551</a></span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1d4368f7faa1bc8356be123ed8f1c94e">split</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e, <span class="keyword">const</span> Vec3& p) { <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v=<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a84bfcf99e46da0ce35c520bf16ee3e4c">add_vertex</a>(p); <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1d4368f7faa1bc8356be123ed8f1c94e">split</a>(e,v); <span class="keywordflow">return</span> v; }</div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> </div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a535bc2ad55eb7c716e92a8b4723ce650">split</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v);</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span> </div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span> </div><div class="line"><a name="l01567"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ae2f75d95ee3ed242556a919e7847d4a8"> 1567</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae2f75d95ee3ed242556a919e7847d4a8">insert_vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e, <span class="keyword">const</span> Vec3& p)</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>  {</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae2f75d95ee3ed242556a919e7847d4a8">insert_vertex</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(e,0), <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a84bfcf99e46da0ce35c520bf16ee3e4c">add_vertex</a>(p));</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>  }</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> </div><div class="line"><a name="l01578"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ac031789707774634190bd8978b836197"> 1578</a></span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ac031789707774634190bd8978b836197">insert_vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>  {</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>  <span class="keywordflow">return</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae2f75d95ee3ed242556a919e7847d4a8">insert_vertex</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">halfedge</a>(e,0), v);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>  }</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span> </div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ae2f75d95ee3ed242556a919e7847d4a8">insert_vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v);</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span> </div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span> </div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1472304554c931b09c916a597c3a7e73">insert_edge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h0, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h1);</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span> </div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span> </div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>  HEADERONLY_INLINE <span class="keywordtype">bool</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#abb7fa784f9fd75a9e4395d67dce8a8f6">is_flip_ok</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e) <span class="keyword">const</span>;</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span> </div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa952f403210c6c35c6caab79780489df">flip</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e);</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span> </div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span> </div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>  HEADERONLY_INLINE <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1762612694c3d584498d5e6dcd86a611">valence</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v) <span class="keyword">const</span>;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span> </div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>  HEADERONLY_INLINE <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a1762612694c3d584498d5e6dcd86a611">valence</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f) <span class="keyword">const</span>;</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span> </div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a055a572c24586f61d882b94d7b596f82">find_halfedge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> start, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> end) <span class="keyword">const</span>;</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span> </div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>  HEADERONLY_INLINE <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a648392d7936a0b61a9b536c6a9da5743">find_edge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> a, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> b) <span class="keyword">const</span>;</div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span> </div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#af43a3b800de0d8c10048266d9f9bcdc8">delete_vertex</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v);</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span> </div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ad0d9397f20d4350077e571e6d96b17c5">delete_edge</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span> </div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#aa7a05aaf40335954750531a10497de2a">delete_face</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f);</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span> </div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span> </div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span> </div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span> <span class="keyword">public</span>: <span class="comment">//------------------------------------------ geometry-related functions</span></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> </div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> </div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span> </div><div class="line"><a name="l01643"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#ad7e1c0a6986d5cbceade7cd5e03f5ad0"> 1643</a></span>  <span class="keyword">const</span> Vec3& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ad7e1c0a6986d5cbceade7cd5e03f5ad0">position</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vpoint_[v]; }</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span> </div><div class="line"><a name="l01646"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#acc2a2bc3aac844db5e126a9cf1a9ac18"> 1646</a></span>  Vec3& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#acc2a2bc3aac844db5e126a9cf1a9ac18">position</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v) { <span class="keywordflow">return</span> vpoint_[v]; }</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> </div><div class="line"><a name="l01649"></a><span class="lineno"><a class="line" href="class_open_g_p_1_1_surface_mesh.html#a01bd845c233b6ad8e022ae176cc84463"> 1649</a></span>  std::vector<Vec3>& <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a01bd845c233b6ad8e022ae176cc84463">points</a>() { <span class="keywordflow">return</span> vpoint_.vector(); }</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span> </div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a4b9c9d0b258baa723e79b81ea81595fb">update_face_normals</a>();</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span> </div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>  HEADERONLY_INLINE Vec3 <a class="code" href="class_open_g_p_1_1_surface_mesh.html#adcae11982622bca9d153094e5ae35422">compute_face_normal</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> f) <span class="keyword">const</span>;</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> <a class="code" href="class_open_g_p_1_1_surface_mesh.html#ad43e3b5a7a5a17773bf967c6e36173c4">update_vertex_normals</a>();</div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span> </div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>  HEADERONLY_INLINE Vec3 <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a6f2e68b4d661cdd0fcf550a9365bb74d">compute_vertex_normal</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v) <span class="keyword">const</span>;</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span> </div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>  HEADERONLY_INLINE Scalar <a class="code" href="class_open_g_p_1_1_surface_mesh.html#acff33dca5886178a646e3eb3d228aca5">edge_length</a>(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">Edge</a> e) <span class="keyword">const</span>;</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span> </div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span> </div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span> </div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span> </div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> </div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> <span class="keyword">private</span>: <span class="comment">//---------------------------------------------- allocate new elements</span></div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> </div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> new_vertex()</div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>  {</div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>  vprops_.push_back();</div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>  <span class="keywordflow">return</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#af369a483aa3382895f0aea7b724996e9">vertices_size</a>()-1);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>  }</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span> </div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> new_edge(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> start, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> end)</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>  {</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>  assert(start != end);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span> </div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>  eprops_.push_back();</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>  hprops_.push_back();</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>  hprops_.push_back();</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span> </div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h0(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9">halfedges_size</a>()-2);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h1(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9">halfedges_size</a>()-1);</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> </div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a35346f4542bbc8b0480a260b2862df8d">set_vertex</a>(h0, end);</div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh.html#a35346f4542bbc8b0480a260b2862df8d">set_vertex</a>(h1, start);</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span> </div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>  <span class="keywordflow">return</span> h0;</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>  }</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span> </div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>  <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a> new_face()</div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>  {</div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>  fprops_.push_back();</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>  <span class="keywordflow">return</span> <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">Face</a>(<a class="code" href="class_open_g_p_1_1_surface_mesh.html#a419bb594c7799eb5a4f2e7867bcac2cc">faces_size</a>()-1);</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>  }</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span> </div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span> </div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span> </div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span> </div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> <span class="keyword">private</span>: <span class="comment">//--------------------------------------------------- helper functions</span></div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> </div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> adjust_outgoing_halfedge(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">Vertex</a> v);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span> </div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> remove_edge(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h);</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> </div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>  HEADERONLY_INLINE <span class="keywordtype">void</span> remove_loop(<a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">Halfedge</a> h);</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> </div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>  <span class="keywordtype">bool</span> garbage()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> garbage_; }</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span> </div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span> </div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span> <span class="keyword">private</span>: <span class="comment">//------------------------------------------------------- private data</span></div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span> </div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>  HEADERONLY_INLINE <span class="keyword">friend</span> <span class="keywordtype">bool</span> read_poly(SurfaceMesh& mesh, <span class="keyword">const</span> std::string& filename);</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span> </div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>  Property_container vprops_;</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>  Property_container hprops_;</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>  Property_container eprops_;</div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>  Property_container fprops_;</div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span> </div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<Vertex_connectivity></a> vconn_;</div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">Halfedge_property<Halfedge_connectivity></a> hconn_;</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<Face_connectivity></a> fconn_;</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span> </div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<bool></a> vdeleted_;</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">Edge_property<bool></a> edeleted_;</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<bool></a> fdeleted_;</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span> </div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<Vec3></a> vpoint_;</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">Vertex_property<Vec3></a> vnormal_;</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>  <a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">Face_property<Vec3></a> fnormal_;</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span> </div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> deleted_vertices_;</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> deleted_edges_;</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> deleted_faces_;</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>  <span class="keywordtype">bool</span> garbage_;</div><div class="line"><a name="l01750"></a><span class="lineno"> 1750</span> </div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>  <span class="comment">// helper data for add_face()</span></div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>  <span class="keyword">typedef</span> std::pair<Halfedge, Halfedge> NextCacheEntry;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>  <span class="keyword">typedef</span> std::vector<NextCacheEntry> NextCache;</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>  std::vector<Vertex> add_face_vertices_;</div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>  std::vector<Halfedge> add_face_halfedges_;</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>  std::vector<bool> add_face_is_new_;</div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>  std::vector<bool> add_face_needs_adjust_;</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>  NextCache add_face_next_cache_;</div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span> };</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> </div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> </div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="comment">//------------------------------------------------------------ output operators</span></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> </div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> </div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="keyword">inline</span> std::ostream& operator<<(std::ostream& os, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">SurfaceMesh::Vertex</a> v)</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> {</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>  <span class="keywordflow">return</span> (os << <span class="charliteral">'v'</span> << v.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> }</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span> </div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span> <span class="keyword">inline</span> std::ostream& operator<<(std::ostream& os, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">SurfaceMesh::Halfedge</a> h)</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span> {</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>  <span class="keywordflow">return</span> (os << <span class="charliteral">'h'</span> << h.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span> }</div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span> </div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span> <span class="keyword">inline</span> std::ostream& operator<<(std::ostream& os, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">SurfaceMesh::Edge</a> e)</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> {</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>  <span class="keywordflow">return</span> (os << <span class="charliteral">'e'</span> << e.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span> }</div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span> </div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span> <span class="keyword">inline</span> std::ostream& operator<<(std::ostream& os, <a class="code" href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">SurfaceMesh::Face</a> f)</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span> {</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>  <span class="keywordflow">return</span> (os << <span class="charliteral">'f'</span> << f.<a class="code" href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">idx</a>());</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span> }</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span> </div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span> </div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> <span class="comment">//=============================================================================</span></div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span> } <span class="comment">// namespace OpenGP</span></div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span> <span class="comment">//=============================================================================</span></div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span> </div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span> <span class="comment">// Header only support</span></div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span> <span class="preprocessor">#ifdef HEADERONLY</span></div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span> <span class="preprocessor"> #include "SurfaceMesh.cpp"</span></div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property_html_a79f91e3b6aa3025a9b1edbc26f1cc8d7"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a79f91e3b6aa3025a9b1edbc26f1cc8d7">OpenGP::SurfaceMesh::Halfedge_property::operator[]</a></div><div class="ttdeci">Property< T >::reference operator[](Halfedge h)</div><div class="ttdoc">access the data stored for halfedge h </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:186</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_vertex_html_a3ecc077334c1a7ae8e68d1cb2b9cf5eb"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html#a3ecc077334c1a7ae8e68d1cb2b9cf5eb">OpenGP::SurfaceMesh::Vertex::Vertex</a></div><div class="ttdeci">Vertex(int _idx=-1)</div><div class="ttdoc">default constructor (with invalid index) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:78</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a8cbf036a0782f154f3f66b1545d19ffc"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a8cbf036a0782f154f3f66b1545d19ffc">OpenGP::SurfaceMesh::get_halfedge_property_type</a></div><div class="ttdeci">const std::type_info & get_halfedge_property_type(const std::string &name)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1332</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property_html_a3622f89c259957db9a4cd4a046ebf704"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a3622f89c259957db9a4cd4a046ebf704">OpenGP::SurfaceMesh::Halfedge_property::operator[]</a></div><div class="ttdeci">Property< T >::const_reference operator[](Halfedge h) const </div><div class="ttdoc">access the data stored for halfedge h </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:192</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator_html_afda011f93bf9dea5c66e0b7bbb886dbb"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#afda011f93bf9dea5c66e0b7bbb886dbb">OpenGP::SurfaceMesh::Halfedge_around_vertex_circulator::operator==</a></div><div class="ttdeci">bool operator==(const Halfedge_around_vertex_circulator &rhs) const </div><div class="ttdoc">are two circulators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:611</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator_html_a4b55b98a7185993f7609d7f8721cbe83"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a4b55b98a7185993f7609d7f8721cbe83">OpenGP::SurfaceMesh::Vertex_around_face_circulator::operator==</a></div><div class="ttdeci">bool operator==(const Vertex_around_face_circulator &rhs) const </div><div class="ttdoc">are two circulators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:750</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a2ec6f27be502753c245aa81615b799d6"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a2ec6f27be502753c245aa81615b799d6">OpenGP::SurfaceMesh::get_edge_property_type</a></div><div class="ttdeci">const std::type_info & get_edge_property_type(const std::string &name)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1338</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a0496259a0961b578bed1a422326f1264"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a0496259a0961b578bed1a422326f1264">OpenGP::SurfaceMesh::halfedges_end</a></div><div class="ttdeci">Halfedge_iterator halfedges_end() const </div><div class="ttdoc">returns end iterator for halfedges </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1408</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ad5162436ae6ba4e5b6282790d979b265"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ad5162436ae6ba4e5b6282790d979b265">OpenGP::SurfaceMesh::get_face_property_type</a></div><div class="ttdeci">const std::type_info & get_face_property_type(const std::string &name)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1344</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a535bc2ad55eb7c716e92a8b4723ce650"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a535bc2ad55eb7c716e92a8b4723ce650">OpenGP::SurfaceMesh::split</a></div><div class="ttdeci">HEADERONLY_INLINE Vertex split(Face f, const Vec3 &p)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1536</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html">OpenGP::SurfaceMesh::Edge_iterator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:358</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator_html_a76c1636917fa56aedcacc1114727a19e"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a76c1636917fa56aedcacc1114727a19e">OpenGP::SurfaceMesh::Halfedge_around_face_circulator::operator--</a></div><div class="ttdeci">Halfedge_around_face_circulator & operator--()</div><div class="ttdoc">pre-decrement (rotates clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:836</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator_html_a045be124cca3d46857e9633e4bf01fb6"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a045be124cca3d46857e9633e4bf01fb6">OpenGP::SurfaceMesh::Halfedge_around_vertex_circulator::operator--</a></div><div class="ttdeci">Halfedge_around_vertex_circulator & operator--()</div><div class="ttdoc">pre-decrement (rotate clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:633</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a4542334df20f2b0d613f4035aeef1c46"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a4542334df20f2b0d613f4035aeef1c46">OpenGP::SurfaceMesh::faces</a></div><div class="ttdeci">Face_container faces() const </div><div class="ttdoc">returns face container for C++11 range-based for-loops </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1450</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__property_html_add9e58c14d3b5678b55c77dd9a9b97e1"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#add9e58c14d3b5678b55c77dd9a9b97e1">OpenGP::SurfaceMesh::Edge_property::operator[]</a></div><div class="ttdeci">Property< T >::const_reference operator[](Edge e) const </div><div class="ttdoc">access the data stored for edge e </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:216</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a0efd8a1ac6353eda37c5f4aa03d283b5"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a0efd8a1ac6353eda37c5f4aa03d283b5">OpenGP::SurfaceMesh::free_memory</a></div><div class="ttdeci">HEADERONLY_INLINE void free_memory()</div><div class="ttdoc">remove unused memory from vectors </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:193</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html_a39f905511c1842f9072525f441d551e0"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a39f905511c1842f9072525f441d551e0">OpenGP::SurfaceMesh::Base_handle::operator<</a></div><div class="ttdeci">bool operator<(const Base_handle &_rhs) const </div><div class="ttdoc">compare operator useful for sorting handles </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:59</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a6f2e68b4d661cdd0fcf550a9365bb74d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a6f2e68b4d661cdd0fcf550a9365bb74d">OpenGP::SurfaceMesh::compute_vertex_normal</a></div><div class="ttdeci">HEADERONLY_INLINE Vec3 compute_vertex_normal(Vertex v) const </div><div class="ttdoc">compute normal vector of vertex v. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:773</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a84fb77097285be6cdd85d3505e81fbb8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a84fb77097285be6cdd85d3505e81fbb8">OpenGP::SurfaceMesh::get_vertex_property_type</a></div><div class="ttdeci">const std::type_info & get_vertex_property_type(const std::string &name)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1326</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1d1a4c3db3732d29d049888c9574e825"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1d1a4c3db3732d29d049888c9574e825">OpenGP::SurfaceMesh::prev_halfedge</a></div><div class="ttdeci">Halfedge prev_halfedge(Halfedge h) const </div><div class="ttdoc">returns the previous halfedge within the incident face </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1116</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html">OpenGP::SurfaceMesh::Halfedge_property</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:177</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_addd5a37cf781d21a25f06049b1c2bf32"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#addd5a37cf781d21a25f06049b1c2bf32">OpenGP::SurfaceMesh::vertices</a></div><div class="ttdeci">Vertex_around_face_circulator vertices(Face f) const </div><div class="ttdoc">returns circulator for vertices of face f </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1474</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1ed195cc9997d3578d3a166bff9a5e11"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1ed195cc9997d3578d3a166bff9a5e11">OpenGP::SurfaceMesh::n_edges</a></div><div class="ttdeci">unsigned int n_edges() const </div><div class="ttdoc">returns number of edges in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:948</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ae68b67a560502aa22a33593e1c5df651"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ae68b67a560502aa22a33593e1c5df651">OpenGP::SurfaceMesh::face</a></div><div class="ttdeci">Face face(Halfedge h) const </div><div class="ttdoc">returns the face incident to halfedge h </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1091</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator_html_affe5cf912e4bf275443abea5f36d8209"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#affe5cf912e4bf275443abea5f36d8209">OpenGP::SurfaceMesh::Edge_iterator::operator--</a></div><div class="ttdeci">Edge_iterator & operator--()</div><div class="ttdoc">pre-decrement iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:393</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a3da93abd9206e122a3feaf01d3988446"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a3da93abd9206e122a3feaf01d3988446">OpenGP::SurfaceMesh::remove_halfedge_property</a></div><div class="ttdeci">void remove_halfedge_property(Halfedge_property< T > &p)</div><div class="ttdoc">remove the halfedge property p </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1308</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_afea5aedb652cc9e55aeae5dd2e6c7e6d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#afea5aedb652cc9e55aeae5dd2e6c7e6d">OpenGP::SurfaceMesh::is_boundary</a></div><div class="ttdeci">bool is_boundary(Edge e) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1178</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator_html_a6187c292f7f9737956af1ac38dc7fab7"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a6187c292f7f9737956af1ac38dc7fab7">OpenGP::SurfaceMesh::Vertex_around_face_circulator::operator!=</a></div><div class="ttdeci">bool operator!=(const Vertex_around_face_circulator &rhs) const </div><div class="ttdoc">are two circulators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:757</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__iterator_html_ab0f0cb0bc4caec8f1434f13bb1c4e583"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#ab0f0cb0bc4caec8f1434f13bb1c4e583">OpenGP::SurfaceMesh::Face_iterator::Face_iterator</a></div><div class="ttdeci">Face_iterator(Face f=Face(), const SurfaceMesh *m=NULL)</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:415</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1b5bff4cb258f6cf092eff82ef8c6bdc"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1b5bff4cb258f6cf092eff82ef8c6bdc">OpenGP::SurfaceMesh::edges_begin</a></div><div class="ttdeci">Edge_iterator edges_begin() const </div><div class="ttdoc">returns start iterator for edges </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1420</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator_html_aab5cdc15116868b57bc01cc6ae7f6c5a"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#aab5cdc15116868b57bc01cc6ae7f6c5a">OpenGP::SurfaceMesh::Edge_iterator::operator++</a></div><div class="ttdeci">Edge_iterator & operator++()</div><div class="ttdoc">pre-increment iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:384</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator_html_a932d29f0bf03ce64943e2e3b02bf41df"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a932d29f0bf03ce64943e2e3b02bf41df">OpenGP::SurfaceMesh::Halfedge_iterator::operator==</a></div><div class="ttdeci">bool operator==(const Halfedge_iterator &rhs) const </div><div class="ttdoc">are two iterators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:320</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html_ac48889eae7300c0ad32e589bc10b11cd"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#ac48889eae7300c0ad32e589bc10b11cd">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator::operator++</a></div><div class="ttdeci">Vertex_around_vertex_circulator & operator++()</div><div class="ttdoc">pre-increment (rotate couter-clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:554</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ac9e79b6804f0c9877a66f3243c0f452b"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ac9e79b6804f0c9877a66f3243c0f452b">OpenGP::SurfaceMesh::collapse</a></div><div class="ttdeci">HEADERONLY_INLINE void collapse(Halfedge h)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1249</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ad47ff184f3a69335a186685b22cbdfb5"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ad47ff184f3a69335a186685b22cbdfb5">OpenGP::SurfaceMesh::faces</a></div><div class="ttdeci">Face_around_vertex_circulator faces(Vertex v) const </div><div class="ttdoc">returns circulator for faces around vertex v </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1468</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity_html_a7d81b63019f4039b22d1a86520e6de3f"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity.html#a7d81b63019f4039b22d1a86520e6de3f">OpenGP::SurfaceMesh::Vertex_connectivity::halfedge_</a></div><div class="ttdeci">Halfedge halfedge_</div><div class="ttdoc">an outgoing halfedge per vertex (it will be a boundary halfedge for boundary vertices) ...</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:119</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity_html_a6780cf0d0759112bb7e63e52cd1a04ee"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity.html#a6780cf0d0759112bb7e63e52cd1a04ee">OpenGP::SurfaceMesh::Face_connectivity::halfedge_</a></div><div class="ttdeci">Halfedge halfedge_</div><div class="ttdoc">a halfedge that is part of the face </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:143</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ac762b76d67f6cc49eb17eb19948aa21d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ac762b76d67f6cc49eb17eb19948aa21d">OpenGP::SurfaceMesh::set_halfedge</a></div><div class="ttdeci">void set_halfedge(Vertex v, Halfedge h)</div><div class="ttdoc">set the outgoing halfedge of vertex v to h </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1038</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ac72e63729b0d734578875fac48f2a9fe"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ac72e63729b0d734578875fac48f2a9fe">OpenGP::SurfaceMesh::SurfaceMesh</a></div><div class="ttdeci">SurfaceMesh(const SurfaceMesh &rhs)</div><div class="ttdoc">copy constructor: copies rhs to *this. performs a deep copy of all properties. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:872</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ad7e1c0a6986d5cbceade7cd5e03f5ad0"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ad7e1c0a6986d5cbceade7cd5e03f5ad0">OpenGP::SurfaceMesh::position</a></div><div class="ttdeci">const Vec3 & position(Vertex v) const </div><div class="ttdoc">position of a vertex (read only) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1643</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a648392d7936a0b61a9b536c6a9da5743"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a648392d7936a0b61a9b536c6a9da5743">OpenGP::SurfaceMesh::find_edge</a></div><div class="ttdeci">HEADERONLY_INLINE Edge find_edge(Vertex a, Vertex b) const </div><div class="ttdoc">find the edge (a,b) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:294</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator_html_a46d7981f377748c42e96d007a7250739"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a46d7981f377748c42e96d007a7250739">OpenGP::SurfaceMesh::Vertex_iterator::operator++</a></div><div class="ttdeci">Vertex_iterator & operator++()</div><div class="ttdoc">pre-increment iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:280</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a12c37f7dc06cd9b8fd9efc56d1d1b330"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a12c37f7dc06cd9b8fd9efc56d1d1b330">OpenGP::SurfaceMesh::halfedge</a></div><div class="ttdeci">Halfedge halfedge(Vertex v) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1032</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1ed6c8ae83c67b452c7e3e24533d622c"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1ed6c8ae83c67b452c7e3e24533d622c">OpenGP::SurfaceMesh::halfedges</a></div><div class="ttdeci">Halfedge_container halfedges() const </div><div class="ttdoc">returns halfedge container for C++11 range-based for-loops </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1414</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a355c86fd0511255f4fcc274f892ed037"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a355c86fd0511255f4fcc274f892ed037">OpenGP::SurfaceMesh::is_collapse_ok</a></div><div class="ttdeci">HEADERONLY_INLINE bool is_collapse_ok(Halfedge h)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1185</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator_html_a32d6a399c7365b15b4fca52aa2735687"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a32d6a399c7365b15b4fca52aa2735687">OpenGP::SurfaceMesh::Halfedge_around_vertex_circulator::operator*</a></div><div class="ttdeci">Halfedge operator*() const </div><div class="ttdoc">get the halfedge the circulator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:641</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html">OpenGP::SurfaceMesh::Vertex_iterator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:254</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a5c74d8232746b48b89aebb7b6e5f0cf3"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a5c74d8232746b48b89aebb7b6e5f0cf3">OpenGP::SurfaceMesh::vertices_end</a></div><div class="ttdeci">Vertex_iterator vertices_end() const </div><div class="ttdoc">returns end iterator for vertices </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1390</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a19f3252002f5b2af1b0ba25a44238f64"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a19f3252002f5b2af1b0ba25a44238f64">OpenGP::SurfaceMesh::edges_size</a></div><div class="ttdeci">unsigned int edges_size() const </div><div class="ttdoc">returns number of (deleted and valid)edges in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:938</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a5edcfb16a0f747263e45f65a47696fd6"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a5edcfb16a0f747263e45f65a47696fd6">OpenGP::SurfaceMesh::face_properties</a></div><div class="ttdeci">std::vector< std::string > face_properties() const </div><div class="ttdoc">returns the names of all face properties </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1366</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__iterator_html_aec982d73ff6a9697b08ed63975e64adc"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#aec982d73ff6a9697b08ed63975e64adc">OpenGP::SurfaceMesh::Face_iterator::operator*</a></div><div class="ttdeci">Face operator*() const </div><div class="ttdoc">get the face the iterator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:421</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a059a294783211f6729571070197a1668"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a059a294783211f6729571070197a1668">OpenGP::SurfaceMesh::vertex_properties</a></div><div class="ttdeci">std::vector< std::string > vertex_properties() const </div><div class="ttdoc">returns the names of all vertex properties </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1351</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__container_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__container.html">OpenGP::SurfaceMesh::Face_container</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:510</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a794613deae5d83cef41de5f838f605aa"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a794613deae5d83cef41de5f838f605aa">OpenGP::SurfaceMesh::remove_edge_property</a></div><div class="ttdeci">void remove_edge_property(Edge_property< T > &p)</div><div class="ttdoc">remove the edge property p </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1313</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9dab64eda7de98f10f5b9cc9988a3b90"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9dab64eda7de98f10f5b9cc9988a3b90">OpenGP::SurfaceMesh::get_face_property</a></div><div class="ttdeci">Face_property< T > get_face_property(const std::string &name) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1270</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__property_html_a3bd8e38bc64f1531aee32ff4d2b3ac9d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a3bd8e38bc64f1531aee32ff4d2b3ac9d">OpenGP::SurfaceMesh::Face_property::operator[]</a></div><div class="ttdeci">Property< T >::reference operator[](Face f)</div><div class="ttdoc">access the data stored for face f </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:234</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity_html_a13a3725cfee6773179494bc6ff6251bd"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a13a3725cfee6773179494bc6ff6251bd">OpenGP::SurfaceMesh::Halfedge_connectivity::vertex_</a></div><div class="ttdeci">Vertex vertex_</div><div class="ttdoc">vertex the halfedge points to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:130</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a0257f6675248075e80abaa1e7636b261"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a0257f6675248075e80abaa1e7636b261">OpenGP::SurfaceMesh::set_next_halfedge</a></div><div class="ttdeci">void set_next_halfedge(Halfedge h, Halfedge nh)</div><div class="ttdoc">sets the next halfedge of h within the face to nh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1109</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__property_html_ada2187da56d72fc585a7dca15df3e75b"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#ada2187da56d72fc585a7dca15df3e75b">OpenGP::SurfaceMesh::Vertex_property::Vertex_property</a></div><div class="ttdeci">Vertex_property()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:158</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_abbdd898243df2b8ef06ce23759f0b2c6"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#abbdd898243df2b8ef06ce23759f0b2c6">OpenGP::SurfaceMesh::halfedge_property</a></div><div class="ttdeci">Halfedge_property< T > halfedge_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1284</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ad32dc1efbe1994b6d4f6ee76ba191722"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ad32dc1efbe1994b6d4f6ee76ba191722">OpenGP::SurfaceMesh::vertex</a></div><div class="ttdeci">Vertex vertex(Edge e, unsigned int i) const </div><div class="ttdoc">returns the i&#39;th vertex of edge e. i has to be 0 or 1. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1163</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a01bd845c233b6ad8e022ae176cc84463"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a01bd845c233b6ad8e022ae176cc84463">OpenGP::SurfaceMesh::points</a></div><div class="ttdeci">std::vector< Vec3 > & points()</div><div class="ttdoc">vector of vertex positions </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1649</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_af369a483aa3382895f0aea7b724996e9"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#af369a483aa3382895f0aea7b724996e9">OpenGP::SurfaceMesh::vertices_size</a></div><div class="ttdeci">unsigned int vertices_size() const </div><div class="ttdoc">returns number of (deleted and valid) vertices in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:934</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__container_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__container.html">OpenGP::SurfaceMesh::Vertex_container</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:465</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a419bb594c7799eb5a4f2e7867bcac2cc"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a419bb594c7799eb5a4f2e7867bcac2cc">OpenGP::SurfaceMesh::faces_size</a></div><div class="ttdeci">unsigned int faces_size() const </div><div class="ttdoc">returns number of (deleted and valid)faces in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:940</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9b93edf0066231be7f01887dbad0ead9"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9b93edf0066231be7f01887dbad0ead9">OpenGP::SurfaceMesh::halfedges_size</a></div><div class="ttdeci">unsigned int halfedges_size() const </div><div class="ttdoc">returns number of (deleted and valid)halfedge in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:936</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aafec0b6da843682831e0740409844a80"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aafec0b6da843682831e0740409844a80">OpenGP::SurfaceMesh::edge_property</a></div><div class="ttdeci">Edge_property< T > edge_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1290</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ad0d9397f20d4350077e571e6d96b17c5"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ad0d9397f20d4350077e571e6d96b17c5">OpenGP::SurfaceMesh::delete_edge</a></div><div class="ttdeci">HEADERONLY_INLINE void delete_edge(Edge e)</div><div class="ttdoc">deletes the edge e from the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1417</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator_html_a767bda66a170334db93e4e629431c847"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a767bda66a170334db93e4e629431c847">OpenGP::SurfaceMesh::Face_around_vertex_circulator::operator++</a></div><div class="ttdeci">Face_around_vertex_circulator & operator++()</div><div class="ttdoc">pre-increment (rotates counter-clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:692</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_abb7fa784f9fd75a9e4395d67dce8a8f6"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#abb7fa784f9fd75a9e4395d67dce8a8f6">OpenGP::SurfaceMesh::is_flip_ok</a></div><div class="ttdeci">HEADERONLY_INLINE bool is_flip_ok(Edge e) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1101</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aa6d78fffcd3a23bdc104f9b20e10736b"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aa6d78fffcd3a23bdc104f9b20e10736b">OpenGP::SurfaceMesh::operator=</a></div><div class="ttdeci">HEADERONLY_INLINE SurfaceMesh & operator=(const SurfaceMesh &rhs)</div><div class="ttdoc">assign rhs to *this. performs a deep copy of all properties. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:56</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__property_html_a543ab9dc7540b80c1a6f0a3431878a96"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a543ab9dc7540b80c1a6f0a3431878a96">OpenGP::SurfaceMesh::Face_property::operator[]</a></div><div class="ttdeci">Property< T >::const_reference operator[](Face f) const </div><div class="ttdoc">access the data stored for face f </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:240</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__iterator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html">OpenGP::SurfaceMesh::Face_iterator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:410</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a7715448e3ceaa0cc2df4c83346be4faa"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a7715448e3ceaa0cc2df4c83346be4faa">OpenGP::SurfaceMesh::is_valid</a></div><div class="ttdeci">bool is_valid(Edge e) const </div><div class="ttdoc">return whether edge e is valid, i.e. the index is stores it within the array bounds. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1010</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a8ded4b1d1d942acfe87aca39312dc8ce"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a8ded4b1d1d942acfe87aca39312dc8ce">OpenGP::SurfaceMesh::halfedges</a></div><div class="ttdeci">Halfedge_around_vertex_circulator halfedges(Vertex v) const </div><div class="ttdoc">returns circulator for outgoing halfedges around vertex v </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1462</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator_html_aeeac922c998b45a563d4a1cc13389647"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#aeeac922c998b45a563d4a1cc13389647">OpenGP::SurfaceMesh::Halfedge_iterator::operator*</a></div><div class="ttdeci">Halfedge operator*() const </div><div class="ttdoc">get the halfedge the iterator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:317</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator_html_a2d86a8e9c0b9b3cf8de9bcb423cf2fe9"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a2d86a8e9c0b9b3cf8de9bcb423cf2fe9">OpenGP::SurfaceMesh::Halfedge_iterator::operator++</a></div><div class="ttdeci">Halfedge_iterator & operator++()</div><div class="ttdoc">pre-increment iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:332</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity_html"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_vertex__connectivity.html">OpenGP::SurfaceMesh::Vertex_connectivity</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:116</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator_html_a8342168434afe21b84e1b5123e3ba9d5"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a8342168434afe21b84e1b5123e3ba9d5">OpenGP::SurfaceMesh::Face_around_vertex_circulator::operator*</a></div><div class="ttdeci">Face operator*() const </div><div class="ttdoc">get the face the circulator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:713</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator_html_aeda1a1a66bb8ee44593b52edf76ee0b8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#aeda1a1a66bb8ee44593b52edf76ee0b8">OpenGP::SurfaceMesh::Halfedge_around_face_circulator::operator!=</a></div><div class="ttdeci">bool operator!=(const Halfedge_around_face_circulator &rhs) const </div><div class="ttdoc">are two circulators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:821</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1ce75b6bf0efe4f21ef2391399979759"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1ce75b6bf0efe4f21ef2391399979759">OpenGP::SurfaceMesh::add_edge_property</a></div><div class="ttdeci">Edge_property< T > add_edge_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1237</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html_a2523f42ff5b55bd457adce423b33983a"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a2523f42ff5b55bd457adce423b33983a">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator::operator==</a></div><div class="ttdeci">bool operator==(const Vertex_around_vertex_circulator &rhs) const </div><div class="ttdoc">are two circulators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:541</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__property_html_a8bf6fcab7ef9dd5b0919df7060f9fb60"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#a8bf6fcab7ef9dd5b0919df7060f9fb60">OpenGP::SurfaceMesh::Vertex_property::operator[]</a></div><div class="ttdeci">Property< T >::reference operator[](Vertex v)</div><div class="ttdoc">access the data stored for vertex v </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:162</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a78d91e464b9c7e86c38de6c6b7ccd9e9"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a78d91e464b9c7e86c38de6c6b7ccd9e9">OpenGP::SurfaceMesh::is_deleted</a></div><div class="ttdeci">bool is_deleted(Vertex v) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:975</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator_html_a809c25425f38578250d5ed2ae10dae20"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a809c25425f38578250d5ed2ae10dae20">OpenGP::SurfaceMesh::Vertex_iterator::operator*</a></div><div class="ttdeci">Vertex operator*() const </div><div class="ttdoc">get the vertex the iterator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:265</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html">OpenGP::SurfaceMesh::Face_around_vertex_circulator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:662</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator_html_a4f6d01a057284edb16a2f021ae2a86dd"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#a4f6d01a057284edb16a2f021ae2a86dd">OpenGP::SurfaceMesh::Vertex_iterator::operator--</a></div><div class="ttdeci">Vertex_iterator & operator--()</div><div class="ttdoc">pre-decrement iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:289</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9820779f524dbd1ec4cfd886f1f7e5f8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9820779f524dbd1ec4cfd886f1f7e5f8">OpenGP::SurfaceMesh::add_halfedge_property</a></div><div class="ttdeci">Halfedge_property< T > add_halfedge_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1230</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ac031789707774634190bd8978b836197"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ac031789707774634190bd8978b836197">OpenGP::SurfaceMesh::insert_vertex</a></div><div class="ttdeci">Halfedge insert_vertex(Edge e, Vertex v)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1578</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aeae7436db9b2011facfbb21f539dab88"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aeae7436db9b2011facfbb21f539dab88">OpenGP::SurfaceMesh::vertices</a></div><div class="ttdeci">Vertex_container vertices() const </div><div class="ttdoc">returns vertex container for C++11 range-based for-loops </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1396</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html">OpenGP::SurfaceMesh::Halfedge_iterator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:306</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a603eb43a3b793cf7fbfa09e2ce9b7047"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a603eb43a3b793cf7fbfa09e2ce9b7047">OpenGP::SurfaceMesh::triangulate</a></div><div class="ttdeci">HEADERONLY_INLINE void triangulate()</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:631</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_acc2a2bc3aac844db5e126a9cf1a9ac18"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#acc2a2bc3aac844db5e126a9cf1a9ac18">OpenGP::SurfaceMesh::position</a></div><div class="ttdeci">Vec3 & position(Vertex v)</div><div class="ttdoc">position of a vertex </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1646</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aa0c816094824583e72f39d292cd747ed"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aa0c816094824583e72f39d292cd747ed">OpenGP::SurfaceMesh::is_boundary</a></div><div class="ttdeci">bool is_boundary(Vertex v) const </div><div class="ttdoc">returns whether v is a boundary vertex </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1044</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a56c4dfbf137a508b808f65372f7bd4e9"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a56c4dfbf137a508b808f65372f7bd4e9">OpenGP::SurfaceMesh::remove_face_property</a></div><div class="ttdeci">void remove_face_property(Face_property< T > &p)</div><div class="ttdoc">remove the face property p </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1318</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html_a51e9666f53483947689070c8b4011817"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a51e9666f53483947689070c8b4011817">OpenGP::SurfaceMesh::Base_handle::Base_handle</a></div><div class="ttdeci">Base_handle(int _idx=-1)</div><div class="ttdoc">constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:37</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__container_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__container.html">OpenGP::SurfaceMesh::Edge_container</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:495</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a3a76bc861133478f96d2b5e48d5c738d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a3a76bc861133478f96d2b5e48d5c738d">OpenGP::SurfaceMesh::is_boundary</a></div><div class="ttdeci">bool is_boundary(Face f) const </div><div class="ttdoc">returns whether f is a boundary face, i.e., it one of its edges is a boundary edge. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1196</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html">OpenGP::SurfaceMesh::Vertex_around_face_circulator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:738</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a69e9297f435da269b2940d630b4b4dba"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a69e9297f435da269b2940d630b4b4dba">OpenGP::SurfaceMesh::faces_begin</a></div><div class="ttdeci">Face_iterator faces_begin() const </div><div class="ttdoc">returns start iterator for faces </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1438</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a86564712b32313fc9c3d866497376d34"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a86564712b32313fc9c3d866497376d34">OpenGP::SurfaceMesh::is_triangle_mesh</a></div><div class="ttdeci">HEADERONLY_INLINE bool is_triangle_mesh() const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:599</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a4b9c9d0b258baa723e79b81ea81595fb"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a4b9c9d0b258baa723e79b81ea81595fb">OpenGP::SurfaceMesh::update_face_normals</a></div><div class="ttdeci">HEADERONLY_INLINE void update_face_normals()</div><div class="ttdoc">compute face normals by calling compute_face_normal(Face) for each face. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:698</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator_html_a6497f9ac25ea6300d2d7a067e145a4bd"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a6497f9ac25ea6300d2d7a067e145a4bd">OpenGP::SurfaceMesh::Halfedge_around_vertex_circulator::operator!=</a></div><div class="ttdeci">bool operator!=(const Halfedge_around_vertex_circulator &rhs) const </div><div class="ttdoc">are two circulators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:618</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator_html_aac138f46867afd0269f440339ecc2087"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#aac138f46867afd0269f440339ecc2087">OpenGP::SurfaceMesh::Halfedge_around_vertex_circulator::Halfedge_around_vertex_circulator</a></div><div class="ttdeci">Halfedge_around_vertex_circulator(const SurfaceMesh *m=NULL, Vertex v=Vertex())</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:604</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_halfedge_html_ad35b131df7a6fe40f76bf81e9a78fdba"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html#ad35b131df7a6fe40f76bf81e9a78fdba">OpenGP::SurfaceMesh::Halfedge::Halfedge</a></div><div class="ttdeci">Halfedge(int _idx=-1)</div><div class="ttdoc">default constructor (with invalid index) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:88</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ae3d30d0b895fb93b5e12278376248420"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ae3d30d0b895fb93b5e12278376248420">OpenGP::SurfaceMesh::is_manifold</a></div><div class="ttdeci">bool is_manifold(Vertex v) const </div><div class="ttdoc">returns whether v is a manifold vertex (not incident to several patches) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1057</div></div>
<div class="ttc" id="namespace_open_g_p_html"><div class="ttname"><a href="namespace_open_g_p.html">OpenGP</a></div><div class="ttdef"><b>Definition:</b> VirtualDepthSensor.h:19</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1472304554c931b09c916a597c3a7e73"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1472304554c931b09c916a597c3a7e73">OpenGP::SurfaceMesh::insert_edge</a></div><div class="ttdeci">HEADERONLY_INLINE Halfedge insert_edge(Halfedge h0, Halfedge h1)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1058</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aa8e894247752939a13c64890fc14214c"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aa8e894247752939a13c64890fc14214c">OpenGP::SurfaceMesh::is_boundary</a></div><div class="ttdeci">bool is_boundary(Halfedge h) const </div><div class="ttdoc">returns whether h is a boundary halfege, i.e., if its face does not exist. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1149</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a19b2975c689048710d87cddb6d35ded2"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a19b2975c689048710d87cddb6d35ded2">OpenGP::SurfaceMesh::set_face</a></div><div class="ttdeci">void set_face(Halfedge h, Face f)</div><div class="ttdoc">sets the incident face to halfedge h to f </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1097</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator_html_a47146f180e9471f41bd5435a20b7efdc"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a47146f180e9471f41bd5435a20b7efdc">OpenGP::SurfaceMesh::Halfedge_iterator::operator!=</a></div><div class="ttdeci">bool operator!=(const Halfedge_iterator &rhs) const </div><div class="ttdoc">are two iterators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:326</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator_html_ad94d4b0f6340fb871480ebf4a68b40a6"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#ad94d4b0f6340fb871480ebf4a68b40a6">OpenGP::SurfaceMesh::Edge_iterator::operator!=</a></div><div class="ttdeci">bool operator!=(const Edge_iterator &rhs) const </div><div class="ttdoc">are two iterators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:378</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aa952f403210c6c35c6caab79780489df"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aa952f403210c6c35c6caab79780489df">OpenGP::SurfaceMesh::flip</a></div><div class="ttdeci">HEADERONLY_INLINE void flip(Edge e)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1129</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aaec7881d50ee98937e696f4fe0f50165"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aaec7881d50ee98937e696f4fe0f50165">OpenGP::SurfaceMesh::vertices_begin</a></div><div class="ttdeci">Vertex_iterator vertices_begin() const </div><div class="ttdoc">returns start iterator for vertices </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1384</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a037d2df1a2ddf83297a81222de6e55c8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a037d2df1a2ddf83297a81222de6e55c8">OpenGP::SurfaceMesh::vertex_property</a></div><div class="ttdeci">Vertex_property< T > vertex_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1278</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ae747c6cfedc33361606393f40564d475"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ae747c6cfedc33361606393f40564d475">OpenGP::SurfaceMesh::opposite_halfedge</a></div><div class="ttdeci">Halfedge opposite_halfedge(Halfedge h) const </div><div class="ttdoc">returns the opposite halfedge of h </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1122</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aa7a05aaf40335954750531a10497de2a"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aa7a05aaf40335954750531a10497de2a">OpenGP::SurfaceMesh::delete_face</a></div><div class="ttdeci">HEADERONLY_INLINE void delete_face(Face f)</div><div class="ttdoc">deletes the face f from the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1433</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a055a572c24586f61d882b94d7b596f82"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a055a572c24586f61d882b94d7b596f82">OpenGP::SurfaceMesh::find_halfedge</a></div><div class="ttdeci">HEADERONLY_INLINE Halfedge find_halfedge(Vertex start, Vertex end) const </div><div class="ttdoc">find the halfedge from start to end </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:267</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a63a0ff34c78f3519f035fe92bac5c523"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a63a0ff34c78f3519f035fe92bac5c523">OpenGP::SurfaceMesh::n_halfedges</a></div><div class="ttdeci">unsigned int n_halfedges() const </div><div class="ttdoc">returns number of halfedge in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:946</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator_html_ad4c2c120025c001bbe48a12dc9ae41cd"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#ad4c2c120025c001bbe48a12dc9ae41cd">OpenGP::SurfaceMesh::Face_around_vertex_circulator::Face_around_vertex_circulator</a></div><div class="ttdeci">Face_around_vertex_circulator(const SurfaceMesh *m=NULL, Vertex v=Vertex())</div><div class="ttdoc">construct with mesh and vertex (vertex should not be isolated!) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:667</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_acf74f8181823773775888b347bdfa52d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#acf74f8181823773775888b347bdfa52d">OpenGP::SurfaceMesh::is_isolated</a></div><div class="ttdeci">bool is_isolated(Vertex v) const </div><div class="ttdoc">returns whether v is isolated, i.e., not incident to any face </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1051</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__iterator_html_af5ade74fbfb6b556b019aeb2032f6652"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#af5ade74fbfb6b556b019aeb2032f6652">OpenGP::SurfaceMesh::Face_iterator::operator!=</a></div><div class="ttdeci">bool operator!=(const Face_iterator &rhs) const </div><div class="ttdoc">are two iterators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:430</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a16d0de13a19aab692447dd17d582f874"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a16d0de13a19aab692447dd17d582f874">OpenGP::SurfaceMesh::is_deleted</a></div><div class="ttdeci">bool is_deleted(Edge e) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:987</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a8f0f9d9b2e68891018676897efd6130f"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a8f0f9d9b2e68891018676897efd6130f">OpenGP::SurfaceMesh::n_vertices</a></div><div class="ttdeci">unsigned int n_vertices() const </div><div class="ttdoc">returns number of vertices in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:944</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator_html_a9d3335f9ca9229611c9d0a100e71845c"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a9d3335f9ca9229611c9d0a100e71845c">OpenGP::SurfaceMesh::Vertex_around_face_circulator::operator*</a></div><div class="ttdeci">Vertex operator*() const </div><div class="ttdoc">get the vertex the circulator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:780</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a753af7604251aedf6f832671f7cb0cd1"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a753af7604251aedf6f832671f7cb0cd1">OpenGP::SurfaceMesh::is_deleted</a></div><div class="ttdeci">bool is_deleted(Face f) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:993</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator_html_adb53483b2beb51f647a40cb475ab9c30"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#adb53483b2beb51f647a40cb475ab9c30">OpenGP::SurfaceMesh::Face_around_vertex_circulator::operator==</a></div><div class="ttdeci">bool operator==(const Face_around_vertex_circulator &rhs) const </div><div class="ttdoc">are two circulators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:679</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator_html_adb63e077cb53520c467e6d292ad56dbd"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#adb63e077cb53520c467e6d292ad56dbd">OpenGP::SurfaceMesh::Vertex_iterator::operator==</a></div><div class="ttdeci">bool operator==(const Vertex_iterator &rhs) const </div><div class="ttdoc">are two iterators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:268</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__iterator_html_a50cb44f014a90feb6e429f59b15c875d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#a50cb44f014a90feb6e429f59b15c875d">OpenGP::SurfaceMesh::Face_iterator::operator==</a></div><div class="ttdeci">bool operator==(const Face_iterator &rhs) const </div><div class="ttdoc">are two iterators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:424</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a273d70421b6f04ec830daf686bb9c4ae"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a273d70421b6f04ec830daf686bb9c4ae">OpenGP::SurfaceMesh::property_stats</a></div><div class="ttdeci">HEADERONLY_INLINE void property_stats() const </div><div class="ttdoc">prints the names of all properties </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:223</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a8c1c3e680e75c99fcd97a5f32a2ff9d4"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a8c1c3e680e75c99fcd97a5f32a2ff9d4">OpenGP::SurfaceMesh::is_quad_mesh</a></div><div class="ttdeci">HEADERONLY_INLINE bool is_quad_mesh() const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:615</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity_html"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html">OpenGP::SurfaceMesh::Halfedge_connectivity</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:125</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html_af73166691cec7e9693facbc43f3ef33f"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#af73166691cec7e9693facbc43f3ef33f">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator::operator!=</a></div><div class="ttdeci">bool operator!=(const Vertex_around_vertex_circulator &rhs) const </div><div class="ttdoc">are two circulators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:548</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1d4368f7faa1bc8356be123ed8f1c94e"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1d4368f7faa1bc8356be123ed8f1c94e">OpenGP::SurfaceMesh::split</a></div><div class="ttdeci">HEADERONLY_INLINE Vertex split(Edge e, const Vec3 &p)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1551</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a7c43b48dac0688a37c99de847b222532"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a7c43b48dac0688a37c99de847b222532">OpenGP::SurfaceMesh::n_faces</a></div><div class="ttdeci">unsigned int n_faces() const </div><div class="ttdoc">returns number of faces in the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:950</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a0c47be2092bcf49c1ff0b0b31fff4a39"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a0c47be2092bcf49c1ff0b0b31fff4a39">OpenGP::SurfaceMesh::halfedge</a></div><div class="ttdeci">Halfedge halfedge(Face f) const </div><div class="ttdoc">returns a halfedge of face f </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1184</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__iterator_html_a7b6eb05a64716e1b233fd8d876e88c54"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#a7b6eb05a64716e1b233fd8d876e88c54">OpenGP::SurfaceMesh::Face_iterator::operator++</a></div><div class="ttdeci">Face_iterator & operator++()</div><div class="ttdoc">pre-increment iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:436</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_face_html"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_face.html">OpenGP::SurfaceMesh::Face</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:103</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__property_html_aef2bdfdb928d86eec1fc40870be9fe6a"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html#aef2bdfdb928d86eec1fc40870be9fe6a">OpenGP::SurfaceMesh::Vertex_property::operator[]</a></div><div class="ttdeci">Property< T >::const_reference operator[](Vertex v) const </div><div class="ttdoc">access the data stored for vertex v </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:168</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html">OpenGP::SurfaceMesh::Base_handle</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:32</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_halfedge_html"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge.html">OpenGP::SurfaceMesh::Halfedge</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:85</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ae2f75d95ee3ed242556a919e7847d4a8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ae2f75d95ee3ed242556a919e7847d4a8">OpenGP::SurfaceMesh::insert_vertex</a></div><div class="ttdeci">Halfedge insert_vertex(Edge e, const Vec3 &p)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1567</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html">OpenGP::SurfaceMesh::Halfedge_around_vertex_circulator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:599</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity_html"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_face__connectivity.html">OpenGP::SurfaceMesh::Face_connectivity</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:140</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator_html_a2c344f40a602d69f815294dd751b1953"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a2c344f40a602d69f815294dd751b1953">OpenGP::SurfaceMesh::Halfedge_around_face_circulator::Halfedge_around_face_circulator</a></div><div class="ttdeci">Halfedge_around_face_circulator(const SurfaceMesh *m=NULL, Face f=Face())</div><div class="ttdoc">default constructur </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:807</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_af4b13cbfc599914d1491f89b3889fb13"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#af4b13cbfc599914d1491f89b3889fb13">OpenGP::SurfaceMesh::reserve</a></div><div class="ttdeci">HEADERONLY_INLINE void reserve(unsigned int nvertices, unsigned int nedges, unsigned int nfaces)</div><div class="ttdoc">reserve memory (mainly used in file readers) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:207</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a71141bb1096708a6baa167401b56ec58"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a71141bb1096708a6baa167401b56ec58">OpenGP::SurfaceMesh::set_halfedge</a></div><div class="ttdeci">void set_halfedge(Face f, Halfedge h)</div><div class="ttdoc">sets the halfedge of face f to h </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1190</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__container_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__container.html">OpenGP::SurfaceMesh::Halfedge_container</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:480</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a5d9c25281115f9859b0c08f30184f99f"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a5d9c25281115f9859b0c08f30184f99f">OpenGP::SurfaceMesh::get_halfedge_property</a></div><div class="ttdeci">Halfedge_property< T > get_halfedge_property(const std::string &name) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1258</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ad43e3b5a7a5a17773bf967c6e36173c4"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ad43e3b5a7a5a17773bf967c6e36173c4">OpenGP::SurfaceMesh::update_vertex_normals</a></div><div class="ttdeci">HEADERONLY_INLINE void update_vertex_normals()</div><div class="ttdoc">compute vertex normals by calling compute_vertex_normal(Vertex) for each vertex. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:756</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ae78c15bb2d560895ec5805eaa37fc401"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ae78c15bb2d560895ec5805eaa37fc401">OpenGP::SurfaceMesh::edges</a></div><div class="ttdeci">Edge_container edges() const </div><div class="ttdoc">returns edge container for C++11 range-based for-loops </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1432</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html_a94b70492f8a5285742cb334393c50809"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a94b70492f8a5285742cb334393c50809">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator::operator--</a></div><div class="ttdeci">Vertex_around_vertex_circulator & operator--()</div><div class="ttdoc">pre-decrement (rotate clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:563</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a32344e0120b2148cb649be85df1b2a34"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a32344e0120b2148cb649be85df1b2a34">OpenGP::SurfaceMesh::halfedges_begin</a></div><div class="ttdeci">Halfedge_iterator halfedges_begin() const </div><div class="ttdoc">returns start iterator for halfedges </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1402</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__property_html_a35f0097be25d6d2598c6ee5bbc83dc71"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#a35f0097be25d6d2598c6ee5bbc83dc71">OpenGP::SurfaceMesh::Edge_property::Edge_property</a></div><div class="ttdeci">Edge_property()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:206</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_adcae11982622bca9d153094e5ae35422"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#adcae11982622bca9d153094e5ae35422">OpenGP::SurfaceMesh::compute_face_normal</a></div><div class="ttdeci">HEADERONLY_INLINE Vec3 compute_face_normal(Face f) const </div><div class="ttdoc">compute normal vector of face f. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:715</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator_html_a4c47095bfec11c3bf953e94e4cc8b725"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#a4c47095bfec11c3bf953e94e4cc8b725">OpenGP::SurfaceMesh::Halfedge_iterator::Halfedge_iterator</a></div><div class="ttdeci">Halfedge_iterator(Halfedge h=Halfedge(), const SurfaceMesh *m=NULL)</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:311</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aaf2c8bf7e23b6419661bf69417165ef8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aaf2c8bf7e23b6419661bf69417165ef8">OpenGP::SurfaceMesh::face_property</a></div><div class="ttdeci">Face_property< T > face_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1296</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_adb556fbd59d9a37022b1e59563e31018"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#adb556fbd59d9a37022b1e59563e31018">OpenGP::SurfaceMesh::halfedges</a></div><div class="ttdeci">Halfedge_around_face_circulator halfedges(Face f) const </div><div class="ttdoc">returns circulator for halfedges of face f </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1480</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__property_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html">OpenGP::SurfaceMesh::Face_property</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:225</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9dd8a038f53e0a394c8a413fa9a91dcb"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9dd8a038f53e0a394c8a413fa9a91dcb">OpenGP::SurfaceMesh::next_halfedge</a></div><div class="ttdeci">Halfedge next_halfedge(Halfedge h) const </div><div class="ttdoc">returns the next halfedge within the incident face </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1103</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a3adabfe138616588035426367befdfff"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a3adabfe138616588035426367befdfff">OpenGP::SurfaceMesh::clear</a></div><div class="ttdeci">HEADERONLY_INLINE void clear()</div><div class="ttdoc">clear mesh: remove all vertices, edges, faces </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:171</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a84bfcf99e46da0ce35c520bf16ee3e4c"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a84bfcf99e46da0ce35c520bf16ee3e4c">OpenGP::SurfaceMesh::add_vertex</a></div><div class="ttdeci">HEADERONLY_INLINE Vertex add_vertex(const Vec3 &p)</div><div class="ttdoc">add a new vertex with position p </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:254</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a6714d5585eb08f837ed82f0360f93272"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a6714d5585eb08f837ed82f0360f93272">OpenGP::SurfaceMesh::is_deleted</a></div><div class="ttdeci">bool is_deleted(Halfedge h) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:981</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator_html_ae17fe7e1d54562bac19c43cabfc1e283"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#ae17fe7e1d54562bac19c43cabfc1e283">OpenGP::SurfaceMesh::Face_around_vertex_circulator::operator!=</a></div><div class="ttdeci">bool operator!=(const Face_around_vertex_circulator &rhs) const </div><div class="ttdoc">are two circulators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:686</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html_aac0bae62417ac2630aa829d1094a282a"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#aac0bae62417ac2630aa829d1094a282a">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator::Vertex_around_vertex_circulator</a></div><div class="ttdeci">Vertex_around_vertex_circulator(const SurfaceMesh *m=NULL, Vertex v=Vertex())</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:534</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a35346f4542bbc8b0480a260b2862df8d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a35346f4542bbc8b0480a260b2862df8d">OpenGP::SurfaceMesh::set_vertex</a></div><div class="ttdeci">void set_vertex(Halfedge h, Vertex v)</div><div class="ttdoc">sets the vertex the halfedge h points to to v </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1085</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9741a73c925d629cbdb02893d38c6271"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9741a73c925d629cbdb02893d38c6271">OpenGP::SurfaceMesh::ccw_rotated_halfedge</a></div><div class="ttdeci">Halfedge ccw_rotated_halfedge(Halfedge h) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1130</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ac93a3b5012953c091ec40949a6f474a7"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ac93a3b5012953c091ec40949a6f474a7">OpenGP::SurfaceMesh::add_vertex_property</a></div><div class="ttdeci">Vertex_property< T > add_vertex_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1223</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a12b29ac46df4f2702545f462e39f1faa"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a12b29ac46df4f2702545f462e39f1faa">OpenGP::SurfaceMesh::edges_end</a></div><div class="ttdeci">Edge_iterator edges_end() const </div><div class="ttdoc">returns end iterator for edges </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1426</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator_html_ab5f132200f960ecad220111533b816aa"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#ab5f132200f960ecad220111533b816aa">OpenGP::SurfaceMesh::Vertex_around_face_circulator::Vertex_around_face_circulator</a></div><div class="ttdeci">Vertex_around_face_circulator(const SurfaceMesh *m=NULL, Face f=Face())</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:743</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity_html_a9ebbbffb26915be727d6b127ae7483f0"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a9ebbbffb26915be727d6b127ae7483f0">OpenGP::SurfaceMesh::Halfedge_connectivity::prev_halfedge_</a></div><div class="ttdeci">Halfedge prev_halfedge_</div><div class="ttdoc">previous halfedge within a face (or along a boundary) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:134</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator_html_ad2f2a26e22c0511dda207750203d0f33"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#ad2f2a26e22c0511dda207750203d0f33">OpenGP::SurfaceMesh::Edge_iterator::operator==</a></div><div class="ttdeci">bool operator==(const Edge_iterator &rhs) const </div><div class="ttdoc">are two iterators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:372</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_af90ac6206924527eab465ced759f9876"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#af90ac6206924527eab465ced759f9876">OpenGP::SurfaceMesh::vertices</a></div><div class="ttdeci">Vertex_around_vertex_circulator vertices(Vertex v) const </div><div class="ttdoc">returns circulator for vertices around vertex v </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1456</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator_html_a05673e5162015a3207e8483cba10a3b2"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__around__vertex__circulator.html#a05673e5162015a3207e8483cba10a3b2">OpenGP::SurfaceMesh::Face_around_vertex_circulator::operator--</a></div><div class="ttdeci">Face_around_vertex_circulator & operator--()</div><div class="ttdoc">pre-decrement (rotate clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:703</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__property_html_aba22d9b0277fe935c75e7bf20e251be5"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html#aba22d9b0277fe935c75e7bf20e251be5">OpenGP::SurfaceMesh::Edge_property::operator[]</a></div><div class="ttdeci">Property< T >::reference operator[](Edge e)</div><div class="ttdoc">access the data stored for edge e </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:210</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__property_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__property.html">OpenGP::SurfaceMesh::Edge_property</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:201</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aacfc2c77dbc0ee05098f55e7ffa063b1"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aacfc2c77dbc0ee05098f55e7ffa063b1">OpenGP::SurfaceMesh::add_quad</a></div><div class="ttdeci">HEADERONLY_INLINE Face add_quad(Vertex v1, Vertex v2, Vertex v3, Vertex v4)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:347</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a15f032b5bf5e859d4588c31eeab2a020"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a15f032b5bf5e859d4588c31eeab2a020">OpenGP::SurfaceMesh::is_valid</a></div><div class="ttdeci">bool is_valid(Halfedge h) const </div><div class="ttdoc">return whether halfedge h is valid, i.e. the index is stores it within the array bounds. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1005</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity_html_a20237cde29c20287e17b69addb8c946d"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#a20237cde29c20287e17b69addb8c946d">OpenGP::SurfaceMesh::Halfedge_connectivity::face_</a></div><div class="ttdeci">Face face_</div><div class="ttdoc">face incident to halfedge </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:128</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_vertex_html"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_vertex.html">OpenGP::SurfaceMesh::Vertex</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:75</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_af43a3b800de0d8c10048266d9f9bcdc8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#af43a3b800de0d8c10048266d9f9bcdc8">OpenGP::SurfaceMesh::delete_vertex</a></div><div class="ttdeci">HEADERONLY_INLINE void delete_vertex(Vertex v)</div><div class="ttdoc">deletes the vertex v from the mesh </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1382</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_edge_html"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html">OpenGP::SurfaceMesh::Edge</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:94</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html">OpenGP::SurfaceMesh</a></div><div class="ttdoc">A halfedge data structure for polygonal meshes. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:24</div></div>
<div class="ttc" id="class_open_g_p_1_1_global__properties_html"><div class="ttname"><a href="class_open_g_p_1_1_global__properties.html">OpenGP::Global_properties</a></div><div class="ttdef"><b>Definition:</b> Global_properties.h:24</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aebc58f8d6601fc7c6953fc69f4e2b59f"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aebc58f8d6601fc7c6953fc69f4e2b59f">OpenGP::SurfaceMesh::add_triangle</a></div><div class="ttdeci">HEADERONLY_INLINE Face add_triangle(Vertex v1, Vertex v2, Vertex v3)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:332</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator_html_a76d1ba96dd68755c1352bd711c88c2f0"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#a76d1ba96dd68755c1352bd711c88c2f0">OpenGP::SurfaceMesh::Halfedge_around_face_circulator::operator++</a></div><div class="ttdeci">Halfedge_around_face_circulator & operator++()</div><div class="ttdoc">pre-increment (rotates counter-clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:827</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_aa22f2ec07cae930e64cbed22a831a9f0"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#aa22f2ec07cae930e64cbed22a831a9f0">OpenGP::SurfaceMesh::edge</a></div><div class="ttdeci">Edge edge(Halfedge h) const </div><div class="ttdoc">return the edge that contains halfedge h as one of its two halfedges. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1143</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator_html_af5a67b9b9796e4ce893ee25288567621"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__iterator.html#af5a67b9b9796e4ce893ee25288567621">OpenGP::SurfaceMesh::Halfedge_iterator::operator--</a></div><div class="ttdeci">Halfedge_iterator & operator--()</div><div class="ttdoc">pre-decrement iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:341</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a24e7990fea324ad5fac69555e6ece8c4"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a24e7990fea324ad5fac69555e6ece8c4">OpenGP::SurfaceMesh::from_vertex</a></div><div class="ttdeci">Vertex from_vertex(Halfedge h) const </div><div class="ttdoc">returns the vertex the halfedge h emanates from </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1079</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html_a1f45a9f2d15e9931703e7c1153851ef7"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a1f45a9f2d15e9931703e7c1153851ef7">OpenGP::SurfaceMesh::Base_handle::is_valid</a></div><div class="ttdeci">bool is_valid() const </div><div class="ttdoc">return whether the handle is valid, i.e., the index is not equal to -1. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:46</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html_ae8b42347c36439430c0e00c951600198"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#ae8b42347c36439430c0e00c951600198">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator::halfedge</a></div><div class="ttdeci">Halfedge halfedge() const </div><div class="ttdoc">return current halfedge </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:581</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html_a8f115efcfb25ab71ac70fd747bb32579"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a8f115efcfb25ab71ac70fd747bb32579">OpenGP::SurfaceMesh::Base_handle::operator!=</a></div><div class="ttdeci">bool operator!=(const Base_handle &_rhs) const </div><div class="ttdoc">are two handles different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:54</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property_html_a2e4dcf8be5b0678d13b427f90c5be60f"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__property.html#a2e4dcf8be5b0678d13b427f90c5be60f">OpenGP::SurfaceMesh::Halfedge_property::Halfedge_property</a></div><div class="ttdeci">Halfedge_property()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:182</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ab982a61330a2eb4bf0affb4fe8e995b5"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ab982a61330a2eb4bf0affb4fe8e995b5">OpenGP::SurfaceMesh::halfedge_properties</a></div><div class="ttdeci">std::vector< std::string > halfedge_properties() const </div><div class="ttdoc">returns the names of all halfedge properties </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1356</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_ae59f9a5eb5f47427ac33b6c826d8dc50"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#ae59f9a5eb5f47427ac33b6c826d8dc50">OpenGP::SurfaceMesh::halfedge</a></div><div class="ttdeci">Halfedge halfedge(Edge e, unsigned int i) const </div><div class="ttdoc">returns the i&#39;th halfedge of edge e. i has to be 0 or 1. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1156</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator_html_af6b35d6d225a0c0c585ddbc5de3b5391"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#af6b35d6d225a0c0c585ddbc5de3b5391">OpenGP::SurfaceMesh::Vertex_iterator::Vertex_iterator</a></div><div class="ttdeci">Vertex_iterator(Vertex v=Vertex(), const SurfaceMesh *m=NULL)</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:259</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9e5f431c69d88d73e601a7403b45a341"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9e5f431c69d88d73e601a7403b45a341">OpenGP::SurfaceMesh::faces_end</a></div><div class="ttdeci">Face_iterator faces_end() const </div><div class="ttdoc">returns end iterator for faces </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1444</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a50bae0a1df19ffd477fda198c7a667bb"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a50bae0a1df19ffd477fda198c7a667bb">OpenGP::SurfaceMesh::garbage_collection</a></div><div class="ttdeci">HEADERONLY_INLINE void garbage_collection()</div><div class="ttdoc">remove deleted vertices/edges/faces </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:1552</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a3bddbc9bf3cfa02d3bfb1515b5646236"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a3bddbc9bf3cfa02d3bfb1515b5646236">OpenGP::SurfaceMesh::is_valid</a></div><div class="ttdeci">bool is_valid(Vertex v) const </div><div class="ttdoc">return whether vertex v is valid, i.e. the index is stores it within the array bounds. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1000</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity_html_af4f4ede9d13ba023ef577a68c6bb9817"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_halfedge__connectivity.html#af4f4ede9d13ba023ef577a68c6bb9817">OpenGP::SurfaceMesh::Halfedge_connectivity::next_halfedge_</a></div><div class="ttdeci">Halfedge next_halfedge_</div><div class="ttdoc">next halfedge within a face (or along a boundary) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:132</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator_html_a744a4fcac593c476749ac5cf2de35c42"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__vertex__circulator.html#a744a4fcac593c476749ac5cf2de35c42">OpenGP::SurfaceMesh::Halfedge_around_vertex_circulator::operator++</a></div><div class="ttdeci">Halfedge_around_vertex_circulator & operator++()</div><div class="ttdoc">pre-increment (rotate couter-clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:624</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__iterator_html_aacabb8e56f6416007b6bef02b17e52f8"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__iterator.html#aacabb8e56f6416007b6bef02b17e52f8">OpenGP::SurfaceMesh::Face_iterator::operator--</a></div><div class="ttdeci">Face_iterator & operator--()</div><div class="ttdoc">pre-decrement iterator </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:445</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a8ae02c97058c6fd1a7d56193b9ad4412"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a8ae02c97058c6fd1a7d56193b9ad4412">OpenGP::SurfaceMesh::assign</a></div><div class="ttdeci">HEADERONLY_INLINE SurfaceMesh & assign(const SurfaceMesh &rhs)</div><div class="ttdoc">assign rhs to *this. does not copy custom properties. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:95</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html_a3723f107f322ce21e9074249b3d799e2"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#a3723f107f322ce21e9074249b3d799e2">OpenGP::SurfaceMesh::Base_handle::idx</a></div><div class="ttdeci">int idx() const </div><div class="ttdoc">Get the underlying index of this handle. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:40</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator_html_aeccb3229f74de798afe49c40c888b5cb"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#aeccb3229f74de798afe49c40c888b5cb">OpenGP::SurfaceMesh::Edge_iterator::Edge_iterator</a></div><div class="ttdeci">Edge_iterator(Edge e=Edge(), const SurfaceMesh *m=NULL)</div><div class="ttdoc">Default constructor. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:363</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:529</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a861117410179fea7aeaa377d9eb83094"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a861117410179fea7aeaa377d9eb83094">OpenGP::SurfaceMesh::get_edge_property</a></div><div class="ttdeci">Edge_property< T > get_edge_property(const std::string &name) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1264</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_face__property_html_a9a0f62e092bf1c7240279a5a8222220d"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_face__property.html#a9a0f62e092bf1c7240279a5a8222220d">OpenGP::SurfaceMesh::Face_property::Face_property</a></div><div class="ttdeci">Face_property()</div><div class="ttdoc">default constructor </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:230</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a49a79a62cd065f66edc0dff5ddb6687e"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a49a79a62cd065f66edc0dff5ddb6687e">OpenGP::SurfaceMesh::get_vertex_property</a></div><div class="ttdeci">Vertex_property< T > get_vertex_property(const std::string &name) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1252</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator_html_ae3c82fd4190819facc9be0402192491b"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#ae3c82fd4190819facc9be0402192491b">OpenGP::SurfaceMesh::Halfedge_around_face_circulator::operator*</a></div><div class="ttdeci">Halfedge operator*() const </div><div class="ttdoc">get the halfedge the circulator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:844</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html_ac125ba4ec243ea1519a34dcbde8a9838"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ac125ba4ec243ea1519a34dcbde8a9838">OpenGP::SurfaceMesh::Base_handle::operator==</a></div><div class="ttdeci">bool operator==(const Base_handle &_rhs) const </div><div class="ttdoc">are two handles equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:49</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_base__handle_html_ae7fc01270256952f8e8b1643d9ea7b0c"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_base__handle.html#ae7fc01270256952f8e8b1643d9ea7b0c">OpenGP::SurfaceMesh::Base_handle::reset</a></div><div class="ttdeci">void reset()</div><div class="ttdoc">reset handle to be invalid (index=-1) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:43</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a2594fbf9b5b2569495fbc055782351dd"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a2594fbf9b5b2569495fbc055782351dd">OpenGP::SurfaceMesh::is_valid</a></div><div class="ttdeci">bool is_valid(Face f) const </div><div class="ttdoc">return whether face f is valid, i.e. the index is stores it within the array bounds. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1015</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9bd42b305af291b75b08d643592365ac"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9bd42b305af291b75b08d643592365ac">OpenGP::SurfaceMesh::add_face_property</a></div><div class="ttdeci">Face_property< T > add_face_property(const std::string &name, const T t=T())</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1244</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1f7ba842d55d4bdb110fafc1db07b9bb"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1f7ba842d55d4bdb110fafc1db07b9bb">OpenGP::SurfaceMesh::to_vertex</a></div><div class="ttdeci">Vertex to_vertex(Halfedge h) const </div><div class="ttdoc">returns the vertex the halfedge h points to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1073</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1e71bb6614d75d42e5432e3d661fb1c4"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1e71bb6614d75d42e5432e3d661fb1c4">OpenGP::SurfaceMesh::empty</a></div><div class="ttdeci">unsigned int empty() const </div><div class="ttdoc">returns true iff the mesh is empty, i.e., has no vertices </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:954</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator_html_a7715932f23c124982a9390af76c80ee9"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a7715932f23c124982a9390af76c80ee9">OpenGP::SurfaceMesh::Vertex_around_face_circulator::operator--</a></div><div class="ttdeci">Vertex_around_face_circulator & operator--()</div><div class="ttdoc">pre-decrement (rotates clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:772</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_edge_html_a3c08ed01427a43437893b5473cdf2b21"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_edge.html#a3c08ed01427a43437893b5473cdf2b21">OpenGP::SurfaceMesh::Edge::Edge</a></div><div class="ttdeci">Edge(int _idx=-1)</div><div class="ttdoc">default constructor (with invalid index) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:97</div></div>
<div class="ttc" id="struct_open_g_p_1_1_surface_mesh_1_1_face_html_a066d221b7345276106c659ab7ef357b3"><div class="ttname"><a href="struct_open_g_p_1_1_surface_mesh_1_1_face.html#a066d221b7345276106c659ab7ef357b3">OpenGP::SurfaceMesh::Face::Face</a></div><div class="ttdeci">Face(int _idx=-1)</div><div class="ttdoc">default constructor (with invalid index) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:106</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a18e3b47a0275b670f8b0eae7f3245c63"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a18e3b47a0275b670f8b0eae7f3245c63">OpenGP::SurfaceMesh::read</a></div><div class="ttdeci">HEADERONLY_INLINE bool read(const std::string &filename)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:149</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator_html_af12cba82f121fabbb39170dcb43ca29f"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html#af12cba82f121fabbb39170dcb43ca29f">OpenGP::SurfaceMesh::Halfedge_around_face_circulator::operator==</a></div><div class="ttdeci">bool operator==(const Halfedge_around_face_circulator &rhs) const </div><div class="ttdoc">are two circulators equal? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:814</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a98b709643c2f6858b4ee8b9e5af730de"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a98b709643c2f6858b4ee8b9e5af730de">OpenGP::SurfaceMesh::remove_vertex_property</a></div><div class="ttdeci">void remove_vertex_property(Vertex_property< T > &p)</div><div class="ttdoc">remove the vertex property p </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1303</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__property_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__property.html">OpenGP::SurfaceMesh::Vertex_property</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:153</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a91921c2d2a46f08f7c02456ca9275a9e"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a91921c2d2a46f08f7c02456ca9275a9e">OpenGP::SurfaceMesh::cw_rotated_halfedge</a></div><div class="ttdeci">Halfedge cw_rotated_halfedge(Halfedge h) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1137</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a73eb9d72d3df12188ad78ede0b9d4359"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a73eb9d72d3df12188ad78ede0b9d4359">OpenGP::SurfaceMesh::edge_properties</a></div><div class="ttdeci">std::vector< std::string > edge_properties() const </div><div class="ttdoc">returns the names of all edge properties </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1361</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator_html_a72eca1025d71f5bd50b9ea46e8626f5b"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_edge__iterator.html#a72eca1025d71f5bd50b9ea46e8626f5b">OpenGP::SurfaceMesh::Edge_iterator::operator*</a></div><div class="ttdeci">Edge operator*() const </div><div class="ttdoc">get the edge the iterator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:369</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a97b67a55a91cfc49fb2bcd373a2dd453"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a97b67a55a91cfc49fb2bcd373a2dd453">OpenGP::SurfaceMesh::face</a></div><div class="ttdeci">Face face(Edge e, unsigned int i) const </div><div class="ttdoc">returns the face incident to the i&#39;th halfedge of edge e. i has to be 0 or 1. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:1170</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator_html"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_halfedge__around__face__circulator.html">OpenGP::SurfaceMesh::Halfedge_around_face_circulator</a></div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:802</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a9f2f0dde61493534f3e9a939f9ce83ab"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a9f2f0dde61493534f3e9a939f9ce83ab">OpenGP::SurfaceMesh::write</a></div><div class="ttdeci">HEADERONLY_INLINE bool write(const std::string &filename) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:160</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a1762612694c3d584498d5e6dcd86a611"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a1762612694c3d584498d5e6dcd86a611">OpenGP::SurfaceMesh::valence</a></div><div class="ttdeci">HEADERONLY_INLINE unsigned int valence(Vertex v) const </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:560</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_acff33dca5886178a646e3eb3d228aca5"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#acff33dca5886178a646e3eb3d228aca5">OpenGP::SurfaceMesh::edge_length</a></div><div class="ttdeci">HEADERONLY_INLINE Scalar edge_length(Edge e) const </div><div class="ttdoc">compute the length of edge e. </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:835</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_html_a28a835c6dc3bc22e1311651bfe608bc4"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh.html#a28a835c6dc3bc22e1311651bfe608bc4">OpenGP::SurfaceMesh::add_face</a></div><div class="ttdeci">HEADERONLY_INLINE Face add_face(const std::vector< Vertex > &vertices)</div><div class="ttdef"><b>Definition:</b> SurfaceMesh.cpp:363</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator_html_a5a064d7a064060755a8388b71fe62baf"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__vertex__circulator.html#a5a064d7a064060755a8388b71fe62baf">OpenGP::SurfaceMesh::Vertex_around_vertex_circulator::operator*</a></div><div class="ttdeci">Vertex operator*() const </div><div class="ttdoc">get the vertex the circulator refers to </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:571</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator_html_ae68816f3ba783d8bbe730bfd741b9f06"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__iterator.html#ae68816f3ba783d8bbe730bfd741b9f06">OpenGP::SurfaceMesh::Vertex_iterator::operator!=</a></div><div class="ttdeci">bool operator!=(const Vertex_iterator &rhs) const </div><div class="ttdoc">are two iterators different? </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:274</div></div>
<div class="ttc" id="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator_html_a4ba6daeda871e93f6eeb74ccc7684814"><div class="ttname"><a href="class_open_g_p_1_1_surface_mesh_1_1_vertex__around__face__circulator.html#a4ba6daeda871e93f6eeb74ccc7684814">OpenGP::SurfaceMesh::Vertex_around_face_circulator::operator++</a></div><div class="ttdeci">Vertex_around_face_circulator & operator++()</div><div class="ttdoc">pre-increment (rotates counter-clockwise) </div><div class="ttdef"><b>Definition:</b> SurfaceMesh.h:763</div></div>
</div><!-- fragment --></div><!-- contents -->
<div id="footer">
<!-- <address>
<small>
Copyright © 2013
</small>
</address> -->
</div>
</body>
</html>