Files
ViewDesignEngine/docs/api/halfedge__mesh_8h_source.html
T
茂之钳 2f111edcd5
CI / Build & Test (push) Failing after 33s
CI / Release Build (push) Failing after 31s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
docs: generated API documentation (483 pages)
2026-07-24 11:55:47 +00:00

238 lines
40 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ViewDesignEngine: include/vde/mesh/halfedge_mesh.h 源文件</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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.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>
<link href="doxygen.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">ViewDesignEngine
&#160;<span id="projectnumber">3.1.0</span>
</div>
<div id="projectbrief">高性能 CAD 计算几何引擎</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','搜索');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('halfedge__mesh_8h_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- 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 class="header">
<div class="headertitle">
<div class="title">halfedge_mesh.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="halfedge__mesh_8h.html">浏览该文件的文档.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#pragma once</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="point_8h.html">vde/core/point.h</a>&quot;</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="aabb_8h.html">vde/core/aabb.h</a>&quot;</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; </div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacevde_1_1mesh.html">vde::mesh</a> {</div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="keyword">using</span> <a class="code" href="namespacevde_1_1core.html#a5e6679209cad0695e1b9d088c4b0e224">core::AABB3D</a>;</div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="keyword">using</span> <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">core::Vector3D</a>;</div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="keyword">using</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">core::Point3D</a>;</div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Halfedge.html"> 20</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structvde_1_1mesh_1_1Halfedge.html">Halfedge</a> {</div>
<div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Halfedge.html#ab1ce554d50379ae9c3d3f7677fbe01ef"> 21</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1mesh_1_1Halfedge.html#ab1ce554d50379ae9c3d3f7677fbe01ef">vertex_index</a> = -1; </div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Halfedge.html#a2f5e68b50f343fc4b8672c19f7166a36"> 22</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1mesh_1_1Halfedge.html#a2f5e68b50f343fc4b8672c19f7166a36">face_index</a> = -1; </div>
<div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Halfedge.html#afce5e362cdbf5657ef1b7ea0c0b8a52f"> 23</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1mesh_1_1Halfedge.html#afce5e362cdbf5657ef1b7ea0c0b8a52f">next_index</a> = -1; </div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Halfedge.html#a7102a82de43f7f6a2f7596ef5892edb2"> 24</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1mesh_1_1Halfedge.html#a7102a82de43f7f6a2f7596ef5892edb2">prev_index</a> = -1; </div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Halfedge.html#acfe5c8082047f27f0ef8350d8a027c91"> 25</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1mesh_1_1Halfedge.html#acfe5c8082047f27f0ef8350d8a027c91">opposite_index</a> = -1; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;};</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Face.html"> 35</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structvde_1_1mesh_1_1Face.html">Face</a> {</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Face.html#a127053ba0cb1fb0cffaee3fa5f76ce06"> 36</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1mesh_1_1Face.html#a127053ba0cb1fb0cffaee3fa5f76ce06">halfedge_index</a> = -1; </div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structvde_1_1mesh_1_1Face.html#a3c25777d324629da85cfaabd06fd68c0"> 37</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structvde_1_1mesh_1_1Face.html#a3c25777d324629da85cfaabd06fd68c0">valence</a> = 3; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;};</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html"> 54</a></span>&#160;<span class="keyword">class </span><a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a3cf3f997b8a91cf9ce7305f1643c6715"> 56</a></span>&#160; <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a3cf3f997b8a91cf9ce7305f1643c6715">HalfedgeMesh</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// ── Construction ──────────────────────────────────────</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a7341a74f7a154092a5c8b74efae23878"> 63</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a7341a74f7a154092a5c8b74efae23878">clear</a>();</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a1827a1364d3f1cb07a740050c0a0ed8e"> 70</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a1827a1364d3f1cb07a740050c0a0ed8e">add_vertex</a>(<span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>&amp; p);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a753347dbfdd15ed01ce2b73b9d05ebd5"> 78</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a753347dbfdd15ed01ce2b73b9d05ebd5">add_face</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; vertex_indices);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a0bd4ed920cc52017f730a56069f80bcb"> 90</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a0bd4ed920cc52017f730a56069f80bcb">build_from_triangles</a>(<span class="keyword">const</span> std::vector&lt;Point3D&gt;&amp; verts,</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">const</span> std::vector&lt;std::array&lt;int, 3&gt;&gt;&amp; tris);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// ── Accessors ─────────────────────────────────────────</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a16c2789f302c8b12e721f6b963fad98e"> 99</a></span>&#160; [[nodiscard]] <span class="keywordtype">size_t</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a16c2789f302c8b12e721f6b963fad98e">num_vertices</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vertices_.size(); }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a43505aa1d6b8896645578b21fd2949d3"> 105</a></span>&#160; [[nodiscard]] <span class="keywordtype">size_t</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a43505aa1d6b8896645578b21fd2949d3">num_faces</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> faces_.size(); }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a8658d9c869ab257d8324f0251713d50b"> 111</a></span>&#160; [[nodiscard]] <span class="keywordtype">size_t</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a8658d9c869ab257d8324f0251713d50b">num_edges</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedges_.size() / 2; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a488d7ea74c00ed137f068ffd31e43eb6"> 118</a></span>&#160; [[nodiscard]] <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>&amp; <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a488d7ea74c00ed137f068ffd31e43eb6">vertex</a>(<span class="keywordtype">size_t</span> idx)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> vertices_[idx]; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a0a5a696eb308fe8db188c71919e7f1f1"> 125</a></span>&#160; [[nodiscard]] <span class="keyword">const</span> <a class="code" href="structvde_1_1mesh_1_1Face.html">Face</a>&amp; <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a0a5a696eb308fe8db188c71919e7f1f1">face</a>(<span class="keywordtype">size_t</span> idx)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> faces_[idx]; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a6c33da9af30c271abc0cb2a47f2a2a6e"> 132</a></span>&#160; [[nodiscard]] <span class="keyword">const</span> <a class="code" href="structvde_1_1mesh_1_1Halfedge.html">Halfedge</a>&amp; <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a6c33da9af30c271abc0cb2a47f2a2a6e">halfedge</a>(<span class="keywordtype">size_t</span> idx)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedges_[idx]; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a71f6edeaaf7df460a055d075befca4bb"> 140</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a71f6edeaaf7df460a055d075befca4bb">set_vertex</a>(<span class="keywordtype">size_t</span> idx, <span class="keyword">const</span> <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>&amp; p) { vertices_[idx] = p; normals_dirty_ = <span class="keyword">true</span>; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// ── Topology queries ──────────────────────────────────</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#ab19df827e90175685988545f40033f09"> 149</a></span>&#160; [[nodiscard]] std::vector&lt;int&gt; <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#ab19df827e90175685988545f40033f09">face_vertices</a>(<span class="keywordtype">int</span> fi) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#abf64a1f6d143d248754469793dbc6277"> 156</a></span>&#160; [[nodiscard]] std::vector&lt;int&gt; <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#abf64a1f6d143d248754469793dbc6277">vertex_faces</a>(<span class="keywordtype">int</span> vi) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a9354f080cadd2e039565abd919aff9fc"> 163</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a9354f080cadd2e039565abd919aff9fc">is_boundary_edge</a>(<span class="keywordtype">int</span> hei)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> halfedges_[hei].face_index &lt; 0; }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a89748143178c22c4c1e320edf2bee126"> 170</a></span>&#160; [[nodiscard]] <span class="keywordtype">bool</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a89748143178c22c4c1e320edf2bee126">is_boundary_vertex</a>(<span class="keywordtype">int</span> vi) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// ── Normals ───────────────────────────────────────────</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#abf4fa00d52c46f9b0b0f0498efc4142f"> 179</a></span>&#160; [[nodiscard]] <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#abf4fa00d52c46f9b0b0f0498efc4142f">face_normal</a>(<span class="keywordtype">int</span> fi) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a127647036280c96e22296fcb89566bc6"> 186</a></span>&#160; [[nodiscard]] <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a127647036280c96e22296fcb89566bc6">vertex_normal</a>(<span class="keywordtype">int</span> vi) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
<div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a4853a3874d9d74ff7cdf8047821adeda"> 192</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a4853a3874d9d74ff7cdf8047821adeda">update_normals</a>();</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="comment">// ── Bounds ────────────────────────────────────────────</span></div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a19ee3427d89d178f863e116e8eb275ef"> 200</a></span>&#160; [[nodiscard]] <a class="code" href="namespacevde_1_1core.html#a5e6679209cad0695e1b9d088c4b0e224">AABB3D</a> <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a19ee3427d89d178f863e116e8eb275ef">bounds</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// ── Iterators for range-based for ─────────────────────</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">class </span>FaceRange;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keyword">class </span>VertexOneRing;</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a526514ecf176c23e38b9a8bbe75f40e3"> 221</a></span>&#160; [[nodiscard]] FaceRange <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#a526514ecf176c23e38b9a8bbe75f40e3">faces_range</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classvde_1_1mesh_1_1HalfedgeMesh.html#aa03581ac1863757b3989902dfb3d2879"> 233</a></span>&#160; [[nodiscard]] VertexOneRing <a class="code" href="classvde_1_1mesh_1_1HalfedgeMesh.html#aa03581ac1863757b3989902dfb3d2879">vertex_one_ring</a>(<span class="keywordtype">int</span> vi) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; std::vector&lt;Point3D&gt; vertices_; </div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; std::vector&lt;Halfedge&gt; halfedges_; </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; std::vector&lt;Face&gt; faces_; </div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; std::vector&lt;Vector3D&gt; face_normals_; </div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; std::vector&lt;Vector3D&gt; vertex_normals_; </div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">bool</span> normals_dirty_ = <span class="keyword">true</span>; </div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordtype">int</span> find_or_create_edge(<span class="keywordtype">int</span> v0, <span class="keywordtype">int</span> v1);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;};</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;} <span class="comment">// namespace vde::mesh</span></div>
<div class="ttc" id="aaabb_8h_html"><div class="ttname"><a href="aabb_8h.html">aabb.h</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html">vde::mesh::HalfedgeMesh</a></div><div class="ttdoc">半边数据结构三角网格</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00054">halfedge_mesh.h:54</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a0a5a696eb308fe8db188c71919e7f1f1"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a0a5a696eb308fe8db188c71919e7f1f1">vde::mesh::HalfedgeMesh::face</a></div><div class="ttdeci">const Face &amp; face(size_t idx) const</div><div class="ttdoc">访问面</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00125">halfedge_mesh.h:125</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a0bd4ed920cc52017f730a56069f80bcb"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a0bd4ed920cc52017f730a56069f80bcb">vde::mesh::HalfedgeMesh::build_from_triangles</a></div><div class="ttdeci">void build_from_triangles(const std::vector&lt; Point3D &gt; &amp;verts, const std::vector&lt; std::array&lt; int, 3 &gt;&gt; &amp;tris)</div><div class="ttdoc">从三角形列表批量构建半边形网格</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a127647036280c96e22296fcb89566bc6"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a127647036280c96e22296fcb89566bc6">vde::mesh::HalfedgeMesh::vertex_normal</a></div><div class="ttdeci">Vector3D vertex_normal(int vi) const</div><div class="ttdoc">顶点法向(邻面法向的面积加权平均)</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a16c2789f302c8b12e721f6b963fad98e"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a16c2789f302c8b12e721f6b963fad98e">vde::mesh::HalfedgeMesh::num_vertices</a></div><div class="ttdeci">size_t num_vertices() const</div><div class="ttdoc">顶点数量</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00099">halfedge_mesh.h:99</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a1827a1364d3f1cb07a740050c0a0ed8e"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a1827a1364d3f1cb07a740050c0a0ed8e">vde::mesh::HalfedgeMesh::add_vertex</a></div><div class="ttdeci">int add_vertex(const Point3D &amp;p)</div><div class="ttdoc">添加顶点</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a19ee3427d89d178f863e116e8eb275ef"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a19ee3427d89d178f863e116e8eb275ef">vde::mesh::HalfedgeMesh::bounds</a></div><div class="ttdeci">AABB3D bounds() const</div><div class="ttdoc">网格包围盒</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a3cf3f997b8a91cf9ce7305f1643c6715"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a3cf3f997b8a91cf9ce7305f1643c6715">vde::mesh::HalfedgeMesh::HalfedgeMesh</a></div><div class="ttdeci">HalfedgeMesh()=default</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a43505aa1d6b8896645578b21fd2949d3"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a43505aa1d6b8896645578b21fd2949d3">vde::mesh::HalfedgeMesh::num_faces</a></div><div class="ttdeci">size_t num_faces() const</div><div class="ttdoc">面数量</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00105">halfedge_mesh.h:105</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a4853a3874d9d74ff7cdf8047821adeda"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a4853a3874d9d74ff7cdf8047821adeda">vde::mesh::HalfedgeMesh::update_normals</a></div><div class="ttdeci">void update_normals()</div><div class="ttdoc">重新计算所有面法向和顶点法向</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a488d7ea74c00ed137f068ffd31e43eb6"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a488d7ea74c00ed137f068ffd31e43eb6">vde::mesh::HalfedgeMesh::vertex</a></div><div class="ttdeci">const Point3D &amp; vertex(size_t idx) const</div><div class="ttdoc">访问顶点</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00118">halfedge_mesh.h:118</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a526514ecf176c23e38b9a8bbe75f40e3"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a526514ecf176c23e38b9a8bbe75f40e3">vde::mesh::HalfedgeMesh::faces_range</a></div><div class="ttdeci">FaceRange faces_range() const</div><div class="ttdoc">获取所有面范围(range-based for 支持)</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a6c33da9af30c271abc0cb2a47f2a2a6e"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a6c33da9af30c271abc0cb2a47f2a2a6e">vde::mesh::HalfedgeMesh::halfedge</a></div><div class="ttdeci">const Halfedge &amp; halfedge(size_t idx) const</div><div class="ttdoc">访问半边</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00132">halfedge_mesh.h:132</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a71f6edeaaf7df460a055d075befca4bb"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a71f6edeaaf7df460a055d075befca4bb">vde::mesh::HalfedgeMesh::set_vertex</a></div><div class="ttdeci">void set_vertex(size_t idx, const Point3D &amp;p)</div><div class="ttdoc">更新顶点位置</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00140">halfedge_mesh.h:140</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a7341a74f7a154092a5c8b74efae23878"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a7341a74f7a154092a5c8b74efae23878">vde::mesh::HalfedgeMesh::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">清空所有数据</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a753347dbfdd15ed01ce2b73b9d05ebd5"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a753347dbfdd15ed01ce2b73b9d05ebd5">vde::mesh::HalfedgeMesh::add_face</a></div><div class="ttdeci">int add_face(const std::vector&lt; int &gt; &amp;vertex_indices)</div><div class="ttdoc">添加面</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a8658d9c869ab257d8324f0251713d50b"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a8658d9c869ab257d8324f0251713d50b">vde::mesh::HalfedgeMesh::num_edges</a></div><div class="ttdeci">size_t num_edges() const</div><div class="ttdoc">边数量</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00111">halfedge_mesh.h:111</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a89748143178c22c4c1e320edf2bee126"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a89748143178c22c4c1e320edf2bee126">vde::mesh::HalfedgeMesh::is_boundary_vertex</a></div><div class="ttdeci">bool is_boundary_vertex(int vi) const</div><div class="ttdoc">是否为边界顶点</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_a9354f080cadd2e039565abd919aff9fc"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#a9354f080cadd2e039565abd919aff9fc">vde::mesh::HalfedgeMesh::is_boundary_edge</a></div><div class="ttdeci">bool is_boundary_edge(int hei) const</div><div class="ttdoc">是否为边界半边</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00163">halfedge_mesh.h:163</a></div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_aa03581ac1863757b3989902dfb3d2879"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#aa03581ac1863757b3989902dfb3d2879">vde::mesh::HalfedgeMesh::vertex_one_ring</a></div><div class="ttdeci">VertexOneRing vertex_one_ring(int vi) const</div><div class="ttdoc">获取顶点的 1-ring 邻域迭代器</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_ab19df827e90175685988545f40033f09"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#ab19df827e90175685988545f40033f09">vde::mesh::HalfedgeMesh::face_vertices</a></div><div class="ttdeci">std::vector&lt; int &gt; face_vertices(int fi) const</div><div class="ttdoc">获取面的所有顶点索引(按环绕顺序)</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_abf4fa00d52c46f9b0b0f0498efc4142f"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#abf4fa00d52c46f9b0b0f0498efc4142f">vde::mesh::HalfedgeMesh::face_normal</a></div><div class="ttdeci">Vector3D face_normal(int fi) const</div><div class="ttdoc">面法向(几何法向,非归一化?由实现决定)</div></div>
<div class="ttc" id="aclassvde_1_1mesh_1_1HalfedgeMesh_html_abf64a1f6d143d248754469793dbc6277"><div class="ttname"><a href="classvde_1_1mesh_1_1HalfedgeMesh.html#abf64a1f6d143d248754469793dbc6277">vde::mesh::HalfedgeMesh::vertex_faces</a></div><div class="ttdeci">std::vector&lt; int &gt; vertex_faces(int vi) const</div><div class="ttdoc">获取顶点的邻面索引环</div></div>
<div class="ttc" id="anamespacevde_1_1core_html_a5e6679209cad0695e1b9d088c4b0e224"><div class="ttname"><a href="namespacevde_1_1core.html#a5e6679209cad0695e1b9d088c4b0e224">vde::core::AABB3D</a></div><div class="ttdeci">AABB&lt; double &gt; AABB3D</div><div class="ttdoc">双精度三维包围盒</div><div class="ttdef"><b>Definition:</b> <a href="aabb_8h_source.html#l00131">aabb.h:131</a></div></div>
<div class="ttc" id="anamespacevde_1_1core_html_ab763c018d19e10e91a6c6d6ab2ccc8e0"><div class="ttname"><a href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">vde::core::Vector3D</a></div><div class="ttdeci">foundation::Vector3D Vector3D</div><div class="ttdoc">双精度三维向量(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00049">point.h:49</a></div></div>
<div class="ttc" id="anamespacevde_1_1core_html_ac6aed70c4b90d13f10217267cd7a1952"><div class="ttname"><a href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">vde::core::Point3D</a></div><div class="ttdeci">foundation::Point3D Point3D</div><div class="ttdoc">双精度三维点(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00031">point.h:31</a></div></div>
<div class="ttc" id="anamespacevde_1_1mesh_html"><div class="ttname"><a href="namespacevde_1_1mesh.html">vde::mesh</a></div><div class="ttdef"><b>Definition:</b> <a href="alpha__shapes_8h_source.html#l00006">alpha_shapes.h:6</a></div></div>
<div class="ttc" id="apoint_8h_html"><div class="ttname"><a href="point_8h.html">point.h</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Face_html"><div class="ttname"><a href="structvde_1_1mesh_1_1Face.html">vde::mesh::Face</a></div><div class="ttdoc">面元素</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00035">halfedge_mesh.h:35</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Face_html_a127053ba0cb1fb0cffaee3fa5f76ce06"><div class="ttname"><a href="structvde_1_1mesh_1_1Face.html#a127053ba0cb1fb0cffaee3fa5f76ce06">vde::mesh::Face::halfedge_index</a></div><div class="ttdeci">int halfedge_index</div><div class="ttdoc">该面的任意一条半边</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00036">halfedge_mesh.h:36</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Face_html_a3c25777d324629da85cfaabd06fd68c0"><div class="ttname"><a href="structvde_1_1mesh_1_1Face.html#a3c25777d324629da85cfaabd06fd68c0">vde::mesh::Face::valence</a></div><div class="ttdeci">int valence</div><div class="ttdoc">边数(三角面 = 3</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00037">halfedge_mesh.h:37</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Halfedge_html"><div class="ttname"><a href="structvde_1_1mesh_1_1Halfedge.html">vde::mesh::Halfedge</a></div><div class="ttdoc">半边数据结构元素</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00020">halfedge_mesh.h:20</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Halfedge_html_a2f5e68b50f343fc4b8672c19f7166a36"><div class="ttname"><a href="structvde_1_1mesh_1_1Halfedge.html#a2f5e68b50f343fc4b8672c19f7166a36">vde::mesh::Halfedge::face_index</a></div><div class="ttdeci">int face_index</div><div class="ttdoc">所属面的索引(边界半边为 -1</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00022">halfedge_mesh.h:22</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Halfedge_html_a7102a82de43f7f6a2f7596ef5892edb2"><div class="ttname"><a href="structvde_1_1mesh_1_1Halfedge.html#a7102a82de43f7f6a2f7596ef5892edb2">vde::mesh::Halfedge::prev_index</a></div><div class="ttdeci">int prev_index</div><div class="ttdoc">沿面的上一条半边</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00024">halfedge_mesh.h:24</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Halfedge_html_ab1ce554d50379ae9c3d3f7677fbe01ef"><div class="ttname"><a href="structvde_1_1mesh_1_1Halfedge.html#ab1ce554d50379ae9c3d3f7677fbe01ef">vde::mesh::Halfedge::vertex_index</a></div><div class="ttdeci">int vertex_index</div><div class="ttdoc">半边起点(终点 = next 半边的起点)</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00021">halfedge_mesh.h:21</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Halfedge_html_acfe5c8082047f27f0ef8350d8a027c91"><div class="ttname"><a href="structvde_1_1mesh_1_1Halfedge.html#acfe5c8082047f27f0ef8350d8a027c91">vde::mesh::Halfedge::opposite_index</a></div><div class="ttdeci">int opposite_index</div><div class="ttdoc">对侧半边索引(反方向半边)</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00025">halfedge_mesh.h:25</a></div></div>
<div class="ttc" id="astructvde_1_1mesh_1_1Halfedge_html_afce5e362cdbf5657ef1b7ea0c0b8a52f"><div class="ttname"><a href="structvde_1_1mesh_1_1Halfedge.html#afce5e362cdbf5657ef1b7ea0c0b8a52f">vde::mesh::Halfedge::next_index</a></div><div class="ttdeci">int next_index</div><div class="ttdoc">沿面的下一条半边</div><div class="ttdef"><b>Definition:</b> <a href="halfedge__mesh_8h_source.html#l00023">halfedge_mesh.h:23</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_36dfe8171299c47a6036082559f11ede.html">vde</a></li><li class="navelem"><a class="el" href="dir_f4e462c25acfa80a10069fa7c0aea698.html">mesh</a></li><li class="navelem"><a class="el" href="halfedge__mesh_8h.html">halfedge_mesh.h</a></li>
<li class="footer">生成于 2026年 七月 24日 星期五 11:21:23 , 为 ViewDesignEngine使用 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>