691 lines
46 KiB
HTML
691 lines
46 KiB
HTML
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|||
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
|
<head>
|
|||
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|||
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|||
|
|
<meta name="generator" content="Doxygen 1.9.1"/>
|
|||
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|||
|
|
<title>ViewDesignEngine: vde::boolean 命名空间参考</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
|
|||
|
|
 <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&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&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&dn=gpl-2.0.txt GPL-v2 */
|
|||
|
|
$(document).ready(function(){initNavTree('namespacevde_1_1boolean.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="#enum-members">枚举</a> |
|
|||
|
|
<a href="#func-members">函数</a> </div>
|
|||
|
|
<div class="headertitle">
|
|||
|
|
<div class="title">vde::boolean 命名空间参考</div> </div>
|
|||
|
|
</div><!--header-->
|
|||
|
|
<div class="contents">
|
|||
|
|
<table class="memberdecls">
|
|||
|
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
|
|||
|
|
枚举</h2></td></tr>
|
|||
|
|
<tr class="memitem:aae782fabf449b767ace57c8103c0e338"><td class="memItemLeft" align="right" valign="top">enum class  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338">BooleanOp</a> { <a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338aaef12e903e606a4895a16b393bfdec8c">Union</a>
|
|||
|
|
, <a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338aa06d31c2ee920b4d53e8c9c06d90ba24">Intersection</a>
|
|||
|
|
, <a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338a28ed2ac6c29f64a3692c956004b8ff7a">Difference</a>
|
|||
|
|
, <a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338ab3fff9b7882b88e6b08b2b3090df9de1">SymDiff</a>
|
|||
|
|
}</td></tr>
|
|||
|
|
<tr class="memdesc:aae782fabf449b767ace57c8103c0e338"><td class="mdescLeft"> </td><td class="mdescRight">布尔运算类型 <a href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:aae782fabf449b767ace57c8103c0e338"><td class="memSeparator" colspan="2"> </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:a69d5b061d79bc7c23b1505c8340777a4"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#a69d5b061d79bc7c23b1505c8340777a4">boolean_2d</a> (const <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> &a, const <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> &b, <a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338">BooleanOp</a> op)</td></tr>
|
|||
|
|
<tr class="memdesc:a69d5b061d79bc7c23b1505c8340777a4"><td class="mdescLeft"> </td><td class="mdescRight">二维多边形布尔运算 <a href="namespacevde_1_1boolean.html#a69d5b061d79bc7c23b1505c8340777a4">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:a69d5b061d79bc7c23b1505c8340777a4"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:a9804b327a1a811593f7129610e2ab1f6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6">mesh_union</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b)</td></tr>
|
|||
|
|
<tr class="memdesc:a9804b327a1a811593f7129610e2ab1f6"><td class="mdescLeft"> </td><td class="mdescRight">网格并集 A ∪ B <a href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:a9804b327a1a811593f7129610e2ab1f6"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:abf255b50c00a9aa991020eb39e800457"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#abf255b50c00a9aa991020eb39e800457">mesh_intersection</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b)</td></tr>
|
|||
|
|
<tr class="memdesc:abf255b50c00a9aa991020eb39e800457"><td class="mdescLeft"> </td><td class="mdescRight">网格交集 A ∩ B <a href="namespacevde_1_1boolean.html#abf255b50c00a9aa991020eb39e800457">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:abf255b50c00a9aa991020eb39e800457"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:ab0f79ea9f7f8d2a91329531d2d99e1c3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3">mesh_difference</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b)</td></tr>
|
|||
|
|
<tr class="memdesc:ab0f79ea9f7f8d2a91329531d2d99e1c3"><td class="mdescLeft"> </td><td class="mdescRight">网格差集 A − B <a href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:ab0f79ea9f7f8d2a91329531d2d99e1c3"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:ae1b0c6f707a5c6cbe829bed5083264fa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#ae1b0c6f707a5c6cbe829bed5083264fa">mesh_sym_diff</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b)</td></tr>
|
|||
|
|
<tr class="memdesc:ae1b0c6f707a5c6cbe829bed5083264fa"><td class="mdescLeft"> </td><td class="mdescRight">网格对称差 (A − B) ∪ (B − A) <a href="namespacevde_1_1boolean.html#ae1b0c6f707a5c6cbe829bed5083264fa">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:ae1b0c6f707a5c6cbe829bed5083264fa"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:ad45e2570a6b46624ecc43ccb18e22bac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#ad45e2570a6b46624ecc43ccb18e22bac">clip_mesh</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b, bool invert_b=false)</td></tr>
|
|||
|
|
<tr class="memdesc:ad45e2570a6b46624ecc43ccb18e22bac"><td class="mdescLeft"> </td><td class="mdescRight">用网格 B 裁剪网格 A <a href="namespacevde_1_1boolean.html#ad45e2570a6b46624ecc43ccb18e22bac">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:ad45e2570a6b46624ecc43ccb18e22bac"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:ab7facd7c849be2a97b1e53e8c4602d5c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#ab7facd7c849be2a97b1e53e8c4602d5c">invert_mesh</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &m)</td></tr>
|
|||
|
|
<tr class="memdesc:ab7facd7c849be2a97b1e53e8c4602d5c"><td class="mdescLeft"> </td><td class="mdescRight">翻转网格所有面片的法线方向 <a href="namespacevde_1_1boolean.html#ab7facd7c849be2a97b1e53e8c4602d5c">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:ab7facd7c849be2a97b1e53e8c4602d5c"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:ae638bb18b0580e662c700358dfbd0dac"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#ae638bb18b0580e662c700358dfbd0dac">merge_meshes</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b)</td></tr>
|
|||
|
|
<tr class="memdesc:ae638bb18b0580e662c700358dfbd0dac"><td class="mdescLeft"> </td><td class="mdescRight">合并两个网格 <a href="namespacevde_1_1boolean.html#ae638bb18b0580e662c700358dfbd0dac">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:ae638bb18b0580e662c700358dfbd0dac"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:a80fa9af2671c97412c95a8a9d592a20c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#a80fa9af2671c97412c95a8a9d592a20c">mesh_boolean</a> (const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &a, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &b, <a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338">BooleanOp</a> op)</td></tr>
|
|||
|
|
<tr class="memdesc:a80fa9af2671c97412c95a8a9d592a20c"><td class="mdescLeft"> </td><td class="mdescRight">网格布尔运算统一接口 <a href="namespacevde_1_1boolean.html#a80fa9af2671c97412c95a8a9d592a20c">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:a80fa9af2671c97412c95a8a9d592a20c"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:a35fbe67095edde181fb1f0911d04ae11"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#a35fbe67095edde181fb1f0911d04ae11">is_point_inside_mesh</a> (const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">core::Point3D</a> &p, const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> &mesh)</td></tr>
|
|||
|
|
<tr class="memdesc:a35fbe67095edde181fb1f0911d04ae11"><td class="mdescLeft"> </td><td class="mdescRight">判断三维点是否在封闭网格内部 <a href="namespacevde_1_1boolean.html#a35fbe67095edde181fb1f0911d04ae11">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:a35fbe67095edde181fb1f0911d04ae11"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
<tr class="memitem:a5498aa6722f88e30d5d824c8de391be1"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacevde_1_1boolean.html#a5498aa6722f88e30d5d824c8de391be1">polygon_offset</a> (const <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> &poly, double distance)</td></tr>
|
|||
|
|
<tr class="memdesc:a5498aa6722f88e30d5d824c8de391be1"><td class="mdescLeft"> </td><td class="mdescRight">多边形等距偏移 <a href="namespacevde_1_1boolean.html#a5498aa6722f88e30d5d824c8de391be1">更多...</a><br /></td></tr>
|
|||
|
|
<tr class="separator:a5498aa6722f88e30d5d824c8de391be1"><td class="memSeparator" colspan="2"> </td></tr>
|
|||
|
|
</table>
|
|||
|
|
<h2 class="groupheader">枚举类型说明</h2>
|
|||
|
|
<a id="aae782fabf449b767ace57c8103c0e338"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#aae782fabf449b767ace57c8103c0e338">◆ </a></span>BooleanOp</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="mlabels">
|
|||
|
|
<tr>
|
|||
|
|
<td class="mlabels-left">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname">enum <a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338">vde::boolean::BooleanOp</a></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</td>
|
|||
|
|
<td class="mlabels-right">
|
|||
|
|
<span class="mlabels"><span class="mlabel">strong</span></span> </td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>布尔运算类型 </p>
|
|||
|
|
<table class="fieldtable">
|
|||
|
|
<tr><th colspan="2">枚举值</th></tr><tr><td class="fieldname"><a id="aae782fabf449b767ace57c8103c0e338aaef12e903e606a4895a16b393bfdec8c"></a>Union </td><td class="fielddoc"><p>并集 A ∪ B </p>
|
|||
|
|
</td></tr>
|
|||
|
|
<tr><td class="fieldname"><a id="aae782fabf449b767ace57c8103c0e338aa06d31c2ee920b4d53e8c9c06d90ba24"></a>Intersection </td><td class="fielddoc"><p>交集 A ∩ B </p>
|
|||
|
|
</td></tr>
|
|||
|
|
<tr><td class="fieldname"><a id="aae782fabf449b767ace57c8103c0e338a28ed2ac6c29f64a3692c956004b8ff7a"></a>Difference </td><td class="fielddoc"><p>差集 A − B </p>
|
|||
|
|
</td></tr>
|
|||
|
|
<tr><td class="fieldname"><a id="aae782fabf449b767ace57c8103c0e338ab3fff9b7882b88e6b08b2b3090df9de1"></a>SymDiff </td><td class="fielddoc"><p>对称差 (A − B) ∪ (B − A) </p>
|
|||
|
|
</td></tr>
|
|||
|
|
</table>
|
|||
|
|
|
|||
|
|
<p class="definition">在文件 <a class="el" href="boolean__2d_8h_source.html">boolean_2d.h</a> 第 <a class="el" href="boolean__2d_8h_source.html#l00022">22</a> 行定义.</p>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<h2 class="groupheader">函数说明</h2>
|
|||
|
|
<a id="a69d5b061d79bc7c23b1505c8340777a4"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a69d5b061d79bc7c23b1505c8340777a4">◆ </a></span>boolean_2d()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname">std::vector<<a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a>> vde::boolean::boolean_2d </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype"><a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338">BooleanOp</a> </td>
|
|||
|
|
<td class="paramname"><em>op</em> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>二维多边形布尔运算 </p>
|
|||
|
|
<p>对两个简单多边形执行指定布尔操作。 当前实现:基于 Vatti 算法的边行走方式处理凸多边形, 可扩展支持任意简单多边形(含孔洞)。</p>
|
|||
|
|
<p>算法流程:</p><ol type="1">
|
|||
|
|
<li>找到两条多边形的所有交点</li>
|
|||
|
|
<li>跟踪边界根据布尔操作选择进入/退出边</li>
|
|||
|
|
<li>组装结果多边形</li>
|
|||
|
|
</ol>
|
|||
|
|
<dl class="section note"><dt>注解</dt><dd>当前版本优化了凸多边形路径。对于带孔洞或自交的 复杂多边形,建议先三角剖分或使用 mesh_boolean。</dd></dl>
|
|||
|
|
<dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">a</td><td>第一个多边形 </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>第二个多边形 </td></tr>
|
|||
|
|
<tr><td class="paramname">op</td><td>布尔操作类型 </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>结果多边形列表(可能有多个分离的组件)</dd></dl>
|
|||
|
|
<div class="fragment"><div class="line">Polygon2D p1 = make_circle(10, <a class="code" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a>{0,0}, 5.0);</div>
|
|||
|
|
<div class="line">Polygon2D p2 = make_circle(10, <a class="code" href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">Point2D</a>{3,0}, 5.0);</div>
|
|||
|
|
<div class="line"><span class="keyword">auto</span> result = <a class="code" href="namespacevde_1_1boolean.html#a69d5b061d79bc7c23b1505c8340777a4">boolean_2d</a>(p1, p2, <a class="code" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338aaef12e903e606a4895a16b393bfdec8c">BooleanOp::Union</a>);</div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_a69d5b061d79bc7c23b1505c8340777a4"><div class="ttname"><a href="namespacevde_1_1boolean.html#a69d5b061d79bc7c23b1505c8340777a4">vde::boolean::boolean_2d</a></div><div class="ttdeci">std::vector< Polygon2D > boolean_2d(const Polygon2D &a, const Polygon2D &b, BooleanOp op)</div><div class="ttdoc">二维多边形布尔运算</div></div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_aae782fabf449b767ace57c8103c0e338aaef12e903e606a4895a16b393bfdec8c"><div class="ttname"><a href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338aaef12e903e606a4895a16b393bfdec8c">vde::boolean::BooleanOp::Union</a></div><div class="ttdeci">@ Union</div></div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1core_html_a78483c599a40e4f333418667a77e3862"><div class="ttname"><a href="namespacevde_1_1core.html#a78483c599a40e4f333418667a77e3862">vde::core::Point2D</a></div><div class="ttdeci">foundation::Point2D Point2D</div><div class="ttdoc">双精度二维点(重新导出)</div><div class="ttdef"><b>Definition:</b> <a href="point_8h_source.html#l00029">point.h:29</a></div></div>
|
|||
|
|
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338" title="布尔运算类型">BooleanOp</a>, <a class="el" href="namespacevde_1_1boolean.html#a80fa9af2671c97412c95a8a9d592a20c" title="网格布尔运算统一接口">mesh_boolean</a>, <a class="el" href="namespacevde_1_1boolean.html#a5498aa6722f88e30d5d824c8de391be1" title="多边形等距偏移">polygon_offset</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="ad45e2570a6b46624ecc43ccb18e22bac"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ad45e2570a6b46624ecc43ccb18e22bac">◆ </a></span>clip_mesh()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::clip_mesh </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">bool </td>
|
|||
|
|
<td class="paramname"><em>invert_b</em> = <code>false</code> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>用网格 B 裁剪网格 A </p>
|
|||
|
|
<p>保留网格 A 中位于 B 体外的面片。 是 mesh_difference 的简化变体,仅输出来自 A 的面片。</p>
|
|||
|
|
<dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">a</td><td>待裁剪网格 </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>裁剪体网格 </td></tr>
|
|||
|
|
<tr><td class="paramname">invert_b</td><td>若为 true,将 B 的内外判定取反(裁剪外部) </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>裁剪后的网格(仅包含 A 的面片)</dd></dl>
|
|||
|
|
<div class="fragment"><div class="line"><span class="comment">// 裁剪 cube 外部的 sphere 面片</span></div>
|
|||
|
|
<div class="line"><span class="keyword">auto</span> clipped = <a class="code" href="namespacevde_1_1boolean.html#ad45e2570a6b46624ecc43ccb18e22bac">clip_mesh</a>(<a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>, cube, <span class="keyword">false</span> <span class="comment">// invert_b);</span></div>
|
|||
|
|
<div class="line"><span class="comment">// 保留 cube 内部的 sphere 面片</span></div>
|
|||
|
|
<div class="line"><span class="keyword">auto</span> inner = <a class="code" href="namespacevde_1_1boolean.html#ad45e2570a6b46624ecc43ccb18e22bac">clip_mesh</a>(<a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>, cube, <span class="keyword">true</span> <span class="comment">// invert_b);</span></div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_ad45e2570a6b46624ecc43ccb18e22bac"><div class="ttname"><a href="namespacevde_1_1boolean.html#ad45e2570a6b46624ecc43ccb18e22bac">vde::boolean::clip_mesh</a></div><div class="ttdeci">HalfedgeMesh clip_mesh(const HalfedgeMesh &a, const HalfedgeMesh &b, bool invert_b=false)</div><div class="ttdoc">用网格 B 裁剪网格 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 &p, double radius)</div><div class="ttdoc">球体的 SDF</div><div class="ttdef"><b>Definition:</b> <a href="sdf__primitives_8h_source.html#l00068">sdf_primitives.h:68</a></div></div>
|
|||
|
|
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3" title="网格差集 A − B">mesh_difference</a>, <a class="el" href="namespacevde_1_1boolean.html#a35fbe67095edde181fb1f0911d04ae11" title="判断三维点是否在封闭网格内部">is_point_inside_mesh</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="ab7facd7c849be2a97b1e53e8c4602d5c"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ab7facd7c849be2a97b1e53e8c4602d5c">◆ </a></span>invert_mesh()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::invert_mesh </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>m</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">m</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="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3" title="网格差集 A − B">mesh_difference</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="a35fbe67095edde181fb1f0911d04ae11"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a35fbe67095edde181fb1f0911d04ae11">◆ </a></span>is_point_inside_mesh()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname">bool vde::boolean::is_point_inside_mesh </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="namespacevde_1_1core.html#ac6aed70c4b90d13f10217267cd7a1952">core::Point3D</a> & </td>
|
|||
|
|
<td class="paramname"><em>p</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>mesh</em> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>判断三维点是否在封闭网格内部 </p>
|
|||
|
|
<p>使用射线投射法:从点 p 向任意方向射出射线, 统计与网格面片的交点数量。 奇数表示在内部,偶数表示在外部。</p>
|
|||
|
|
<p>算法:</p><ol type="1">
|
|||
|
|
<li>构造从 p 出发沿 +x 方向的射线</li>
|
|||
|
|
<li>遍历所有三角形进行射线-三角形求交</li>
|
|||
|
|
<li>统计交点数量</li>
|
|||
|
|
<li>返回奇偶性判定结果</li>
|
|||
|
|
</ol>
|
|||
|
|
<dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">p</td><td>待判定点 </td></tr>
|
|||
|
|
<tr><td class="paramname">mesh</td><td>封闭网格 </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>点在网格内部返回 true</dd></dl>
|
|||
|
|
<dl class="section note"><dt>注解</dt><dd>网格必须是封闭(水密)的,否则结果不可靠。 点恰好落在面上时行为未定义。</dd></dl>
|
|||
|
|
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#ad45e2570a6b46624ecc43ccb18e22bac" title="用网格 B 裁剪网格 A">clip_mesh</a>, <a class="el" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3" title="网格差集 A − B">mesh_difference</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="ae638bb18b0580e662c700358dfbd0dac"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae638bb18b0580e662c700358dfbd0dac">◆ </a></span>merge_meshes()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::merge_meshes </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em> </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">a</td><td>网格 A </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>网格 B </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>包含 A 和 B 全部顶点和面片的合并网格</dd></dl>
|
|||
|
|
<dl class="section note"><dt>注解</dt><dd>不处理重叠区域;仅做纯几何拼接</dd></dl>
|
|||
|
|
<dl class="section see"><dt>参见</dt><dd>mesh_union(做布尔合并) </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="a80fa9af2671c97412c95a8a9d592a20c"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a80fa9af2671c97412c95a8a9d592a20c">◆ </a></span>mesh_boolean()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::mesh_boolean </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype"><a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338">BooleanOp</a> </td>
|
|||
|
|
<td class="paramname"><em>op</em> </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">a</td><td>网格 A </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>网格 B </td></tr>
|
|||
|
|
<tr><td class="paramname">op</td><td>布尔操作类型 </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>结果网格</dd></dl>
|
|||
|
|
<div class="fragment"><div class="line"><span class="keyword">auto</span> result = <a class="code" href="namespacevde_1_1boolean.html#a80fa9af2671c97412c95a8a9d592a20c">mesh_boolean</a>(cube, <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>, <a class="code" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338aa06d31c2ee920b4d53e8c9c06d90ba24">BooleanOp::Intersection</a>);</div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_a80fa9af2671c97412c95a8a9d592a20c"><div class="ttname"><a href="namespacevde_1_1boolean.html#a80fa9af2671c97412c95a8a9d592a20c">vde::boolean::mesh_boolean</a></div><div class="ttdeci">HalfedgeMesh mesh_boolean(const HalfedgeMesh &a, const HalfedgeMesh &b, BooleanOp op)</div><div class="ttdoc">网格布尔运算统一接口</div></div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_aae782fabf449b767ace57c8103c0e338aa06d31c2ee920b4d53e8c9c06d90ba24"><div class="ttname"><a href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338aa06d31c2ee920b4d53e8c9c06d90ba24">vde::boolean::BooleanOp::Intersection</a></div><div class="ttdeci">@ Intersection</div></div>
|
|||
|
|
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#aae782fabf449b767ace57c8103c0e338" title="布尔运算类型">BooleanOp</a>, <a class="el" href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6" title="网格并集 A ∪ B">mesh_union</a>, <a class="el" href="namespacevde_1_1boolean.html#abf255b50c00a9aa991020eb39e800457" title="网格交集 A ∩ B">mesh_intersection</a>, <a class="el" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3" title="网格差集 A − B">mesh_difference</a>, <a class="el" href="namespacevde_1_1boolean.html#ae1b0c6f707a5c6cbe829bed5083264fa" title="网格对称差 (A − B) ∪ (B − A)">mesh_sym_diff</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="ab0f79ea9f7f8d2a91329531d2d99e1c3"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ab0f79ea9f7f8d2a91329531d2d99e1c3">◆ </a></span>mesh_difference()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::mesh_difference </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>网格差集 A − B </p>
|
|||
|
|
<p>保留网格 A 中重心在网格 B 外的面片, 以及网格 B 中重心在网格 A 内的面片(翻转法线)。</p>
|
|||
|
|
<dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">a</td><td>网格 A </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>网格 B </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>A − B 的差集网格</dd></dl>
|
|||
|
|
<dl class="section note"><dt>注解</dt><dd>结果中来自 B 的面片会被翻转法线以保持内-外一致性</dd></dl>
|
|||
|
|
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6" title="网格并集 A ∪ B">mesh_union</a>, <a class="el" href="namespacevde_1_1boolean.html#abf255b50c00a9aa991020eb39e800457" title="网格交集 A ∩ B">mesh_intersection</a>, <a class="el" href="namespacevde_1_1boolean.html#ae1b0c6f707a5c6cbe829bed5083264fa" title="网格对称差 (A − B) ∪ (B − A)">mesh_sym_diff</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="abf255b50c00a9aa991020eb39e800457"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#abf255b50c00a9aa991020eb39e800457">◆ </a></span>mesh_intersection()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::mesh_intersection </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>网格交集 A ∩ B </p>
|
|||
|
|
<p>保留网格 A 中重心在网格 B 内的面片, 以及网格 B 中重心在网格 A 内的面片。</p>
|
|||
|
|
<dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">a</td><td>网格 A </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>网格 B </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>A ∩ B 的交集网格</dd></dl>
|
|||
|
|
<dl class="section note"><dt>注解</dt><dd>结果体积为两网格公共区域</dd></dl>
|
|||
|
|
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6" title="网格并集 A ∪ B">mesh_union</a>, <a class="el" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3" title="网格差集 A − B">mesh_difference</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="ae1b0c6f707a5c6cbe829bed5083264fa"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ae1b0c6f707a5c6cbe829bed5083264fa">◆ </a></span>mesh_sym_diff()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::mesh_sym_diff </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>网格对称差 (A − B) ∪ (B − A) </p>
|
|||
|
|
<p>等价于: </p><div class="fragment"><div class="line"><a class="code" href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6">mesh_union</a>(<a class="code" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3">mesh_difference</a>(a, b), <a class="code" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3">mesh_difference</a>(b, a))</div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_a9804b327a1a811593f7129610e2ab1f6"><div class="ttname"><a href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6">vde::boolean::mesh_union</a></div><div class="ttdeci">HalfedgeMesh mesh_union(const HalfedgeMesh &a, const HalfedgeMesh &b)</div><div class="ttdoc">网格并集 A ∪ B</div></div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_ab0f79ea9f7f8d2a91329531d2d99e1c3"><div class="ttname"><a href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3">vde::boolean::mesh_difference</a></div><div class="ttdeci">HalfedgeMesh mesh_difference(const HalfedgeMesh &a, const HalfedgeMesh &b)</div><div class="ttdoc">网格差集 A − B</div></div>
|
|||
|
|
</div><!-- fragment --><dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">a</td><td>网格 A </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>网格 B </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>对称差网格</dd></dl>
|
|||
|
|
<dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3" title="网格差集 A − B">mesh_difference</a>, <a class="el" href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6" title="网格并集 A ∪ B">mesh_union</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="a9804b327a1a811593f7129610e2ab1f6"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a9804b327a1a811593f7129610e2ab1f6">◆ </a></span>mesh_union()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname"><a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> vde::boolean::mesh_union </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>a</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1mesh_1_1HalfedgeMesh.html">HalfedgeMesh</a> & </td>
|
|||
|
|
<td class="paramname"><em>b</em> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>网格并集 A ∪ B </p>
|
|||
|
|
<p>保留网格 A 中重心在网格 B 外的面片, 以及网格 B 中重心在网格 A 外的面片。 合并后形成两个网格的并集体积。</p>
|
|||
|
|
<p>原理:对每个面片计算重心坐标,用射线投射判断 该点是否在对方网格内部,据此决定保留或剔除。</p>
|
|||
|
|
<dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">a</td><td>网格 A </td></tr>
|
|||
|
|
<tr><td class="paramname">b</td><td>网格 B </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>A ∪ B 的合并网格</dd></dl>
|
|||
|
|
<div class="fragment"><div class="line">HalfedgeMesh result = <a class="code" href="namespacevde_1_1boolean.html#a9804b327a1a811593f7129610e2ab1f6">mesh_union</a>(cube, <a class="code" href="namespacevde_1_1sdf.html#ab544a3ebc4c0844b322b73bbbe4efb3f">sphere</a>);</div>
|
|||
|
|
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#abf255b50c00a9aa991020eb39e800457" title="网格交集 A ∩ B">mesh_intersection</a>, <a class="el" href="namespacevde_1_1boolean.html#ab0f79ea9f7f8d2a91329531d2d99e1c3" title="网格差集 A − B">mesh_difference</a>, <a class="el" href="namespacevde_1_1boolean.html#a35fbe67095edde181fb1f0911d04ae11" title="判断三维点是否在封闭网格内部">is_point_inside_mesh</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<a id="a5498aa6722f88e30d5d824c8de391be1"></a>
|
|||
|
|
<h2 class="memtitle"><span class="permalink"><a href="#a5498aa6722f88e30d5d824c8de391be1">◆ </a></span>polygon_offset()</h2>
|
|||
|
|
|
|||
|
|
<div class="memitem">
|
|||
|
|
<div class="memproto">
|
|||
|
|
<table class="memname">
|
|||
|
|
<tr>
|
|||
|
|
<td class="memname">std::vector<<a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a>> vde::boolean::polygon_offset </td>
|
|||
|
|
<td>(</td>
|
|||
|
|
<td class="paramtype">const <a class="el" href="classvde_1_1core_1_1Polygon2D.html">Polygon2D</a> & </td>
|
|||
|
|
<td class="paramname"><em>poly</em>, </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td class="paramkey"></td>
|
|||
|
|
<td></td>
|
|||
|
|
<td class="paramtype">double </td>
|
|||
|
|
<td class="paramname"><em>distance</em> </td>
|
|||
|
|
</tr>
|
|||
|
|
<tr>
|
|||
|
|
<td></td>
|
|||
|
|
<td>)</td>
|
|||
|
|
<td></td><td></td>
|
|||
|
|
</tr>
|
|||
|
|
</table>
|
|||
|
|
</div><div class="memdoc">
|
|||
|
|
|
|||
|
|
<p>多边形等距偏移 </p>
|
|||
|
|
<p>将多边形的每条边沿其法线方向平移指定距离, 在转角处自动生成圆弧/斜角连接。</p>
|
|||
|
|
<p>算法:</p><ol type="1">
|
|||
|
|
<li>对每条边计算单位外法线</li>
|
|||
|
|
<li>沿法线平移 distance 距离</li>
|
|||
|
|
<li>相邻偏移边求交形成新的顶点</li>
|
|||
|
|
<li>检测自交并移除退化区域</li>
|
|||
|
|
</ol>
|
|||
|
|
<ul>
|
|||
|
|
<li>正距离 = 外扩(膨胀/Inflation)</li>
|
|||
|
|
<li>负距离 = 内缩(偏置/Deflation)</li>
|
|||
|
|
</ul>
|
|||
|
|
<dl class="params"><dt>参数</dt><dd>
|
|||
|
|
<table class="params">
|
|||
|
|
<tr><td class="paramname">poly</td><td>原始多边形 </td></tr>
|
|||
|
|
<tr><td class="paramname">distance</td><td>偏移距离(正=外扩,负=内缩) </td></tr>
|
|||
|
|
</table>
|
|||
|
|
</dd>
|
|||
|
|
</dl>
|
|||
|
|
<dl class="section return"><dt>返回</dt><dd>偏移后的多边形列表(内缩或自交可能产生多个碎片)</dd></dl>
|
|||
|
|
<dl class="section note"><dt>注解</dt><dd>使用直骨架近似而非精确圆弧偏移,转角处为斜角连接。 大距离负偏移可能导致多边形完全消失(返回空列表)。</dd></dl>
|
|||
|
|
<div class="fragment"><div class="line">Polygon2D rect = {{0,0}, {10,0}, {10,5}, {0,5}};</div>
|
|||
|
|
<div class="line"><span class="comment">// 外扩 2 单位</span></div>
|
|||
|
|
<div class="line"><span class="keyword">auto</span> inflated = <a class="code" href="namespacevde_1_1boolean.html#a5498aa6722f88e30d5d824c8de391be1">polygon_offset</a>(rect, 2.0);</div>
|
|||
|
|
<div class="line"><span class="comment">// 内缩 1 单位(生成工具路径)</span></div>
|
|||
|
|
<div class="line"><span class="keyword">auto</span> toolpath = <a class="code" href="namespacevde_1_1boolean.html#a5498aa6722f88e30d5d824c8de391be1">polygon_offset</a>(rect, -1.0);</div>
|
|||
|
|
<div class="ttc" id="anamespacevde_1_1boolean_html_a5498aa6722f88e30d5d824c8de391be1"><div class="ttname"><a href="namespacevde_1_1boolean.html#a5498aa6722f88e30d5d824c8de391be1">vde::boolean::polygon_offset</a></div><div class="ttdeci">std::vector< Polygon2D > polygon_offset(const Polygon2D &poly, double distance)</div><div class="ttdoc">多边形等距偏移</div></div>
|
|||
|
|
</div><!-- fragment --><dl class="section see"><dt>参见</dt><dd><a class="el" href="namespacevde_1_1boolean.html#a69d5b061d79bc7c23b1505c8340777a4" title="二维多边形布尔运算">boolean_2d</a> </dd></dl>
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div><!-- contents -->
|
|||
|
|
</div><!-- doc-content -->
|
|||
|
|
<!-- start footer part -->
|
|||
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|||
|
|
<ul>
|
|||
|
|
<li class="navelem"><a class="el" href="namespacevde.html">vde</a></li><li class="navelem"><a class="el" href="namespacevde_1_1boolean.html">boolean</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>
|