Files
ViewDesignEngine/docs/api/group__foundation.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

1665 lines
112 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: 基础模块</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('group__foundation.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="summary">
<a href="#nested-classes"></a> &#124;
<a href="#typedef-members">类型定义</a> &#124;
<a href="#enum-members">枚举</a> &#124;
<a href="#func-members">函数</a> </div>
<div class="headertitle">
<div class="title">基础模块</div> </div>
</div><!--header-->
<div class="contents">
<p>数学类型、公差系统、精确谓词、文件 I/O、序列化
<a href="#details">更多...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1foundation_1_1Interval.html">vde::foundation::Interval</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">双精度区间算术类 <a href="classvde_1_1foundation_1_1Interval.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1foundation_1_1GltfOptions.html">vde::foundation::GltfOptions</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">glTF 2.0 导出选项 <a href="structvde_1_1foundation_1_1GltfOptions.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html">vde::foundation::ObjMeshData</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">OBJ 文件解析结果数据结构 <a href="structvde_1_1foundation_1_1ObjMeshData.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1foundation_1_1StlTriangle.html">vde::foundation::StlTriangle</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">STL 三角形面片 <a href="structvde_1_1foundation_1_1StlTriangle.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1foundation_1_1MemoryPool.html">vde::foundation::MemoryPool&lt; T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">固定块大小的内存池 <a href="classvde_1_1foundation_1_1MemoryPool.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1foundation_1_1Predicates.html">vde::foundation::Predicates</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">统一谓词接口 — 编译时选择 GMP 或自适应双精度后端 <a href="structvde_1_1foundation_1_1Predicates.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1foundation_1_1SerializedMesh.html">vde::foundation::SerializedMesh</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">二进制序列化格式的网格数据结构 <a href="structvde_1_1foundation_1_1SerializedMesh.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1foundation_1_1BinarySerializer.html">vde::foundation::BinarySerializer</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">二进制序列化器 <a href="classvde_1_1foundation_1_1BinarySerializer.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1foundation_1_1Tolerance.html">vde::foundation::Tolerance</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">分层容差管理类 <a href="classvde_1_1foundation_1_1Tolerance.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classvde_1_1foundation_1_1ToleranceScope.html">vde::foundation::ToleranceScope</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">局部容差作用域(RAII <a href="classvde_1_1foundation_1_1ToleranceScope.html#details">更多...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
类型定义</h2></td></tr>
<tr class="memitem:gad0fa8cf732073ffea1e2d10400ec8d26"><td class="memTemplParams" colspan="2">template&lt;typename T , size_t Dim&gt; </td></tr>
<tr class="memitem:gad0fa8cf732073ffea1e2d10400ec8d26"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__foundation.html#gad0fa8cf732073ffea1e2d10400ec8d26">vde::foundation::Point</a> = Eigen::Matrix&lt; T, Dim, 1 &gt;</td></tr>
<tr class="memdesc:gad0fa8cf732073ffea1e2d10400ec8d26"><td class="mdescLeft">&#160;</td><td class="mdescRight">通用 N 维点类型(使用 Eigen 列向量) <a href="group__foundation.html#gad0fa8cf732073ffea1e2d10400ec8d26">更多...</a><br /></td></tr>
<tr class="separator:gad0fa8cf732073ffea1e2d10400ec8d26"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga835975ee722dbebc123fdff3c95728c2"><td class="memTemplParams" colspan="2">template&lt;typename T , size_t Dim&gt; </td></tr>
<tr class="memitem:ga835975ee722dbebc123fdff3c95728c2"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga835975ee722dbebc123fdff3c95728c2">vde::foundation::Vector</a> = Eigen::Matrix&lt; T, Dim, 1 &gt;</td></tr>
<tr class="memdesc:ga835975ee722dbebc123fdff3c95728c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">通用 N 维向量类型(与 Point 相同的列向量表示) <a href="group__foundation.html#ga835975ee722dbebc123fdff3c95728c2">更多...</a><br /></td></tr>
<tr class="separator:ga835975ee722dbebc123fdff3c95728c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
枚举</h2></td></tr>
<tr class="memitem:ga856bcf915448b737fbb1d73db2c10a85"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga856bcf915448b737fbb1d73db2c10a85">vde::foundation::ErrorCode</a> : int32_t { <br />
&#160;&#160;<a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85a8c632159fa131f09d04f94e3cbcd8782">vde::foundation::kSuccess</a> = 0
, <a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85a80fdc050363ea6925fa2e7eb7f0a94a0">vde::foundation::kInvalidArgument</a>
, <a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85ac4283c91ae25b26dd77c5030baca028e">vde::foundation::kInvalidGeometry</a>
, <a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85af8c2095f04b60f2ec0ca8fb825a94bf0">vde::foundation::kDegenerateCase</a>
, <br />
&#160;&#160;<a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85ae8024a6eeff9d90cc3babff8acaec9c9">vde::foundation::kNotImplemented</a>
, <a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85a631fe1d70108dee6ae7d6acde27f76ef">vde::foundation::kNumericalError</a>
, <a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85ab681eacb215899549d45805f02eeb40c">vde::foundation::kOutOfMemory</a>
, <a class="el" href="group__foundation.html#gga856bcf915448b737fbb1d73db2c10a85afcd417a134c251034b0d61b07c826394">vde::foundation::kInternalError</a>
<br />
}</td></tr>
<tr class="memdesc:ga856bcf915448b737fbb1d73db2c10a85"><td class="mdescLeft">&#160;</td><td class="mdescRight">全局错误码枚举 <a href="group__foundation.html#ga856bcf915448b737fbb1d73db2c10a85">更多...</a><br /></td></tr>
<tr class="separator:ga856bcf915448b737fbb1d73db2c10a85"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae42a60a99e11250a45ab0de45970c95f"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">vde::foundation::exact::Orientation</a> { <a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95faba360a794737bcc8657a5b6e870d7ba8">vde::foundation::exact::Clockwise</a>
, <a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95fa8f23635f9ec49db2161fc5cddf033a79">vde::foundation::exact::CounterClockwise</a>
, <a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95fa817d9fd9977363770196b7b64da74bbb">vde::foundation::exact::Collinear</a>
}</td></tr>
<tr class="memdesc:gae42a60a99e11250a45ab0de45970c95f"><td class="mdescLeft">&#160;</td><td class="mdescRight">二维定向测试结果 <a href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">更多...</a><br /></td></tr>
<tr class="separator:gae42a60a99e11250a45ab0de45970c95f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf44d45ba6402f725ee5d2cf828e25588"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#gaf44d45ba6402f725ee5d2cf828e25588">vde::foundation::exact::CircleTest</a> { <a class="el" href="group__foundation.html#ggaf44d45ba6402f725ee5d2cf828e25588a9b6d3000134648fc9f1e71094ae0847d">vde::foundation::exact::Inside</a>
, <a class="el" href="group__foundation.html#ggaf44d45ba6402f725ee5d2cf828e25588a521c36a31c2762741cf0f8890cbe05e3">vde::foundation::exact::On</a>
, <a class="el" href="group__foundation.html#ggaf44d45ba6402f725ee5d2cf828e25588a76fbf0ccd7fcd64879c2ff2119dc15a4">vde::foundation::exact::Outside</a>
}</td></tr>
<tr class="memdesc:gaf44d45ba6402f725ee5d2cf828e25588"><td class="mdescLeft">&#160;</td><td class="mdescRight">圆测试结果 <a href="group__foundation.html#gaf44d45ba6402f725ee5d2cf828e25588">更多...</a><br /></td></tr>
<tr class="separator:gaf44d45ba6402f725ee5d2cf828e25588"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
函数</h2></td></tr>
<tr class="memitem:ga828aee5891f4f4059932951e63f116e9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">Orientation</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga828aee5891f4f4059932951e63f116e9">vde::foundation::exact::orient_2d</a> (const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;a, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;b, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;c)</td></tr>
<tr class="memdesc:ga828aee5891f4f4059932951e63f116e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">自适应精度二维定向测试(Shewchuk 算法) <a href="group__foundation.html#ga828aee5891f4f4059932951e63f116e9">更多...</a><br /></td></tr>
<tr class="separator:ga828aee5891f4f4059932951e63f116e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2047f44bf458da6b9ea19fdda1a7a2a7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">Orientation</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga2047f44bf458da6b9ea19fdda1a7a2a7">vde::foundation::exact::orient_3d</a> (const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;a, const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;b, const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;c, const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;d)</td></tr>
<tr class="memdesc:ga2047f44bf458da6b9ea19fdda1a7a2a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">自适应精度三维定向测试 <a href="group__foundation.html#ga2047f44bf458da6b9ea19fdda1a7a2a7">更多...</a><br /></td></tr>
<tr class="separator:ga2047f44bf458da6b9ea19fdda1a7a2a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gadc741ceaf8679847e2c220c5c1b1dc77"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__foundation.html#gaf44d45ba6402f725ee5d2cf828e25588">CircleTest</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#gadc741ceaf8679847e2c220c5c1b1dc77">vde::foundation::exact::in_circle</a> (const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;a, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;b, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;c, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;d)</td></tr>
<tr class="memdesc:gadc741ceaf8679847e2c220c5c1b1dc77"><td class="mdescLeft">&#160;</td><td class="mdescRight">自适应精度圆内测试(In-Circle Test <a href="group__foundation.html#gadc741ceaf8679847e2c220c5c1b1dc77">更多...</a><br /></td></tr>
<tr class="separator:gadc741ceaf8679847e2c220c5c1b1dc77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabe62e4bbbb46304e5df75cf773269029"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#gabe62e4bbbb46304e5df75cf773269029">vde::foundation::fmt_double</a> (double v, int precision=12)</td></tr>
<tr class="memdesc:gabe62e4bbbb46304e5df75cf773269029"><td class="mdescLeft">&#160;</td><td class="mdescRight">以 CAD 级别精度格式化双精度浮点数 <a href="group__foundation.html#gabe62e4bbbb46304e5df75cf773269029">更多...</a><br /></td></tr>
<tr class="separator:gabe62e4bbbb46304e5df75cf773269029"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gab2f1e3f24e1a358c3edabfb4fd3eb8a5"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#gab2f1e3f24e1a358c3edabfb4fd3eb8a5">vde::foundation::fmt_iges_real</a> (double v, int=12)</td></tr>
<tr class="memdesc:gab2f1e3f24e1a358c3edabfb4fd3eb8a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">IGES 格式实数输出 <a href="group__foundation.html#gab2f1e3f24e1a358c3edabfb4fd3eb8a5">更多...</a><br /></td></tr>
<tr class="separator:gab2f1e3f24e1a358c3edabfb4fd3eb8a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga28a1536a709ef0b632f301375e081c98"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga28a1536a709ef0b632f301375e081c98">vde::foundation::fmt_point</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">core::Point3D</a> &amp;p, bool use_d=false)</td></tr>
<tr class="memdesc:ga28a1536a709ef0b632f301375e081c98"><td class="mdescLeft">&#160;</td><td class="mdescRight">格式化三维点为逗号分隔字符串 <a href="group__foundation.html#ga28a1536a709ef0b632f301375e081c98">更多...</a><br /></td></tr>
<tr class="separator:ga28a1536a709ef0b632f301375e081c98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0966ff9f82904704cbf6fb6325179ec5"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga0966ff9f82904704cbf6fb6325179ec5">vde::foundation::pad72</a> (const std::string &amp;s)</td></tr>
<tr class="memdesc:ga0966ff9f82904704cbf6fb6325179ec5"><td class="mdescLeft">&#160;</td><td class="mdescRight">将字符串填充到恰好 72 个字符 <a href="group__foundation.html#ga0966ff9f82904704cbf6fb6325179ec5">更多...</a><br /></td></tr>
<tr class="separator:ga0966ff9f82904704cbf6fb6325179ec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4c722653de4d2a636ec36840bf570d9b"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga4c722653de4d2a636ec36840bf570d9b">vde::foundation::format_iges_line</a> (const std::string &amp;data, char section_char, int seq)</td></tr>
<tr class="memdesc:ga4c722653de4d2a636ec36840bf570d9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">格式化 IGES 段落行 <a href="group__foundation.html#ga4c722653de4d2a636ec36840bf570d9b">更多...</a><br /></td></tr>
<tr class="separator:ga4c722653de4d2a636ec36840bf570d9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4082e53f9e3afe884a6ea7b2005abfd1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1foundation_1_1Interval.html">Interval</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga4082e53f9e3afe884a6ea7b2005abfd1">vde::foundation::orient_2d_interval</a> (double ax, double ay, double bx, double by, double cx, double cy)</td></tr>
<tr class="memdesc:ga4082e53f9e3afe884a6ea7b2005abfd1"><td class="mdescLeft">&#160;</td><td class="mdescRight">二维定向行列式的区间验证 <a href="group__foundation.html#ga4082e53f9e3afe884a6ea7b2005abfd1">更多...</a><br /></td></tr>
<tr class="separator:ga4082e53f9e3afe884a6ea7b2005abfd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga90b3b7375e3ad4e30cf60a286515d95b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga90b3b7375e3ad4e30cf60a286515d95b">vde::foundation::orient_2d_verified</a> (double ax, double ay, double bx, double by, double cx, double cy)</td></tr>
<tr class="memdesc:ga90b3b7375e3ad4e30cf60a286515d95b"><td class="mdescLeft">&#160;</td><td class="mdescRight">使用区间算术验证 orient_2d 结果 <a href="group__foundation.html#ga90b3b7375e3ad4e30cf60a286515d95b">更多...</a><br /></td></tr>
<tr class="separator:ga90b3b7375e3ad4e30cf60a286515d95b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga51de361e7a704ba10d0d34e006b9b1fd"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga51de361e7a704ba10d0d34e006b9b1fd">vde::foundation::write_gltf</a> (const std::string &amp;filepath, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">mesh::HalfedgeMesh</a> &amp;mesh, const <a class="el" href="structvde_1_1foundation_1_1GltfOptions.html">GltfOptions</a> &amp;options=<a class="el" href="structvde_1_1foundation_1_1GltfOptions.html">GltfOptions</a>{})</td></tr>
<tr class="memdesc:ga51de361e7a704ba10d0d34e006b9b1fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">导出网格为 glTF 2.0 / GLB 格式 <a href="group__foundation.html#ga51de361e7a704ba10d0d34e006b9b1fd">更多...</a><br /></td></tr>
<tr class="separator:ga51de361e7a704ba10d0d34e006b9b1fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga05a128dbc89f2e7ee633bdc640df6fe5"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga05a128dbc89f2e7ee633bdc640df6fe5">vde::foundation::write_brep_gltf</a> (const std::string &amp;filepath, const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">brep::BrepModel</a> &amp;model, int tessellation_res=32)</td></tr>
<tr class="memdesc:ga05a128dbc89f2e7ee633bdc640df6fe5"><td class="mdescLeft">&#160;</td><td class="mdescRight">导出 B-Rep 模型为 GLB 格式(通过面片化) <a href="group__foundation.html#ga05a128dbc89f2e7ee633bdc640df6fe5">更多...</a><br /></td></tr>
<tr class="separator:ga05a128dbc89f2e7ee633bdc640df6fe5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga27a7d806cf76dc23ad6ac73ae3ce0338"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html">ObjMeshData</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga27a7d806cf76dc23ad6ac73ae3ce0338">vde::foundation::read_obj</a> (const std::string &amp;filepath)</td></tr>
<tr class="memdesc:ga27a7d806cf76dc23ad6ac73ae3ce0338"><td class="mdescLeft">&#160;</td><td class="mdescRight">读取 Wavefront OBJ 文件 <a href="group__foundation.html#ga27a7d806cf76dc23ad6ac73ae3ce0338">更多...</a><br /></td></tr>
<tr class="separator:ga27a7d806cf76dc23ad6ac73ae3ce0338"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3f00800cc4a2d9901744427c0920f1b1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga3f00800cc4a2d9901744427c0920f1b1">vde::foundation::write_obj</a> (const std::string &amp;filepath, const <a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html">ObjMeshData</a> &amp;data)</td></tr>
<tr class="memdesc:ga3f00800cc4a2d9901744427c0920f1b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">写入 Wavefront OBJ 文件 <a href="group__foundation.html#ga3f00800cc4a2d9901744427c0920f1b1">更多...</a><br /></td></tr>
<tr class="separator:ga3f00800cc4a2d9901744427c0920f1b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2f3d702e9426a55baf9da37244d26483"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">mesh::HalfedgeMesh</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga2f3d702e9426a55baf9da37244d26483">vde::foundation::read_ply</a> (const std::string &amp;filepath)</td></tr>
<tr class="memdesc:ga2f3d702e9426a55baf9da37244d26483"><td class="mdescLeft">&#160;</td><td class="mdescRight">读取 PLY 文件(Stanford Polygon Format <a href="group__foundation.html#ga2f3d702e9426a55baf9da37244d26483">更多...</a><br /></td></tr>
<tr class="separator:ga2f3d702e9426a55baf9da37244d26483"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5601dbe30446f41c9a8f033b0b4f39ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga5601dbe30446f41c9a8f033b0b4f39ed">vde::foundation::write_ply</a> (const std::string &amp;filepath, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">mesh::HalfedgeMesh</a> &amp;mesh)</td></tr>
<tr class="memdesc:ga5601dbe30446f41c9a8f033b0b4f39ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">写入 PLY 文件(ASCII 格式) <a href="group__foundation.html#ga5601dbe30446f41c9a8f033b0b4f39ed">更多...</a><br /></td></tr>
<tr class="separator:ga5601dbe30446f41c9a8f033b0b4f39ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga19bedcf026cfa80bbe7700f25891ca36"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="structvde_1_1foundation_1_1StlTriangle.html">StlTriangle</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga19bedcf026cfa80bbe7700f25891ca36">vde::foundation::read_stl</a> (const std::string &amp;filepath)</td></tr>
<tr class="memdesc:ga19bedcf026cfa80bbe7700f25891ca36"><td class="mdescLeft">&#160;</td><td class="mdescRight">读取 STL 文件(自动检测格式) <a href="group__foundation.html#ga19bedcf026cfa80bbe7700f25891ca36">更多...</a><br /></td></tr>
<tr class="separator:ga19bedcf026cfa80bbe7700f25891ca36"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga47f7c33cd0e2a2f82cad758517a388a7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga47f7c33cd0e2a2f82cad758517a388a7">vde::foundation::write_stl</a> (const std::string &amp;filepath, const std::vector&lt; <a class="el" href="structvde_1_1foundation_1_1StlTriangle.html">StlTriangle</a> &gt; &amp;tris)</td></tr>
<tr class="memdesc:ga47f7c33cd0e2a2f82cad758517a388a7"><td class="mdescLeft">&#160;</td><td class="mdescRight">写入二进制 STL 文件 <a href="group__foundation.html#ga47f7c33cd0e2a2f82cad758517a388a7">更多...</a><br /></td></tr>
<tr class="separator:ga47f7c33cd0e2a2f82cad758517a388a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga3357e1dfba02250f2c6b85d276997253"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga3357e1dfba02250f2c6b85d276997253">vde::foundation::write_stl_ascii</a> (const std::string &amp;filepath, const std::vector&lt; <a class="el" href="structvde_1_1foundation_1_1StlTriangle.html">StlTriangle</a> &gt; &amp;tris)</td></tr>
<tr class="memdesc:ga3357e1dfba02250f2c6b85d276997253"><td class="mdescLeft">&#160;</td><td class="mdescRight">写入 ASCII STL 文件 <a href="group__foundation.html#ga3357e1dfba02250f2c6b85d276997253">更多...</a><br /></td></tr>
<tr class="separator:ga3357e1dfba02250f2c6b85d276997253"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1841f29d20da233610d643a5725179bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">exact::Orientation</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga1841f29d20da233610d643a5725179bc">vde::foundation::orient</a> (const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;a, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;b, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;c)</td></tr>
<tr class="memdesc:ga1841f29d20da233610d643a5725179bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">二维定向测试便捷封装 <a href="group__foundation.html#ga1841f29d20da233610d643a5725179bc">更多...</a><br /></td></tr>
<tr class="separator:ga1841f29d20da233610d643a5725179bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0de768376e4db52c1549ae6c046e9909"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">exact::Orientation</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga0de768376e4db52c1549ae6c046e9909">vde::foundation::orient</a> (const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;a, const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;b, const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;c, const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;d)</td></tr>
<tr class="memdesc:ga0de768376e4db52c1549ae6c046e9909"><td class="mdescLeft">&#160;</td><td class="mdescRight">三维定向测试便捷封装 <a href="group__foundation.html#ga0de768376e4db52c1549ae6c046e9909">更多...</a><br /></td></tr>
<tr class="separator:ga0de768376e4db52c1549ae6c046e9909"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga0742be5b7fbe28e2dca498afb9ec99af"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__foundation.html#gaf44d45ba6402f725ee5d2cf828e25588">exact::CircleTest</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__foundation.html#ga0742be5b7fbe28e2dca498afb9ec99af">vde::foundation::in_circle</a> (const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;a, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;b, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;c, const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;d)</td></tr>
<tr class="memdesc:ga0742be5b7fbe28e2dca498afb9ec99af"><td class="mdescLeft">&#160;</td><td class="mdescRight">圆内测试便捷封装 <a href="group__foundation.html#ga0742be5b7fbe28e2dca498afb9ec99af">更多...</a><br /></td></tr>
<tr class="separator:ga0742be5b7fbe28e2dca498afb9ec99af"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<p>数学类型、公差系统、精确谓词、文件 I/O、序列化 </p>
<p>基础模块提供 VDE 引擎的核心基础设施:</p><ul>
<li>数学类型定义(点、向量、矩阵)</li>
<li>精确几何谓词(自适应双精度 + GMP 可选后端)</li>
<li>区间算术验证</li>
<li>分层容差管理</li>
<li>内存池分配</li>
<li>文件 I/OSTL、OBJ、PLY、glTF</li>
<li>格式化工具与序列化</li>
</ul>
<p>提供整个引擎使用的底层基础设施。 </p>
<h2 class="groupheader">类型定义说明</h2>
<a id="gad0fa8cf732073ffea1e2d10400ec8d26"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gad0fa8cf732073ffea1e2d10400ec8d26">&#9670;&nbsp;</a></span>Point</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t Dim&gt; </div>
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="group__foundation.html#gad0fa8cf732073ffea1e2d10400ec8d26">vde::foundation::Point</a> = typedef Eigen::Matrix&lt;T, Dim, 1&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p>通用 N 维点类型(使用 Eigen 列向量) </p>
<dl class="tparams"><dt>模板参数</dt><dd>
<table class="tparams">
<tr><td class="paramname">T</td><td>标量类型(double, float 等) </td></tr>
<tr><td class="paramname">Dim</td><td>维度 </td></tr>
</table>
</dd>
</dl>
<p class="definition">在文件 <a class="el" href="math__types_8h_source.html">math_types.h</a><a class="el" href="math__types_8h_source.html#l00017">17</a> 行定义.</p>
</div>
</div>
<a id="ga835975ee722dbebc123fdff3c95728c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga835975ee722dbebc123fdff3c95728c2">&#9670;&nbsp;</a></span>Vector</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T , size_t Dim&gt; </div>
<table class="memname">
<tr>
<td class="memname">using <a class="el" href="group__foundation.html#ga835975ee722dbebc123fdff3c95728c2">vde::foundation::Vector</a> = typedef Eigen::Matrix&lt;T, Dim, 1&gt;</td>
</tr>
</table>
</div><div class="memdoc">
<p>通用 N 维向量类型(与 Point 相同的列向量表示) </p>
<p>虽然类型相同,但语义上区分几何点(位置)和向量(方向/位移)。</p>
<dl class="tparams"><dt>模板参数</dt><dd>
<table class="tparams">
<tr><td class="paramname">T</td><td>标量类型 </td></tr>
<tr><td class="paramname">Dim</td><td>维度 </td></tr>
</table>
</dd>
</dl>
<p class="definition">在文件 <a class="el" href="math__types_8h_source.html">math_types.h</a><a class="el" href="math__types_8h_source.html#l00030">30</a> 行定义.</p>
</div>
</div>
<h2 class="groupheader">枚举类型说明</h2>
<a id="gaf44d45ba6402f725ee5d2cf828e25588"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf44d45ba6402f725ee5d2cf828e25588">&#9670;&nbsp;</a></span>CircleTest</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__foundation.html#gaf44d45ba6402f725ee5d2cf828e25588">vde::foundation::exact::CircleTest</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>圆测试结果 </p>
<p>判断点 d 相对于三角形 abc 外接圆的位置。 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="ggaf44d45ba6402f725ee5d2cf828e25588a9b6d3000134648fc9f1e71094ae0847d"></a>Inside&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ggaf44d45ba6402f725ee5d2cf828e25588a521c36a31c2762741cf0f8890cbe05e3"></a>On&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ggaf44d45ba6402f725ee5d2cf828e25588a76fbf0ccd7fcd64879c2ff2119dc15a4"></a>Outside&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">在文件 <a class="el" href="exact__predicates_8h_source.html">exact_predicates.h</a><a class="el" href="exact__predicates_8h_source.html#l00022">22</a> 行定义.</p>
</div>
</div>
<a id="ga856bcf915448b737fbb1d73db2c10a85"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga856bcf915448b737fbb1d73db2c10a85">&#9670;&nbsp;</a></span>ErrorCode</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__foundation.html#ga856bcf915448b737fbb1d73db2c10a85">vde::foundation::ErrorCode</a> : int32_t</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>全局错误码枚举 </p>
<p>VDE 引擎中所有函数可能返回的错误状态码。 成功用 kSuccess(0) 表示,非零值表示各类错误。 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85a8c632159fa131f09d04f94e3cbcd8782"></a>kSuccess&#160;</td><td class="fielddoc"><p>操作成功完成,无错误 </p>
</td></tr>
<tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85a80fdc050363ea6925fa2e7eb7f0a94a0"></a>kInvalidArgument&#160;</td><td class="fielddoc"><p>传入参数无效(空指针、越界、非法值等) </p>
</td></tr>
<tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85ac4283c91ae25b26dd77c5030baca028e"></a>kInvalidGeometry&#160;</td><td class="fielddoc"><p>输入几何数据不合法(自交、非流形、退化等) </p>
</td></tr>
<tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85af8c2095f04b60f2ec0ca8fb825a94bf0"></a>kDegenerateCase&#160;</td><td class="fielddoc"><p>退化情况(共线、共面等导致无法确定唯一解) </p>
</td></tr>
<tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85ae8024a6eeff9d90cc3babff8acaec9c9"></a>kNotImplemented&#160;</td><td class="fielddoc"><p>功能尚未实现 </p>
</td></tr>
<tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85a631fe1d70108dee6ae7d6acde27f76ef"></a>kNumericalError&#160;</td><td class="fielddoc"><p>数值计算误差超出容差范围 </p>
</td></tr>
<tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85ab681eacb215899549d45805f02eeb40c"></a>kOutOfMemory&#160;</td><td class="fielddoc"><p>内存分配失败 </p>
</td></tr>
<tr><td class="fieldname"><a id="gga856bcf915448b737fbb1d73db2c10a85afcd417a134c251034b0d61b07c826394"></a>kInternalError&#160;</td><td class="fielddoc"><p>内部逻辑错误(不应出现的情况) </p>
</td></tr>
</table>
<p class="definition">在文件 <a class="el" href="error__codes_8h_source.html">error_codes.h</a><a class="el" href="error__codes_8h_source.html#l00014">14</a> 行定义.</p>
</div>
</div>
<a id="gae42a60a99e11250a45ab0de45970c95f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae42a60a99e11250a45ab0de45970c95f">&#9670;&nbsp;</a></span>Orientation</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">vde::foundation::exact::Orientation</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>二维定向测试结果 </p>
<p>判断三点构成的三角形的定向(顺时针 / 逆时针 / 共线)。 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="ggae42a60a99e11250a45ab0de45970c95faba360a794737bcc8657a5b6e870d7ba8"></a>Clockwise&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ggae42a60a99e11250a45ab0de45970c95fa8f23635f9ec49db2161fc5cddf033a79"></a>CounterClockwise&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="ggae42a60a99e11250a45ab0de45970c95fa817d9fd9977363770196b7b64da74bbb"></a>Collinear&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">在文件 <a class="el" href="exact__predicates_8h_source.html">exact_predicates.h</a><a class="el" href="exact__predicates_8h_source.html#l00013">13</a> 行定义.</p>
</div>
</div>
<h2 class="groupheader">函数说明</h2>
<a id="gabe62e4bbbb46304e5df75cf773269029"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabe62e4bbbb46304e5df75cf773269029">&#9670;&nbsp;</a></span>fmt_double()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string vde::foundation::fmt_double </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>v</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>precision</em> = <code>12</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>以 CAD 级别精度格式化双精度浮点数 </p>
<p>输出科学计数法字符串,保证 12 位有效数字,满足 CAD 数据交换精度要求。 NaN 被格式化为 "0.0"Inf/ -Inf 被裁剪为安全边界值。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">v</td><td>要格式化的双精度数 </td></tr>
<tr><td class="paramname">precision</td><td>有效数字位数(默认 12 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>格式化后的字符串,如 "1.234567890123e+02"</dd></dl>
<dl class="section note"><dt>注解</dt><dd>总是确保指数部分带符号(如 "e+00" 而非 "e00"),便于解析器统一处理</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> s = <a class="code" href="group__foundation.html#gabe62e4bbbb46304e5df75cf773269029">fmt_double</a>(3.14159265358979);</div>
<div class="line"><span class="comment">// s == &quot;3.141592653590e+00&quot;</span></div>
<div class="ttc" id="agroup__foundation_html_gabe62e4bbbb46304e5df75cf773269029"><div class="ttname"><a href="group__foundation.html#gabe62e4bbbb46304e5df75cf773269029">vde::foundation::fmt_double</a></div><div class="ttdeci">std::string fmt_double(double v, int precision=12)</div><div class="ttdoc">以 CAD 级别精度格式化双精度浮点数</div><div class="ttdef"><b>Definition:</b> <a href="format__utils_8h_source.html#l00031">format_utils.h:31</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#gab2f1e3f24e1a358c3edabfb4fd3eb8a5" title="IGES 格式实数输出">fmt_iges_real</a>, <a class="el" href="group__foundation.html#ga28a1536a709ef0b632f301375e081c98" title="格式化三维点为逗号分隔字符串">fmt_point</a> </dd></dl>
<p class="definition">在文件 <a class="el" href="format__utils_8h_source.html">format_utils.h</a><a class="el" href="format__utils_8h_source.html#l00031">31</a> 行定义.</p>
<p class="reference">被这些函数引用 <a class="el" href="format__utils_8h_source.html#l00063">vde::foundation::fmt_iges_real()</a> , 以及 <a class="el" href="format__utils_8h_source.html#l00088">vde::foundation::fmt_point()</a>.</p>
</div>
</div>
<a id="gab2f1e3f24e1a358c3edabfb4fd3eb8a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gab2f1e3f24e1a358c3edabfb4fd3eb8a5">&#9670;&nbsp;</a></span>fmt_iges_real()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string vde::foundation::fmt_iges_real </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>v</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"> = <code>12</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>IGES 格式实数输出 </p>
<p><a class="el" href="group__foundation.html#gabe62e4bbbb46304e5df75cf773269029" title="以 CAD 级别精度格式化双精度浮点数">fmt_double()</a> 相同,但使用 IGES 标准的 'D' 指数标记代替 'E'。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">v</td><td>要格式化的双精度数 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>IGES 格式字符串,如 "3.141592653590D+00"</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> s = <a class="code" href="group__foundation.html#gab2f1e3f24e1a358c3edabfb4fd3eb8a5">fmt_iges_real</a>(3.14159265358979);</div>
<div class="line"><span class="comment">// s == &quot;3.141592653590D+00&quot;</span></div>
<div class="ttc" id="agroup__foundation_html_gab2f1e3f24e1a358c3edabfb4fd3eb8a5"><div class="ttname"><a href="group__foundation.html#gab2f1e3f24e1a358c3edabfb4fd3eb8a5">vde::foundation::fmt_iges_real</a></div><div class="ttdeci">std::string fmt_iges_real(double v, int=12)</div><div class="ttdoc">IGES 格式实数输出</div><div class="ttdef"><b>Definition:</b> <a href="format__utils_8h_source.html#l00063">format_utils.h:63</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#gabe62e4bbbb46304e5df75cf773269029" title="以 CAD 级别精度格式化双精度浮点数">fmt_double</a> </dd></dl>
<p class="definition">在文件 <a class="el" href="format__utils_8h_source.html">format_utils.h</a><a class="el" href="format__utils_8h_source.html#l00063">63</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="format__utils_8h_source.html#l00031">vde::foundation::fmt_double()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="format__utils_8h_source.html#l00088">vde::foundation::fmt_point()</a>.</p>
</div>
</div>
<a id="ga28a1536a709ef0b632f301375e081c98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga28a1536a709ef0b632f301375e081c98">&#9670;&nbsp;</a></span>fmt_point()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string vde::foundation::fmt_point </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">core::Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>p</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>use_d</em> = <code>false</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>格式化三维点为逗号分隔字符串 </p>
<p>输出 "x,y,z" 形式,常用于 IGES/STEP/OBJ 等文本格式的顶点坐标行。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">p</td><td>三维点 </td></tr>
<tr><td class="paramname">use_d</td><td>若为 true,使用 IGES 风格 D 指数标记 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>逗号分隔的坐标字符串</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> p(1.0, 2.5, -3.14);</div>
<div class="line"><span class="keyword">auto</span> s = <a class="code" href="group__foundation.html#ga28a1536a709ef0b632f301375e081c98">fmt_point</a>(p);</div>
<div class="line"><span class="comment">// s == &quot;1.000000000000e+00,2.500000000000e+00,-3.140000000000e+00&quot;</span></div>
<div class="ttc" id="agroup__foundation_html_ga28a1536a709ef0b632f301375e081c98"><div class="ttname"><a href="group__foundation.html#ga28a1536a709ef0b632f301375e081c98">vde::foundation::fmt_point</a></div><div class="ttdeci">std::string fmt_point(const core::Point3D &amp;p, bool use_d=false)</div><div class="ttdoc">格式化三维点为逗号分隔字符串</div><div class="ttdef"><b>Definition:</b> <a href="format__utils_8h_source.html#l00088">format_utils.h:88</a></div></div>
<div class="ttc" id="anamespacevde_1_1foundation_html_a5897423053feaa32d249be526e9a1850"><div class="ttname"><a href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">vde::foundation::Point3D</a></div><div class="ttdeci">Point&lt; double, 3 &gt; Point3D</div><div class="ttdoc">双精度三维点</div><div class="ttdef"><b>Definition:</b> <a href="math__types_8h_source.html#l00043">math_types.h:43</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#gabe62e4bbbb46304e5df75cf773269029" title="以 CAD 级别精度格式化双精度浮点数">fmt_double</a>, <a class="el" href="group__foundation.html#gab2f1e3f24e1a358c3edabfb4fd3eb8a5" title="IGES 格式实数输出">fmt_iges_real</a> </dd></dl>
<p class="definition">在文件 <a class="el" href="format__utils_8h_source.html">format_utils.h</a><a class="el" href="format__utils_8h_source.html#l00088">88</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="format__utils_8h_source.html#l00031">vde::foundation::fmt_double()</a> , 以及 <a class="el" href="format__utils_8h_source.html#l00063">vde::foundation::fmt_iges_real()</a>.</p>
</div>
</div>
<a id="ga4c722653de4d2a636ec36840bf570d9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4c722653de4d2a636ec36840bf570d9b">&#9670;&nbsp;</a></span>format_iges_line()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string vde::foundation::format_iges_line </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char&#160;</td>
<td class="paramname"><em>section_char</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>seq</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>格式化 IGES 段落行 </p>
<p>生成一条完整的 IGES 80 列记录行:72 列数据 + 8 列序号(section_char + 7 位数字)。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>数据内容(最多 72 字符,超出截断) </td></tr>
<tr><td class="paramname">section_char</td><td>段落标识符(如 'P' 参数段, 'D' 目录段) </td></tr>
<tr><td class="paramname">seq</td><td>行序号(1-based </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>完整 IGES 行(含换行符),共 81 字符</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> line = <a class="code" href="group__foundation.html#ga4c722653de4d2a636ec36840bf570d9b">format_iges_line</a>(<span class="stringliteral">&quot;110,1.0,2.0,3.0;&quot;</span>, <span class="charliteral">&#39;P&#39;</span>, 1);</div>
<div class="line"><span class="comment">// 输出: &quot;110,1.0,2.0,3.0; P0000001\n&quot;</span></div>
<div class="ttc" id="agroup__foundation_html_ga4c722653de4d2a636ec36840bf570d9b"><div class="ttname"><a href="group__foundation.html#ga4c722653de4d2a636ec36840bf570d9b">vde::foundation::format_iges_line</a></div><div class="ttdeci">std::string format_iges_line(const std::string &amp;data, char section_char, int seq)</div><div class="ttdoc">格式化 IGES 段落行</div><div class="ttdef"><b>Definition:</b> <a href="format__utils_8h_source.html#l00130">format_utils.h:130</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga0966ff9f82904704cbf6fb6325179ec5" title="将字符串填充到恰好 72 个字符">pad72</a> </dd></dl>
<p class="definition">在文件 <a class="el" href="format__utils_8h_source.html">format_utils.h</a><a class="el" href="format__utils_8h_source.html#l00130">130</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="format__utils_8h_source.html#l00105">vde::foundation::pad72()</a>.</p>
</div>
</div>
<a id="gadc741ceaf8679847e2c220c5c1b1dc77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gadc741ceaf8679847e2c220c5c1b1dc77">&#9670;&nbsp;</a></span>in_circle() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__foundation.html#gaf44d45ba6402f725ee5d2cf828e25588">CircleTest</a> vde::foundation::exact::in_circle </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>c</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>d</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>自适应精度圆内测试(In-Circle Test </p>
<p>判断点 d 是否在三角形 abc 的外接圆内部、边界上或外部。 等价于计算 4×4 行列式的符号。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>三角形第一个顶点 </td></tr>
<tr><td class="paramname">b</td><td>三角形第二个顶点 </td></tr>
<tr><td class="paramname">c</td><td>三角形第三个顶点 </td></tr>
<tr><td class="paramname">d</td><td>待测试点 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="group__foundation.html#ggaf44d45ba6402f725ee5d2cf828e25588a9b6d3000134648fc9f1e71094ae0847d">CircleTest::Inside</a> 若 d 在三角形外接圆内部 </dd>
<dd>
<a class="el" href="group__foundation.html#ggaf44d45ba6402f725ee5d2cf828e25588a521c36a31c2762741cf0f8890cbe05e3">CircleTest::On</a> 若 d 恰好在三角形外接圆上 </dd>
<dd>
<a class="el" href="group__foundation.html#ggaf44d45ba6402f725ee5d2cf828e25588a76fbf0ccd7fcd64879c2ff2119dc15a4">CircleTest::Outside</a> 若 d 在三角形外接圆外部</dd></dl>
<dl class="section note"><dt>注解</dt><dd>Delaunay 三角剖分的空圆性质检查核心原语 </dd></dl>
<dl class="section pre"><dt>前置条件</dt><dd>三点 a、b、c 不共线</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> a(0,0), b(2,0), c(0,2);</div>
<div class="line"><a class="code" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> d(0.5, 0.5); <span class="comment">// 在外接圆内部</span></div>
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="group__foundation.html#gadc741ceaf8679847e2c220c5c1b1dc77">exact::in_circle</a>(a, b, c, d);</div>
<div class="line"><span class="comment">// result == CircleTest::Inside</span></div>
<div class="ttc" id="agroup__foundation_html_gadc741ceaf8679847e2c220c5c1b1dc77"><div class="ttname"><a href="group__foundation.html#gadc741ceaf8679847e2c220c5c1b1dc77">vde::foundation::exact::in_circle</a></div><div class="ttdeci">CircleTest in_circle(const Point2D &amp;a, const Point2D &amp;b, const Point2D &amp;c, const Point2D &amp;d)</div><div class="ttdoc">自适应精度圆内测试(In-Circle Test</div></div>
<div class="ttc" id="anamespacevde_1_1foundation_html_a1f8d721ed8c88d2b5716941d311f5945"><div class="ttname"><a href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">vde::foundation::Point2D</a></div><div class="ttdeci">Point&lt; double, 2 &gt; Point2D</div><div class="ttdoc">双精度二维点</div><div class="ttdef"><b>Definition:</b> <a href="math__types_8h_source.html#l00041">math_types.h:41</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga828aee5891f4f4059932951e63f116e9" title="自适应精度二维定向测试(Shewchuk 算法)">orient_2d</a>, <a class="el" href="group__foundation.html#ga2047f44bf458da6b9ea19fdda1a7a2a7" title="自适应精度三维定向测试">orient_3d</a> </dd></dl>
<p class="reference">被这些函数引用 <a class="el" href="exact__predicates_8h_source.html#l00147">vde::foundation::AdaptiveDouble::in_circle()</a>.</p>
</div>
</div>
<a id="ga0742be5b7fbe28e2dca498afb9ec99af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0742be5b7fbe28e2dca498afb9ec99af">&#9670;&nbsp;</a></span>in_circle() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__foundation.html#gaf44d45ba6402f725ee5d2cf828e25588">exact::CircleTest</a> vde::foundation::in_circle </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>c</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>d</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>圆内测试便捷封装 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a,b,c</td><td>三角形三顶点 </td></tr>
<tr><td class="paramname">d</td><td>测试点 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>CircleTest::Inside / On / Outside </dd></dl>
<p class="definition">在文件 <a class="el" href="predicates_8h_source.html">predicates.h</a><a class="el" href="predicates_8h_source.html#l00100">100</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="predicates_8h_source.html#l00049">vde::foundation::Predicates::in_circle()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="predicates_8h_source.html#l00049">vde::foundation::Predicates::in_circle()</a>.</p>
</div>
</div>
<a id="ga1841f29d20da233610d643a5725179bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1841f29d20da233610d643a5725179bc">&#9670;&nbsp;</a></span>orient() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">exact::Orientation</a> vde::foundation::orient </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>c</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>二维定向测试便捷封装 </p>
<p>使用 Predicates::orient_2d,无需指定后端。 这是推荐的对外 API。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a,b,c</td><td>三个二维点 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>Orientation::Clockwise / CounterClockwise / Collinear</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespacevde_1_1foundation.html">vde::foundation</a>;</div>
<div class="line"><a class="code" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> a(0,0), b(1,0), c(0,1);</div>
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="group__foundation.html#ga1841f29d20da233610d643a5725179bc">orient</a>(a, b, c); <span class="comment">// CounterClockwise</span></div>
<div class="ttc" id="agroup__foundation_html_ga1841f29d20da233610d643a5725179bc"><div class="ttname"><a href="group__foundation.html#ga1841f29d20da233610d643a5725179bc">vde::foundation::orient</a></div><div class="ttdeci">exact::Orientation orient(const Point2D &amp;a, const Point2D &amp;b, const Point2D &amp;c)</div><div class="ttdoc">二维定向测试便捷封装</div><div class="ttdef"><b>Definition:</b> <a href="predicates_8h_source.html#l00074">predicates.h:74</a></div></div>
<div class="ttc" id="anamespacevde_1_1foundation_html"><div class="ttname"><a href="namespacevde_1_1foundation.html">vde::foundation</a></div><div class="ttdoc">自适应双精度谓词后端(默认)</div><div class="ttdef"><b>Definition:</b> <a href="error__codes_8h_source.html#l00004">error_codes.h:4</a></div></div>
</div><!-- fragment -->
<p class="definition">在文件 <a class="el" href="predicates_8h_source.html">predicates.h</a><a class="el" href="predicates_8h_source.html#l00074">74</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="predicates_8h_source.html#l00031">vde::foundation::Predicates::orient_2d()</a>.</p>
</div>
</div>
<a id="ga0de768376e4db52c1549ae6c046e9909"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0de768376e4db52c1549ae6c046e9909">&#9670;&nbsp;</a></span>orient() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">exact::Orientation</a> vde::foundation::orient </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>c</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>d</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>三维定向测试便捷封装 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a,b,c</td><td>定义平面的三点 </td></tr>
<tr><td class="paramname">d</td><td>测试点 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>Orientation::Clockwise / CounterClockwise / Collinear </dd></dl>
<p class="definition">在文件 <a class="el" href="predicates_8h_source.html">predicates.h</a><a class="el" href="predicates_8h_source.html#l00087">87</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="predicates_8h_source.html#l00039">vde::foundation::Predicates::orient_3d()</a>.</p>
</div>
</div>
<a id="ga828aee5891f4f4059932951e63f116e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga828aee5891f4f4059932951e63f116e9">&#9670;&nbsp;</a></span>orient_2d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">Orientation</a> vde::foundation::exact::orient_2d </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> &amp;&#160;</td>
<td class="paramname"><em>c</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>自适应精度二维定向测试(Shewchuk 算法) </p>
<p>判断点 a, b, c 的定向。使用自适应浮点精度: 先用双精度计算行列式,若结果不可靠则逐步提高精度,直至确定符号。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>第一个点 </td></tr>
<tr><td class="paramname">b</td><td>第二个点 </td></tr>
<tr><td class="paramname">c</td><td>第三个点 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95faba360a794737bcc8657a5b6e870d7ba8">Orientation::Clockwise</a> 若 a→b→c 顺时针 </dd>
<dd>
<a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95fa8f23635f9ec49db2161fc5cddf033a79">Orientation::CounterClockwise</a> 若 a→b→c 逆时针 </dd>
<dd>
<a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95fa817d9fd9977363770196b7b64da74bbb">Orientation::Collinear</a> 若三点共线</dd></dl>
<dl class="section note"><dt>注解</dt><dd>Delaunay 三角剖分、凸包计算等几何算法的核心原语 </dd></dl>
<dl class="section warning"><dt>警告</dt><dd>输入点坐标必须为有限值,NaN/Inf 会导致未定义行为</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="namespacevde_1_1foundation.html#a1f8d721ed8c88d2b5716941d311f5945">Point2D</a> a(0,0), b(1,0), c(0,1);</div>
<div class="line"><span class="keyword">auto</span> ori = <a class="code" href="group__foundation.html#ga828aee5891f4f4059932951e63f116e9">exact::orient_2d</a>(a, b, c);</div>
<div class="line"><span class="comment">// ori == Orientation::CounterClockwise</span></div>
<div class="ttc" id="agroup__foundation_html_ga828aee5891f4f4059932951e63f116e9"><div class="ttname"><a href="group__foundation.html#ga828aee5891f4f4059932951e63f116e9">vde::foundation::exact::orient_2d</a></div><div class="ttdeci">Orientation orient_2d(const Point2D &amp;a, const Point2D &amp;b, const Point2D &amp;c)</div><div class="ttdoc">自适应精度二维定向测试(Shewchuk 算法)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga2047f44bf458da6b9ea19fdda1a7a2a7" title="自适应精度三维定向测试">orient_3d</a>, <a class="el" href="group__foundation.html#gadc741ceaf8679847e2c220c5c1b1dc77" title="自适应精度圆内测试(In-Circle Test">in_circle</a> </dd></dl>
<p class="reference">被这些函数引用 <a class="el" href="exact__predicates_8h_source.html#l00127">vde::foundation::AdaptiveDouble::orient_2d()</a> , 以及 <a class="el" href="predicates_8h_source.html#l00031">vde::foundation::Predicates::orient_2d()</a>.</p>
</div>
</div>
<a id="ga4082e53f9e3afe884a6ea7b2005abfd1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga4082e53f9e3afe884a6ea7b2005abfd1">&#9670;&nbsp;</a></span>orient_2d_interval()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1foundation_1_1Interval.html">Interval</a> vde::foundation::orient_2d_interval </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>ax</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>ay</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>bx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>by</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cy</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>二维定向行列式的区间验证 </p>
<p>用区间算术计算 orient_2d 行列式,结果区间用于判断双精度是否可靠。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ax,ay</td><td>点 a 的坐标 </td></tr>
<tr><td class="paramname">bx,by</td><td>点 b 的坐标 </td></tr>
<tr><td class="paramname">cx,cy</td><td>点 c 的坐标 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>行列式的区间值</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga90b3b7375e3ad4e30cf60a286515d95b" title="使用区间算术验证 orient_2d 结果">orient_2d_verified</a> </dd></dl>
<p class="definition">在文件 <a class="el" href="interval_8h_source.html">interval.h</a><a class="el" href="interval_8h_source.html#l00200">200</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="interval_8h_source.html#l00181">vde::foundation::Interval::from_coord()</a>.</p>
<p class="reference">被这些函数引用 <a class="el" href="interval_8h_source.html#l00232">vde::foundation::orient_2d_verified()</a>.</p>
</div>
</div>
<a id="ga90b3b7375e3ad4e30cf60a286515d95b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga90b3b7375e3ad4e30cf60a286515d95b">&#9670;&nbsp;</a></span>orient_2d_verified()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int vde::foundation::orient_2d_verified </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>ax</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>ay</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>bx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>by</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cy</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>使用区间算术验证 orient_2d 结果 </p>
<p>若双精度计算结果接近零,调用此函数进行区间验证。 若区间不跨越零,则结果可靠;否则需要升级到精确算术。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ax,ay</td><td>点 a 的坐标 </td></tr>
<tr><td class="paramname">bx,by</td><td>点 b 的坐标 </td></tr>
<tr><td class="paramname">cx,cy</td><td>点 c 的坐标 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>-1 确认 Clockwise </dd>
<dd>
0 无法确定(需升级到 GMP / 自适应精度) </dd>
<dd>
1 确认 CounterClockwise</dd></dl>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> result = <a class="code" href="group__foundation.html#ga90b3b7375e3ad4e30cf60a286515d95b">orient_2d_verified</a>(0.0, 0.0, 1.0, 1e-16, 2.0, 2e-16);</div>
<div class="line"><span class="keywordflow">if</span> (result == 0) {</div>
<div class="line"> <span class="comment">// 双精度不可靠,需要精确算术</span></div>
<div class="line"> <span class="keyword">auto</span> ori = <a class="code" href="group__foundation.html#ga828aee5891f4f4059932951e63f116e9">GmpExact::orient_2d</a>(a, b, c);</div>
<div class="line">}</div>
<div class="ttc" id="agroup__foundation_html_ga90b3b7375e3ad4e30cf60a286515d95b"><div class="ttname"><a href="group__foundation.html#ga90b3b7375e3ad4e30cf60a286515d95b">vde::foundation::orient_2d_verified</a></div><div class="ttdeci">int orient_2d_verified(double ax, double ay, double bx, double by, double cx, double cy)</div><div class="ttdoc">使用区间算术验证 orient_2d 结果</div><div class="ttdef"><b>Definition:</b> <a href="interval_8h_source.html#l00232">interval.h:232</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga4082e53f9e3afe884a6ea7b2005abfd1" title="二维定向行列式的区间验证">orient_2d_interval</a>, <a class="el" href="classvde_1_1foundation_1_1Interval.html#abf6c26f19ac4454879cdc7191e7e0b8b" title="确定性区间比较">Interval::cmp</a> </dd></dl>
<p class="definition">在文件 <a class="el" href="interval_8h_source.html">interval.h</a><a class="el" href="interval_8h_source.html#l00232">232</a> 行定义.</p>
<p class="reference">引用了 <a class="el" href="interval_8h_source.html#l00096">vde::foundation::Interval::cmp()</a> , 以及 <a class="el" href="interval_8h_source.html#l00200">vde::foundation::orient_2d_interval()</a>.</p>
</div>
</div>
<a id="ga2047f44bf458da6b9ea19fdda1a7a2a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2047f44bf458da6b9ea19fdda1a7a2a7">&#9670;&nbsp;</a></span>orient_3d()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__foundation.html#gae42a60a99e11250a45ab0de45970c95f">Orientation</a> vde::foundation::exact::orient_3d </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>c</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> &amp;&#160;</td>
<td class="paramname"><em>d</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>自适应精度三维定向测试 </p>
<p>判断点 a, b, c, d 的定向(即点 d 在平面 abc 的哪一侧)。 等价于计算四面体 abcd 的有向体积的符号。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>第一个点 </td></tr>
<tr><td class="paramname">b</td><td>第二个点 </td></tr>
<tr><td class="paramname">c</td><td>第三个点 </td></tr>
<tr><td class="paramname">d</td><td>第四个点(测试点) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95fa8f23635f9ec49db2161fc5cddf033a79">Orientation::CounterClockwise</a> 若 d 在平面 abc 上方(按右手法则) </dd>
<dd>
<a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95faba360a794737bcc8657a5b6e870d7ba8">Orientation::Clockwise</a> 若 d 在平面 abc 下方 </dd>
<dd>
<a class="el" href="group__foundation.html#ggae42a60a99e11250a45ab0de45970c95fa817d9fd9977363770196b7b64da74bbb">Orientation::Collinear</a> 若四点共面</dd></dl>
<dl class="section note"><dt>注解</dt><dd>三维 Delaunay 剖分和凸包计算的核心原语</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="namespacevde_1_1foundation.html#a5897423053feaa32d249be526e9a1850">Point3D</a> a(0,0,0), b(1,0,0), c(0,1,0), d(0,0,1);</div>
<div class="line"><span class="keyword">auto</span> ori = <a class="code" href="group__foundation.html#ga2047f44bf458da6b9ea19fdda1a7a2a7">exact::orient_3d</a>(a, b, c, d);</div>
<div class="line"><span class="comment">// ori == Orientation::CounterClockwise</span></div>
<div class="ttc" id="agroup__foundation_html_ga2047f44bf458da6b9ea19fdda1a7a2a7"><div class="ttname"><a href="group__foundation.html#ga2047f44bf458da6b9ea19fdda1a7a2a7">vde::foundation::exact::orient_3d</a></div><div class="ttdeci">Orientation orient_3d(const Point3D &amp;a, const Point3D &amp;b, const Point3D &amp;c, const Point3D &amp;d)</div><div class="ttdoc">自适应精度三维定向测试</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga828aee5891f4f4059932951e63f116e9" title="自适应精度二维定向测试(Shewchuk 算法)">orient_2d</a>, <a class="el" href="group__foundation.html#gadc741ceaf8679847e2c220c5c1b1dc77" title="自适应精度圆内测试(In-Circle Test">in_circle</a> </dd></dl>
<p class="reference">被这些函数引用 <a class="el" href="exact__predicates_8h_source.html#l00136">vde::foundation::AdaptiveDouble::orient_3d()</a> , 以及 <a class="el" href="predicates_8h_source.html#l00039">vde::foundation::Predicates::orient_3d()</a>.</p>
</div>
</div>
<a id="ga0966ff9f82904704cbf6fb6325179ec5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga0966ff9f82904704cbf6fb6325179ec5">&#9670;&nbsp;</a></span>pad72()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">std::string vde::foundation::pad72 </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>s</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>将字符串填充到恰好 72 个字符 </p>
<p>IGES 格式中每条数据行固定为 72 字符宽。不足用空格补齐,超出则截断。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">s</td><td>输入字符串 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>恰好 72 字符的字符串(不足右侧补空格,超出截断)</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga4c722653de4d2a636ec36840bf570d9b" title="格式化 IGES 段落行">format_iges_line</a> </dd></dl>
<p class="definition">在文件 <a class="el" href="format__utils_8h_source.html">format_utils.h</a><a class="el" href="format__utils_8h_source.html#l00105">105</a> 行定义.</p>
<p class="reference">被这些函数引用 <a class="el" href="format__utils_8h_source.html#l00130">vde::foundation::format_iges_line()</a>.</p>
</div>
</div>
<a id="ga27a7d806cf76dc23ad6ac73ae3ce0338"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga27a7d806cf76dc23ad6ac73ae3ce0338">&#9670;&nbsp;</a></span>read_obj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html">ObjMeshData</a> vde::foundation::read_obj </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>读取 Wavefront OBJ 文件 </p>
<p>解析 ASCII OBJ 文件,支持以下 OBJ 特性:</p><ul>
<li>v(顶点)、vt(纹理坐标)、vn(法线)</li>
<li>f(面):支持三角面和任意多边形面</li>
<li>usemtl(材质名称)、g(组名)、o(对象名)</li>
<li># 注释行</li>
</ul>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>OBJ 文件路径 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>解析后的 <a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html" title="OBJ 文件解析结果数据结构">ObjMeshData</a></dd></dl>
<dl class="exception"><dt>异常</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>若文件无法打开或格式错误</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>不解析 MTL 材质文件,仅记录 usemtl 指令中的材质名称 </dd>
<dd>
面索引在内部转换为 0-based;若文件中使用相对索引(负值),自动转换为正向</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> data = <a class="code" href="group__foundation.html#ga27a7d806cf76dc23ad6ac73ae3ce0338">read_obj</a>(<span class="stringliteral">&quot;model.obj&quot;</span>);</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Vertices: &quot;</span> &lt;&lt; data.vertices.size() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Faces: &quot;</span> &lt;&lt; data.faces.size() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="ttc" id="agroup__foundation_html_ga27a7d806cf76dc23ad6ac73ae3ce0338"><div class="ttname"><a href="group__foundation.html#ga27a7d806cf76dc23ad6ac73ae3ce0338">vde::foundation::read_obj</a></div><div class="ttdeci">ObjMeshData read_obj(const std::string &amp;filepath)</div><div class="ttdoc">读取 Wavefront OBJ 文件</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga3f00800cc4a2d9901744427c0920f1b1" title="写入 Wavefront OBJ 文件">write_obj</a>, <a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html" title="OBJ 文件解析结果数据结构">ObjMeshData</a> </dd></dl>
</div>
</div>
<a id="ga2f3d702e9426a55baf9da37244d26483"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga2f3d702e9426a55baf9da37244d26483">&#9670;&nbsp;</a></span>read_ply()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">mesh::HalfedgeMesh</a> vde::foundation::read_ply </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>读取 PLY 文件(Stanford Polygon Format </p>
<p>解析 PLY 格式文件,支持 ASCII 和二进制(小端序)两种编码。 支持的 PLY 元素:vertex(位置、法线、颜色)、face(顶点索引列表)。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>PLY 文件路径 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>解析后的半边网格</dd></dl>
<dl class="exception"><dt>异常</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>若文件无法打开、格式不支持或数据损坏</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>自动检测文件头部 magic number 判断 ASCII / 二进制格式 </dd>
<dd>
二进制格式仅支持小端序(little-endian </dd>
<dd>
返回类型为 HalfedgeMesh,内部自动建立半边拓扑</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> mesh = <a class="code" href="group__foundation.html#ga2f3d702e9426a55baf9da37244d26483">read_ply</a>(<span class="stringliteral">&quot;scan.ply&quot;</span>);</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Vertices: &quot;</span> &lt;&lt; mesh.vertex_count() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Faces: &quot;</span> &lt;&lt; mesh.face_count() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="ttc" id="agroup__foundation_html_ga2f3d702e9426a55baf9da37244d26483"><div class="ttname"><a href="group__foundation.html#ga2f3d702e9426a55baf9da37244d26483">vde::foundation::read_ply</a></div><div class="ttdeci">mesh::HalfedgeMesh read_ply(const std::string &amp;filepath)</div><div class="ttdoc">读取 PLY 文件(Stanford Polygon Format</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga5601dbe30446f41c9a8f033b0b4f39ed" title="写入 PLY 文件(ASCII 格式)">write_ply</a> </dd></dl>
</div>
</div>
<a id="ga19bedcf026cfa80bbe7700f25891ca36"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga19bedcf026cfa80bbe7700f25891ca36">&#9670;&nbsp;</a></span>read_stl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="structvde_1_1foundation_1_1StlTriangle.html">StlTriangle</a>&gt; vde::foundation::read_stl </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>读取 STL 文件(自动检测格式) </p>
<p>通过检查文件头部的 80 字节判断二进制(含 triangle count 还是 ASCII(以 "solid" 开头)格式,然后选择对应解析器。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>STL 文件路径 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>三角形面片列表</dd></dl>
<dl class="exception"><dt>异常</dt><dd>
<table class="exception">
<tr><td class="paramname">std::runtime_error</td><td>若文件无法打开或格式无效</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>自动格式检测:二进制 STL 的 80 字节头后跟 4 字节三角形数量 </dd>
<dd>
ASCII STL 以 "solid name" 开头</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> tris = <a class="code" href="group__foundation.html#ga19bedcf026cfa80bbe7700f25891ca36">read_stl</a>(<span class="stringliteral">&quot;part.stl&quot;</span>);</div>
<div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;Triangles: &quot;</span> &lt;&lt; tris.size() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="ttc" id="agroup__foundation_html_ga19bedcf026cfa80bbe7700f25891ca36"><div class="ttname"><a href="group__foundation.html#ga19bedcf026cfa80bbe7700f25891ca36">vde::foundation::read_stl</a></div><div class="ttdeci">std::vector&lt; StlTriangle &gt; read_stl(const std::string &amp;filepath)</div><div class="ttdoc">读取 STL 文件(自动检测格式)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga47f7c33cd0e2a2f82cad758517a388a7" title="写入二进制 STL 文件">write_stl</a>, <a class="el" href="group__foundation.html#ga3357e1dfba02250f2c6b85d276997253" title="写入 ASCII STL 文件">write_stl_ascii</a> </dd></dl>
</div>
</div>
<a id="ga05a128dbc89f2e7ee633bdc640df6fe5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga05a128dbc89f2e7ee633bdc640df6fe5">&#9670;&nbsp;</a></span>write_brep_gltf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool vde::foundation::write_brep_gltf </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">brep::BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>model</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>tessellation_res</em> = <code>32</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>导出 B-Rep 模型为 GLB 格式(通过面片化) </p>
<p>将 B-Rep 模型的参数曲面离散化为三角网格后导出为 GLB。 曲面通过 tessellation_res 控制离散精度。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径(建议 .glb </td></tr>
<tr><td class="paramname">model</td><td>要导出的 B-Rep 模型 </td></tr>
<tr><td class="paramname">tessellation_res</td><td>每条边的离散段数(默认 32),越大越精确 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>true 导出成功 </dd>
<dd>
false 导出失败</dd></dl>
<div class="fragment"><div class="line">brep::BrepModel model = <span class="comment">// ...;</span></div>
<div class="line"><span class="comment">// 高精度曲面导出</span></div>
<div class="line"><span class="keywordtype">bool</span> ok = <a class="code" href="group__foundation.html#ga05a128dbc89f2e7ee633bdc640df6fe5">write_brep_gltf</a>(<span class="stringliteral">&quot;model.glb&quot;</span>, model, 64);</div>
<div class="ttc" id="agroup__foundation_html_ga05a128dbc89f2e7ee633bdc640df6fe5"><div class="ttname"><a href="group__foundation.html#ga05a128dbc89f2e7ee633bdc640df6fe5">vde::foundation::write_brep_gltf</a></div><div class="ttdeci">bool write_brep_gltf(const std::string &amp;filepath, const brep::BrepModel &amp;model, int tessellation_res=32)</div><div class="ttdoc">导出 B-Rep 模型为 GLB 格式(通过面片化)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga51de361e7a704ba10d0d34e006b9b1fd" title="导出网格为 glTF 2.0 / GLB 格式">write_gltf</a> </dd></dl>
</div>
</div>
<a id="ga51de361e7a704ba10d0d34e006b9b1fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga51de361e7a704ba10d0d34e006b9b1fd">&#9670;&nbsp;</a></span>write_gltf()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">bool vde::foundation::write_gltf </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">mesh::HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structvde_1_1foundation_1_1GltfOptions.html">GltfOptions</a> &amp;&#160;</td>
<td class="paramname"><em>options</em> = <code><a class="el" href="structvde_1_1foundation_1_1GltfOptions.html">GltfOptions</a>{}</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>导出网格为 glTF 2.0 / GLB 格式 </p>
<p>将 HalfedgeMesh 写入 glTF 2.0 规范文件。默认输出单文件 GLB 二进制格式, 可通过 <a class="el" href="structvde_1_1foundation_1_1GltfOptions.html" title="glTF 2.0 导出选项">GltfOptions</a> 控制输出格式和包含的属性。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径(.glb 或 .gltf) </td></tr>
<tr><td class="paramname">mesh</td><td>要导出的半边网格 </td></tr>
<tr><td class="paramname">options</td><td>导出选项(格式、法线、颜色等) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>true 导出成功 </dd>
<dd>
false 导出失败(文件无法创建等)</dd></dl>
<dl class="section note"><dt>注解</dt><dd>生成的 glTF 符合 2.0 规范,兼容 Blender、three.js、Unreal Engine 等工具</dd></dl>
<div class="fragment"><div class="line">mesh::HalfedgeMesh mesh = <span class="comment">// ...;</span></div>
<div class="line">GltfOptions opts;</div>
<div class="line">opts.binary = <span class="keyword">true</span>;</div>
<div class="line">opts.include_normals = <span class="keyword">true</span>;</div>
<div class="line"><span class="keywordtype">bool</span> ok = <a class="code" href="group__foundation.html#ga51de361e7a704ba10d0d34e006b9b1fd">write_gltf</a>(<span class="stringliteral">&quot;output.glb&quot;</span>, mesh, opts);</div>
<div class="ttc" id="agroup__foundation_html_ga51de361e7a704ba10d0d34e006b9b1fd"><div class="ttname"><a href="group__foundation.html#ga51de361e7a704ba10d0d34e006b9b1fd">vde::foundation::write_gltf</a></div><div class="ttdeci">bool write_gltf(const std::string &amp;filepath, const mesh::HalfedgeMesh &amp;mesh, const GltfOptions &amp;options=GltfOptions{})</div><div class="ttdoc">导出网格为 glTF 2.0 / GLB 格式</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga05a128dbc89f2e7ee633bdc640df6fe5" title="导出 B-Rep 模型为 GLB 格式(通过面片化)">write_brep_gltf</a>, <a class="el" href="structvde_1_1foundation_1_1GltfOptions.html" title="glTF 2.0 导出选项">GltfOptions</a> </dd></dl>
</div>
</div>
<a id="ga3f00800cc4a2d9901744427c0920f1b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3f00800cc4a2d9901744427c0920f1b1">&#9670;&nbsp;</a></span>write_obj()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde::foundation::write_obj </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html">ObjMeshData</a> &amp;&#160;</td>
<td class="paramname"><em>data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>写入 Wavefront OBJ 文件 </p>
<p><a class="el" href="structvde_1_1foundation_1_1ObjMeshData.html" title="OBJ 文件解析结果数据结构">ObjMeshData</a> 以 ASCII OBJ 格式写出,包含顶点、纹理坐标、 法线和面信息。材质名称通过注释嵌入。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径 </td></tr>
<tr><td class="paramname">data</td><td>要写出的网格数据</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>输出的面索引为 1-based(OBJ 标准)</dd></dl>
<div class="fragment"><div class="line">ObjMeshData data;</div>
<div class="line"><span class="comment">// ... 填充 data ...</span></div>
<div class="line"><a class="code" href="group__foundation.html#ga3f00800cc4a2d9901744427c0920f1b1">write_obj</a>(<span class="stringliteral">&quot;output.obj&quot;</span>, data);</div>
<div class="ttc" id="agroup__foundation_html_ga3f00800cc4a2d9901744427c0920f1b1"><div class="ttname"><a href="group__foundation.html#ga3f00800cc4a2d9901744427c0920f1b1">vde::foundation::write_obj</a></div><div class="ttdeci">void write_obj(const std::string &amp;filepath, const ObjMeshData &amp;data)</div><div class="ttdoc">写入 Wavefront OBJ 文件</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga27a7d806cf76dc23ad6ac73ae3ce0338" title="读取 Wavefront OBJ 文件">read_obj</a> </dd></dl>
</div>
</div>
<a id="ga5601dbe30446f41c9a8f033b0b4f39ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5601dbe30446f41c9a8f033b0b4f39ed">&#9670;&nbsp;</a></span>write_ply()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde::foundation::write_ply </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">mesh::HalfedgeMesh</a> &amp;&#160;</td>
<td class="paramname"><em>mesh</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>写入 PLY 文件(ASCII 格式) </p>
<p>将半边网格以 ASCII PLY 格式写出,包含顶点位置和面信息。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径 </td></tr>
<tr><td class="paramname">mesh</td><td>要导出的半边网格</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>输出的 PLY 为 ASCII 编码,易于人工阅读和编辑 </dd>
<dd>
若需要二进制输出以提高性能,请使用 <a class="el" href="classvde_1_1foundation_1_1BinarySerializer.html" title="二进制序列化器">BinarySerializer</a></dd></dl>
<div class="fragment"><div class="line">mesh::HalfedgeMesh mesh = <span class="comment">// ...;</span></div>
<div class="line"><a class="code" href="group__foundation.html#ga5601dbe30446f41c9a8f033b0b4f39ed">write_ply</a>(<span class="stringliteral">&quot;output.ply&quot;</span>, mesh);</div>
<div class="ttc" id="agroup__foundation_html_ga5601dbe30446f41c9a8f033b0b4f39ed"><div class="ttname"><a href="group__foundation.html#ga5601dbe30446f41c9a8f033b0b4f39ed">vde::foundation::write_ply</a></div><div class="ttdeci">void write_ply(const std::string &amp;filepath, const mesh::HalfedgeMesh &amp;mesh)</div><div class="ttdoc">写入 PLY 文件(ASCII 格式)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga2f3d702e9426a55baf9da37244d26483" title="读取 PLY 文件(Stanford Polygon Format">read_ply</a>, <a class="el" href="classvde_1_1foundation_1_1BinarySerializer.html" title="二进制序列化器">BinarySerializer</a> </dd></dl>
</div>
</div>
<a id="ga47f7c33cd0e2a2f82cad758517a388a7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga47f7c33cd0e2a2f82cad758517a388a7">&#9670;&nbsp;</a></span>write_stl()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde::foundation::write_stl </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="structvde_1_1foundation_1_1StlTriangle.html">StlTriangle</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>tris</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>写入二进制 STL 文件 </p>
<p>以紧凑的二进制格式写出 STL 三角形列表。 二进制 STL 为业界标准交换格式,文件体积小、读写快。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径 </td></tr>
<tr><td class="paramname">tris</td><td>三角形面片列表</td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>二进制 STL 格式:80 字节头 + 4 字节三角形数 + 每三角形 50 字节 </dd>
<dd>
法向量在写入时自动归一化</dd></dl>
<div class="fragment"><div class="line">std::vector&lt;StlTriangle&gt; tris = <span class="comment">// ...;</span></div>
<div class="line"><a class="code" href="group__foundation.html#ga47f7c33cd0e2a2f82cad758517a388a7">write_stl</a>(<span class="stringliteral">&quot;output.stl&quot;</span>, tris); <span class="comment">// 二进制,体积小</span></div>
<div class="ttc" id="agroup__foundation_html_ga47f7c33cd0e2a2f82cad758517a388a7"><div class="ttname"><a href="group__foundation.html#ga47f7c33cd0e2a2f82cad758517a388a7">vde::foundation::write_stl</a></div><div class="ttdeci">void write_stl(const std::string &amp;filepath, const std::vector&lt; StlTriangle &gt; &amp;tris)</div><div class="ttdoc">写入二进制 STL 文件</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga19bedcf026cfa80bbe7700f25891ca36" title="读取 STL 文件(自动检测格式)">read_stl</a>, <a class="el" href="group__foundation.html#ga3357e1dfba02250f2c6b85d276997253" title="写入 ASCII STL 文件">write_stl_ascii</a> </dd></dl>
</div>
</div>
<a id="ga3357e1dfba02250f2c6b85d276997253"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3357e1dfba02250f2c6b85d276997253">&#9670;&nbsp;</a></span>write_stl_ascii()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde::foundation::write_stl_ascii </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>filepath</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const std::vector&lt; <a class="el" href="structvde_1_1foundation_1_1StlTriangle.html">StlTriangle</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>tris</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>写入 ASCII STL 文件 </p>
<p>以人类可读的 ASCII 文本格式写出 STL,便于调试和手动编辑。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径 </td></tr>
<tr><td class="paramname">tris</td><td>三角形面片列表</td></tr>
</table>
</dd>
</dl>
<dl class="section warning"><dt>警告</dt><dd>ASCII STL 文件体积约为二进制 STL 的 5-10 倍,不适合大规模网格</dd></dl>
<div class="fragment"><div class="line">std::vector&lt;StlTriangle&gt; tris = <span class="comment">// ...;</span></div>
<div class="line"><a class="code" href="group__foundation.html#ga3357e1dfba02250f2c6b85d276997253">write_stl_ascii</a>(<span class="stringliteral">&quot;debug.stl&quot;</span>, tris); <span class="comment">// 可读文本,便于调试</span></div>
<div class="ttc" id="agroup__foundation_html_ga3357e1dfba02250f2c6b85d276997253"><div class="ttname"><a href="group__foundation.html#ga3357e1dfba02250f2c6b85d276997253">vde::foundation::write_stl_ascii</a></div><div class="ttdeci">void write_stl_ascii(const std::string &amp;filepath, const std::vector&lt; StlTriangle &gt; &amp;tris)</div><div class="ttdoc">写入 ASCII STL 文件</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="group__foundation.html#ga19bedcf026cfa80bbe7700f25891ca36" title="读取 STL 文件(自动检测格式)">read_stl</a>, <a class="el" href="group__foundation.html#ga47f7c33cd0e2a2f82cad758517a388a7" title="写入二进制 STL 文件">write_stl</a> </dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<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>