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

2095 lines
119 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ViewDesignEngine: include/vde/capi/vde_capi.h 文件参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">ViewDesignEngine
&#160;<span id="projectnumber">3.1.0</span>
</div>
<div id="projectbrief">高性能 CAD 计算几何引擎</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','搜索');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('vde__capi_8h.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="#typedef-members">类型定义</a> &#124;
<a href="#func-members">函数</a> </div>
<div class="headertitle">
<div class="title">vde_capi.h 文件参考<div class="ingroups"><a class="el" href="group__capi.html">C API 模块 (vde::capi)</a></div></div> </div>
</div><!--header-->
<div class="contents">
<p>ViewDesignEngine C API — 跨语言边界接口
<a href="#details">更多...</a></p>
<div class="textblock"><code>#include &lt;stddef.h&gt;</code><br />
<code>#include &lt;stdint.h&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
vde_capi.h 的引用(Include)关系图:</div>
<div class="dyncontent">
<div class="center"><img src="vde__capi_8h__incl.png" border="0" usemap="#ainclude_2vde_2capi_2vde__capi_8h" alt=""/></div>
<map name="ainclude_2vde_2capi_2vde__capi_8h" id="ainclude_2vde_2capi_2vde__capi_8h">
<area shape="rect" title="ViewDesignEngine C API — 跨语言边界接口" alt="" coords="13,5,169,47"/>
<area shape="rect" title=" " alt="" coords="5,95,80,121"/>
<area shape="rect" title=" " alt="" coords="105,95,175,121"/>
</map>
</div>
</div>
<p><a href="vde__capi_8h_source.html">浏览源代码.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
类型定义</h2></td></tr>
<tr class="memitem:a5d25ac71389adcd7f6e974673cbe07c6"><td class="memItemLeft" align="right" valign="top">typedef struct VdeContext *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a></td></tr>
<tr class="memdesc:a5d25ac71389adcd7f6e974673cbe07c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">引擎上下文句柄 — 管理错误状态和内部资源 <a href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">更多...</a><br /></td></tr>
<tr class="separator:a5d25ac71389adcd7f6e974673cbe07c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a612991cb0f7daa4036b555eecb5b1700"><td class="memItemLeft" align="right" valign="top">typedef struct VdeMesh *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a></td></tr>
<tr class="memdesc:a612991cb0f7daa4036b555eecb5b1700"><td class="mdescLeft">&#160;</td><td class="mdescRight">三角网格句柄 — 顶点+面集合 <a href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">更多...</a><br /></td></tr>
<tr class="separator:a612991cb0f7daa4036b555eecb5b1700"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adbe99e0d601bba164d42b73d8d3f28f7"><td class="memItemLeft" align="right" valign="top">typedef struct VdeCurve *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a></td></tr>
<tr class="memdesc:adbe99e0d601bba164d42b73d8d3f28f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">参数曲线句柄 — NURBS 曲线 <a href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">更多...</a><br /></td></tr>
<tr class="separator:adbe99e0d601bba164d42b73d8d3f28f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a17900fada7dfe2be0874044ea56f31"><td class="memItemLeft" align="right" valign="top">typedef struct VdeSolver *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a></td></tr>
<tr class="memdesc:a3a17900fada7dfe2be0874044ea56f31"><td class="mdescLeft">&#160;</td><td class="mdescRight">约束求解器句柄 — 二维草图约束 <a href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">更多...</a><br /></td></tr>
<tr class="separator:a3a17900fada7dfe2be0874044ea56f31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a749b764a4e5406035946b13790a9a2f3"><td class="memItemLeft" align="right" valign="top">typedef struct VdeBody *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a></td></tr>
<tr class="memdesc:a749b764a4e5406035946b13790a9a2f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">B-Rep 实体句柄 — 边界表示模型 <a href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">更多...</a><br /></td></tr>
<tr class="separator:a749b764a4e5406035946b13790a9a2f3"><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:af0565d3eee132efe7d6e8cee37e102df"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#af0565d3eee132efe7d6e8cee37e102df">vde_create</a> (void)</td></tr>
<tr class="memdesc:af0565d3eee132efe7d6e8cee37e102df"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建 ViewDesignEngine 上下文 <a href="vde__capi_8h.html#af0565d3eee132efe7d6e8cee37e102df">更多...</a><br /></td></tr>
<tr class="separator:af0565d3eee132efe7d6e8cee37e102df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aded4ee33d5564b05114ad605d003f34d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#aded4ee33d5564b05114ad605d003f34d">vde_destroy</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx)</td></tr>
<tr class="memdesc:aded4ee33d5564b05114ad605d003f34d"><td class="mdescLeft">&#160;</td><td class="mdescRight">销毁引擎上下文 <a href="vde__capi_8h.html#aded4ee33d5564b05114ad605d003f34d">更多...</a><br /></td></tr>
<tr class="separator:aded4ee33d5564b05114ad605d003f34d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa5eee51a9795e1c06826bf6ad6144e8d"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#aa5eee51a9795e1c06826bf6ad6144e8d">vde_version</a> (void)</td></tr>
<tr class="memdesc:aa5eee51a9795e1c06826bf6ad6144e8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取引擎版本字符串 <a href="vde__capi_8h.html#aa5eee51a9795e1c06826bf6ad6144e8d">更多...</a><br /></td></tr>
<tr class="separator:aa5eee51a9795e1c06826bf6ad6144e8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44fa58de60fbdf2b08956a4f4dd8a0aa"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a44fa58de60fbdf2b08956a4f4dd8a0aa">vde_last_error</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx)</td></tr>
<tr class="memdesc:a44fa58de60fbdf2b08956a4f4dd8a0aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取最后一次操作的错误描述 <a href="vde__capi_8h.html#a44fa58de60fbdf2b08956a4f4dd8a0aa">更多...</a><br /></td></tr>
<tr class="separator:a44fa58de60fbdf2b08956a4f4dd8a0aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3364eca094757a19af74398c66ab43f0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a3364eca094757a19af74398c66ab43f0">vde_load_mesh</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, const char *path)</td></tr>
<tr class="memdesc:a3364eca094757a19af74398c66ab43f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">从文件加载三角网格 <a href="vde__capi_8h.html#a3364eca094757a19af74398c66ab43f0">更多...</a><br /></td></tr>
<tr class="separator:a3364eca094757a19af74398c66ab43f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b48ac40d7da443cc951d7c3bf8f6003"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a5b48ac40d7da443cc951d7c3bf8f6003">vde_save_mesh</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh, const char *path, const char *format)</td></tr>
<tr class="memdesc:a5b48ac40d7da443cc951d7c3bf8f6003"><td class="mdescLeft">&#160;</td><td class="mdescRight">将三角网格保存为文件 <a href="vde__capi_8h.html#a5b48ac40d7da443cc951d7c3bf8f6003">更多...</a><br /></td></tr>
<tr class="separator:a5b48ac40d7da443cc951d7c3bf8f6003"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7faf11c35d4994e668e08b16174ec71f"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a7faf11c35d4994e668e08b16174ec71f">vde_mesh_num_vertices</a> (<a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh)</td></tr>
<tr class="memdesc:a7faf11c35d4994e668e08b16174ec71f"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取网格的顶点数量 <a href="vde__capi_8h.html#a7faf11c35d4994e668e08b16174ec71f">更多...</a><br /></td></tr>
<tr class="separator:a7faf11c35d4994e668e08b16174ec71f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aabd59a0d58b060cb34e4ae291e12b72b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#aabd59a0d58b060cb34e4ae291e12b72b">vde_mesh_num_faces</a> (<a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh)</td></tr>
<tr class="memdesc:aabd59a0d58b060cb34e4ae291e12b72b"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取网格的三角面数量 <a href="vde__capi_8h.html#aabd59a0d58b060cb34e4ae291e12b72b">更多...</a><br /></td></tr>
<tr class="separator:aabd59a0d58b060cb34e4ae291e12b72b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46332b2cafe166b1f3f769120d35e68e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a46332b2cafe166b1f3f769120d35e68e">vde_mesh_get_vertex</a> (<a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh, size_t idx, double *out_x, double *out_y, double *out_z)</td></tr>
<tr class="memdesc:a46332b2cafe166b1f3f769120d35e68e"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取指定索引的顶点坐标 <a href="vde__capi_8h.html#a46332b2cafe166b1f3f769120d35e68e">更多...</a><br /></td></tr>
<tr class="separator:a46332b2cafe166b1f3f769120d35e68e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a44f0de742779b37b5a1d4c4d926ee46c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a44f0de742779b37b5a1d4c4d926ee46c">vde_mesh_get_bounds</a> (<a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh, double *out_min_x, double *out_min_y, double *out_min_z, double *out_max_x, double *out_max_y, double *out_max_z)</td></tr>
<tr class="memdesc:a44f0de742779b37b5a1d4c4d926ee46c"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取网格的轴对齐包围盒 <a href="vde__capi_8h.html#a44f0de742779b37b5a1d4c4d926ee46c">更多...</a><br /></td></tr>
<tr class="separator:a44f0de742779b37b5a1d4c4d926ee46c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4763d4d03c112d2b5af3e268ff0b591"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#ad4763d4d03c112d2b5af3e268ff0b591">vde_mesh_free</a> (<a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh)</td></tr>
<tr class="memdesc:ad4763d4d03c112d2b5af3e268ff0b591"><td class="mdescLeft">&#160;</td><td class="mdescRight">释放网格句柄及其资源 <a href="vde__capi_8h.html#ad4763d4d03c112d2b5af3e268ff0b591">更多...</a><br /></td></tr>
<tr class="separator:ad4763d4d03c112d2b5af3e268ff0b591"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a77b1f5142fd90da486a5c139c3b14c16"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a77b1f5142fd90da486a5c139c3b14c16">vde_mesh_simplify</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh, double target_ratio)</td></tr>
<tr class="memdesc:a77b1f5142fd90da486a5c139c3b14c16"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格简化 <a href="vde__capi_8h.html#a77b1f5142fd90da486a5c139c3b14c16">更多...</a><br /></td></tr>
<tr class="separator:a77b1f5142fd90da486a5c139c3b14c16"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46bd97beffa458984cbc323c65c7c238"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a46bd97beffa458984cbc323c65c7c238">vde_mesh_smooth</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh, int iterations)</td></tr>
<tr class="memdesc:a46bd97beffa458984cbc323c65c7c238"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格平滑(Laplacian 或 Taubin 平滑) <a href="vde__capi_8h.html#a46bd97beffa458984cbc323c65c7c238">更多...</a><br /></td></tr>
<tr class="separator:a46bd97beffa458984cbc323c65c7c238"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ce60d7da004c9b840d619a71ca39a8a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a3ce60d7da004c9b840d619a71ca39a8a">vde_mesh_boolean</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> a, <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> b, int operation)</td></tr>
<tr class="memdesc:a3ce60d7da004c9b840d619a71ca39a8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">网格布尔运算 <a href="vde__capi_8h.html#a3ce60d7da004c9b840d619a71ca39a8a">更多...</a><br /></td></tr>
<tr class="separator:a3ce60d7da004c9b840d619a71ca39a8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2e622ea345565541cd5fef16e97ecec6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a2e622ea345565541cd5fef16e97ecec6">vde_curve_create_bezier</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, const double *control_points, int num_points, int dim)</td></tr>
<tr class="memdesc:a2e622ea345565541cd5fef16e97ecec6"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建 Bézier 曲线 <a href="vde__capi_8h.html#a2e622ea345565541cd5fef16e97ecec6">更多...</a><br /></td></tr>
<tr class="separator:a2e622ea345565541cd5fef16e97ecec6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7cdf208a934eb1335beba7bcf98bb75d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a7cdf208a934eb1335beba7bcf98bb75d">vde_curve_evaluate</a> (<a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a> curve, double t, double *out_x, double *out_y, double *out_z)</td></tr>
<tr class="memdesc:a7cdf208a934eb1335beba7bcf98bb75d"><td class="mdescLeft">&#160;</td><td class="mdescRight">在参数 t 处求值曲线 <a href="vde__capi_8h.html#a7cdf208a934eb1335beba7bcf98bb75d">更多...</a><br /></td></tr>
<tr class="separator:a7cdf208a934eb1335beba7bcf98bb75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec5aedf79c8a7f3ac64e92417118b735"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#aec5aedf79c8a7f3ac64e92417118b735">vde_curve_degree</a> (<a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a> curve)</td></tr>
<tr class="memdesc:aec5aedf79c8a7f3ac64e92417118b735"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取曲线的次数 <a href="vde__capi_8h.html#aec5aedf79c8a7f3ac64e92417118b735">更多...</a><br /></td></tr>
<tr class="separator:aec5aedf79c8a7f3ac64e92417118b735"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8b1982d568ee1889beb9fac1cf19a71f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a8b1982d568ee1889beb9fac1cf19a71f">vde_curve_free</a> (<a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a> curve)</td></tr>
<tr class="memdesc:a8b1982d568ee1889beb9fac1cf19a71f"><td class="mdescLeft">&#160;</td><td class="mdescRight">释放曲线句柄 <a href="vde__capi_8h.html#a8b1982d568ee1889beb9fac1cf19a71f">更多...</a><br /></td></tr>
<tr class="separator:a8b1982d568ee1889beb9fac1cf19a71f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f79c7bc11d4bafcebe8d15846ab2b92"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a6f79c7bc11d4bafcebe8d15846ab2b92">vde_collision_gjk_spheres</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, double cx1, double cy1, double cz1, double r1, double cx2, double cy2, double cz2, double r2)</td></tr>
<tr class="memdesc:a6f79c7bc11d4bafcebe8d15846ab2b92"><td class="mdescLeft">&#160;</td><td class="mdescRight">两球体碰撞检测(GJK 算法) <a href="vde__capi_8h.html#a6f79c7bc11d4bafcebe8d15846ab2b92">更多...</a><br /></td></tr>
<tr class="separator:a6f79c7bc11d4bafcebe8d15846ab2b92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee0d5d4340cff8a807222457f3fd4535"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#aee0d5d4340cff8a807222457f3fd4535">vde_collision_ray_mesh</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh, double ox, double oy, double oz, double dx, double dy, double dz, double *out_t, double *out_x, double *out_y, double *out_z)</td></tr>
<tr class="memdesc:aee0d5d4340cff8a807222457f3fd4535"><td class="mdescLeft">&#160;</td><td class="mdescRight">射线与网格的最近交点查询 <a href="vde__capi_8h.html#aee0d5d4340cff8a807222457f3fd4535">更多...</a><br /></td></tr>
<tr class="separator:aee0d5d4340cff8a807222457f3fd4535"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af881dd70f559a3ff280b0047c2fcc8cd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#af881dd70f559a3ff280b0047c2fcc8cd">vde_solver_create</a> (void)</td></tr>
<tr class="memdesc:af881dd70f559a3ff280b0047c2fcc8cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建二维约束求解器 <a href="vde__capi_8h.html#af881dd70f559a3ff280b0047c2fcc8cd">更多...</a><br /></td></tr>
<tr class="separator:af881dd70f559a3ff280b0047c2fcc8cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a665e2414e558165f136837ce95119f74"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a665e2414e558165f136837ce95119f74">vde_solver_add_point</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver, double x, double y, int fixed)</td></tr>
<tr class="memdesc:a665e2414e558165f136837ce95119f74"><td class="mdescLeft">&#160;</td><td class="mdescRight">向求解器添加点 <a href="vde__capi_8h.html#a665e2414e558165f136837ce95119f74">更多...</a><br /></td></tr>
<tr class="separator:a665e2414e558165f136837ce95119f74"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9cf4e2fc71bfa61073144147bf76c2e8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a9cf4e2fc71bfa61073144147bf76c2e8">vde_solver_add_line</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver, int p0, int p1)</td></tr>
<tr class="memdesc:a9cf4e2fc71bfa61073144147bf76c2e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">向求解器添加线段(由两个点定义) <a href="vde__capi_8h.html#a9cf4e2fc71bfa61073144147bf76c2e8">更多...</a><br /></td></tr>
<tr class="separator:a9cf4e2fc71bfa61073144147bf76c2e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a73d39d4a953542e738faf6e337c6420c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a73d39d4a953542e738faf6e337c6420c">vde_solver_add_distance_constraint</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver, int p0, int p1, double d)</td></tr>
<tr class="memdesc:a73d39d4a953542e738faf6e337c6420c"><td class="mdescLeft">&#160;</td><td class="mdescRight">添加距离约束(两点之间) <a href="vde__capi_8h.html#a73d39d4a953542e738faf6e337c6420c">更多...</a><br /></td></tr>
<tr class="separator:a73d39d4a953542e738faf6e337c6420c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40107e23d391015f1e17e7ca94c81e73"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a40107e23d391015f1e17e7ca94c81e73">vde_solver_add_horizontal</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver, int line_id)</td></tr>
<tr class="memdesc:a40107e23d391015f1e17e7ca94c81e73"><td class="mdescLeft">&#160;</td><td class="mdescRight">添加水平约束(线段水平) <a href="vde__capi_8h.html#a40107e23d391015f1e17e7ca94c81e73">更多...</a><br /></td></tr>
<tr class="separator:a40107e23d391015f1e17e7ca94c81e73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a2e54cdbf87a46434219917d4ddcdc9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a2a2e54cdbf87a46434219917d4ddcdc9">vde_solver_add_vertical</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver, int line_id)</td></tr>
<tr class="memdesc:a2a2e54cdbf87a46434219917d4ddcdc9"><td class="mdescLeft">&#160;</td><td class="mdescRight">添加垂直约束(线段垂直) <a href="vde__capi_8h.html#a2a2e54cdbf87a46434219917d4ddcdc9">更多...</a><br /></td></tr>
<tr class="separator:a2a2e54cdbf87a46434219917d4ddcdc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe46983c28ce8d95adf263007ef93139"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#abe46983c28ce8d95adf263007ef93139">vde_solver_solve</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver, int max_iter, double tol)</td></tr>
<tr class="memdesc:abe46983c28ce8d95adf263007ef93139"><td class="mdescLeft">&#160;</td><td class="mdescRight">求解约束系统 <a href="vde__capi_8h.html#abe46983c28ce8d95adf263007ef93139">更多...</a><br /></td></tr>
<tr class="separator:abe46983c28ce8d95adf263007ef93139"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac74b82de9d0e220e11562207f35ecd5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#aac74b82de9d0e220e11562207f35ecd5">vde_solver_get_point</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver, int idx, double *out_x, double *out_y)</td></tr>
<tr class="memdesc:aac74b82de9d0e220e11562207f35ecd5"><td class="mdescLeft">&#160;</td><td class="mdescRight">获取求解后的点坐标 <a href="vde__capi_8h.html#aac74b82de9d0e220e11562207f35ecd5">更多...</a><br /></td></tr>
<tr class="separator:aac74b82de9d0e220e11562207f35ecd5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a65aed874db7cbb21c67f93879530518d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a65aed874db7cbb21c67f93879530518d">vde_solver_free</a> (<a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> solver)</td></tr>
<tr class="memdesc:a65aed874db7cbb21c67f93879530518d"><td class="mdescLeft">&#160;</td><td class="mdescRight">释放求解器句柄 <a href="vde__capi_8h.html#a65aed874db7cbb21c67f93879530518d">更多...</a><br /></td></tr>
<tr class="separator:a65aed874db7cbb21c67f93879530518d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad866e34e81dfbc4b6659c4801ec151cf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#ad866e34e81dfbc4b6659c4801ec151cf">vde_body_create_box</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, double w, double h, double d)</td></tr>
<tr class="memdesc:ad866e34e81dfbc4b6659c4801ec151cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建实心立方体 B-Rep <a href="vde__capi_8h.html#ad866e34e81dfbc4b6659c4801ec151cf">更多...</a><br /></td></tr>
<tr class="separator:ad866e34e81dfbc4b6659c4801ec151cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac185ef3588f08fd81c967ed488273073"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#ac185ef3588f08fd81c967ed488273073">vde_body_create_cylinder</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, double r, double h, int segs)</td></tr>
<tr class="memdesc:ac185ef3588f08fd81c967ed488273073"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建实心圆柱体 B-Rep <a href="vde__capi_8h.html#ac185ef3588f08fd81c967ed488273073">更多...</a><br /></td></tr>
<tr class="separator:ac185ef3588f08fd81c967ed488273073"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ce4dd06d08a30f3aaa6f6eacea06d19"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a7ce4dd06d08a30f3aaa6f6eacea06d19">vde_body_create_sphere</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, double r, int su, int sv)</td></tr>
<tr class="memdesc:a7ce4dd06d08a30f3aaa6f6eacea06d19"><td class="mdescLeft">&#160;</td><td class="mdescRight">创建球体 B-Rep <a href="vde__capi_8h.html#a7ce4dd06d08a30f3aaa6f6eacea06d19">更多...</a><br /></td></tr>
<tr class="separator:a7ce4dd06d08a30f3aaa6f6eacea06d19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ec446206a1c0364a11c5d6c743b09bc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a7ec446206a1c0364a11c5d6c743b09bc">vde_body_to_mesh</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, <a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a> body, double deflection)</td></tr>
<tr class="memdesc:a7ec446206a1c0364a11c5d6c743b09bc"><td class="mdescLeft">&#160;</td><td class="mdescRight">将 B-Rep 实体转换为三角网格 <a href="vde__capi_8h.html#a7ec446206a1c0364a11c5d6c743b09bc">更多...</a><br /></td></tr>
<tr class="separator:a7ec446206a1c0364a11c5d6c743b09bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe8c82f56ff823dbb6af90ae5dd3b62f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#abe8c82f56ff823dbb6af90ae5dd3b62f">vde_body_free</a> (<a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a> body)</td></tr>
<tr class="memdesc:abe8c82f56ff823dbb6af90ae5dd3b62f"><td class="mdescLeft">&#160;</td><td class="mdescRight">释放 B-Rep 实体句柄 <a href="vde__capi_8h.html#abe8c82f56ff823dbb6af90ae5dd3b62f">更多...</a><br /></td></tr>
<tr class="separator:abe8c82f56ff823dbb6af90ae5dd3b62f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac718cb38d742050b52f2dbeb82797842"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#ac718cb38d742050b52f2dbeb82797842">vde_serialize_mesh</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh, uint8_t **out_data)</td></tr>
<tr class="memdesc:ac718cb38d742050b52f2dbeb82797842"><td class="mdescLeft">&#160;</td><td class="mdescRight">将网格序列化为二进制字节流 <a href="vde__capi_8h.html#ac718cb38d742050b52f2dbeb82797842">更多...</a><br /></td></tr>
<tr class="separator:ac718cb38d742050b52f2dbeb82797842"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3370253bfb65769e93df74de498ff6ac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#a3370253bfb65769e93df74de498ff6ac">vde_deserialize_mesh</a> (<a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> ctx, const uint8_t *data, size_t len)</td></tr>
<tr class="memdesc:a3370253bfb65769e93df74de498ff6ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">从二进制字节流反序列化为网格 <a href="vde__capi_8h.html#a3370253bfb65769e93df74de498ff6ac">更多...</a><br /></td></tr>
<tr class="separator:a3370253bfb65769e93df74de498ff6ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee33bba95777766e2a2cad01bae90b9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="vde__capi_8h.html#aee33bba95777766e2a2cad01bae90b9c">vde_free_buffer</a> (uint8_t *ptr)</td></tr>
<tr class="memdesc:aee33bba95777766e2a2cad01bae90b9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">释放由 vde_serialize_mesh 分配的缓冲区 <a href="vde__capi_8h.html#aee33bba95777766e2a2cad01bae90b9c">更多...</a><br /></td></tr>
<tr class="separator:aee33bba95777766e2a2cad01bae90b9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><p>ViewDesignEngine C API — 跨语言边界接口 </p>
<p>提供稳定的 C ABI 接口,使 Python、Rust、C# 等语言可以通过 FFI 调用 ViewDesignEngine 的核心功能,无需依赖 C++ ABI。</p>
<h2><a class="anchor" id="autotoc_md21"></a>
设计原则</h2>
<ol type="1">
<li><b>不透明句柄</b>: 所有内部对象(网格、曲线、求解器等)通过 <code>typedef</code> 前向声明 隐藏为不透明指针类型,外部代码只能通过 API 函数操作</li>
<li><b>C 兼容类型</b>: 仅使用 C 原生类型(int, double, const char*)作为参数和返回值</li>
<li><b>输出通过指针</b>: 复数返回值(如顶点坐标、包围盒)通过输出参数传递,避免结构体 ABI 问题</li>
<li><b>显式生命周期管理</b>: 每个 create/load 函数都有对应的 free/destroy 函数</li>
</ol>
<h2><a class="anchor" id="autotoc_md22"></a>
句柄类型</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">C 类型 </th><th class="markdownTableHeadNone">内部类型 </th><th class="markdownTableHeadNone">创建方式 </th><th class="markdownTableHeadNone">释放方式 </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">VdeHandle </td><td class="markdownTableBodyNone">VdeContext </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#af0565d3eee132efe7d6e8cee37e102df" title="创建 ViewDesignEngine 上下文">vde_create()</a> </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#aded4ee33d5564b05114ad605d003f34d" title="销毁引擎上下文">vde_destroy()</a> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">VdeMeshHandle </td><td class="markdownTableBodyNone">HalfedgeMesh </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#a3364eca094757a19af74398c66ab43f0" title="从文件加载三角网格">vde_load_mesh()</a>, 工厂函数 </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#ad4763d4d03c112d2b5af3e268ff0b591" title="释放网格句柄及其资源">vde_mesh_free()</a> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">VdeCurveHandle </td><td class="markdownTableBodyNone">NurbsCurve </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#a2e622ea345565541cd5fef16e97ecec6" title="创建 Bézier 曲线">vde_curve_create_bezier()</a> </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#a8b1982d568ee1889beb9fac1cf19a71f" title="释放曲线句柄">vde_curve_free()</a> </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">VdeSolverHandle </td><td class="markdownTableBodyNone">ConstraintSolver </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#af881dd70f559a3ff280b0047c2fcc8cd" title="创建二维约束求解器">vde_solver_create()</a> </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#a65aed874db7cbb21c67f93879530518d" title="释放求解器句柄">vde_solver_free()</a> </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">VdeBodyHandle </td><td class="markdownTableBodyNone">BrepModel </td><td class="markdownTableBodyNone">vde_body_create_*() </td><td class="markdownTableBodyNone"><a class="el" href="vde__capi_8h.html#abe8c82f56ff823dbb6af90ae5dd3b62f" title="释放 B-Rep 实体句柄">vde_body_free()</a> </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md23"></a>
布尔操作编码</h2>
<table class="markdownTable">
<tr class="markdownTableHead">
<th class="markdownTableHeadNone">操作 </th><th class="markdownTableHeadNone">整数值 </th></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">并集 </td><td class="markdownTableBodyNone">0 </td></tr>
<tr class="markdownTableRowEven">
<td class="markdownTableBodyNone">交集 </td><td class="markdownTableBodyNone">1 </td></tr>
<tr class="markdownTableRowOdd">
<td class="markdownTableBodyNone">差集 </td><td class="markdownTableBodyNone">2 </td></tr>
</table>
<h2><a class="anchor" id="autotoc_md24"></a>
线程安全性</h2>
<ul>
<li>每个 VdeHandle 是独立的上下文,不同句柄之间线程安全</li>
<li>同一句柄上的操作不是线程安全的(调用方负责同步)</li>
</ul>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde_8h.html">vde.h</a> C++ 等价接口 </dd></dl>
<p class="definition">在文件 <a class="el" href="vde__capi_8h_source.html">vde_capi.h</a> 中定义.</p>
</div><h2 class="groupheader">类型定义说明</h2>
<a id="a749b764a4e5406035946b13790a9a2f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a749b764a4e5406035946b13790a9a2f3">&#9670;&nbsp;</a></span>VdeBodyHandle</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct VdeBody* <a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>B-Rep 实体句柄 — 边界表示模型 </p>
<p class="definition">在文件 <a class="el" href="vde__capi_8h_source.html">vde_capi.h</a><a class="el" href="vde__capi_8h_source.html#l00077">77</a> 行定义.</p>
</div>
</div>
<a id="adbe99e0d601bba164d42b73d8d3f28f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adbe99e0d601bba164d42b73d8d3f28f7">&#9670;&nbsp;</a></span>VdeCurveHandle</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct VdeCurve* <a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>参数曲线句柄 — NURBS 曲线 </p>
<p class="definition">在文件 <a class="el" href="vde__capi_8h_source.html">vde_capi.h</a><a class="el" href="vde__capi_8h_source.html#l00067">67</a> 行定义.</p>
</div>
</div>
<a id="a5d25ac71389adcd7f6e974673cbe07c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5d25ac71389adcd7f6e974673cbe07c6">&#9670;&nbsp;</a></span>VdeHandle</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct VdeContext* <a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>引擎上下文句柄 — 管理错误状态和内部资源 </p>
<p class="definition">在文件 <a class="el" href="vde__capi_8h_source.html">vde_capi.h</a><a class="el" href="vde__capi_8h_source.html#l00057">57</a> 行定义.</p>
</div>
</div>
<a id="a612991cb0f7daa4036b555eecb5b1700"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a612991cb0f7daa4036b555eecb5b1700">&#9670;&nbsp;</a></span>VdeMeshHandle</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct VdeMesh* <a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>三角网格句柄 — 顶点+面集合 </p>
<p class="definition">在文件 <a class="el" href="vde__capi_8h_source.html">vde_capi.h</a><a class="el" href="vde__capi_8h_source.html#l00062">62</a> 行定义.</p>
</div>
</div>
<a id="a3a17900fada7dfe2be0874044ea56f31"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a17900fada7dfe2be0874044ea56f31">&#9670;&nbsp;</a></span>VdeSolverHandle</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct VdeSolver* <a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>约束求解器句柄 — 二维草图约束 </p>
<p class="definition">在文件 <a class="el" href="vde__capi_8h_source.html">vde_capi.h</a><a class="el" href="vde__capi_8h_source.html#l00072">72</a> 行定义.</p>
</div>
</div>
<h2 class="groupheader">函数说明</h2>
<a id="ad866e34e81dfbc4b6659c4801ec151cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad866e34e81dfbc4b6659c4801ec151cf">&#9670;&nbsp;</a></span>vde_body_create_box()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a> vde_body_create_box </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></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>创建实心立方体 B-Rep </p>
<p>以原点为中心的轴对齐立方体。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<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>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#ac185ef3588f08fd81c967ed488273073" title="创建实心圆柱体 B-Rep">vde_body_create_cylinder</a> 圆柱体 </dd>
<dd>
<a class="el" href="vde__capi_8h.html#a7ce4dd06d08a30f3aaa6f6eacea06d19" title="创建球体 B-Rep">vde_body_create_sphere</a> 球体 </dd></dl>
</div>
</div>
<a id="ac185ef3588f08fd81c967ed488273073"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac185ef3588f08fd81c967ed488273073">&#9670;&nbsp;</a></span>vde_body_create_cylinder()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a> vde_body_create_cylinder </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>r</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">int&#160;</td>
<td class="paramname"><em>segs</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>创建实心圆柱体 B-Rep </p>
<p>沿 Y 轴、以原点为中心的圆柱体。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">r</td><td>截面半径,&gt; 0 </td></tr>
<tr><td class="paramname">h</td><td>总高度(从 -h/2 到 +h/2 </td></tr>
<tr><td class="paramname">segs</td><td>截面分段数(边数) </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="vde__capi_8h.html#ad866e34e81dfbc4b6659c4801ec151cf" title="创建实心立方体 B-Rep">vde_body_create_box</a> 立方体 </dd></dl>
</div>
</div>
<a id="a7ce4dd06d08a30f3aaa6f6eacea06d19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ce4dd06d08a30f3aaa6f6eacea06d19">&#9670;&nbsp;</a></span>vde_body_create_sphere()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a> vde_body_create_sphere </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>r</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>su</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>sv</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>创建球体 B-Rep </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">r</td><td>球半径,&gt; 0 </td></tr>
<tr><td class="paramname">su</td><td>经度方向分段数 </td></tr>
<tr><td class="paramname">sv</td><td>纬度方向分段数 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>B-Rep 实体句柄 </dd></dl>
</div>
</div>
<a id="abe8c82f56ff823dbb6af90ae5dd3b62f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe8c82f56ff823dbb6af90ae5dd3b62f">&#9670;&nbsp;</a></span>vde_body_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_body_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a>&#160;</td>
<td class="paramname"><em>body</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>释放 B-Rep 实体句柄 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">body</td><td>B-Rep 实体句柄 </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a7ec446206a1c0364a11c5d6c743b09bc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ec446206a1c0364a11c5d6c743b09bc">&#9670;&nbsp;</a></span>vde_body_to_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> vde_body_to_mesh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a>&#160;</td>
<td class="paramname"><em>body</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>deflection</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将 B-Rep 实体转换为三角网格 </p>
<p>以指定的弦高误差对曲面进行 tessellation。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">body</td><td>B-Rep 实体句柄 </td></tr>
<tr><td class="paramname">deflection</td><td>弦高误差(越小 = 越精细,推荐 0.01) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>三角网格句柄</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a> body = <a class="code" href="vde__capi_8h.html#ad866e34e81dfbc4b6659c4801ec151cf">vde_body_create_box</a>(ctx, 10, 5, 3);</div>
<div class="line"><a class="code" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh = <a class="code" href="vde__capi_8h.html#a7ec446206a1c0364a11c5d6c743b09bc">vde_body_to_mesh</a>(ctx, body, 0.01);</div>
<div class="line"><a class="code" href="vde__capi_8h.html#a5b48ac40d7da443cc951d7c3bf8f6003">vde_save_mesh</a>(ctx, mesh, <span class="stringliteral">&quot;box.obj&quot;</span>, <span class="stringliteral">&quot;obj&quot;</span>);</div>
<div class="ttc" id="avde__capi_8h_html_a5b48ac40d7da443cc951d7c3bf8f6003"><div class="ttname"><a href="vde__capi_8h.html#a5b48ac40d7da443cc951d7c3bf8f6003">vde_save_mesh</a></div><div class="ttdeci">int vde_save_mesh(VdeHandle ctx, VdeMeshHandle mesh, const char *path, const char *format)</div><div class="ttdoc">将三角网格保存为文件</div></div>
<div class="ttc" id="avde__capi_8h_html_a612991cb0f7daa4036b555eecb5b1700"><div class="ttname"><a href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a></div><div class="ttdeci">struct VdeMesh * VdeMeshHandle</div><div class="ttdoc">三角网格句柄 — 顶点+面集合</div><div class="ttdef"><b>Definition:</b> <a href="vde__capi_8h_source.html#l00062">vde_capi.h:62</a></div></div>
<div class="ttc" id="avde__capi_8h_html_a749b764a4e5406035946b13790a9a2f3"><div class="ttname"><a href="vde__capi_8h.html#a749b764a4e5406035946b13790a9a2f3">VdeBodyHandle</a></div><div class="ttdeci">struct VdeBody * VdeBodyHandle</div><div class="ttdoc">B-Rep 实体句柄 — 边界表示模型</div><div class="ttdef"><b>Definition:</b> <a href="vde__capi_8h_source.html#l00077">vde_capi.h:77</a></div></div>
<div class="ttc" id="avde__capi_8h_html_a7ec446206a1c0364a11c5d6c743b09bc"><div class="ttname"><a href="vde__capi_8h.html#a7ec446206a1c0364a11c5d6c743b09bc">vde_body_to_mesh</a></div><div class="ttdeci">VdeMeshHandle vde_body_to_mesh(VdeHandle ctx, VdeBodyHandle body, double deflection)</div><div class="ttdoc">将 B-Rep 实体转换为三角网格</div></div>
<div class="ttc" id="avde__capi_8h_html_ad866e34e81dfbc4b6659c4801ec151cf"><div class="ttname"><a href="vde__capi_8h.html#ad866e34e81dfbc4b6659c4801ec151cf">vde_body_create_box</a></div><div class="ttdeci">VdeBodyHandle vde_body_create_box(VdeHandle ctx, double w, double h, double d)</div><div class="ttdoc">创建实心立方体 B-Rep</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#abe8c82f56ff823dbb6af90ae5dd3b62f" title="释放 B-Rep 实体句柄">vde_body_free</a> 释放 B-Rep 实体 </dd></dl>
</div>
</div>
<a id="a6f79c7bc11d4bafcebe8d15846ab2b92"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f79c7bc11d4bafcebe8d15846ab2b92">&#9670;&nbsp;</a></span>vde_collision_gjk_spheres()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde_collision_gjk_spheres </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cx1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cy1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cz1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>r1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cx2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cy2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>cz2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>r2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>两球体碰撞检测(GJK 算法) </p>
<p>用于验证和测试 GJK 碰撞检测算法的轻量级接口。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">cx1,cy1,cz1</td><td>第一个球体的球心坐标 </td></tr>
<tr><td class="paramname">r1</td><td>第一个球体的半径 </td></tr>
<tr><td class="paramname">cx2,cy2,cz2</td><td>第二个球体的球心坐标 </td></tr>
<tr><td class="paramname">r2</td><td>第二个球体的半径 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>碰撞返回 1,不碰撞返回 0</dd></dl>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> hit = <a class="code" href="vde__capi_8h.html#a6f79c7bc11d4bafcebe8d15846ab2b92">vde_collision_gjk_spheres</a>(ctx, 0,0,0, 1.0, 1.5,0,0, 0.5);</div>
<div class="ttc" id="avde__capi_8h_html_a6f79c7bc11d4bafcebe8d15846ab2b92"><div class="ttname"><a href="vde__capi_8h.html#a6f79c7bc11d4bafcebe8d15846ab2b92">vde_collision_gjk_spheres</a></div><div class="ttdeci">int vde_collision_gjk_spheres(VdeHandle ctx, double cx1, double cy1, double cz1, double r1, double cx2, double cy2, double cz2, double r2)</div><div class="ttdoc">两球体碰撞检测(GJK 算法)</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#aee0d5d4340cff8a807222457f3fd4535" title="射线与网格的最近交点查询">vde_collision_ray_mesh</a> 射线-网格相交 </dd></dl>
</div>
</div>
<a id="aee0d5d4340cff8a807222457f3fd4535"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee0d5d4340cff8a807222457f3fd4535">&#9670;&nbsp;</a></span>vde_collision_ray_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde_collision_ray_mesh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>ox</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>oy</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>oz</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>dx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>dy</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>dz</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_z</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>射线与网格的最近交点查询 </p>
<p>使用 BVH 加速结构加速查询。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">mesh</td><td>目标网格句柄 </td></tr>
<tr><td class="paramname">ox,oy,oz</td><td>射线起点 </td></tr>
<tr><td class="paramname">dx,dy,dz</td><td>射线方向(无需归一化) </td></tr>
<tr><td class="paramname">out_t</td><td>[out] 交点参数 t(沿射线的距离) </td></tr>
<tr><td class="paramname">out_x,out_y,out_z</td><td>[out] 交点坐标 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>命中返回 1,未命中返回 0</dd></dl>
<div class="fragment"><div class="line"><span class="keywordtype">double</span> t, hx, hy, hz;</div>
<div class="line"><span class="keywordtype">int</span> hit = <a class="code" href="vde__capi_8h.html#aee0d5d4340cff8a807222457f3fd4535">vde_collision_ray_mesh</a>(ctx, mesh,</div>
<div class="line"> 0,0,-10, <span class="comment">// 射线起点</span></div>
<div class="line"> 0,0,1, <span class="comment">// 射线方向 (沿 Z 轴正方向)</span></div>
<div class="line"> &amp;t, &amp;hx, &amp;hy, &amp;hz);</div>
<div class="line"><span class="keywordflow">if</span> (hit) printf(<span class="stringliteral">&quot;Hit at (%f,%f,%f), t=%f\n&quot;</span>, hx, hy, hz, t);</div>
<div class="ttc" id="avde__capi_8h_html_aee0d5d4340cff8a807222457f3fd4535"><div class="ttname"><a href="vde__capi_8h.html#aee0d5d4340cff8a807222457f3fd4535">vde_collision_ray_mesh</a></div><div class="ttdeci">int vde_collision_ray_mesh(VdeHandle ctx, VdeMeshHandle mesh, double ox, double oy, double oz, double dx, double dy, double dz, double *out_t, double *out_x, double *out_y, double *out_z)</div><div class="ttdoc">射线与网格的最近交点查询</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a6f79c7bc11d4bafcebe8d15846ab2b92" title="两球体碰撞检测(GJK 算法)">vde_collision_gjk_spheres</a> GJK 球体碰撞 </dd></dl>
</div>
</div>
<a id="af0565d3eee132efe7d6e8cee37e102df"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af0565d3eee132efe7d6e8cee37e102df">&#9670;&nbsp;</a></span>vde_create()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a> vde_create </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>创建 ViewDesignEngine 上下文 </p>
<p>初始化一个独立的引擎实例。几乎所有后续操作都需要传入此句柄。</p>
<dl class="section return"><dt>返回</dt><dd>新的引擎句柄,不需要时通过 <a class="el" href="vde__capi_8h.html#aded4ee33d5564b05114ad605d003f34d" title="销毁引擎上下文">vde_destroy()</a> 释放</dd></dl>
<div class="fragment"><div class="line">// Python ctypes 示例</div>
<div class="line">ctx = lib.vde_create()</div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#aded4ee33d5564b05114ad605d003f34d" title="销毁引擎上下文">vde_destroy</a> 释放上下文 </dd></dl>
</div>
</div>
<a id="a2e622ea345565541cd5fef16e97ecec6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2e622ea345565541cd5fef16e97ecec6">&#9670;&nbsp;</a></span>vde_curve_create_bezier()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a> vde_curve_create_bezier </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const double *&#160;</td>
<td class="paramname"><em>control_points</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>num_points</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>dim</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>创建 Bézier 曲线 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">control_points</td><td>控制点数组,每 3 个 double 表示一个三维点 (x,y,z) </td></tr>
<tr><td class="paramname">num_points</td><td>控制点数量(次数 = num_points - 1 </td></tr>
<tr><td class="paramname">dim</td><td>维度(固定为 3 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>曲线句柄</dd></dl>
<div class="fragment"><div class="line"><span class="keywordtype">double</span> cp[] = {0,0,0, 1,2,0, 3,0,0}; <span class="comment">// 3 控制点,2 次 Bézier</span></div>
<div class="line"><a class="code" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a> curve = <a class="code" href="vde__capi_8h.html#a2e622ea345565541cd5fef16e97ecec6">vde_curve_create_bezier</a>(ctx, cp, 3, 3);</div>
<div class="ttc" id="avde__capi_8h_html_a2e622ea345565541cd5fef16e97ecec6"><div class="ttname"><a href="vde__capi_8h.html#a2e622ea345565541cd5fef16e97ecec6">vde_curve_create_bezier</a></div><div class="ttdeci">VdeCurveHandle vde_curve_create_bezier(VdeHandle ctx, const double *control_points, int num_points, int dim)</div><div class="ttdoc">创建 Bézier 曲线</div></div>
<div class="ttc" id="avde__capi_8h_html_adbe99e0d601bba164d42b73d8d3f28f7"><div class="ttname"><a href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a></div><div class="ttdeci">struct VdeCurve * VdeCurveHandle</div><div class="ttdoc">参数曲线句柄 — NURBS 曲线</div><div class="ttdef"><b>Definition:</b> <a href="vde__capi_8h_source.html#l00067">vde_capi.h:67</a></div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a7cdf208a934eb1335beba7bcf98bb75d" title="在参数 t 处求值曲线">vde_curve_evaluate</a> 求值 </dd>
<dd>
<a class="el" href="vde__capi_8h.html#a8b1982d568ee1889beb9fac1cf19a71f" title="释放曲线句柄">vde_curve_free</a> 释放 </dd></dl>
</div>
</div>
<a id="aec5aedf79c8a7f3ac64e92417118b735"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aec5aedf79c8a7f3ac64e92417118b735">&#9670;&nbsp;</a></span>vde_curve_degree()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde_curve_degree </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a>&#160;</td>
<td class="paramname"><em>curve</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取曲线的次数 </p>
<p>对于 Bézier 曲线,次数 = 控制点数 - 1。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">curve</td><td>曲线句柄 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>曲线次数 </dd></dl>
</div>
</div>
<a id="a7cdf208a934eb1335beba7bcf98bb75d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7cdf208a934eb1335beba7bcf98bb75d">&#9670;&nbsp;</a></span>vde_curve_evaluate()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_curve_evaluate </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a>&#160;</td>
<td class="paramname"><em>curve</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>t</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_z</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>在参数 t 处求值曲线 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">curve</td><td>曲线句柄 </td></tr>
<tr><td class="paramname">t</td><td>参数值 [0, 1] </td></tr>
<tr><td class="paramname">out_x</td><td>[out] 曲线上点的 X 坐标 </td></tr>
<tr><td class="paramname">out_y</td><td>[out] 曲线上点的 Y 坐标 </td></tr>
<tr><td class="paramname">out_z</td><td>[out] 曲线上点的 Z 坐标</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>前置条件</dt><dd>0 ≤ t ≤ 1 </dd></dl>
</div>
</div>
<a id="a8b1982d568ee1889beb9fac1cf19a71f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8b1982d568ee1889beb9fac1cf19a71f">&#9670;&nbsp;</a></span>vde_curve_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_curve_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#adbe99e0d601bba164d42b73d8d3f28f7">VdeCurveHandle</a>&#160;</td>
<td class="paramname"><em>curve</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>释放曲线句柄 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">curve</td><td>曲线句柄 </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a3370253bfb65769e93df74de498ff6ac"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3370253bfb65769e93df74de498ff6ac">&#9670;&nbsp;</a></span>vde_deserialize_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> vde_deserialize_mesh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const uint8_t *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>len</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>从二进制字节流反序列化为网格 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">data</td><td>序列化数据缓冲区 </td></tr>
<tr><td class="paramname">len</td><td>数据长度(字节数) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>反序列化后的网格句柄</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#ac718cb38d742050b52f2dbeb82797842" title="将网格序列化为二进制字节流">vde_serialize_mesh</a> 序列化 </dd></dl>
</div>
</div>
<a id="aded4ee33d5564b05114ad605d003f34d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aded4ee33d5564b05114ad605d003f34d">&#9670;&nbsp;</a></span>vde_destroy()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_destroy </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</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">ctx</td><td>引擎上下文句柄</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#af0565d3eee132efe7d6e8cee37e102df" title="创建 ViewDesignEngine 上下文">vde_create</a> </dd></dl>
</div>
</div>
<a id="aee33bba95777766e2a2cad01bae90b9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee33bba95777766e2a2cad01bae90b9c">&#9670;&nbsp;</a></span>vde_free_buffer()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_free_buffer </td>
<td>(</td>
<td class="paramtype">uint8_t *&#160;</td>
<td class="paramname"><em>ptr</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>释放由 vde_serialize_mesh 分配的缓冲区 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ptr</td><td>由 vde_serialize_mesh 返回的缓冲区指针 </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a44fa58de60fbdf2b08956a4f4dd8a0aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44fa58de60fbdf2b08956a4f4dd8a0aa">&#9670;&nbsp;</a></span>vde_last_error()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char* vde_last_error </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</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">ctx</td><td>引擎上下文句柄 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>错误描述字符串(上下文的内部缓冲区,静态生命周期)</dd></dl>
<dl class="section note"><dt>注解</dt><dd>每次新的失败操作会覆盖此描述。成功操作不会清除它。 </dd></dl>
</div>
</div>
<a id="a3364eca094757a19af74398c66ab43f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3364eca094757a19af74398c66ab43f0">&#9670;&nbsp;</a></span>vde_load_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> vde_load_mesh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#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>支持 OBJ (.obj), STL (.stl), PLY (.ply) 三种格式。 格式通过文件扩展名自动检测。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">path</td><td>文件路径(UTF-8 编码) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>网格句柄,失败时返回 NULL(通过 <a class="el" href="vde__capi_8h.html#a44fa58de60fbdf2b08956a4f4dd8a0aa" title="获取最后一次操作的错误描述">vde_last_error()</a> 获取原因)</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> mesh = <a class="code" href="vde__capi_8h.html#a3364eca094757a19af74398c66ab43f0">vde_load_mesh</a>(ctx, <span class="stringliteral">&quot;model.obj&quot;</span>);</div>
<div class="line"><span class="keywordflow">if</span> (!mesh) {</div>
<div class="line"> fprintf(stderr, <span class="stringliteral">&quot;Load failed: %s\n&quot;</span>, <a class="code" href="vde__capi_8h.html#a44fa58de60fbdf2b08956a4f4dd8a0aa">vde_last_error</a>(ctx));</div>
<div class="line"> <span class="keywordflow">return</span>;</div>
<div class="line">}</div>
<div class="ttc" id="avde__capi_8h_html_a3364eca094757a19af74398c66ab43f0"><div class="ttname"><a href="vde__capi_8h.html#a3364eca094757a19af74398c66ab43f0">vde_load_mesh</a></div><div class="ttdeci">VdeMeshHandle vde_load_mesh(VdeHandle ctx, const char *path)</div><div class="ttdoc">从文件加载三角网格</div></div>
<div class="ttc" id="avde__capi_8h_html_a44fa58de60fbdf2b08956a4f4dd8a0aa"><div class="ttname"><a href="vde__capi_8h.html#a44fa58de60fbdf2b08956a4f4dd8a0aa">vde_last_error</a></div><div class="ttdeci">const char * vde_last_error(VdeHandle ctx)</div><div class="ttdoc">获取最后一次操作的错误描述</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#ad4763d4d03c112d2b5af3e268ff0b591" title="释放网格句柄及其资源">vde_mesh_free</a> 释放网格 </dd>
<dd>
<a class="el" href="vde__capi_8h.html#a5b48ac40d7da443cc951d7c3bf8f6003" title="将三角网格保存为文件">vde_save_mesh</a> 保存网格 </dd></dl>
</div>
</div>
<a id="a3ce60d7da004c9b840d619a71ca39a8a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ce60d7da004c9b840d619a71ca39a8a">&#9670;&nbsp;</a></span>vde_mesh_boolean()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> vde_mesh_boolean </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>operation</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">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">a</td><td>网格 A </td></tr>
<tr><td class="paramname">b</td><td>网格 B </td></tr>
<tr><td class="paramname">operation</td><td>布尔操作类型: 0 = 并集, 1 = 交集, 2 = 差集 (A \ B) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>布尔结果的新网格句柄</dd></dl>
<dl class="section warning"><dt>警告</dt><dd>两个输入网格必须是水密的(closed manifold),否则结果不可预测。</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> result = <a class="code" href="vde__capi_8h.html#a3ce60d7da004c9b840d619a71ca39a8a">vde_mesh_boolean</a>(ctx, <a class="code" href="namespacevde_1_1sdf.html#a380ebfe1b3b65d5ecc4efcb946b21834">box</a>, <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>, 0); <span class="comment">// 并集</span></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 class="ttc" id="avde__capi_8h_html_a3ce60d7da004c9b840d619a71ca39a8a"><div class="ttname"><a href="vde__capi_8h.html#a3ce60d7da004c9b840d619a71ca39a8a">vde_mesh_boolean</a></div><div class="ttdeci">VdeMeshHandle vde_mesh_boolean(VdeHandle ctx, VdeMeshHandle a, VdeMeshHandle b, int operation)</div><div class="ttdoc">网格布尔运算</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ad4763d4d03c112d2b5af3e268ff0b591"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4763d4d03c112d2b5af3e268ff0b591">&#9670;&nbsp;</a></span>vde_mesh_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_mesh_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</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">mesh</td><td>网格句柄 </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a44f0de742779b37b5a1d4c4d926ee46c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a44f0de742779b37b5a1d4c4d926ee46c">&#9670;&nbsp;</a></span>vde_mesh_get_bounds()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_mesh_get_bounds </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_min_x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_min_y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_min_z</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_max_x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_max_y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_max_z</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取网格的轴对齐包围盒 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>网格句柄 </td></tr>
<tr><td class="paramname">out_min_x</td><td>[out] 最小 X 坐标 </td></tr>
<tr><td class="paramname">out_min_y</td><td>[out] 最小 Y 坐标 </td></tr>
<tr><td class="paramname">out_min_z</td><td>[out] 最小 Z 坐标 </td></tr>
<tr><td class="paramname">out_max_x</td><td>[out] 最大 X 坐标 </td></tr>
<tr><td class="paramname">out_max_y</td><td>[out] 最大 Y 坐标 </td></tr>
<tr><td class="paramname">out_max_z</td><td>[out] 最大 Z 坐标 </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="a46332b2cafe166b1f3f769120d35e68e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46332b2cafe166b1f3f769120d35e68e">&#9670;&nbsp;</a></span>vde_mesh_get_vertex()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_mesh_get_vertex </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_z</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取指定索引的顶点坐标 </p>
<p>顶点索引从 0 开始,到 num_vertices - 1。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>网格句柄 </td></tr>
<tr><td class="paramname">idx</td><td>顶点索引 [0, num_vertices) </td></tr>
<tr><td class="paramname">out_x</td><td>[out] 顶点 X 坐标 </td></tr>
<tr><td class="paramname">out_y</td><td>[out] 顶点 Y 坐标 </td></tr>
<tr><td class="paramname">out_z</td><td>[out] 顶点 Z 坐标</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>前置条件</dt><dd>idx &lt; vde_mesh_num_vertices(mesh) </dd></dl>
</div>
</div>
<a id="aabd59a0d58b060cb34e4ae291e12b72b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aabd59a0d58b060cb34e4ae291e12b72b">&#9670;&nbsp;</a></span>vde_mesh_num_faces()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t vde_mesh_num_faces </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取网格的三角面数量 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>网格句柄 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>面数</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a7faf11c35d4994e668e08b16174ec71f" title="获取网格的顶点数量">vde_mesh_num_vertices</a> 顶点数 </dd></dl>
</div>
</div>
<a id="a7faf11c35d4994e668e08b16174ec71f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7faf11c35d4994e668e08b16174ec71f">&#9670;&nbsp;</a></span>vde_mesh_num_vertices()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t vde_mesh_num_vertices </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取网格的顶点数量 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">mesh</td><td>网格句柄(必须有效且非 NULL </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>顶点数</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#aabd59a0d58b060cb34e4ae291e12b72b" title="获取网格的三角面数量">vde_mesh_num_faces</a> 面数 </dd></dl>
</div>
</div>
<a id="a77b1f5142fd90da486a5c139c3b14c16"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77b1f5142fd90da486a5c139c3b14c16">&#9670;&nbsp;</a></span>vde_mesh_simplify()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> vde_mesh_simplify </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>target_ratio</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>网格简化 </p>
<p>通过 edge-collapse 或类似算法减少三角形数量, 同时尽可能保留几何特征。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">mesh</td><td>输入网格句柄(不修改输入) </td></tr>
<tr><td class="paramname">target_ratio</td><td>目标简化比率 [0, 1](0 = 不变,1 = 最大简化) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>简化后的新网格句柄</dd></dl>
<div class="fragment"><div class="line"><a class="code" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> simple = <a class="code" href="vde__capi_8h.html#a77b1f5142fd90da486a5c139c3b14c16">vde_mesh_simplify</a>(ctx, mesh, 0.5); <span class="comment">// 减少 50%</span></div>
<div class="ttc" id="avde__capi_8h_html_a77b1f5142fd90da486a5c139c3b14c16"><div class="ttname"><a href="vde__capi_8h.html#a77b1f5142fd90da486a5c139c3b14c16">vde_mesh_simplify</a></div><div class="ttdeci">VdeMeshHandle vde_mesh_simplify(VdeHandle ctx, VdeMeshHandle mesh, double target_ratio)</div><div class="ttdoc">网格简化</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a46bd97beffa458984cbc323c65c7c238" title="网格平滑(Laplacian 或 Taubin 平滑)">vde_mesh_smooth</a> 网格平滑 </dd></dl>
</div>
</div>
<a id="a46bd97beffa458984cbc323c65c7c238"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46bd97beffa458984cbc323c65c7c238">&#9670;&nbsp;</a></span>vde_mesh_smooth()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a> vde_mesh_smooth </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>iterations</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>网格平滑(Laplacian 或 Taubin 平滑) </p>
<p>通过迭代平滑顶点位置改善网格质量,减少噪声。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">mesh</td><td>输入网格句柄 </td></tr>
<tr><td class="paramname">iterations</td><td>平滑迭代次数 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>平滑后的新网格句柄</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a77b1f5142fd90da486a5c139c3b14c16" title="网格简化">vde_mesh_simplify</a> 网格简化 </dd></dl>
</div>
</div>
<a id="a5b48ac40d7da443cc951d7c3bf8f6003"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5b48ac40d7da443cc951d7c3bf8f6003">&#9670;&nbsp;</a></span>vde_save_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde_save_mesh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>path</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const char *&#160;</td>
<td class="paramname"><em>format</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将三角网格保存为文件 </p>
<p>当前支持 OBJ 格式输出。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">mesh</td><td>网格句柄 </td></tr>
<tr><td class="paramname">path</td><td>输出文件路径 </td></tr>
<tr><td class="paramname">format</td><td>输出格式(当前仅 "obj" 有效) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>成功返回 1,失败返回 0</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a3364eca094757a19af74398c66ab43f0" title="从文件加载三角网格">vde_load_mesh</a> 加载网格 </dd></dl>
</div>
</div>
<a id="ac718cb38d742050b52f2dbeb82797842"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac718cb38d742050b52f2dbeb82797842">&#9670;&nbsp;</a></span>vde_serialize_mesh()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">size_t vde_serialize_mesh </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a5d25ac71389adcd7f6e974673cbe07c6">VdeHandle</a>&#160;</td>
<td class="paramname"><em>ctx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a612991cb0f7daa4036b555eecb5b1700">VdeMeshHandle</a>&#160;</td>
<td class="paramname"><em>mesh</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8_t **&#160;</td>
<td class="paramname"><em>out_data</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>将网格序列化为二进制字节流 </p>
<p>返回的缓冲区需要在消费后通过 <a class="el" href="vde__capi_8h.html#aee33bba95777766e2a2cad01bae90b9c" title="释放由 vde_serialize_mesh 分配的缓冲区">vde_free_buffer()</a> 释放。</p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">ctx</td><td>引擎上下文句柄 </td></tr>
<tr><td class="paramname">mesh</td><td>网格句柄 </td></tr>
<tr><td class="paramname">out_data</td><td>[out] 指向序列化字节数组的指针 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>字节数</dd></dl>
<dl class="section note"><dt>注解</dt><dd>输出的缓冲区由库管理,调用方不得直接 free/delete。</dd></dl>
<div class="fragment"><div class="line">uint8_t* data = NULL;</div>
<div class="line"><span class="keywordtype">size_t</span> len = <a class="code" href="vde__capi_8h.html#ac718cb38d742050b52f2dbeb82797842">vde_serialize_mesh</a>(ctx, mesh, &amp;data);</div>
<div class="line"><span class="comment">// ... 使用/存储 data ...</span></div>
<div class="line"><a class="code" href="vde__capi_8h.html#aee33bba95777766e2a2cad01bae90b9c">vde_free_buffer</a>(data);</div>
<div class="ttc" id="avde__capi_8h_html_ac718cb38d742050b52f2dbeb82797842"><div class="ttname"><a href="vde__capi_8h.html#ac718cb38d742050b52f2dbeb82797842">vde_serialize_mesh</a></div><div class="ttdeci">size_t vde_serialize_mesh(VdeHandle ctx, VdeMeshHandle mesh, uint8_t **out_data)</div><div class="ttdoc">将网格序列化为二进制字节流</div></div>
<div class="ttc" id="avde__capi_8h_html_aee33bba95777766e2a2cad01bae90b9c"><div class="ttname"><a href="vde__capi_8h.html#aee33bba95777766e2a2cad01bae90b9c">vde_free_buffer</a></div><div class="ttdeci">void vde_free_buffer(uint8_t *ptr)</div><div class="ttdoc">释放由 vde_serialize_mesh 分配的缓冲区</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a3370253bfb65769e93df74de498ff6ac" title="从二进制字节流反序列化为网格">vde_deserialize_mesh</a> 反序列化 </dd>
<dd>
<a class="el" href="vde__capi_8h.html#aee33bba95777766e2a2cad01bae90b9c" title="释放由 vde_serialize_mesh 分配的缓冲区">vde_free_buffer</a> 释放序列化缓冲区 </dd></dl>
</div>
</div>
<a id="a73d39d4a953542e738faf6e337c6420c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a73d39d4a953542e738faf6e337c6420c">&#9670;&nbsp;</a></span>vde_solver_add_distance_constraint()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_solver_add_distance_constraint </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>p0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>p1</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>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">solver</td><td>求解器句柄 </td></tr>
<tr><td class="paramname">p0</td><td>第一个点的 ID </td></tr>
<tr><td class="paramname">p1</td><td>第二个点的 ID </td></tr>
<tr><td class="paramname">d</td><td>目标距离(必须 &gt; 0</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a40107e23d391015f1e17e7ca94c81e73" title="添加水平约束(线段水平)">vde_solver_add_horizontal</a> 水平约束 </dd></dl>
</div>
</div>
<a id="a40107e23d391015f1e17e7ca94c81e73"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40107e23d391015f1e17e7ca94c81e73">&#9670;&nbsp;</a></span>vde_solver_add_horizontal()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_solver_add_horizontal </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>line_id</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>添加水平约束(线段水平) </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">solver</td><td>求解器句柄 </td></tr>
<tr><td class="paramname">line_id</td><td>线段 ID</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a2a2e54cdbf87a46434219917d4ddcdc9" title="添加垂直约束(线段垂直)">vde_solver_add_vertical</a> 垂直约束 </dd>
<dd>
<a class="el" href="vde__capi_8h.html#a9cf4e2fc71bfa61073144147bf76c2e8" title="向求解器添加线段(由两个点定义)">vde_solver_add_line</a> 添加线段 </dd></dl>
</div>
</div>
<a id="a9cf4e2fc71bfa61073144147bf76c2e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9cf4e2fc71bfa61073144147bf76c2e8">&#9670;&nbsp;</a></span>vde_solver_add_line()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde_solver_add_line </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>p0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>p1</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>向求解器添加线段(由两个点定义) </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">solver</td><td>求解器句柄 </td></tr>
<tr><td class="paramname">p0</td><td>起点 ID </td></tr>
<tr><td class="paramname">p1</td><td>终点 ID </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>线段的 ID</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a665e2414e558165f136837ce95119f74" title="向求解器添加点">vde_solver_add_point</a> 添加点 </dd>
<dd>
<a class="el" href="vde__capi_8h.html#a40107e23d391015f1e17e7ca94c81e73" title="添加水平约束(线段水平)">vde_solver_add_horizontal</a> 添加水平约束 </dd>
<dd>
<a class="el" href="vde__capi_8h.html#a2a2e54cdbf87a46434219917d4ddcdc9" title="添加垂直约束(线段垂直)">vde_solver_add_vertical</a> 添加垂直约束 </dd></dl>
</div>
</div>
<a id="a665e2414e558165f136837ce95119f74"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a665e2414e558165f136837ce95119f74">&#9670;&nbsp;</a></span>vde_solver_add_point()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde_solver_add_point </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>y</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>fixed</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>向求解器添加点 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">solver</td><td>求解器句柄 </td></tr>
<tr><td class="paramname">x</td><td>初始 X 坐标 </td></tr>
<tr><td class="paramname">y</td><td>初始 Y 坐标 </td></tr>
<tr><td class="paramname">fixed</td><td>固定点标记(1 = 固定不移动) </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>点的 ID(用于后续约束引用)</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a9cf4e2fc71bfa61073144147bf76c2e8" title="向求解器添加线段(由两个点定义)">vde_solver_add_line</a> 添加线段 </dd></dl>
</div>
</div>
<a id="a2a2e54cdbf87a46434219917d4ddcdc9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a2e54cdbf87a46434219917d4ddcdc9">&#9670;&nbsp;</a></span>vde_solver_add_vertical()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_solver_add_vertical </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>line_id</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>添加垂直约束(线段垂直) </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">solver</td><td>求解器句柄 </td></tr>
<tr><td class="paramname">line_id</td><td>线段 ID</td></tr>
</table>
</dd>
</dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a40107e23d391015f1e17e7ca94c81e73" title="添加水平约束(线段水平)">vde_solver_add_horizontal</a> 水平约束 </dd></dl>
</div>
</div>
<a id="af881dd70f559a3ff280b0047c2fcc8cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af881dd70f559a3ff280b0047c2fcc8cd">&#9670;&nbsp;</a></span>vde_solver_create()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a> vde_solver_create </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>创建二维约束求解器 </p>
<p>用于求解草图几何约束(距离、水平、垂直等)。</p>
<dl class="section return"><dt>返回</dt><dd>求解器句柄</dd></dl>
<dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#a65aed874db7cbb21c67f93879530518d" title="释放求解器句柄">vde_solver_free</a> 释放 </dd></dl>
</div>
</div>
<a id="a65aed874db7cbb21c67f93879530518d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a65aed874db7cbb21c67f93879530518d">&#9670;&nbsp;</a></span>vde_solver_free()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_solver_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>释放求解器句柄 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">solver</td><td>求解器句柄 </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="aac74b82de9d0e220e11562207f35ecd5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac74b82de9d0e220e11562207f35ecd5">&#9670;&nbsp;</a></span>vde_solver_get_point()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void vde_solver_get_point </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>idx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_x</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double *&#160;</td>
<td class="paramname"><em>out_y</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取求解后的点坐标 </p>
<dl class="params"><dt>参数</dt><dd>
<table class="params">
<tr><td class="paramname">solver</td><td>求解器句柄 </td></tr>
<tr><td class="paramname">idx</td><td>点 ID </td></tr>
<tr><td class="paramname">out_x</td><td>[out] 求解后 X 坐标 </td></tr>
<tr><td class="paramname">out_y</td><td>[out] 求解后 Y 坐标</td></tr>
</table>
</dd>
</dl>
<dl class="section pre"><dt>前置条件</dt><dd>必须先调用 <a class="el" href="vde__capi_8h.html#abe46983c28ce8d95adf263007ef93139" title="求解约束系统">vde_solver_solve()</a> </dd></dl>
</div>
</div>
<a id="abe46983c28ce8d95adf263007ef93139"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe46983c28ce8d95adf263007ef93139">&#9670;&nbsp;</a></span>vde_solver_solve()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int vde_solver_solve </td>
<td>(</td>
<td class="paramtype"><a class="el" href="vde__capi_8h.html#a3a17900fada7dfe2be0874044ea56f31">VdeSolverHandle</a>&#160;</td>
<td class="paramname"><em>solver</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>max_iter</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>tol</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">solver</td><td>求解器句柄 </td></tr>
<tr><td class="paramname">max_iter</td><td>最大迭代次数 </td></tr>
<tr><td class="paramname">tol</td><td>收敛容差 </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>收敛返回 1,未收敛返回 0</dd></dl>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> converged = <a class="code" href="vde__capi_8h.html#abe46983c28ce8d95adf263007ef93139">vde_solver_solve</a>(solver, 100, 1e-6);</div>
<div class="ttc" id="avde__capi_8h_html_abe46983c28ce8d95adf263007ef93139"><div class="ttname"><a href="vde__capi_8h.html#abe46983c28ce8d95adf263007ef93139">vde_solver_solve</a></div><div class="ttdeci">int vde_solver_solve(VdeSolverHandle solver, int max_iter, double tol)</div><div class="ttdoc">求解约束系统</div></div>
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="vde__capi_8h.html#aac74b82de9d0e220e11562207f35ecd5" title="获取求解后的点坐标">vde_solver_get_point</a> 获取求解后的点坐标 </dd></dl>
</div>
</div>
<a id="aa5eee51a9795e1c06826bf6ad6144e8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa5eee51a9795e1c06826bf6ad6144e8d">&#9670;&nbsp;</a></span>vde_version()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char* vde_version </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>获取引擎版本字符串 </p>
<dl class="section return"><dt>返回</dt><dd>语义版本号字符串(如 "0.5.0"),静态生命周期,无需释放</dd></dl>
<div class="fragment"><div class="line">printf(<span class="stringliteral">&quot;VDE version: %s\n&quot;</span>, <a class="code" href="vde__capi_8h.html#aa5eee51a9795e1c06826bf6ad6144e8d">vde_version</a>());</div>
<div class="ttc" id="avde__capi_8h_html_aa5eee51a9795e1c06826bf6ad6144e8d"><div class="ttname"><a href="vde__capi_8h.html#aa5eee51a9795e1c06826bf6ad6144e8d">vde_version</a></div><div class="ttdeci">const char * vde_version(void)</div><div class="ttdoc">获取引擎版本字符串</div></div>
</div><!-- fragment -->
</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="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_36dfe8171299c47a6036082559f11ede.html">vde</a></li><li class="navelem"><a class="el" href="dir_d2ea29e3315af068d63f97d54519c375.html">capi</a></li><li class="navelem"><a class="el" href="vde__capi_8h.html">vde_capi.h</a></li>
<li class="footer">生成于 2026年 七月 24日 星期五 11:21:23 , 为 ViewDesignEngine使用 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>