2026-02-17 15:51:23 +08:00

1594 lines
51 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class CubeTree | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class CubeTree | HiAPI-C# 2025 ">
<meta name="description" content="Cube-based data structure. CubeTree has high performance for free-form geometry manipulation include volume removal and addition.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Cbtr.CubeTree">
<h1 id="Hi_Cbtr_CubeTree" data-uid="Hi.Cbtr.CubeTree" class="text-break">
Class CubeTree
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Cbtr.html">Cbtr</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiCbtr.dll</dd></dl>
</div>
<div class="markdown summary"><p>Cube-based data structure. CubeTree has high performance for free-form geometry manipulation include volume removal and addition.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class CubeTree : IDisposable, IDisplayee, ICollidee, ICollidable, IExpandToBox3d, IGetCollidable</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">CubeTree</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
<div><a class="xref" href="Hi.Disp.IDisplayee.html">IDisplayee</a></div>
<div><a class="xref" href="Hi.Collision.ICollidee.html">ICollidee</a></div>
<div><a class="xref" href="Hi.Collision.ICollidable.html">ICollidable</a></div>
<div><a class="xref" href="Hi.Geom.IExpandToBox3d.html">IExpandToBox3d</a></div>
<div><a class="xref" href="Hi.Collision.IGetCollidable.html">IGetCollidable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Collision.CollisionUtil.html#Hi_Collision_CollisionUtil_Detect_Hi_Cbtr_CubeTree_Hi_Collision_TriTree_Hi_Geom_Mat4d_System_Double_System_Int32_">CollisionUtil.Detect(CubeTree, TriTree, Mat4d, double, int)</a>
</div>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(TSelf, params object[])</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__1___0_System_Action___0__">InvokeUtil.SelfInvoke&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Machining.SweptableUtil.html#Hi_Machining_SweptableUtil_RemoveBySweepingVolume_Hi_Cbtr_CubeTree_Hi_Machining_IGetSweptable_Hi_Geom_Mat4d_Hi_Geom_Mat4d_System_Double_System_Double_System_Boolean_System_Boolean_">SweptableUtil.RemoveBySweepingVolume(CubeTree, IGetSweptable, Mat4d, Mat4d, double, double, bool, bool)</a>
</div>
<div>
<a class="xref" href="Hi.Collision.CollisionUtil.html#Hi_Collision_CollisionUtil_Detect_Hi_Collision_ICollidable_Hi_Collision_ICollidable_Hi_Geom_Mat4d_System_Double_System_Int32_">CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int)</a>
</div>
<div>
<a class="xref" href="Hi.Disp.DispUtil.html#Hi_Disp_DispUtil_Display_Hi_Disp_IDisplayee_Hi_Disp_Bind_Hi_Geom_Mat4d_">DispUtil.Display(IDisplayee, Bind, Mat4d)</a>
</div>
<div>
<a class="xref" href="Hi.Coloring.ColorUtil.html#Hi_Coloring_ColorUtil_GetGloomyColor_System_Object_System_Double_System_Double_">ColorUtil.GetGloomyColor(object, double, double)</a>
</div>
<div>
<a class="xref" href="Hi.Common.NameUtil.html#Hi_Common_NameUtil_GetSelectionName_System_Object_">NameUtil.GetSelectionName(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.StringUtil.html#Hi_Common_StringUtil_GetPropertyStringIfToStringNotOverloaded_System_Object_System_Boolean_System_Boolean_">StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool)</a>
</div>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
</dd></dl>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="Hi_Cbtr_CubeTree__ctor_" data-uid="Hi.Cbtr.CubeTree.#ctor*"></a>
<h3 id="Hi_Cbtr_CubeTree__ctor_Hi_Geom_NativeStl_System_Double_System_Threading_CancellationToken_System_IProgress_Hi_Common_NativeProgresses_IProgressReport__" data-uid="Hi.Cbtr.CubeTree.#ctor(Hi.Geom.NativeStl,System.Double,System.Threading.CancellationToken,System.IProgress{Hi.Common.NativeProgresses.IProgressReport})">
CubeTree(NativeStl, double, CancellationToken, IProgress&lt;IProgressReport&gt;)
</h3>
<div class="markdown level1 summary"><p>Ctor.
This ctor is faster than <a class="xref" href="Hi.Cbtr.CubeTree.html#Hi_Cbtr_CubeTree__ctor_Hi_Geom_NativeStl_System_Double_System_Threading_CancellationToken_System_IProgress_Hi_Common_NativeProgresses_IProgressReport__">CubeTree(NativeStl, double, CancellationToken, IProgress&lt;IProgressReport&gt;)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public CubeTree(NativeStl stl, double preferredGridWidth, CancellationToken token, IProgress&lt;IProgressReport&gt; progress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>stl</code> <a class="xref" href="Hi.Geom.NativeStl.html">NativeStl</a></dt>
<dd><p>Triangle Grid. The triangles must be manifold geometry.</p>
</dd>
<dt><code>preferredGridWidth</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>The expected resolution.</p>
</dd>
<dt><code>token</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
<dd><p>Cancellation token for the operation</p>
</dd>
<dt><code>progress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="Hi.Common.NativeProgresses.IProgressReport.html">IProgressReport</a>&gt;</dt>
<dd><p>Progress reporter for the operation</p>
</dd>
</dl>
<h4 class="section" id="Hi_Cbtr_CubeTree__ctor_Hi_Geom_NativeStl_System_Double_System_Threading_CancellationToken_System_IProgress_Hi_Common_NativeProgresses_IProgressReport___remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>The applied resolution is equal or smaller than the expected resolution.
The applied resolution is c*(2^i). Where c is a constant; i is a integer to make the closest value of the formula.
Errors relative to the input geometry are distributed at sharp edges and curved surfaces.</p>
</div>
<a id="Hi_Cbtr_CubeTree__ctor_" data-uid="Hi.Cbtr.CubeTree.#ctor*"></a>
<h3 id="Hi_Cbtr_CubeTree__ctor_Hi_Geom_Stl_System_Double_System_Threading_CancellationToken_System_IProgress_Hi_Common_NativeProgresses_IProgressReport__" data-uid="Hi.Cbtr.CubeTree.#ctor(Hi.Geom.Stl,System.Double,System.Threading.CancellationToken,System.IProgress{Hi.Common.NativeProgresses.IProgressReport})">
CubeTree(Stl, double, CancellationToken, IProgress&lt;IProgressReport&gt;)
</h3>
<div class="markdown level1 summary"><p>Can be initialized with Stl or NativeStl objects; using NativeStl is faster. The input triangle mesh must be manifold geometry, i.e., triangle vertices are aligned with other triangles' vertices, and the geometry must be closed.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public CubeTree(Stl stl, double expectedResolution, CancellationToken token, IProgress&lt;IProgressReport&gt; progress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>stl</code> <a class="xref" href="Hi.Geom.Stl.html">Stl</a></dt>
<dd></dd>
<dt><code>expectedResolution</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>Sets the preferred resolution. The actual resolution will be equal to or smaller than the specified value, approximately spaced by powers of 2.
Errors relative to the input geometry are distributed at sharp edges and curved surfaces.</p>
</dd>
<dt><code>token</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
<dd><p>Cancellation token for the operation</p>
</dd>
<dt><code>progress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="Hi.Common.NativeProgresses.IProgressReport.html">IProgressReport</a>&gt;</dt>
<dd><p>Progress reporter for the operation</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree__ctor_" data-uid="Hi.Cbtr.CubeTree.#ctor*"></a>
<h3 id="Hi_Cbtr_CubeTree__ctor_System_String_" data-uid="Hi.Cbtr.CubeTree.#ctor(System.String)">
CubeTree(string)
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a> class from a file.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public CubeTree(string file)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>file</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The path to the cube tree file.</p>
</dd>
</dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="Hi_Cbtr_CubeTree_KeyDll" data-uid="Hi.Cbtr.CubeTree.KeyDll">
KeyDll
</h3>
<div class="markdown level1 summary"><p>Key dll path.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string KeyDll = &quot;hi-key.dll&quot;</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h3 id="Hi_Cbtr_CubeTree_defaultPreferredGridWidth" data-uid="Hi.Cbtr.CubeTree.defaultPreferredGridWidth">
defaultPreferredGridWidth
</h3>
<div class="markdown level1 summary"><p>The default grid_width for the constructor.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const double defaultPreferredGridWidth = 0.0625</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_Cbtr_CubeTree_CollisionFlag_" data-uid="Hi.Cbtr.CubeTree.CollisionFlag*"></a>
<h3 id="Hi_Cbtr_CubeTree_CollisionFlag" data-uid="Hi.Cbtr.CubeTree.CollisionFlag">
CollisionFlag
</h3>
<div class="markdown level1 summary"><p>Gets or sets the collision flag.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public CollisionFlag CollisionFlag { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Collision.CollisionFlag.html">CollisionFlag</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_CubetreePtr_" data-uid="Hi.Cbtr.CubeTree.CubetreePtr*"></a>
<h3 id="Hi_Cbtr_CubeTree_CubetreePtr" data-uid="Hi.Cbtr.CubeTree.CubetreePtr">
CubetreePtr
</h3>
<div class="markdown level1 summary"><p>Private element.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public nint CubetreePtr { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.intptr">nint</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_DispCacheMb_" data-uid="Hi.Cbtr.CubeTree.DispCacheMb*"></a>
<h3 id="Hi_Cbtr_CubeTree_DispCacheMb" data-uid="Hi.Cbtr.CubeTree.DispCacheMb">
DispCacheMb
</h3>
<div class="markdown level1 summary"><p>Display cache size in Mb. The cahce cost from graphic card and RAM.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static long DispCacheMb { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Resolution_" data-uid="Hi.Cbtr.CubeTree.Resolution*"></a>
<h3 id="Hi_Cbtr_CubeTree_Resolution" data-uid="Hi.Cbtr.CubeTree.Resolution">
Resolution
</h3>
<div class="markdown level1 summary"><p>Get initialized resolution.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public double Resolution { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_TotalCacheMb_" data-uid="Hi.Cbtr.CubeTree.TotalCacheMb*"></a>
<h3 id="Hi_Cbtr_CubeTree_TotalCacheMb" data-uid="Hi.Cbtr.CubeTree.TotalCacheMb">
TotalCacheMb
</h3>
<div class="markdown level1 summary"><p>Cache size used by <a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a>.
Sum of <a class="xref" href="Hi.Cbtr.CubeTree.html#Hi_Cbtr_CubeTree_TrisCacheMb">TrisCacheMb</a> and <a class="xref" href="Hi.Cbtr.CubeTree.html#Hi_Cbtr_CubeTree_DispCacheMb">DispCacheMb</a>.
<a class="xref" href="Hi.Cbtr.CubeTree.html#Hi_Cbtr_CubeTree_TotalCacheMb">TotalCacheMb</a> Setter distributes (2/5 of the setting value) for <a class="xref" href="Hi.Cbtr.CubeTree.html#Hi_Cbtr_CubeTree_DispCacheMb">DispCacheMb</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static long TotalCacheMb { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_TrisCacheMb_" data-uid="Hi.Cbtr.CubeTree.TrisCacheMb*"></a>
<h3 id="Hi_Cbtr_CubeTree_TrisCacheMb" data-uid="Hi.Cbtr.CubeTree.TrisCacheMb">
TrisCacheMb
</h3>
<div class="markdown level1 summary"><p>Triangles cache size in Mb. The cache costs from RAM.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static long TrisCacheMb { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int64">long</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Cbtr_CubeTree_CleanCache_" data-uid="Hi.Cbtr.CubeTree.CleanCache*"></a>
<h3 id="Hi_Cbtr_CubeTree_CleanCache" data-uid="Hi.Cbtr.CubeTree.CleanCache">
CleanCache()
</h3>
<div class="markdown level1 summary"><p>Call <span class="xref">Hi.Cbtr.CubeTree.CleanTrisCache()</span> and <span class="xref">Hi.Cbtr.CubeTree.CleanDispCache_()</span>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void CleanCache()</code></pre>
</div>
<a id="Hi_Cbtr_CubeTree_CleanDispCachee_" data-uid="Hi.Cbtr.CubeTree.CleanDispCachee*"></a>
<h3 id="Hi_Cbtr_CubeTree_CleanDispCachee" data-uid="Hi.Cbtr.CubeTree.CleanDispCachee">
CleanDispCachee()
</h3>
<div class="markdown level1 summary"><p>Clean display cache of <code>this</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void CleanDispCachee()</code></pre>
</div>
<a id="Hi_Cbtr_CubeTree_ContainsInfEdgeCuts_" data-uid="Hi.Cbtr.CubeTree.ContainsInfEdgeCuts*"></a>
<h3 id="Hi_Cbtr_CubeTree_ContainsInfEdgeCuts" data-uid="Hi.Cbtr.CubeTree.ContainsInfEdgeCuts">
ContainsInfEdgeCuts()
</h3>
<div class="markdown level1 summary"><p>Checks if any existing node in the cube tree contains inf or -inf in its edge_cuts array.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool ContainsInfEdgeCuts()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>true if any node contains inf or -inf in edge_cuts, false otherwise.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Diff_" data-uid="Hi.Cbtr.CubeTree.Diff*"></a>
<h3 id="Hi_Cbtr_CubeTree_Diff_Hi_Geom_NativeStl_System_Double_Hi_Coloring_RangeColorRule_System_IProgress_System_Object__" data-uid="Hi.Cbtr.CubeTree.Diff(Hi.Geom.NativeStl,System.Double,Hi.Coloring.RangeColorRule,System.IProgress{System.Object})">
Diff(NativeStl, double, RangeColorRule, IProgress&lt;object&gt;)
</h3>
<div class="markdown level1 summary"><p>Compares the cube tree with an ideal geometry and returns difference attachments.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ConcurrentBag&lt;DiffAttachment&gt; Diff(NativeStl idealGeom, double diffRadius, RangeColorRule diffRangeColorRule, IProgress&lt;object&gt; progress = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>idealGeom</code> <a class="xref" href="Hi.Geom.NativeStl.html">NativeStl</a></dt>
<dd><p>The ideal geometry to compare with.</p>
</dd>
<dt><code>diffRadius</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>The radius for difference detection.</p>
</dd>
<dt><code>diffRangeColorRule</code> <a class="xref" href="Hi.Coloring.RangeColorRule.html">RangeColorRule</a></dt>
<dd><p>The color rule for visualizing differences.</p>
</dd>
<dt><code>progress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>&gt;</dt>
<dd><p>Progress reporter for the operation.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.concurrent.concurrentbag-1">ConcurrentBag</a>&lt;<a class="xref" href="Hi.Cbtr.DiffAttachment.html">DiffAttachment</a>&gt;</dt>
<dd><p>A collection of difference attachments.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Display_" data-uid="Hi.Cbtr.CubeTree.Display*"></a>
<h3 id="Hi_Cbtr_CubeTree_Display_Hi_Disp_Bind_" data-uid="Hi.Cbtr.CubeTree.Display(Hi.Disp.Bind)">
Display(Bind)
</h3>
<div class="markdown level1 summary"><p>Display function called in <a class="xref" href="Hi.Disp.DispEngine.html">DispEngine</a> rendering loop.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Display(Bind bind)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>bind</code> <a class="xref" href="Hi.Disp.Bind.html">Bind</a></dt>
<dd><p>Bind with <a class="xref" href="Hi.Disp.DispEngine.html">DispEngine</a>. See <a class="xref" href="Hi.Disp.Bind.html">Bind</a>.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Dispose_" data-uid="Hi.Cbtr.CubeTree.Dispose*"></a>
<h3 id="Hi_Cbtr_CubeTree_Dispose" data-uid="Hi.Cbtr.CubeTree.Dispose">
Dispose()
</h3>
<div class="markdown level1 summary"><p>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
<a id="Hi_Cbtr_CubeTree_Dispose_" data-uid="Hi.Cbtr.CubeTree.Dispose*"></a>
<h3 id="Hi_Cbtr_CubeTree_Dispose_System_Boolean_" data-uid="Hi.Cbtr.CubeTree.Dispose(System.Boolean)">
Dispose(bool)
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual void Dispose(bool disposing)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>disposing</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_ExpandToBox3d_" data-uid="Hi.Cbtr.CubeTree.ExpandToBox3d*"></a>
<h3 id="Hi_Cbtr_CubeTree_ExpandToBox3d_Hi_Geom_Box3d_" data-uid="Hi.Cbtr.CubeTree.ExpandToBox3d(Hi.Geom.Box3d)">
ExpandToBox3d(Box3d)
</h3>
<div class="markdown level1 summary"><p>Expands the destination box.
This function is usually used to compute the bounding box of elements.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void ExpandToBox3d(Box3d dst)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>dst</code> <a class="xref" href="Hi.Geom.Box3d.html">Box3d</a></dt>
<dd><p>Destination box</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Finalize_" data-uid="Hi.Cbtr.CubeTree.Finalize*"></a>
<h3 id="Hi_Cbtr_CubeTree_Finalize" data-uid="Hi.Cbtr.CubeTree.Finalize">
~CubeTree()
</h3>
<div class="markdown level1 summary"><p>dtor</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected ~CubeTree()</code></pre>
</div>
<a id="Hi_Cbtr_CubeTree_GetCollidable_" data-uid="Hi.Cbtr.CubeTree.GetCollidable*"></a>
<h3 id="Hi_Cbtr_CubeTree_GetCollidable" data-uid="Hi.Cbtr.CubeTree.GetCollidable">
GetCollidable()
</h3>
<div class="markdown level1 summary"><p>Gets the collidable object.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ICollidable GetCollidable()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Collision.ICollidable.html">ICollidable</a></dt>
<dd><p>The collidable object (this instance).</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_GetCollidee_" data-uid="Hi.Cbtr.CubeTree.GetCollidee*"></a>
<h3 id="Hi_Cbtr_CubeTree_GetCollidee" data-uid="Hi.Cbtr.CubeTree.GetCollidee">
GetCollidee()
</h3>
<div class="markdown level1 summary"><p>Get <a class="xref" href="Hi.Collision.ICollidee.html">ICollidee</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ICollidee GetCollidee()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Collision.ICollidee.html">ICollidee</a></dt>
<dd><p><a class="xref" href="Hi.Collision.ICollidee.html">ICollidee</a></p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_GetInfEdgeCutsInfo_" data-uid="Hi.Cbtr.CubeTree.GetInfEdgeCutsInfo*"></a>
<h3 id="Hi_Cbtr_CubeTree_GetInfEdgeCutsInfo" data-uid="Hi.Cbtr.CubeTree.GetInfEdgeCutsInfo">
GetInfEdgeCutsInfo()
</h3>
<div class="markdown level1 summary"><p>Gets info for all nodes that contain inf or -inf in their edge_cuts array.
Each node's box is grouped with its corresponding inf edge indices.
This is useful for identifying and visualizing non-manifold geometry issues in the cube tree.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;CubeTree.InfNodeInfo&gt; GetInfEdgeCutsInfo()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a>.<a class="xref" href="Hi.Cbtr.CubeTree.InfNodeInfo.html">InfNodeInfo</a>&gt;</dt>
<dd><p>A list of node info, each containing a box and its inf edge indices.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_GetRgbTrisNativeArray_" data-uid="Hi.Cbtr.CubeTree.GetRgbTrisNativeArray*"></a>
<h3 id="Hi_Cbtr_CubeTree_GetRgbTrisNativeArray_System_Double_" data-uid="Hi.Cbtr.CubeTree.GetRgbTrisNativeArray(System.Double)">
GetRgbTrisNativeArray(double)
</h3>
<div class="markdown level1 summary"><p>Get triangles in type of double array. The returned triangles is non-manifold.
It may not be closed model and the apexes of triangle grid may not be overlapped.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public double[] GetRgbTrisNativeArray(double resolution = 0)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>resolution</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>The preferred resolution.
The real resolution may be smaller or equal the prefered resolution.
The real resolution is discrete. The resolution value is at 2^i.
The geometric error mainly locate at corner.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>[]</dt>
<dd><p>rgb traingle grid.
In sequence of r,g,b,n.x,n.y,n.z,p0.x,p0.y,p0.z,p1.x,p1.y,p1.z,p2.x,p2.y,p2.z, repetitively.
A triangle take 15 double.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_GetTris_" data-uid="Hi.Cbtr.CubeTree.GetTris*"></a>
<h3 id="Hi_Cbtr_CubeTree_GetTris_System_Double_" data-uid="Hi.Cbtr.CubeTree.GetTris(System.Double)">
GetTris(double)
</h3>
<div class="markdown level1 summary"><p>Get triangles. The returned triangles is non-manifold. It may not be closed model and the apexes of triangle grid may not be overlapped.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;Tri3d&gt; GetTris(double resolution = 0)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>resolution</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>Sets the preferred resolution. The actual resolution will be equal to or smaller than the specified value, approximately spaced by powers of 2. Errors relative to the input geometry are distributed at sharp edges and curved surfaces. A larger resolution results in fewer triangles and faster computation.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.Geom.Tri3d.html">Tri3d</a>&gt;</dt>
<dd><p>Triangle mesh</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_NewWithDefectInfos_" data-uid="Hi.Cbtr.CubeTree.NewWithDefectInfos*"></a>
<h3 id="Hi_Cbtr_CubeTree_NewWithDefectInfos_Hi_Geom_NativeStl_System_Double_System_Threading_CancellationToken_System_IProgress_System_Object__" data-uid="Hi.Cbtr.CubeTree.NewWithDefectInfos(Hi.Geom.NativeStl,System.Double,System.Threading.CancellationToken,System.IProgress{System.Object})">
NewWithDefectInfos(NativeStl, double, CancellationToken, IProgress&lt;object&gt;)
</h3>
<div class="markdown level1 summary"><p>Creates a new CubeTree and collects defect node infos during construction.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static (CubeTree cubeTree, List&lt;CubeTree.DefectNodeInfo&gt; defectInfos) NewWithDefectInfos(NativeStl stl, double preferredGridWidth, CancellationToken token, IProgress&lt;object&gt; progress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>stl</code> <a class="xref" href="Hi.Geom.NativeStl.html">NativeStl</a></dt>
<dd></dd>
<dt><code>preferredGridWidth</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd></dd>
<dt><code>token</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
<dd></dd>
<dt><code>progress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt>(<a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-hi.cbtr.cubetree,system.collections.generic.list-hi.cbtr.cubetree.defectnodeinfo--.cubetree">cubeTree</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a>.<a class="xref" href="Hi.Cbtr.CubeTree.DefectNodeInfo.html">DefectNodeInfo</a>&gt; <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-hi.cbtr.cubetree,system.collections.generic.list-hi.cbtr.cubetree.defectnodeinfo--.defectinfos">defectInfos</a>)</dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_NewWithDefectInfos_" data-uid="Hi.Cbtr.CubeTree.NewWithDefectInfos*"></a>
<h3 id="Hi_Cbtr_CubeTree_NewWithDefectInfos_Hi_Geom_Stl_System_Double_System_Threading_CancellationToken_System_IProgress_System_Object__" data-uid="Hi.Cbtr.CubeTree.NewWithDefectInfos(Hi.Geom.Stl,System.Double,System.Threading.CancellationToken,System.IProgress{System.Object})">
NewWithDefectInfos(Stl, double, CancellationToken, IProgress&lt;object&gt;)
</h3>
<div class="markdown level1 summary"><p>Creates a new CubeTree and collects defect node infos during construction.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static (CubeTree cubeTree, List&lt;CubeTree.DefectNodeInfo&gt; defectInfos) NewWithDefectInfos(Stl stl, double preferredGridWidth, CancellationToken token, IProgress&lt;object&gt; progress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>stl</code> <a class="xref" href="Hi.Geom.Stl.html">Stl</a></dt>
<dd></dd>
<dt><code>preferredGridWidth</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd></dd>
<dt><code>token</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
<dd></dd>
<dt><code>progress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>&gt;</dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt>(<a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-hi.cbtr.cubetree,system.collections.generic.list-hi.cbtr.cubetree.defectnodeinfo--.cubetree">cubeTree</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a>.<a class="xref" href="Hi.Cbtr.CubeTree.DefectNodeInfo.html">DefectNodeInfo</a>&gt; <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-hi.cbtr.cubetree,system.collections.generic.list-hi.cbtr.cubetree.defectnodeinfo--.defectinfos">defectInfos</a>)</dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_RebuildAttach_" data-uid="Hi.Cbtr.CubeTree.RebuildAttach*"></a>
<h3 id="Hi_Cbtr_CubeTree_RebuildAttach_Hi_Cbtr_CbtrPickable_" data-uid="Hi.Cbtr.CubeTree.RebuildAttach(Hi.Cbtr.CbtrPickable)">
RebuildAttach(CbtrPickable)
</h3>
<div class="markdown level1 summary"><p>Every node in <a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a> can contain one <a class="xref" href="Hi.Cbtr.CbtrPickable.html">CbtrPickable</a> object.
This function put or replace the contained data of all nodes to <code class="paramref">src</code>.
Using <a class="xref" href="Hi.Cbtr.CubeTree.html#Hi_Cbtr_CubeTree_UpdateAttach_Hi_Cbtr_CbtrPickable_">UpdateAttach(CbtrPickable)</a> will place nodes that have not yet stored data (<a class="xref" href="Hi.Cbtr.CbtrPickable.html">CbtrPickable</a> is null) into src.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void RebuildAttach(CbtrPickable src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="Hi.Cbtr.CbtrPickable.html">CbtrPickable</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_RemoveFlyPiece_" data-uid="Hi.Cbtr.CubeTree.RemoveFlyPiece*"></a>
<h3 id="Hi_Cbtr_CubeTree_RemoveFlyPiece" data-uid="Hi.Cbtr.CubeTree.RemoveFlyPiece">
RemoveFlyPiece()
</h3>
<div class="markdown level1 summary"><p>Removes disconnected pieces (fly pieces) from the cube tree.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void RemoveFlyPiece()</code></pre>
</div>
<a id="Hi_Cbtr_CubeTree_Substract_" data-uid="Hi.Cbtr.CubeTree.Substract*"></a>
<h3 id="Hi_Cbtr_CubeTree_Substract_Hi_Cbtr_CachedTris_System_Double_System_Boolean_System_Boolean_" data-uid="Hi.Cbtr.CubeTree.Substract(Hi.Cbtr.CachedTris,System.Double,System.Boolean,System.Boolean)">
Substract(CachedTris, double, bool, bool)
</h3>
<div class="markdown level1 summary"><p>Using BufferedTris is more efficient than NativeStl.
If the resolution of the subtraction region differs from the body's resolution, the lower resolution is applied to that region.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UnmanagedSubstraction Substract(CachedTris cutterBufferedTris, double preferredCubeWidth, bool isBuildContactContours = false, bool isAggressiveCut = false)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>cutterBufferedTris</code> <a class="xref" href="Hi.Cbtr.CachedTris.html">CachedTris</a></dt>
<dd><p>Subtraction geometry</p>
</dd>
<dt><code>preferredCubeWidth</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>The preferred cube width for the operation.</p>
</dd>
<dt><code>isBuildContactContours</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>If true, the returned Substraction contains contour groups at the intersection of the subtraction geometry and the workpiece geometry, which can be used for further analysis.</p>
</dd>
<dt><code>isAggressiveCut</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>If true, uses aggressive cutting mode.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Cbtr.UnmanagedSubstraction.html">UnmanagedSubstraction</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Substract_" data-uid="Hi.Cbtr.CubeTree.Substract*"></a>
<h3 id="Hi_Cbtr_CubeTree_Substract_Hi_Cbtr_GeomBoolCache_System_Boolean_System_Boolean_" data-uid="Hi.Cbtr.CubeTree.Substract(Hi.Cbtr.GeomBoolCache,System.Boolean,System.Boolean)">
Substract(GeomBoolCache, bool, bool)
</h3>
<div class="markdown level1 summary"><p>Subtracts a geometry from the cube tree using a geometry boolean cache.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UnmanagedSubstraction Substract(GeomBoolCache geomBoolCache, bool isBuildContactContours = false, bool isAggressiveCut = false)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>geomBoolCache</code> <a class="xref" href="Hi.Cbtr.GeomBoolCache.html">GeomBoolCache</a></dt>
<dd><p>The geometry boolean cache containing the geometry to subtract.</p>
</dd>
<dt><code>isBuildContactContours</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>If true, the returned Substraction will contain contact contours.</p>
</dd>
<dt><code>isAggressiveCut</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>If true, uses aggressive cutting mode.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Cbtr.UnmanagedSubstraction.html">UnmanagedSubstraction</a></dt>
<dd><p>The result of the subtraction operation.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Substract_" data-uid="Hi.Cbtr.CubeTree.Substract*"></a>
<h3 id="Hi_Cbtr_CubeTree_Substract_Hi_Cbtr_InitStickConvex_Hi_Geom_Mat4d_System_Double_System_Boolean_System_Boolean_" data-uid="Hi.Cbtr.CubeTree.Substract(Hi.Cbtr.InitStickConvex,Hi.Geom.Mat4d,System.Double,System.Boolean,System.Boolean)">
Substract(InitStickConvex, Mat4d, double, bool, bool)
</h3>
<div class="markdown level1 summary"><p>Subtracts a stick convex geometry from the cube tree.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UnmanagedSubstraction Substract(InitStickConvex initStickConvex, Mat4d mat, double preferredCubeWidth, bool isBuildContactContours = false, bool isAggressiveCut = false)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>initStickConvex</code> <a class="xref" href="Hi.Cbtr.InitStickConvex.html">InitStickConvex</a></dt>
<dd><p>The stick convex geometry to subtract.</p>
</dd>
<dt><code>mat</code> <a class="xref" href="Hi.Geom.Mat4d.html">Mat4d</a></dt>
<dd><p>The transformation matrix to apply to the stick convex.</p>
</dd>
<dt><code>preferredCubeWidth</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>The preferred cube width for the operation.</p>
</dd>
<dt><code>isBuildContactContours</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>If true, the returned Substraction will contain contact contours.</p>
</dd>
<dt><code>isAggressiveCut</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>If true, uses aggressive cutting mode.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Cbtr.UnmanagedSubstraction.html">UnmanagedSubstraction</a></dt>
<dd><p>The result of the subtraction operation.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_Substract_" data-uid="Hi.Cbtr.CubeTree.Substract*"></a>
<h3 id="Hi_Cbtr_CubeTree_Substract_Hi_Geom_NativeStl_System_Double_System_Boolean_System_Boolean_" data-uid="Hi.Cbtr.CubeTree.Substract(Hi.Geom.NativeStl,System.Double,System.Boolean,System.Boolean)">
Substract(NativeStl, double, bool, bool)
</h3>
<div class="markdown level1 summary"><p>Same functionality as Substract(BufferedTris,...). Less efficient due to the additional step of converting to <a class="xref" href="Hi.Cbtr.CachedTris.html">CachedTris</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public UnmanagedSubstraction Substract(NativeStl cutterStl, double preferredCubeWidth = 0, bool isBuildContactContours = false, bool isAggressiveCut = false)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>cutterStl</code> <a class="xref" href="Hi.Geom.NativeStl.html">NativeStl</a></dt>
<dd></dd>
<dt><code>preferredCubeWidth</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd></dd>
<dt><code>isBuildContactContours</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
<dt><code>isAggressiveCut</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Cbtr.UnmanagedSubstraction.html">UnmanagedSubstraction</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_TestDiff_" data-uid="Hi.Cbtr.CubeTree.TestDiff*"></a>
<h3 id="Hi_Cbtr_CubeTree_TestDiff_Hi_Cbtr_CubeTree__Hi_Geom_NativeStl__" data-uid="Hi.Cbtr.CubeTree.TestDiff(Hi.Cbtr.CubeTree@,Hi.Geom.NativeStl@)">
TestDiff(out CubeTree, out NativeStl)
</h3>
<div class="markdown level1 summary"><p>Tests the difference calculation between a cube tree and an ideal geometry.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void TestDiff(out CubeTree cubeTree_, out NativeStl idealGeom_)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>cubeTree_</code> <a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a></dt>
<dd><p>The resulting cube tree.</p>
</dd>
<dt><code>idealGeom_</code> <a class="xref" href="Hi.Geom.NativeStl.html">NativeStl</a></dt>
<dd><p>The ideal geometry used for comparison.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_TestIO_" data-uid="Hi.Cbtr.CubeTree.TestIO*"></a>
<h3 id="Hi_Cbtr_CubeTree_TestIO" data-uid="Hi.Cbtr.CubeTree.TestIO">
TestIO()
</h3>
<div class="markdown level1 summary"><p>Tests the input/output operations for a cube tree.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static CubeTree TestIO()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a></dt>
<dd><p>The cube tree created or loaded during the test.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_TestSimpleRemove_" data-uid="Hi.Cbtr.CubeTree.TestSimpleRemove*"></a>
<h3 id="Hi_Cbtr_CubeTree_TestSimpleRemove_Hi_Cbtr_CubeTree__" data-uid="Hi.Cbtr.CubeTree.TestSimpleRemove(Hi.Cbtr.CubeTree@)">
TestSimpleRemove(out CubeTree)
</h3>
<div class="markdown level1 summary"><p>Tests the simple removal operation on a cube tree.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void TestSimpleRemove(out CubeTree cubeTree_)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>cubeTree_</code> <a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a></dt>
<dd><p>The resulting cube tree after the removal operation.</p>
</dd>
</dl>
<a id="Hi_Cbtr_CubeTree_UpdateAttach_" data-uid="Hi.Cbtr.CubeTree.UpdateAttach*"></a>
<h3 id="Hi_Cbtr_CubeTree_UpdateAttach_Hi_Cbtr_CbtrPickable_" data-uid="Hi.Cbtr.CubeTree.UpdateAttach(Hi.Cbtr.CbtrPickable)">
UpdateAttach(CbtrPickable)
</h3>
<div class="markdown level1 summary"><p>Every node in <a class="xref" href="Hi.Cbtr.CubeTree.html">CubeTree</a> can contain one <a class="xref" href="Hi.Cbtr.CbtrPickable.html">CbtrPickable</a> object.
This function put <code class="paramref">src</code> to the nodes that contain null.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void UpdateAttach(CbtrPickable src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="Hi.Cbtr.CbtrPickable.html">CbtrPickable</a></dt>
<dd></dd>
</dl>
<a id="Hi_Cbtr_CubeTree_WriteFile_" data-uid="Hi.Cbtr.CubeTree.WriteFile*"></a>
<h3 id="Hi_Cbtr_CubeTree_WriteFile_System_String_" data-uid="Hi.Cbtr.CubeTree.WriteFile(System.String)">
WriteFile(string)
</h3>
<div class="markdown level1 summary"><p>Writes the cube tree to a file.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void WriteFile(string file)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>file</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The path where the cube tree will be written.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>