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

1499 lines
106 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: vde::brep 命名空间参考</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('namespacevde_1_1brep.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="#enum-members">枚举</a> &#124;
<a href="#func-members">函数</a> </div>
<div class="headertitle">
<div class="title">vde::brep 命名空间参考</div> </div>
</div><!--header-->
<div class="contents">
<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">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structvde_1_1brep_1_1TopoVertex.html">TopoVertex</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">拓扑顶点 <a href="structvde_1_1brep_1_1TopoVertex.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_1brep_1_1TopoEdge.html">TopoEdge</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">拓扑边 <a href="structvde_1_1brep_1_1TopoEdge.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_1brep_1_1TopoLoop.html">TopoLoop</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">拓扑环(Loop <a href="structvde_1_1brep_1_1TopoLoop.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_1brep_1_1TopoFace.html">TopoFace</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">拓扑面 <a href="structvde_1_1brep_1_1TopoFace.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_1brep_1_1TopoShell.html">TopoShell</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">拓扑壳 <a href="structvde_1_1brep_1_1TopoShell.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_1brep_1_1TopoBody.html">TopoBody</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">拓扑体 <a href="structvde_1_1brep_1_1TopoBody.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_1brep_1_1BrepModel.html">BrepModel</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">B-Rep 模型 <a href="classvde_1_1brep_1_1BrepModel.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_1brep_1_1ValidationResult.html">ValidationResult</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">B-Rep 模型的综合验证结果 <a href="structvde_1_1brep_1_1ValidationResult.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="enum-members"></a>
枚举</h2></td></tr>
<tr class="memitem:a8aaf8a85c867b16fa7b082a296f3cffb"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffb">CurveType</a> { <br />
&#160;&#160;<a class="el" href="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffba4803e6b9e63dabf04de980788d6a13c4">Line</a>
, <a class="el" href="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffba30954d90085f6eaaf5817917fc5fecb3">Circle</a>
, <a class="el" href="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffba31aa08a905ffdb74542a88cb7320c69d">Bezier</a>
, <a class="el" href="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffba828ce1e5157657c1792f0503c2d430db">BSpline</a>
, <br />
&#160;&#160;<a class="el" href="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffbae407f49a3a3e5006f4c62ef450560b06">Nurbs</a>
<br />
}</td></tr>
<tr class="memdesc:a8aaf8a85c867b16fa7b082a296f3cffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">边曲线类型枚举 <a href="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffb">更多...</a><br /></td></tr>
<tr class="separator:a8aaf8a85c867b16fa7b082a296f3cffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae78c281601ce520b37270713c86de162"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162">IgesError</a> { <br />
&#160;&#160;<a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162aa60852f204ed8028c1c58808b746d115">Ok</a> = 0
, <a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162a2767828026039e8ba7b38973cbb701f2">FileNotFound</a>
, <a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162ae41199faa7290c167f70f314c5e6c165">ParseError</a>
, <a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162af2969996ddc8f288de37705af060ae63">InvalidSection</a>
, <br />
&#160;&#160;<a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162a63f4678302ac9c2a2b595eaa821d8e73">UnsupportedEntity</a>
, <a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162abe1779400b67a7fef4fa5bf93ec5e18f">MissingEntity</a>
, <a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162a764a35d8475730750db2c0eb069d2443">EntityTypeError</a>
<br />
}</td></tr>
<tr class="memdesc:ae78c281601ce520b37270713c86de162"><td class="mdescLeft">&#160;</td><td class="mdescRight">IGES 导入错误码 <a href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162">更多...</a><br /></td></tr>
<tr class="separator:ae78c281601ce520b37270713c86de162"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add9286f426ba3fed65f107ac2e73c4ef"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4ef">StepError</a> { <br />
&#160;&#160;<a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4efaa60852f204ed8028c1c58808b746d115">Ok</a> = 0
, <a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4efa2767828026039e8ba7b38973cbb701f2">FileNotFound</a>
, <a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4efae41199faa7290c167f70f314c5e6c165">ParseError</a>
, <a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4efae39ad990effe3b4cd951b6ae7c642b66">InvalidHeader</a>
, <br />
&#160;&#160;<a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4efae255a2cbc212a3d28b7d45a7bde32af2">UnsupportedSchema</a>
, <a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4efabe1779400b67a7fef4fa5bf93ec5e18f">MissingEntity</a>
, <a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4efa764a35d8475730750db2c0eb069d2443">EntityTypeError</a>
<br />
}</td></tr>
<tr class="memdesc:add9286f426ba3fed65f107ac2e73c4ef"><td class="mdescLeft">&#160;</td><td class="mdescRight">STEP 导入错误码 <a href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4ef">更多...</a><br /></td></tr>
<tr class="separator:add9286f426ba3fed65f107ac2e73c4ef"><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:ac7a54f4f6bdf3d2a3bce1a89e8c5efa3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ac7a54f4f6bdf3d2a3bce1a89e8c5efa3">brep_union</a> (const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;a, const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;b)</td></tr>
<tr class="memdesc:ac7a54f4f6bdf3d2a3bce1a89e8c5efa3"><td class="mdescLeft">&#160;</td><td class="mdescRight">B-Rep 布尔并集: A B <a href="namespacevde_1_1brep.html#ac7a54f4f6bdf3d2a3bce1a89e8c5efa3">更多...</a><br /></td></tr>
<tr class="separator:ac7a54f4f6bdf3d2a3bce1a89e8c5efa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0d6ccc5efd27284186371edd0564543"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ad0d6ccc5efd27284186371edd0564543">brep_intersection</a> (const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;a, const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;b)</td></tr>
<tr class="memdesc:ad0d6ccc5efd27284186371edd0564543"><td class="mdescLeft">&#160;</td><td class="mdescRight">B-Rep 布尔交集: A ∩ B <a href="namespacevde_1_1brep.html#ad0d6ccc5efd27284186371edd0564543">更多...</a><br /></td></tr>
<tr class="separator:ad0d6ccc5efd27284186371edd0564543"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad386807586a7bb9d6fca95c27f0d7f0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#aad386807586a7bb9d6fca95c27f0d7f0">brep_difference</a> (const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;a, const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;b)</td></tr>
<tr class="memdesc:aad386807586a7bb9d6fca95c27f0d7f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">B-Rep 布尔差集: A \ B <a href="namespacevde_1_1brep.html#aad386807586a7bb9d6fca95c27f0d7f0">更多...</a><br /></td></tr>
<tr class="separator:aad386807586a7bb9d6fca95c27f0d7f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb612097bfb5e886285f2227dcc9216f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structvde_1_1brep_1_1ValidationResult.html">ValidationResult</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#acb612097bfb5e886285f2227dcc9216f">validate</a> (const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;body)</td></tr>
<tr class="memdesc:acb612097bfb5e886285f2227dcc9216f"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classvde_1_1brep_1_1BrepModel.html" title="B-Rep 模型">BrepModel</a> 执行综合验证 <a href="namespacevde_1_1brep.html#acb612097bfb5e886285f2227dcc9216f">更多...</a><br /></td></tr>
<tr class="separator:acb612097bfb5e886285f2227dcc9216f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a045b62ab204fafb17aac5c46ea0b75ce"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a045b62ab204fafb17aac5c46ea0b75ce">export_iges</a> (const std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;bodies)</td></tr>
<tr class="memdesc:a045b62ab204fafb17aac5c46ea0b75ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">将 B-Rep 体导出为 IGES 格式字符串(版本 5.3) <a href="namespacevde_1_1brep.html#a045b62ab204fafb17aac5c46ea0b75ce">更多...</a><br /></td></tr>
<tr class="separator:a045b62ab204fafb17aac5c46ea0b75ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9054514c2d664be8b2fa14909600227"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ac9054514c2d664be8b2fa14909600227">export_iges_file</a> (const std::string &amp;filepath, const std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;bodies)</td></tr>
<tr class="memdesc:ac9054514c2d664be8b2fa14909600227"><td class="mdescLeft">&#160;</td><td class="mdescRight">将 B-Rep 体导出为 IGES 文件 <a href="namespacevde_1_1brep.html#ac9054514c2d664be8b2fa14909600227">更多...</a><br /></td></tr>
<tr class="separator:ac9054514c2d664be8b2fa14909600227"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adee90de5426184584b215cea82bbd1ac"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#adee90de5426184584b215cea82bbd1ac">import_iges</a> (const std::string &amp;filepath)</td></tr>
<tr class="memdesc:adee90de5426184584b215cea82bbd1ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">从文件导入 IGES <a href="namespacevde_1_1brep.html#adee90de5426184584b215cea82bbd1ac">更多...</a><br /></td></tr>
<tr class="separator:adee90de5426184584b215cea82bbd1ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97aa899788ec303a7e61e2d6edd08175"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a97aa899788ec303a7e61e2d6edd08175">import_iges_from_string</a> (const std::string &amp;data)</td></tr>
<tr class="memdesc:a97aa899788ec303a7e61e2d6edd08175"><td class="mdescLeft">&#160;</td><td class="mdescRight">从字符串导入 IGES(用于测试) <a href="namespacevde_1_1brep.html#a97aa899788ec303a7e61e2d6edd08175">更多...</a><br /></td></tr>
<tr class="separator:a97aa899788ec303a7e61e2d6edd08175"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34d58f6db9bfb1bb8abf46bb94eafc6f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162">IgesError</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a34d58f6db9bfb1bb8abf46bb94eafc6f">iges_last_error</a> ()</td></tr>
<tr class="memdesc:a34d58f6db9bfb1bb8abf46bb94eafc6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取最近一次 IGES 导入的错误码 <a href="namespacevde_1_1brep.html#a34d58f6db9bfb1bb8abf46bb94eafc6f">更多...</a><br /></td></tr>
<tr class="separator:a34d58f6db9bfb1bb8abf46bb94eafc6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f7d19410534ba8e0e97f089fbbcb9f1"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a3f7d19410534ba8e0e97f089fbbcb9f1">iges_last_error_message</a> ()</td></tr>
<tr class="memdesc:a3f7d19410534ba8e0e97f089fbbcb9f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取最近一次 IGES 导入的可读错误描述 <a href="namespacevde_1_1brep.html#a3f7d19410534ba8e0e97f089fbbcb9f1">更多...</a><br /></td></tr>
<tr class="separator:a3f7d19410534ba8e0e97f089fbbcb9f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a11885ccd93e2322b983c750061eaa28b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a11885ccd93e2322b983c750061eaa28b">extrude</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;profile, const Vector3D &amp;dir)</td></tr>
<tr class="memdesc:a11885ccd93e2322b983c750061eaa28b"><td class="mdescLeft">&#160;</td><td class="mdescRight">沿方向挤出平面轮廓 <a href="namespacevde_1_1brep.html#a11885ccd93e2322b983c750061eaa28b">更多...</a><br /></td></tr>
<tr class="separator:a11885ccd93e2322b983c750061eaa28b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afbba855cbc153b7da3aa201246c7bfe0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#afbba855cbc153b7da3aa201246c7bfe0">revolve</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;profile, const Point3D &amp;axis_origin, const Vector3D &amp;axis_dir, double angle_rad=2.0 *M_PI)</td></tr>
<tr class="memdesc:afbba855cbc153b7da3aa201246c7bfe0"><td class="mdescLeft">&#160;</td><td class="mdescRight">绕轴旋转平面轮廓 <a href="namespacevde_1_1brep.html#afbba855cbc153b7da3aa201246c7bfe0">更多...</a><br /></td></tr>
<tr class="separator:afbba855cbc153b7da3aa201246c7bfe0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9dd78da8d6a11af52c0c95cfc41c1414"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a9dd78da8d6a11af52c0c95cfc41c1414">sweep</a> (const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;profile, const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;path)</td></tr>
<tr class="memdesc:a9dd78da8d6a11af52c0c95cfc41c1414"><td class="mdescLeft">&#160;</td><td class="mdescRight">沿任意路径扫掠轮廓 <a href="namespacevde_1_1brep.html#a9dd78da8d6a11af52c0c95cfc41c1414">更多...</a><br /></td></tr>
<tr class="separator:a9dd78da8d6a11af52c0c95cfc41c1414"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4431aff57585213ee2713a7623ab7ae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ae4431aff57585213ee2713a7623ab7ae">loft</a> (const std::vector&lt; <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &gt; &amp;profiles)</td></tr>
<tr class="memdesc:ae4431aff57585213ee2713a7623ab7ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">在两个或多个轮廓曲线之间放样 <a href="namespacevde_1_1brep.html#ae4431aff57585213ee2713a7623ab7ae">更多...</a><br /></td></tr>
<tr class="separator:ae4431aff57585213ee2713a7623ab7ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac1cb7871101ff5be06577548ac41aaac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a> (double w, double h, double d)</td></tr>
<tr class="memdesc:ac1cb7871101ff5be06577548ac41aaac"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建立方体 <a href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">更多...</a><br /></td></tr>
<tr class="separator:ac1cb7871101ff5be06577548ac41aaac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5e851f10fbd1962c42a8574b193faa3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ad5e851f10fbd1962c42a8574b193faa3">make_cylinder</a> (double radius, double height, int segments=32)</td></tr>
<tr class="memdesc:ad5e851f10fbd1962c42a8574b193faa3"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建圆柱体 <a href="namespacevde_1_1brep.html#ad5e851f10fbd1962c42a8574b193faa3">更多...</a><br /></td></tr>
<tr class="separator:ad5e851f10fbd1962c42a8574b193faa3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30605a9398550c5cc0b298e04c60ca61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61">make_sphere</a> (double radius, int segments_u=32, int segments_v=16)</td></tr>
<tr class="memdesc:a30605a9398550c5cc0b298e04c60ca61"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建球体 <a href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61">更多...</a><br /></td></tr>
<tr class="separator:a30605a9398550c5cc0b298e04c60ca61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1034cf756961c7a361e43826802480a5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a1034cf756961c7a361e43826802480a5">fillet</a> (const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;body, int edge_id, double radius)</td></tr>
<tr class="memdesc:a1034cf756961c7a361e43826802480a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">对边做圆角处理 <a href="namespacevde_1_1brep.html#a1034cf756961c7a361e43826802480a5">更多...</a><br /></td></tr>
<tr class="separator:a1034cf756961c7a361e43826802480a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2fc7e2f6626c6f8405adf05db1105a68"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a2fc7e2f6626c6f8405adf05db1105a68">chamfer</a> (const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;body, int edge_id, double distance)</td></tr>
<tr class="memdesc:a2fc7e2f6626c6f8405adf05db1105a68"><td class="mdescLeft">&#160;</td><td class="mdescRight">对边做倒角 <a href="namespacevde_1_1brep.html#a2fc7e2f6626c6f8405adf05db1105a68">更多...</a><br /></td></tr>
<tr class="separator:a2fc7e2f6626c6f8405adf05db1105a68"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d2c4003b97c665cd94597baec7e1ff9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a4d2c4003b97c665cd94597baec7e1ff9">shell</a> (const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;body, int face_id, double thickness)</td></tr>
<tr class="memdesc:a4d2c4003b97c665cd94597baec7e1ff9"><td class="mdescLeft">&#160;</td><td class="mdescRight">抽壳(挖空实体) <a href="namespacevde_1_1brep.html#a4d2c4003b97c665cd94597baec7e1ff9">更多...</a><br /></td></tr>
<tr class="separator:a4d2c4003b97c665cd94597baec7e1ff9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d766baac8a4f9dfc44b739e4c5eef5c"><td class="memItemLeft" align="right" valign="top">std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a5d766baac8a4f9dfc44b739e4c5eef5c">export_step</a> (const std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;bodies)</td></tr>
<tr class="memdesc:a5d766baac8a4f9dfc44b739e4c5eef5c"><td class="mdescLeft">&#160;</td><td class="mdescRight">将 B-Rep 体导出为 STEP AP214 字符串 <a href="namespacevde_1_1brep.html#a5d766baac8a4f9dfc44b739e4c5eef5c">更多...</a><br /></td></tr>
<tr class="separator:a5d766baac8a4f9dfc44b739e4c5eef5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15fccc3e0e7bd161dc732115fadb8e3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a15fccc3e0e7bd161dc732115fadb8e3d">export_step_file</a> (const std::string &amp;filepath, const std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;bodies)</td></tr>
<tr class="memdesc:a15fccc3e0e7bd161dc732115fadb8e3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">将 B-Rep 体导出为 STEP 文件 <a href="namespacevde_1_1brep.html#a15fccc3e0e7bd161dc732115fadb8e3d">更多...</a><br /></td></tr>
<tr class="separator:a15fccc3e0e7bd161dc732115fadb8e3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae24e129af52f39a772efac984415ff8d"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ae24e129af52f39a772efac984415ff8d">import_step</a> (const std::string &amp;filepath)</td></tr>
<tr class="memdesc:ae24e129af52f39a772efac984415ff8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">从文件导入 STEPAP203/AP214 <a href="namespacevde_1_1brep.html#ae24e129af52f39a772efac984415ff8d">更多...</a><br /></td></tr>
<tr class="separator:ae24e129af52f39a772efac984415ff8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5d3e4ac3043b36e38a7734ea5592518"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ae5d3e4ac3043b36e38a7734ea5592518">import_step_from_string</a> (const std::string &amp;step_data)</td></tr>
<tr class="memdesc:ae5d3e4ac3043b36e38a7734ea5592518"><td class="mdescLeft">&#160;</td><td class="mdescRight">从字符串导入 STEP(用于测试和嵌入式场景) <a href="namespacevde_1_1brep.html#ae5d3e4ac3043b36e38a7734ea5592518">更多...</a><br /></td></tr>
<tr class="separator:ae5d3e4ac3043b36e38a7734ea5592518"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a282cb1ce3142931d20330e95e25c1460"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4ef">StepError</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#a282cb1ce3142931d20330e95e25c1460">step_last_error</a> ()</td></tr>
<tr class="memdesc:a282cb1ce3142931d20330e95e25c1460"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取最近一次 STEP 导入的错误码 <a href="namespacevde_1_1brep.html#a282cb1ce3142931d20330e95e25c1460">更多...</a><br /></td></tr>
<tr class="separator:a282cb1ce3142931d20330e95e25c1460"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad744c4e7d42f2f8f7a02ffa6daf72d6e"><td class="memItemLeft" align="right" valign="top">const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1brep.html#ad744c4e7d42f2f8f7a02ffa6daf72d6e">step_last_error_message</a> ()</td></tr>
<tr class="memdesc:ad744c4e7d42f2f8f7a02ffa6daf72d6e"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取最近一次 STEP 导入的可读错误描述 <a href="namespacevde_1_1brep.html#ad744c4e7d42f2f8f7a02ffa6daf72d6e">更多...</a><br /></td></tr>
<tr class="separator:ad744c4e7d42f2f8f7a02ffa6daf72d6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">枚举类型说明</h2>
<a id="a8aaf8a85c867b16fa7b082a296f3cffb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8aaf8a85c867b16fa7b082a296f3cffb">&#9670;&nbsp;</a></span>CurveType</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="namespacevde_1_1brep.html#a8aaf8a85c867b16fa7b082a296f3cffb">vde::brep::CurveType</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>指定边所使用的曲线表示类别, 影响 tessellation、布尔运算和文件交换时的处理方式。 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="a8aaf8a85c867b16fa7b082a296f3cffba4803e6b9e63dabf04de980788d6a13c4"></a>Line&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8aaf8a85c867b16fa7b082a296f3cffba30954d90085f6eaaf5817917fc5fecb3"></a>Circle&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8aaf8a85c867b16fa7b082a296f3cffba31aa08a905ffdb74542a88cb7320c69d"></a>Bezier&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8aaf8a85c867b16fa7b082a296f3cffba828ce1e5157657c1792f0503c2d430db"></a>BSpline&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a8aaf8a85c867b16fa7b082a296f3cffbae407f49a3a3e5006f4c62ef450560b06"></a>Nurbs&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">在文件 <a class="el" href="brep_8h_source.html">brep.h</a><a class="el" href="brep_8h_source.html#l00065">65</a> 行定义.</p>
</div>
</div>
<a id="ae78c281601ce520b37270713c86de162"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae78c281601ce520b37270713c86de162">&#9670;&nbsp;</a></span>IgesError</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="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162">vde::brep::IgesError</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>IGES 导入错误码 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="ae78c281601ce520b37270713c86de162aa60852f204ed8028c1c58808b746d115"></a>Ok&#160;</td><td class="fielddoc"><p>导入成功 </p>
</td></tr>
<tr><td class="fieldname"><a id="ae78c281601ce520b37270713c86de162a2767828026039e8ba7b38973cbb701f2"></a>FileNotFound&#160;</td><td class="fielddoc"><p>文件不存在或无法读取 </p>
</td></tr>
<tr><td class="fieldname"><a id="ae78c281601ce520b37270713c86de162ae41199faa7290c167f70f314c5e6c165"></a>ParseError&#160;</td><td class="fielddoc"><p>IGES 语法错误(固定宽度格式异常) </p>
</td></tr>
<tr><td class="fieldname"><a id="ae78c281601ce520b37270713c86de162af2969996ddc8f288de37705af060ae63"></a>InvalidSection&#160;</td><td class="fielddoc"><p>段标记无效或缺失 </p>
</td></tr>
<tr><td class="fieldname"><a id="ae78c281601ce520b37270713c86de162a63f4678302ac9c2a2b595eaa821d8e73"></a>UnsupportedEntity&#160;</td><td class="fielddoc"><p>遇到了不支持但合法的实体类型 </p>
</td></tr>
<tr><td class="fieldname"><a id="ae78c281601ce520b37270713c86de162abe1779400b67a7fef4fa5bf93ec5e18f"></a>MissingEntity&#160;</td><td class="fielddoc"><p>引用了未定义的实体 </p>
</td></tr>
<tr><td class="fieldname"><a id="ae78c281601ce520b37270713c86de162a764a35d8475730750db2c0eb069d2443"></a>EntityTypeError&#160;</td><td class="fielddoc"><p>实体类型解析失败 </p>
</td></tr>
</table>
<p class="definition">在文件 <a class="el" href="iges__import_8h_source.html">iges_import.h</a><a class="el" href="iges__import_8h_source.html#l00042">42</a> 行定义.</p>
</div>
</div>
<a id="add9286f426ba3fed65f107ac2e73c4ef"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add9286f426ba3fed65f107ac2e73c4ef">&#9670;&nbsp;</a></span>StepError</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="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4ef">vde::brep::StepError</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>STEP 导入错误码 </p>
<p>枚举 <a class="el" href="namespacevde_1_1brep.html#ae24e129af52f39a772efac984415ff8d" title="从文件导入 STEPAP203/AP214">import_step()</a><a class="el" href="namespacevde_1_1brep.html#ae5d3e4ac3043b36e38a7734ea5592518" title="从字符串导入 STEP(用于测试和嵌入式场景)">import_step_from_string()</a> 可能返回的所有错误类型。 </p>
<table class="fieldtable">
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="add9286f426ba3fed65f107ac2e73c4efaa60852f204ed8028c1c58808b746d115"></a>Ok&#160;</td><td class="fielddoc"><p>导入成功 </p>
</td></tr>
<tr><td class="fieldname"><a id="add9286f426ba3fed65f107ac2e73c4efa2767828026039e8ba7b38973cbb701f2"></a>FileNotFound&#160;</td><td class="fielddoc"><p>文件不存在或无法读取 </p>
</td></tr>
<tr><td class="fieldname"><a id="add9286f426ba3fed65f107ac2e73c4efae41199faa7290c167f70f314c5e6c165"></a>ParseError&#160;</td><td class="fielddoc"><p>STEP 语法错误(令牌/格式异常) </p>
</td></tr>
<tr><td class="fieldname"><a id="add9286f426ba3fed65f107ac2e73c4efae39ad990effe3b4cd951b6ae7c642b66"></a>InvalidHeader&#160;</td><td class="fielddoc"><p>HEADER 段格式无效 </p>
</td></tr>
<tr><td class="fieldname"><a id="add9286f426ba3fed65f107ac2e73c4efae255a2cbc212a3d28b7d45a7bde32af2"></a>UnsupportedSchema&#160;</td><td class="fielddoc"><p>不支持的 SCHEMA(非 AP203/AP214 </p>
</td></tr>
<tr><td class="fieldname"><a id="add9286f426ba3fed65f107ac2e73c4efabe1779400b67a7fef4fa5bf93ec5e18f"></a>MissingEntity&#160;</td><td class="fielddoc"><p>引用了未定义的实体 </p>
</td></tr>
<tr><td class="fieldname"><a id="add9286f426ba3fed65f107ac2e73c4efa764a35d8475730750db2c0eb069d2443"></a>EntityTypeError&#160;</td><td class="fielddoc"><p>实体类型未识别或类型不匹配 </p>
</td></tr>
</table>
<p class="definition">在文件 <a class="el" href="step__import_8h_source.html">step_import.h</a><a class="el" href="step__import_8h_source.html#l00039">39</a> 行定义.</p>
</div>
</div>
<h2 class="groupheader">函数说明</h2>
<a id="aad386807586a7bb9d6fca95c27f0d7f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad386807586a7bb9d6fca95c27f0d7f0">&#9670;&nbsp;</a></span>brep_difference()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::brep_difference </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</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="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>B-Rep 布尔差集: A \ B </p>
<p>从 A 中减去 B 所占据的区域。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>被减实体 A </td></tr>
<tr><td class="paramname">b</td><td>减去实体 B </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>新的 B-Rep 实体(a \ b</dd></dl>
<dl class="section pre"><dt>前置条件</dt><dd>a 和 b 必须是有效的封闭实体</dd></dl>
<div class="fragment"><div class="line"><span class="comment">// 从盒子中减去球体 = 带球形凹陷的盒子</span></div>
<div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a> = <a class="code" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a>(2, 2, 2);</div>
<div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a> = <a class="code" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61">make_sphere</a>(0.5);</div>
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="namespacevde_1_1brep.html#aad386807586a7bb9d6fca95c27f0d7f0">brep_difference</a>(<a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a>, <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>);</div>
<div class="ttc" id="anamespacevde_1_1brep_html_a30605a9398550c5cc0b298e04c60ca61"><div class="ttname"><a href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61">vde::brep::make_sphere</a></div><div class="ttdeci">BrepModel make_sphere(double radius, int segments_u=32, int segments_v=16)</div><div class="ttdoc">创建球体</div></div>
<div class="ttc" id="anamespacevde_1_1brep_html_aad386807586a7bb9d6fca95c27f0d7f0"><div class="ttname"><a href="namespacevde_1_1brep.html#aad386807586a7bb9d6fca95c27f0d7f0">vde::brep::brep_difference</a></div><div class="ttdeci">BrepModel brep_difference(const BrepModel &amp;a, const BrepModel &amp;b)</div><div class="ttdoc">B-Rep 布尔差集: A \ B</div></div>
<div class="ttc" id="anamespacevde_1_1brep_html_ac1cb7871101ff5be06577548ac41aaac"><div class="ttname"><a href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">vde::brep::make_box</a></div><div class="ttdeci">BrepModel make_box(double w, double h, double d)</div><div class="ttdoc">创建立方体</div></div>
<div class="ttc" id="anamespacevde_1_1sdf_html_a380ebfe1b3b65d5ecc4efcb946b21834"><div class="ttname"><a href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">vde::sdf::box</a></div><div class="ttdeci">double box(const Point3D &amp;p, const Point3D &amp;half_extents)</div><div class="ttdoc">轴对齐立方体的 SDF</div><div class="ttdef"><b>Definition:</b> <a href="sdf__primitives_8h_source.html#l00096">sdf_primitives.h:96</a></div></div>
<div class="ttc" id="anamespacevde_1_1sdf_html_ab544a3ebc4c0844b322b73bbbe4efb3f"><div class="ttname"><a href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">vde::sdf::sphere</a></div><div class="ttdeci">double sphere(const Point3D &amp;p, double radius)</div><div class="ttdoc">球体的 SDF</div><div class="ttdef"><b>Definition:</b> <a href="sdf__primitives_8h_source.html#l00068">sdf_primitives.h:68</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ac7a54f4f6bdf3d2a3bce1a89e8c5efa3" title="B-Rep 布尔并集: A B">brep_union</a> 并集 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#ad0d6ccc5efd27284186371edd0564543" title="B-Rep 布尔交集: A ∩ B">brep_intersection</a> 交集 </dd></dl>
</div>
</div>
<a id="ad0d6ccc5efd27284186371edd0564543"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0d6ccc5efd27284186371edd0564543">&#9670;&nbsp;</a></span>brep_intersection()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::brep_intersection </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</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="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>B-Rep 布尔交集: A ∩ B </p>
<p>保留两个实体共有的区域。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>第一个 B-Rep 实体 </td></tr>
<tr><td class="paramname">b</td><td>第二个 B-Rep 实体 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>新的 B-Rep 实体(a ∩ b</dd></dl>
<dl class="section pre"><dt>前置条件</dt><dd>a 和 b 必须是有效的封闭实体</dd></dl>
<div class="fragment"><div class="line"><span class="comment">// 长方体与球体的交集 = 八分之一球(角部)</span></div>
<div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a> = <a class="code" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a>(2, 2, 2);</div>
<div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a> = <a class="code" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61">make_sphere</a>(1.8);</div>
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="namespacevde_1_1brep.html#ad0d6ccc5efd27284186371edd0564543">brep_intersection</a>(<a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a>, <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>);</div>
<div class="ttc" id="anamespacevde_1_1brep_html_ad0d6ccc5efd27284186371edd0564543"><div class="ttname"><a href="namespacevde_1_1brep.html#ad0d6ccc5efd27284186371edd0564543">vde::brep::brep_intersection</a></div><div class="ttdeci">BrepModel brep_intersection(const BrepModel &amp;a, const BrepModel &amp;b)</div><div class="ttdoc">B-Rep 布尔交集: A ∩ B</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ac7a54f4f6bdf3d2a3bce1a89e8c5efa3" title="B-Rep 布尔并集: A B">brep_union</a> 并集 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#aad386807586a7bb9d6fca95c27f0d7f0" title="B-Rep 布尔差集: A \ B">brep_difference</a> 差集 </dd></dl>
</div>
</div>
<a id="ac7a54f4f6bdf3d2a3bce1a89e8c5efa3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac7a54f4f6bdf3d2a3bce1a89e8c5efa3">&#9670;&nbsp;</a></span>brep_union()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::brep_union </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</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="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>b</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>B-Rep 布尔并集: A B </p>
<p>合并两个 B-Rep 实体为一个,自动处理相交曲面的分割和重新连接。</p>
<p><b>算法概要:</b></p><ol type="1">
<li>计算两个模型之间的所有曲面交线</li>
<li>沿交线分割曲面</li>
<li>根据布尔操作类型保留或丢弃分割后的面片</li>
<li>重新连接拓扑结构(边、环、壳)</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">a</td><td>第一个 B-Rep 实体 </td></tr>
<tr><td class="paramname">b</td><td>第二个 B-Rep 实体 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>新的 B-Rep 实体(a b</dd></dl>
<dl class="section warning"><dt>警告</dt><dd>两个输入实体必须都是水密(watertight)且非自交(non-self-intersecting)。 如果任一输入未通过验证,结果未定义。</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a> = <a class="code" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a>(2, 2, 2);</div>
<div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a> = <a class="code" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61">make_sphere</a>(1.5);</div>
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="namespacevde_1_1brep.html#ac7a54f4f6bdf3d2a3bce1a89e8c5efa3">brep_union</a>(<a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a>, <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>);</div>
<div class="ttc" id="anamespacevde_1_1brep_html_ac7a54f4f6bdf3d2a3bce1a89e8c5efa3"><div class="ttname"><a href="namespacevde_1_1brep.html#ac7a54f4f6bdf3d2a3bce1a89e8c5efa3">vde::brep::brep_union</a></div><div class="ttdeci">BrepModel brep_union(const BrepModel &amp;a, const BrepModel &amp;b)</div><div class="ttdoc">B-Rep 布尔并集: A B</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ad0d6ccc5efd27284186371edd0564543" title="B-Rep 布尔交集: A ∩ B">brep_intersection</a> 交集 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#aad386807586a7bb9d6fca95c27f0d7f0" title="B-Rep 布尔差集: A \ B">brep_difference</a> 差集 </dd></dl>
</div>
</div>
<a id="a2fc7e2f6626c6f8405adf05db1105a68"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2fc7e2f6626c6f8405adf05db1105a68">&#9670;&nbsp;</a></span>chamfer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::chamfer </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>body</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>edge_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>distance</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>对边做倒角 </p>
<p>将尖锐边替换为 45° 斜面。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">body</td><td>输入实体 </td></tr>
<tr><td class="paramname">edge_id</td><td>要倒角的边 ID </td></tr>
<tr><td class="paramname">distance</td><td>倒角距离(从原边沿两个面各偏移的距离) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>倒角后的新实体</dd></dl>
<dl class="section pre"><dt>前置条件</dt><dd>distance &gt; 0</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a1034cf756961c7a361e43826802480a5" title="对边做圆角处理">fillet</a> 圆角 </dd></dl>
</div>
</div>
<a id="a045b62ab204fafb17aac5c46ea0b75ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a045b62ab204fafb17aac5c46ea0b75ce">&#9670;&nbsp;</a></span>export_iges()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::string vde::brep::export_iges </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>bodies</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将 B-Rep 体导出为 IGES 格式字符串(版本 5.3) </p>
<p>序列化所有传入的体及其几何/拓扑数据为 IGES 固定宽度格式。</p>
<p><b>输出结构:</b> </p><div class="fragment"><div class="line">S 1H,,1H;, ... S0000001</div>
<div class="line">G ... G0000003</div>
<div class="line">D 116,1,2,... (<a class="code" href="namespacevde_1_1core.html#a5f67a391b22375e6aeb40f6237f76cb6">Point</a> entity) D0000001</div>
<div class="line">D 110,3,4,... (Line entity) D0000002</div>
<div class="line">... ...</div>
<div class="line">P 116,0.,0.,0.; 1P0000001</div>
<div class="line">P 110,0.,0.,0.,1.,0.,0.; 3P0000002</div>
<div class="line">T 1 T0000001</div>
<div class="ttc" id="anamespacevde_1_1core_html_a5f67a391b22375e6aeb40f6237f76cb6"><div class="ttname"><a href="namespacevde_1_1core.html#a5f67a391b22375e6aeb40f6237f76cb6">vde::core::Point</a></div><div class="ttdeci">foundation::Point&lt; T, Dim &gt; Point</div><div class="ttdoc">通用 N 维点类型(重新导出,便于 core 模块使用)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00026">point.h:26</a></div></div>
</div><!-- fragment --><h2><a class="anchor" id="autotoc_md11"></a>
实体输出策略</h2>
<ol type="1">
<li>**几何实体**(点/线/弧/曲线/面/曲面)先输出并使 Directory 条目索引递增</li>
<li>**拓扑实体**(顶点/边/环/面/壳/B-Rep Object)随后输出,通过索引引用于几何实体</li>
<li>如果体有 name,作为 B-Rep Object 的属性输出</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">bodies</td><td>B-Rep 体列表 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>IGES 5.3 格式字符串</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> body = <a class="code" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a>(10, 5, 3);</div>
<div class="line">std::string iges_str = <a class="code" href="namespacevde_1_1brep.html#a045b62ab204fafb17aac5c46ea0b75ce">export_iges</a>({body});</div>
<div class="ttc" id="anamespacevde_1_1brep_html_a045b62ab204fafb17aac5c46ea0b75ce"><div class="ttname"><a href="namespacevde_1_1brep.html#a045b62ab204fafb17aac5c46ea0b75ce">vde::brep::export_iges</a></div><div class="ttdeci">std::string export_iges(const std::vector&lt; BrepModel &gt; &amp;bodies)</div><div class="ttdoc">将 B-Rep 体导出为 IGES 格式字符串(版本 5.3)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ac9054514c2d664be8b2fa14909600227" title="将 B-Rep 体导出为 IGES 文件">export_iges_file</a> 直接写入文件 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a5d766baac8a4f9dfc44b739e4c5eef5c" title="将 B-Rep 体导出为 STEP AP214 字符串">export_step</a> STEP 格式导出 </dd></dl>
</div>
</div>
<a id="ac9054514c2d664be8b2fa14909600227"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9054514c2d664be8b2fa14909600227">&#9670;&nbsp;</a></span>export_iges_file()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde::brep::export_iges_file </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="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>bodies</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将 B-Rep 体导出为 IGES 文件 </p>
<p>调用 <a class="el" href="namespacevde_1_1brep.html#a045b62ab204fafb17aac5c46ea0b75ce" title="将 B-Rep 体导出为 IGES 格式字符串(版本 5.3">export_iges()</a> 后写入文件。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径(建议扩展名 .igs 或 .iges) </td></tr>
<tr><td class="paramname">bodies</td><td>B-Rep 体列表</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a045b62ab204fafb17aac5c46ea0b75ce" title="将 B-Rep 体导出为 IGES 格式字符串(版本 5.3">export_iges</a> 获取字符串输出 </dd></dl>
</div>
</div>
<a id="a5d766baac8a4f9dfc44b739e4c5eef5c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d766baac8a4f9dfc44b739e4c5eef5c">&#9670;&nbsp;</a></span>export_step()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::string vde::brep::export_step </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>bodies</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将 B-Rep 体导出为 STEP AP214 字符串 </p>
<p>序列化所有传入的体及其几何数据为 STEP 文本格式。</p>
<p><b>输出结构:</b> </p><div class="fragment"><div class="line">ISO-10303-21;</div>
<div class="line">HEADER;</div>
<div class="line"> FILE_DESCRIPTION(...)</div>
<div class="line"> FILE_NAME(...)</div>
<div class="line"> FILE_SCHEMA((&#39;AUTOMOTIVE_DESIGN&#39;))</div>
<div class="line">ENDSEC;</div>
<div class="line">DATA;</div>
<div class="line"> <span class="preprocessor">#1 = PRODUCT(...)</span></div>
<div class="line"><span class="preprocessor"> #2 = CARTESIAN_POINT(...)</span></div>
<div class="line"> ...</div>
<div class="line">ENDSEC;</div>
<div class="line">END-ISO-10303-21;</div>
</div><!-- fragment --><dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">bodies</td><td>B-Rep 体列表(每个体对应一个 PRODUCT) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>STEP AP214 格式字符串</dd></dl>
<dl class="section note"><dt>注解</dt><dd>输出包含所有必要的 ISO 10303-21 头部信息。</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> body = <a class="code" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a>(10, 5, 3);</div>
<div class="line">std::string step_str = <a class="code" href="namespacevde_1_1brep.html#a5d766baac8a4f9dfc44b739e4c5eef5c">export_step</a>({body});</div>
<div class="line"><span class="comment">// 写入文件或通过网络发送</span></div>
<div class="ttc" id="anamespacevde_1_1brep_html_a5d766baac8a4f9dfc44b739e4c5eef5c"><div class="ttname"><a href="namespacevde_1_1brep.html#a5d766baac8a4f9dfc44b739e4c5eef5c">vde::brep::export_step</a></div><div class="ttdeci">std::string export_step(const std::vector&lt; BrepModel &gt; &amp;bodies)</div><div class="ttdoc">将 B-Rep 体导出为 STEP AP214 字符串</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a15fccc3e0e7bd161dc732115fadb8e3d" title="将 B-Rep 体导出为 STEP 文件">export_step_file</a> 直接写入文件 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a045b62ab204fafb17aac5c46ea0b75ce" title="将 B-Rep 体导出为 IGES 格式字符串(版本 5.3">export_iges</a> IGES 格式导出 </dd></dl>
</div>
</div>
<a id="a15fccc3e0e7bd161dc732115fadb8e3d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15fccc3e0e7bd161dc732115fadb8e3d">&#9670;&nbsp;</a></span>export_step_file()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde::brep::export_step_file </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="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>bodies</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将 B-Rep 体导出为 STEP 文件 </p>
<p>便捷函数:调用 <a class="el" href="namespacevde_1_1brep.html#a5d766baac8a4f9dfc44b739e4c5eef5c" title="将 B-Rep 体导出为 STEP AP214 字符串">export_step()</a> 后写入文件。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>输出文件路径(建议扩展名 .step 或 .stp) </td></tr>
<tr><td class="paramname">bodies</td><td>B-Rep 体列表</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a5d766baac8a4f9dfc44b739e4c5eef5c" title="将 B-Rep 体导出为 STEP AP214 字符串">export_step</a> 获取字符串输出 </dd></dl>
</div>
</div>
<a id="a11885ccd93e2322b983c750061eaa28b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a11885ccd93e2322b983c750061eaa28b">&#9670;&nbsp;</a></span>extrude()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::extrude </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;&#160;</td>
<td class="paramname"><em>profile</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Vector3D &amp;&#160;</td>
<td class="paramname"><em>dir</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>沿方向挤出平面轮廓 </p>
<p>将平面曲线沿给定方向扫掠,生成柱状实体。</p>
<p><b>算法:</b> 曲线的每个点沿方向向量平移,两端加盖平面形成封闭实体。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">profile</td><td>轮廓曲线(必须位于一个平面内) </td></tr>
<tr><td class="paramname">dir</td><td>挤出方向向量(其长度决定挤出距离) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>挤出后的 B-Rep 实体</dd></dl>
<dl class="section pre"><dt>前置条件</dt><dd>profile 必须是平面曲线(存在于某个平面内)且闭合</dd></dl>
<div class="fragment"><div class="line"><span class="comment">// 沿 Z 轴挤出 5 个单位</span></div>
<div class="line"><span class="keyword">auto</span> circle = NurbsCurve::create_circle(<a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>(0,0,0), 2.0);</div>
<div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#a5d835536ef31f92fbc25643e34be3600">cylinder</a> = <a class="code" href="namespacevde_1_1brep.html#a11885ccd93e2322b983c750061eaa28b">extrude</a>(circle, <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a>(0, 0, 5));</div>
<div class="ttc" id="anamespacevde_1_1brep_html_a11885ccd93e2322b983c750061eaa28b"><div class="ttname"><a href="namespacevde_1_1brep.html#a11885ccd93e2322b983c750061eaa28b">vde::brep::extrude</a></div><div class="ttdeci">BrepModel extrude(const curves::NurbsCurve &amp;profile, const Vector3D &amp;dir)</div><div class="ttdoc">沿方向挤出平面轮廓</div></div>
<div class="ttc" id="anamespacevde_1_1core_html_ab763c018d19e10e91a6c6d6ab2ccc8e0"><div class="ttname"><a href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">vde::core::Vector3D</a></div><div class="ttdeci">foundation::Vector3D Vector3D</div><div class="ttdoc">双精度三维向量(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00049">point.h:49</a></div></div>
<div class="ttc" id="anamespacevde_1_1core_html_ac6aed70c4b90d13f10217267cd7a1952"><div class="ttname"><a href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">vde::core::Point3D</a></div><div class="ttdeci">foundation::Point3D Point3D</div><div class="ttdoc">双精度三维点(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00031">point.h:31</a></div></div>
<div class="ttc" id="anamespacevde_1_1sdf_html_a5d835536ef31f92fbc25643e34be3600"><div class="ttname"><a href="namespacevde_1_1sdf.html#a5d835536ef31f92fbc25643e34be3600">vde::sdf::cylinder</a></div><div class="ttdeci">double cylinder(const Point3D &amp;p, double radius, double height)</div><div class="ttdoc">带平端盖的圆柱体 SDF</div><div class="ttdef"><b>Definition:</b> <a href="sdf__primitives_8h_source.html#l00227">sdf_primitives.h:227</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#afbba855cbc153b7da3aa201246c7bfe0" title="绕轴旋转平面轮廓">revolve</a> 旋转扫掠 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a9dd78da8d6a11af52c0c95cfc41c1414" title="沿任意路径扫掠轮廓">sweep</a> 沿任意路径扫掠 </dd></dl>
</div>
</div>
<a id="a1034cf756961c7a361e43826802480a5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1034cf756961c7a361e43826802480a5">&#9670;&nbsp;</a></span>fillet()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::fillet </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>body</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>edge_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>radius</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>对边做圆角处理 </p>
<p>在指定的边上施加恒定半径的圆角(倒圆)。 适用于凹边和凸边。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">body</td><td>输入实体 </td></tr>
<tr><td class="paramname">edge_id</td><td>要倒圆的边 ID </td></tr>
<tr><td class="paramname">radius</td><td>圆角半径,必须 &gt; 0 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>圆角后的新实体</dd></dl>
<dl class="section note"><dt>注解</dt><dd>圆角半径不能超过相邻面的最小宽度,否则会产生自交。 </dd>
<dd>
只支持恒定半径圆角。变半径圆角尚未实现。</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a> = <a class="code" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a>(10, 5, 3);</div>
<div class="line"><span class="keyword">auto</span> rounded = <a class="code" href="namespacevde_1_1brep.html#a1034cf756961c7a361e43826802480a5">fillet</a>(<a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a>, 0, 2.0); <span class="comment">// 对边 0 做半径 2 的圆角</span></div>
<div class="ttc" id="anamespacevde_1_1brep_html_a1034cf756961c7a361e43826802480a5"><div class="ttname"><a href="namespacevde_1_1brep.html#a1034cf756961c7a361e43826802480a5">vde::brep::fillet</a></div><div class="ttdeci">BrepModel fillet(const BrepModel &amp;body, int edge_id, double radius)</div><div class="ttdoc">对边做圆角处理</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a2fc7e2f6626c6f8405adf05db1105a68" title="对边做倒角">chamfer</a> 倒角 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a4d2c4003b97c665cd94597baec7e1ff9" title="抽壳(挖空实体)">shell</a> 抽壳 </dd></dl>
</div>
</div>
<a id="a34d58f6db9bfb1bb8abf46bb94eafc6f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34d58f6db9bfb1bb8abf46bb94eafc6f">&#9670;&nbsp;</a></span>iges_last_error()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacevde_1_1brep.html#ae78c281601ce520b37270713c86de162">IgesError</a> vde::brep::iges_last_error </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取最近一次 IGES 导入的错误码 </p>
<dl class="section return"><dt>返回</dt><dd>IgesError 枚举值</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a3f7d19410534ba8e0e97f089fbbcb9f1" title="获取最近一次 IGES 导入的可读错误描述">iges_last_error_message</a> 获取可读描述 </dd></dl>
</div>
</div>
<a id="a3f7d19410534ba8e0e97f089fbbcb9f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3f7d19410534ba8e0e97f089fbbcb9f1">&#9670;&nbsp;</a></span>iges_last_error_message()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const std::string&amp; vde::brep::iges_last_error_message </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取最近一次 IGES 导入的可读错误描述 </p>
<dl class="section return"><dt>返回</dt><dd>错误描述字符串</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a34d58f6db9bfb1bb8abf46bb94eafc6f" title="获取最近一次 IGES 导入的错误码">iges_last_error</a> 获取枚举错误码 </dd></dl>
</div>
</div>
<a id="adee90de5426184584b215cea82bbd1ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adee90de5426184584b215cea82bbd1ac">&#9670;&nbsp;</a></span>import_iges()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&gt; vde::brep::import_iges </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>从文件导入 IGES </p>
<p>解析 .igs 或 .iges 文件并返回其中的 B-Rep 体。</p>
<p><b>算法概要:</b></p><ol type="1">
<li>读取文件并按 80 字符行分割</li>
<li>解析 Start, Global, Directory, Parameter 各段</li>
<li>根据 Directory Entry 识别实体类型和参数位置</li>
<li>构建 B-Rep 拓扑结构(B-Rep Object 或独立几何实体)</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>.igs 或 .iges 文件路径 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>B-Rep 体列表</dd></dl>
<dl class="section note"><dt>注解</dt><dd>IGES 格式较为宽松,不同 CAD 系统的实现差异很大。 对于非常规实体或自定义类型,可能会返回 IgesError::UnsupportedEntity。</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> bodies = <a class="code" href="namespacevde_1_1brep.html#adee90de5426184584b215cea82bbd1ac">import_iges</a>(<span class="stringliteral">&quot;part.igs&quot;</span>);</div>
<div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; body : bodies) {</div>
<div class="line"> <span class="keyword">auto</span> mesh = body.to_mesh(0.01);</div>
<div class="line"> <span class="comment">// 处理 mesh</span></div>
<div class="line">}</div>
<div class="ttc" id="anamespacevde_1_1brep_html_adee90de5426184584b215cea82bbd1ac"><div class="ttname"><a href="namespacevde_1_1brep.html#adee90de5426184584b215cea82bbd1ac">vde::brep::import_iges</a></div><div class="ttdeci">std::vector&lt; BrepModel &gt; import_iges(const std::string &amp;filepath)</div><div class="ttdoc">从文件导入 IGES</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a97aa899788ec303a7e61e2d6edd08175" title="从字符串导入 IGES(用于测试)">import_iges_from_string</a> 从字符串导入 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a34d58f6db9bfb1bb8abf46bb94eafc6f" title="获取最近一次 IGES 导入的错误码">iges_last_error</a> 获取错误码 </dd></dl>
</div>
</div>
<a id="a97aa899788ec303a7e61e2d6edd08175"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a97aa899788ec303a7e61e2d6edd08175">&#9670;&nbsp;</a></span>import_iges_from_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&gt; vde::brep::import_iges_from_string </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>data</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>从字符串导入 IGES(用于测试) </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">data</td><td>IGES 文件完整内容(字符串形式) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>B-Rep 体列表</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#adee90de5426184584b215cea82bbd1ac" title="从文件导入 IGES">import_iges</a> 从文件导入 </dd></dl>
</div>
</div>
<a id="ae24e129af52f39a772efac984415ff8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae24e129af52f39a772efac984415ff8d">&#9670;&nbsp;</a></span>import_step()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&gt; vde::brep::import_step </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>从文件导入 STEPAP203/AP214 </p>
<p>解析 .step / .stp 文件并提取所有 PRODUCT 对应的 B-Rep 体。 每个 PRODUCT 定义对应返回向量的一个元素。</p>
<p><b>算法概要:</b></p><ol type="1">
<li>读取文件并分割为 HEADER, DATA 段</li>
<li>解析 DATA 段中的实体定义(::ID = TYPE(params);</li>
<li>构建实体依赖图并按拓扑层次重建模型</li>
<li>将每个 CLOSED_SHELL 转换为 <a class="el" href="classvde_1_1brep_1_1BrepModel.html" title="B-Rep 模型">BrepModel</a></li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">filepath</td><td>.step 或 .stp 文件路径 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>B-Rep 体列表(每个文件中的 PRODUCT 一个)</dd></dl>
<dl class="section note"><dt>注解</dt><dd>大型 STEP 文件(&gt; 100 MB)可能需要数秒到数十秒进行解析。</dd></dl>
<div class="fragment"><div class="line"> {.cpp<span class="stringliteral">&quot;}</span></div>
<div class="line"><span class="stringliteral">auto bodies = import_step(&quot;</span>assembly.step<span class="stringliteral">&quot;);</span></div>
<div class="line"><span class="stringliteral">for (auto&amp; body : bodies) {</span></div>
<div class="line"><span class="stringliteral"> auto mesh = body.to_mesh();</span></div>
<div class="line"><span class="stringliteral"> // 渲染或处理 mesh</span></div>
<div class="line"><span class="stringliteral">}</span></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ae5d3e4ac3043b36e38a7734ea5592518" title="从字符串导入 STEP(用于测试和嵌入式场景)">import_step_from_string</a> 从内存字符串导入(测试用) </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a282cb1ce3142931d20330e95e25c1460" title="获取最近一次 STEP 导入的错误码">step_last_error</a> 获取错误码 </dd></dl>
</div>
</div>
<a id="ae5d3e4ac3043b36e38a7734ea5592518"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5d3e4ac3043b36e38a7734ea5592518">&#9670;&nbsp;</a></span>import_step_from_string()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">std::vector&lt;<a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a>&gt; vde::brep::import_step_from_string </td>
<td>(</td>
<td class="paramtype">const std::string &amp;&#160;</td>
<td class="paramname"><em>step_data</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>从字符串导入 STEP(用于测试和嵌入式场景) </p>
<p><a class="el" href="namespacevde_1_1brep.html#ae24e129af52f39a772efac984415ff8d" title="从文件导入 STEPAP203/AP214">import_step()</a> 功能完全相同,但从内存中的 STEP 数据字符串解析。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">step_data</td><td>完整的 STEP 文件内容(字符串形式) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>B-Rep 体列表</dd></dl>
<div class="fragment"><div class="line">std::string step_str = R<span class="stringliteral">&quot;(</span></div>
<div class="line"><span class="stringliteral">ISO-10303-21;</span></div>
<div class="line"><span class="stringliteral">HEADER; ... ENDSEC;</span></div>
<div class="line"><span class="stringliteral">DATA; ... ENDSEC;</span></div>
<div class="line"><span class="stringliteral">END-ISO-10303-21;</span></div>
<div class="line"><span class="stringliteral">)&quot;;</span></div>
<div class="line"><span class="stringliteral"></span><span class="keyword">auto</span> bodies = <a class="code" href="namespacevde_1_1brep.html#ae5d3e4ac3043b36e38a7734ea5592518">import_step_from_string</a>(step_str);</div>
<div class="ttc" id="anamespacevde_1_1brep_html_ae5d3e4ac3043b36e38a7734ea5592518"><div class="ttname"><a href="namespacevde_1_1brep.html#ae5d3e4ac3043b36e38a7734ea5592518">vde::brep::import_step_from_string</a></div><div class="ttdeci">std::vector&lt; BrepModel &gt; import_step_from_string(const std::string &amp;step_data)</div><div class="ttdoc">从字符串导入 STEP(用于测试和嵌入式场景)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ae24e129af52f39a772efac984415ff8d" title="从文件导入 STEPAP203/AP214">import_step</a> 从文件导入 </dd></dl>
</div>
</div>
<a id="ae4431aff57585213ee2713a7623ab7ae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4431aff57585213ee2713a7623ab7ae">&#9670;&nbsp;</a></span>loft()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::loft </td>
<td>(</td>
<td class="paramtype">const std::vector&lt; <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &gt; &amp;&#160;</td>
<td class="paramname"><em>profiles</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>在两个或多个轮廓曲线之间放样 </p>
<p>通过线性或平滑插值连接多个平行或非平行轮廓, 生成过渡实体。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">profiles</td><td>轮廓曲线列表(至少 2 条) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>放样后的 B-Rep 实体</dd></dl>
<dl class="section pre"><dt>前置条件</dt><dd>profiles.size() ≥ 2 </dd>
<dd>
所有轮廓应是平面曲线(逐一)</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> profile_a = NurbsCurve::create_circle(<a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>(0,0,0), 5.0);</div>
<div class="line"><span class="keyword">auto</span> profile_b = NurbsCurve::create_circle(<a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>(0,0,10), 2.0);</div>
<div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#a049cefd36713ff9b184c0ad74dab96cf">cone</a> = <a class="code" href="namespacevde_1_1brep.html#ae4431aff57585213ee2713a7623ab7ae">loft</a>({profile_a, profile_b});</div>
<div class="ttc" id="anamespacevde_1_1brep_html_ae4431aff57585213ee2713a7623ab7ae"><div class="ttname"><a href="namespacevde_1_1brep.html#ae4431aff57585213ee2713a7623ab7ae">vde::brep::loft</a></div><div class="ttdeci">BrepModel loft(const std::vector&lt; curves::NurbsCurve &gt; &amp;profiles)</div><div class="ttdoc">在两个或多个轮廓曲线之间放样</div></div>
<div class="ttc" id="anamespacevde_1_1sdf_html_a049cefd36713ff9b184c0ad74dab96cf"><div class="ttname"><a href="namespacevde_1_1sdf.html#a049cefd36713ff9b184c0ad74dab96cf">vde::sdf::cone</a></div><div class="ttdeci">double cone(const Point3D &amp;p, double angle_rad, double height)</div><div class="ttdoc">圆锥台的 SDF(非内联实现)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a11885ccd93e2322b983c750061eaa28b" title="沿方向挤出平面轮廓">extrude</a> 单轮廓挤出 </dd></dl>
</div>
</div>
<a id="ac1cb7871101ff5be06577548ac41aaac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac1cb7871101ff5be06577548ac41aaac">&#9670;&nbsp;</a></span>make_box()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::make_box </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>w</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>h</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#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>以原点为中心、轴对齐的立方体。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">w</td><td>宽度(X 方向),必须 &gt; 0 </td></tr>
<tr><td class="paramname">h</td><td>高度(Y 方向),必须 &gt; 0 </td></tr>
<tr><td class="paramname">d</td><td>深度(Z 方向),必须 &gt; 0 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>实心立方体 B-Rep</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a> = <a class="code" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac">make_box</a>(10, 5, 3); <span class="comment">// 10×5×3 的盒子</span></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ad5e851f10fbd1962c42a8574b193faa3" title="创建圆柱体">make_cylinder</a> 圆柱体 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61" title="创建球体">make_sphere</a> 球体 </dd></dl>
</div>
</div>
<a id="ad5e851f10fbd1962c42a8574b193faa3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5e851f10fbd1962c42a8574b193faa3">&#9670;&nbsp;</a></span>make_cylinder()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::make_cylinder </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>radius</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>height</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>segments</em> = <code>32</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>创建圆柱体 </p>
<p>沿 Y 轴、以原点为中心的圆柱体。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">radius</td><td>截面半径,必须 &gt; 0 </td></tr>
<tr><td class="paramname">height</td><td>总高度,沿 Y 轴从 -h/2 到 +h/2 </td></tr>
<tr><td class="paramname">segments</td><td>截面分段数(边数,默认 32 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>实心圆柱体 B-Rep</dd></dl>
<dl class="section note"><dt>注解</dt><dd>segments 越大圆柱越光滑,但面和边数增加。</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> cyl = <a class="code" href="namespacevde_1_1brep.html#ad5e851f10fbd1962c42a8574b193faa3">make_cylinder</a>(2.0, 10.0, 64); <span class="comment">// 高精度圆柱</span></div>
<div class="ttc" id="anamespacevde_1_1brep_html_ad5e851f10fbd1962c42a8574b193faa3"><div class="ttname"><a href="namespacevde_1_1brep.html#ad5e851f10fbd1962c42a8574b193faa3">vde::brep::make_cylinder</a></div><div class="ttdeci">BrepModel make_cylinder(double radius, double height, int segments=32)</div><div class="ttdoc">创建圆柱体</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ac1cb7871101ff5be06577548ac41aaac" title="创建立方体">make_box</a> 立方体 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61" title="创建球体">make_sphere</a> 球体 </dd></dl>
</div>
</div>
<a id="a30605a9398550c5cc0b298e04c60ca61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a30605a9398550c5cc0b298e04c60ca61">&#9670;&nbsp;</a></span>make_sphere()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::make_sphere </td>
<td>(</td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>radius</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>segments_u</em> = <code>32</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>segments_v</em> = <code>16</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>创建球体 </p>
<p>以原点为中心的球体。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">radius</td><td>球半径,必须 &gt; 0 </td></tr>
<tr><td class="paramname">segments_u</td><td>经度方向分段数(默认 32 </td></tr>
<tr><td class="paramname">segments_v</td><td>纬度方向分段数(默认 16 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>实心球体 B-Rep</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a> = <a class="code" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61">make_sphere</a>(5.0, 32, 32);</div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ad5e851f10fbd1962c42a8574b193faa3" title="创建圆柱体">make_cylinder</a> 圆柱体 </dd></dl>
</div>
</div>
<a id="afbba855cbc153b7da3aa201246c7bfe0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afbba855cbc153b7da3aa201246c7bfe0">&#9670;&nbsp;</a></span>revolve()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::revolve </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;&#160;</td>
<td class="paramname"><em>profile</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Point3D &amp;&#160;</td>
<td class="paramname"><em>axis_origin</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const Vector3D &amp;&#160;</td>
<td class="paramname"><em>axis_dir</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>angle_rad</em> = <code>2.0&#160;*M_PI</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>绕轴旋转平面轮廓 </p>
<p>将轮廓绕给定轴旋转,生成旋转体(如轮子、瓶子等)。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">profile</td><td>轮廓曲线(通常位于轴的半平面中) </td></tr>
<tr><td class="paramname">axis_origin</td><td>旋转轴上的一个点 </td></tr>
<tr><td class="paramname">axis_dir</td><td>旋转轴方向(单位向量) </td></tr>
<tr><td class="paramname">angle_rad</td><td>旋转角度(弧度,默认 2π = 完整的旋转体) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>旋转后的 B-Rep 实体</dd></dl>
<dl class="section pre"><dt>前置条件</dt><dd>profile 必须在轴的同一侧(不应跨越轴线)</dd></dl>
<div class="fragment"><div class="line"><span class="comment">// 绕 Y 轴旋转半圆,生成球体的一半</span></div>
<div class="line">NurbsCurve semicircle = 在 XZ 平面中的半圆弧;</div>
<div class="line"><span class="keyword">auto</span> half_sphere = <a class="code" href="namespacevde_1_1brep.html#afbba855cbc153b7da3aa201246c7bfe0">revolve</a>(semicircle, <a class="code" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">Point3D</a>(0,0,0),</div>
<div class="line"> <a class="code" href="namespacevde_1_1core.html#ab763c018d19e10e91a6c6d6ab2ccc8e0">Vector3D</a>(0,1,0), M_PI);</div>
<div class="ttc" id="anamespacevde_1_1brep_html_afbba855cbc153b7da3aa201246c7bfe0"><div class="ttname"><a href="namespacevde_1_1brep.html#afbba855cbc153b7da3aa201246c7bfe0">vde::brep::revolve</a></div><div class="ttdeci">BrepModel revolve(const curves::NurbsCurve &amp;profile, const Point3D &amp;axis_origin, const Vector3D &amp;axis_dir, double angle_rad=2.0 *M_PI)</div><div class="ttdoc">绕轴旋转平面轮廓</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a11885ccd93e2322b983c750061eaa28b" title="沿方向挤出平面轮廓">extrude</a> 线性挤出 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#a30605a9398550c5cc0b298e04c60ca61" title="创建球体">make_sphere</a> 直接创建球体 </dd></dl>
</div>
</div>
<a id="a4d2c4003b97c665cd94597baec7e1ff9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4d2c4003b97c665cd94597baec7e1ff9">&#9670;&nbsp;</a></span>shell()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::shell </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>body</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>face_id</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>thickness</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>抽壳(挖空实体) </p>
<p>将实体变为等厚度的壳,去除指定面形成开口。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">body</td><td>输入实心实体 </td></tr>
<tr><td class="paramname">face_id</td><td>要移除的面 ID(形成开口),-1 表示封闭壳(不开口) </td></tr>
<tr><td class="paramname">thickness</td><td>壁厚(正值 = 向外偏移,负值 = 向内偏移) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>抽壳后的新实体</dd></dl>
<dl class="section note"><dt>注解</dt><dd>壁厚不应超过实体最小尺寸的一半。 </dd>
<dd>
当 face_id = -1 时,结果是一个封闭的壳(中空但没有开口)。</dd></dl>
<div class="fragment"><div class="line"> {.cpp<span class="stringliteral">&quot;}</span></div>
<div class="line"><span class="stringliteral">auto box = make_box(10, 5, 3);</span></div>
<div class="line"><span class="stringliteral">auto shelled = shell(box, 0, 0.5); // 移除面 0,壁厚 0.5</span></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a1034cf756961c7a361e43826802480a5" title="对边做圆角处理">fillet</a> 圆角 </dd></dl>
</div>
</div>
<a id="a282cb1ce3142931d20330e95e25c1460"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a282cb1ce3142931d20330e95e25c1460">&#9670;&nbsp;</a></span>step_last_error()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespacevde_1_1brep.html#add9286f426ba3fed65f107ac2e73c4ef">StepError</a> vde::brep::step_last_error </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取最近一次 STEP 导入的错误码 </p>
<p>线程安全的:返回当前线程最近一次导入的错误。</p>
<dl class="section return"><dt>返回</dt><dd>StepError 枚举值</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#ad744c4e7d42f2f8f7a02ffa6daf72d6e" title="获取最近一次 STEP 导入的可读错误描述">step_last_error_message</a> 获取可读的错误描述 </dd></dl>
</div>
</div>
<a id="ad744c4e7d42f2f8f7a02ffa6daf72d6e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad744c4e7d42f2f8f7a02ffa6daf72d6e">&#9670;&nbsp;</a></span>step_last_error_message()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const std::string&amp; vde::brep::step_last_error_message </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取最近一次 STEP 导入的可读错误描述 </p>
<dl class="section return"><dt>返回</dt><dd>错误描述字符串(如 "Missing entity reference #42"</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> bodies = <a class="code" href="namespacevde_1_1brep.html#ae24e129af52f39a772efac984415ff8d">import_step</a>(<span class="stringliteral">&quot;nonexistent.step&quot;</span>);</div>
<div class="line"><span class="keywordflow">if</span> (bodies.empty()) {</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;Import failed: &quot;</span> &lt;&lt; <a class="code" href="namespacevde_1_1brep.html#ad744c4e7d42f2f8f7a02ffa6daf72d6e">step_last_error_message</a>() &lt;&lt; std::endl;</div>
<div class="line">}</div>
<div class="ttc" id="anamespacevde_1_1brep_html_ad744c4e7d42f2f8f7a02ffa6daf72d6e"><div class="ttname"><a href="namespacevde_1_1brep.html#ad744c4e7d42f2f8f7a02ffa6daf72d6e">vde::brep::step_last_error_message</a></div><div class="ttdeci">const std::string &amp; step_last_error_message()</div><div class="ttdoc">获取最近一次 STEP 导入的可读错误描述</div></div>
<div class="ttc" id="anamespacevde_1_1brep_html_ae24e129af52f39a772efac984415ff8d"><div class="ttname"><a href="namespacevde_1_1brep.html#ae24e129af52f39a772efac984415ff8d">vde::brep::import_step</a></div><div class="ttdeci">std::vector&lt; BrepModel &gt; import_step(const std::string &amp;filepath)</div><div class="ttdoc">从文件导入 STEPAP203/AP214</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a282cb1ce3142931d20330e95e25c1460" title="获取最近一次 STEP 导入的错误码">step_last_error</a> 获取枚举错误码 </dd></dl>
</div>
</div>
<a id="a9dd78da8d6a11af52c0c95cfc41c1414"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9dd78da8d6a11af52c0c95cfc41c1414">&#9670;&nbsp;</a></span>sweep()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> vde::brep::sweep </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;&#160;</td>
<td class="paramname"><em>profile</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classvde_1_1curves_1_1NurbsCurve.html">curves::NurbsCurve</a> &amp;&#160;</td>
<td class="paramname"><em>path</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>沿任意路径扫掠轮廓 </p>
<p>轮廓沿一条空间路径曲线运动,生成管道或异形截面杆。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">profile</td><td>截面轮廓(需位于路径起点的垂直平面内) </td></tr>
<tr><td class="paramname">path</td><td>扫掠路径曲线 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>扫掠后的 B-Rep 实体</dd></dl>
<dl class="section note"><dt>注解</dt><dd>路径曲率过大处可能出现自交,需要控制路径的光滑性。</dd></dl>
<div class="fragment"><div class="line"> {.cpp<span class="stringliteral">&quot;}</span></div>
<div class="line"><span class="stringliteral">auto circle = NurbsCurve::create_circle(Point3D(0,0,0), 0.5);</span></div>
<div class="line"><span class="stringliteral">auto helix = NurbsCurve::create_helix(// ...);</span></div>
<div class="line"><span class="stringliteral">auto pipe = sweep(circle, helix);</span></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1brep.html#a11885ccd93e2322b983c750061eaa28b" title="沿方向挤出平面轮廓">extrude</a> 直线挤出 </dd>
<dd>
<a class="el" href="namespacevde_1_1brep.html#afbba855cbc153b7da3aa201246c7bfe0" title="绕轴旋转平面轮廓">revolve</a> 旋转扫掠 </dd></dl>
</div>
</div>
<a id="acb612097bfb5e886285f2227dcc9216f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb612097bfb5e886285f2227dcc9216f">&#9670;&nbsp;</a></span>validate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structvde_1_1brep_1_1ValidationResult.html">ValidationResult</a> vde::brep::validate </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classvde_1_1brep_1_1BrepModel.html">BrepModel</a> &amp;&#160;</td>
<td class="paramname"><em>body</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p><a class="el" href="classvde_1_1brep_1_1BrepModel.html" title="B-Rep 模型">BrepModel</a> 执行综合验证 </p>
<p>检查以下项:</p>
<ol type="1">
<li><b>基本完整性</b>: 顶点/边/面计数 &gt; 0ID 引用有效</li>
<li><b>水密性</b>: 每条边恰好有 2 个相邻面,构成封闭流形</li>
<li><b>方向一致性</b>: 相邻面的法向量方向一致(没有翻转的面)</li>
<li><b>自交检测</b>: 面片内部不相交(共享边除外)</li>
<li><b>边尺寸</b>: 无退化边(太短)或异常长边</li>
<li><b>壳闭合性</b>: 每个标记为 closed 的壳在几何上确实封闭</li>
</ol>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">body</td><td>待验证的 B-Rep 模型 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="structvde_1_1brep_1_1ValidationResult.html" title="B-Rep 模型的综合验证结果">ValidationResult</a> 包含所有检查结果的详细报告</dd></dl>
<dl class="section note"><dt>注解</dt><dd>自交检测是最昂贵的检查项(O(n²) 面对数), 对于大模型(&gt; 1000 面)可能需要较长时间。</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">auto</span> result = <a class="code" href="namespacevde_1_1brep.html#acb612097bfb5e886285f2227dcc9216f">validate</a>(my_model);</div>
<div class="line"><span class="keywordflow">if</span> (!result.valid) {</div>
<div class="line"> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; err : result.errors) {</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;Error: &quot;</span> &lt;&lt; err &lt;&lt; std::endl;</div>
<div class="line"> }</div>
<div class="line">}</div>
<div class="line"><span class="keywordflow">if</span> (result.watertightness &lt; 0.99) {</div>
<div class="line"> std::cerr &lt;&lt; <span class="stringliteral">&quot;Model is not watertight!&quot;</span> &lt;&lt; std::endl;</div>
<div class="line">}</div>
<div class="ttc" id="anamespacevde_1_1brep_html_acb612097bfb5e886285f2227dcc9216f"><div class="ttname"><a href="namespacevde_1_1brep.html#acb612097bfb5e886285f2227dcc9216f">vde::brep::validate</a></div><div class="ttdeci">ValidationResult validate(const BrepModel &amp;body)</div><div class="ttdoc">对 BrepModel 执行综合验证</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="classvde_1_1brep_1_1BrepModel.html#a1c7273fff65281e8ce2353808b8e84ed" title="检查模型有效性(快速版本)">BrepModel::is_valid()</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="navelem"><a class="el" href="namespacevde.html">vde</a></li><li class="navelem"><a class="el" href="namespacevde_1_1brep.html">brep</a></li>
<li class="footer">生成于 2026年 七月 24日 星期五 11:21:23 , 为 ViewDesignEngine使用 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>