This commit is contained in:
2026-09-09 17:35:23 +08:00
parent 2a98ae7556
commit 161af68fe3
1271 changed files with 58251 additions and 98639 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

@@ -0,0 +1,149 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Assembly Anchors | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Assembly Anchors | HiAPI-C# 2025 ">
<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="">
<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="Technique-AssemblyAnchors">
<h1 id="assembly-anchors">Assembly Anchors</h1>
<p>How the parts of a machining scene are held together. Assembly in HiNC is not a placement step but a
statement of coincidence: two named anchors are declared equal, and everything they belong to moves
so that they are. The buckle anchors below are the joints the machine, fixture, workpiece and tool
are assembled at.</p>
<p>Ordered from what an anchor is, to the two chains built out of them.</p>
<h2 id="what-an-anchor-is">What an Anchor Is</h2>
<p><strong>Anchors</strong> are used for assembly purposes. When anchors between geometries coincide, assembly is completed.</p>
<p>Strictly speaking, an <strong>Anchor</strong> is not a point, but a coordinate system. For two coordinate systems to be equal, their origins must coincide and their rotation directions must be the same.</p>
<div class="NOTE">
<h5>Note</h5>
<p><strong>Anchor Assembly Example</strong></p>
<p>As shown in the figure below, there are two components, each with two anchors, {<code>AnchorA</code>,<code>AnchorB</code>} and {<code>AnchorC</code>,<code>AnchorD</code>} respectively.
The two components are assembled by making <code>AnchorB</code> and <code>AnchorC</code> coincide.</p>
<p><img src="assembly-anchors-img/Anchor%20for%20contact.png" alt="anc-contact"></p>
</div>
<h2 id="worktable-anchor-and-workpiece-anchor">Worktable Anchor and Workpiece Anchor</h2>
<p>The machine's worktable end is the chain's <code>w</code> anchor. The fixture carries a <code>TableBuckle</code> that meets it, and a <code>WorkpieceBuckle</code> that the workpiece meets — and the workpiece's own anchor there is named <code>FixtureBuckle</code>, so this joint is made of two anchors each named after the <em>other</em> part.</p>
<p>Only the machine-to-fixture branch carries an editable transform, which is where the fixture is placed on the table. The fixture-to-workpiece branch carries none: it is plain coincidence.</p>
<div class="NOTE">
<h5>Note</h5>
<p><strong>Workpiece Fixture Assembly Example</strong></p>
<p>Workpiece and fixture are assembled by making the fixture's <code>WorkpieceBuckle</code> and the workpiece's <code>FixtureBuckle</code> coincide.</p>
<p><img src="assembly-anchors-img/Anchor%20for%20contact%20workpiece%20and%20fixture.png" alt=""></p>
</div>
<p>If no fixture is set, both fixture anchors drop out of the chain and the machine's <code>w</code> anchor meets the workpiece's <code>FixtureBuckle</code> directly, carrying the same placement transform.</p>
<h2 id="spindle-anchor-and-cutter-anchor">Spindle Anchor and Cutter Anchor</h2>
<p>The machine's tool end is the chain's <code>t</code> anchor, and it meets the <code>SpindleBuckle</code> of the tool as a whole. Inside that tool the holder sits between spindle and cutter: the tool's <code>SpindleBuckle</code> meets the holder's own <code>SpindleBuckle</code>, and the holder's <code>CutterBuckle</code> meets the cutter's buckle anchor (<code>Buckle</code>).</p>
<p>If no holder is set, both holder anchors drop out and the tool's <code>SpindleBuckle</code> meets the cutter's <code>Buckle</code> directly. The machine-side joint is the same either way.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="topology.html">Kinematic Topology</a> — the anchor, branch and assembly classes this convention is expressed in</li>
<li><a href="../../manual/setup/anchor.html">Anchor</a> — where these relationships are edited in the application</li>
<li><a href="../../manual/setup/program-zero-alignment.html">Program Zero Alignment</a> — aligning the program origin onto these anchors</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></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>
@@ -0,0 +1,181 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Machine Chain Code | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Machine Chain Code | HiAPI-C# 2025 ">
<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="">
<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="Technique-ChainCode">
<h1 id="machine-chain-code">Machine Chain Code</h1>
<p>A machine tool file can carry its kinematic topology as a <strong>chain code</strong> — a short bracket notation
for the same connectivity the mechanism builder produces, meant for hand-editing the XML. It is read
and written by <a class="xref" href="../../api/Hi.Numerical.Xyzabc.CodeXyzabcChain.html">CodeXyzabcChain</a><small>(API)</small>, which builds the very
same mechanism, so a hand-written code and a builder-drawn structure are interchangeable — with two
exceptions on the way back: a mechanism with two components sharing one name, or with an unnamed
component that more than one segment would have to mention, cannot be written down as code.</p>
<p>The code carries <strong>connectivity only</strong>. Pivots, exact axis vectors, end-anchor offsets and shapes
are properties of the mechanism, and editing the code preserves them for every component whose name
is unchanged.</p>
<h2 id="the-notation">The Notation</h2>
<p>Each segment declares branches from left to right:</p>
<pre><code>[O][base][Z][C][w];[O][base][Y][X][B][S][t]
</code></pre>
<ul>
<li><p><code>[A][B][C]</code> is shorthand for the branches <code>[A][B];[B][C]</code>, so a segment is just a path.</p>
</li>
<li><p>Words are components. The <strong>same word in different segments is the same component</strong>, which is how
segments join into one structure.</p>
</li>
<li><p>The first word of the whole code names the ground anchor. Within a segment each branch runs from
the word on its left to the word on its right.</p>
</li>
<li><p>Reserved words are the topology keywords: <code>X</code>, <code>Y</code>, <code>Z</code>, <code>A</code>, <code>B</code>, <code>C</code> become motion axes, and <code>w</code>
and <code>t</code> become the end anchors. <strong>Any other word is a plain component</strong> carried along without
motion, such as <code>base</code> or <code>S</code> above. A code must name exactly one <code>[w]</code> and one <code>[t]</code>; the six
axes are optional, and each may be used at most once. That uniqueness check reads the words
without regard to letter case, so it refuses a code naming no table buckle at all — <em>the chain
code must contain the table buckle [w]</em> — and a code letting two components claim one role —
<em>more than one component claims the table buckle: [w], [W]</em>. A lone <code>[W]</code> satisfies it, one
component claiming the role, and builds a component named <code>W</code>; that code is refused further
along, by the exact-match end-anchor check below.</p>
</li>
<li><p><strong>Spell the keywords exactly</strong> — upper case for the axes, lower case for <code>t</code> and <code>w</code>. Everything
downstream of the code compares them as written: axis discovery, the default collision pairs, and
the end-anchor check a machine file is loaded through. So a mis-cased axis contributes no motion,
and a mis-cased end anchor stops the file loading, with a message naming the near miss.</p>
</li>
<li><p><code>[]</code> is an anonymous component. Each occurrence is a separate one, it cannot be referred to from
another segment, and it cannot hold a geometric shape — shapes are stored by component name.</p>
</li>
<li><p>Declaring the same branch twice is harmless; it states the same connection.</p>
</li>
<li><p>A segment with a single word just declares a component, which is how a ground anchor that only
receives branches gets named.</p>
</li>
<li><p>Any number of segments is allowed, so auxiliary structures can branch off any component:</p>
<pre><code>[O][base][Z][C][w];[O][base][Y][X][B][S][t];[base][loader][gripper]
</code></pre>
</li>
</ul>
<h2 id="direction-and-convergence">Direction and Convergence</h2>
<p><strong>Branch direction is free.</strong> A branch authored towards the ground anchor is simply written that way,
as in <code>[Z][O]</code>. A branch belongs to the component farther from the ground anchor, so <code>[O][Y]</code> and
<code>[Y][O]</code> both make <code>Y</code> the axis; only the direction differs. Pointing every branch away from the
ground anchor remains a readability convention — it makes the structure read outwards, ground → base
→ motion axes → the <code>t</code> and <code>w</code> end anchors — but the motion, the axis keywords and the default
collision pairs all read a branch the same way round regardless.</p>
<p><strong>Limbs may meet again.</strong> <code>[A][B][D];[A][C][D]</code> gives <code>D</code> two incoming branches. Only one route
through such a loop drives the motion, so use it for structure rather than for a second motion path.</p>
<p>Axis directions follow the machine-building convention: axes between the ground anchor and <code>w</code> are
seeded negative, the others positive.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="topology.html">Kinematic Topology</a> — the anchors, branches and assemblies this notation encodes</li>
<li><a href="../../manual/setup/machine-tool.html">Machine Tool</a> — building the same structure in the mechanism builder, and the keywords both forms share</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></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>
@@ -0,0 +1,136 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HiAPI Mechanics Overview | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="HiAPI Mechanics Overview | HiAPI-C# 2025 ">
<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="">
<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="HiMech.Overview">
<h1 id="mechanism">Mechanism</h1>
<p>How a machine tool is assembled out of moving parts, and how HiAPI solves where each part ends
up. A kinematic topology describes the motion relationships between components; from it come
forward and inverse kinematics, component placement, and the geometry collision detection runs
against.</p>
<p>Ordered from the structure outwards: the topology first and the shorthand that writes it down, then
the matrices that move it, then drawing it.</p>
<ul>
<li><a href="topology.html">Kinematic Topology</a> — Anchors, branches and assemblies, and how a machine chain is built out of them</li>
<li><a href="chain-code.html">Machine Chain Code</a> — The bracket notation a machine file can carry its connectivity in, and the keyword spelling everything downstream reads it by</li>
<li><a href="assembly-anchors.html">Assembly Anchors</a> — What an anchor is, and the buckles the machine, fixture, workpiece and tool are assembled at</li>
<li><a href="transformers.html">Handle Transform Matrix by ITransformer</a> — The transform-matrix interface behind every joint, and the implementations covering the common cases</li>
<li><a href="render-topology.html">Render Topology</a> — Drawing an assembly through its anchors, by anchoring matrix map or by anchored displayee</li>
</ul>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="../rendering/index.html">Rendering</a> — the engine that draws what the topology places</li>
<li><a href="../api-foundations/index.html">API Foundations</a> — the geometry types a topology carries, and how an assembly is persisted</li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.html">Hi.Mech.Topo</a> — the generated reference for the namespace</li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.Asmb.html">Asmb</a> — assemblies</li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.Branch.html">Branch</a> — chains</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></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>
@@ -0,0 +1,231 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Render Topology | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Render Topology | HiAPI-C# 2025 ">
<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="">
<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="Technique-RenderTopology">
<h1 id="render-topology">Render Topology</h1>
<p>Read <a class="xref" href="topology.html">Kinematic Topology</a> <a href="../rendering/index.html">Rendering</a> for the prerequisite.</p>
<p>A <a class="xref" href="../../api/Hi.Mech.Topo.Asmb.html">Asmb</a> is a group to render its descendent <a class="xref" href="../../api/Hi.Mech.Topo.Anchor.html">Anchor</a>s.</p>
<p>Several ways to render with the topology:</p>
<ul>
<li>Render by Anchoring Matrix Map</li>
<li>Render by Anchored Displayee</li>
</ul>
<h2 id="render-by-anchoring-matrix-map">Render by Anchoring Matrix Map</h2>
<h2 id="render-by-anchored-displayee">Render by Anchored Displayee</h2>
<p>Inherit <a class="xref" href="../../api/Hi.Mech.Topo.IAnchoredDisplayee.html">IAnchoredDisplayee</a> or apply <a class="xref" href="../../api/Hi.Mech.Topo.AnchoredDisplayee.html">AnchoredDisplayee</a> to <a class="xref" href="../../api/Hi.Mech.Topo.Asmb.html">Asmb</a>.Display().</p>
<p>Inherit <a class="xref" href="../../api/Hi.Mech.Topo.ITopoDisplayee.html">ITopoDisplayee</a> to manage the object with <a class="xref" href="../../api/Hi.Mech.Topo.Asmb.html">Asmb</a> and plural anchors .</p>
<p>The base logic is also by the anchoring matrix. Here is some class and function wrapping the logic.</p>
<p>The sample code shows the topology rendering for a <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingTool.html">MillingTool</a> editing helper:</p>
<pre><code class="lang-csharp" name="MillingToolEditorDisplayee">using Hi.Common;
using Hi.Common.Messages;
using Hi.Disp;
using Hi.Disp.Flag;
using Hi.Geom;
using Hi.Mech.Topo;
using Hi.Milling.Cutters;
using Hi.NcMech.Holders;
using System;
using System.Collections.Generic;
namespace Hi.Milling.MillingTools;
/// &lt;summary&gt;
/// Display host for a milling tool composed of a cutter and a holder.
/// &lt;/summary&gt;
public class MillingToolEditorDisplayee : ITopoDisplayee, IClearCache
{
/// &lt;summary&gt;
/// Gets or sets the delegate that provides the &lt;see cref=&quot;MillingTool&quot;/&gt; instance.
/// &lt;/summary&gt;
public Func&lt;MillingTool&gt; MillingToolGetter { get; set; }
/// &lt;summary&gt;
/// Gets the current &lt;see cref=&quot;MillingTool&quot;/&gt; instance.
/// &lt;/summary&gt;
public MillingTool MillingTool =&gt; MillingToolGetter?.Invoke();
/// &lt;summary&gt;
/// Gets or sets whether to show the cutter.
/// &lt;/summary&gt;
public bool ShowCutter { get; set; } = true;
/// &lt;summary&gt;
/// Gets or sets whether to show the holder.
/// &lt;/summary&gt;
public bool ShowHolder { get; set; } = true;
/// &lt;summary&gt;
/// Gets the displayee for the milling cutter.
/// &lt;/summary&gt;
public MillingCutterEditorDisplayee MillingCutterEditorDisplayee { get; }
= new MillingCutterEditorDisplayee();
/// &lt;summary&gt;
/// Gets the displayee for the holder.
/// &lt;/summary&gt;
public HolderEditorDisplayee HolderEditorDisplayee { get; }
= new HolderEditorDisplayee();
/// &lt;inheritdoc/&gt;
public List&lt;IAnchoredDisplayee&gt; GetAnchoredDisplayeeList()
{
var dst = new List&lt;IAnchoredDisplayee&gt;();
var millingTool = MillingTool;
if (millingTool == null)
return dst;
if (ShowCutter)
{
var cutter = millingTool.Cutter;
if (cutter is MillingCutter millingCutter)
{
//MessageKit.AddMessage($&quot;MillingTool.Cutter: {MillingTool?.Cutter?.GetHashCode()}&quot;);
MillingCutterEditorDisplayee.MillingCutterSourceFunc
= () =&gt; MillingTool?.Cutter as MillingCutter;
dst.Add(MillingCutterEditorDisplayee);
}
else if(cutter!=null)
dst.Add(cutter);
}
if (ShowHolder)
{
HolderEditorDisplayee.Holder = millingTool.Holder;
dst.Add(HolderEditorDisplayee);
}
return dst;
}
/// &lt;inheritdoc/&gt;
public void Display(Bind bind)
{
bind.PushCoveringPixelMode();
DimensionBar.Display(bind, &quot;mm&quot;);
bind.ModelMatStack.Pop();
TopoDisplayeeUtil.Display(this, bind);
}
/// &lt;inheritdoc/&gt;
public void ExpandToBox3d(Box3d dst)
{
TopoDisplayeeUtil.ExpandToBox3d(this, dst);
}
/// &lt;inheritdoc/&gt;
public Asmb GetAsmb() =&gt; MillingTool?.Asmb;
/// &lt;inheritdoc/&gt;
public Anchor GetAnchor() =&gt; MillingTool?.GetAnchor();
/// &lt;inheritdoc/&gt;
public void ClearCache()
{
MillingCutterEditorDisplayee?.ClearCache();
}
}
</code></pre><h2 id="see-also">See Also</h2>
<ul>
<li><a href="topology.html">Kinematic Topology</a> — the assembly and anchors this renders through</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></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>
@@ -0,0 +1,37 @@
<div id="sidetoggle">
<div>
<div class="sidefilter">
<form class="toc-filter">
<span class="glyphicon glyphicon-filter filter-icon"></span>
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
</form>
</div>
<div class="sidetoc">
<div class="toc" id="toc">
<ul class="nav level1">
<li>
<a href="index.html" name="" title="Overview">Overview</a>
</li>
<li>
<a href="topology.html" name="" title="Kinematic Topology">Kinematic Topology</a>
</li>
<li>
<a href="chain-code.html" name="" title="Machine Chain Code">Machine Chain Code</a>
</li>
<li>
<a href="assembly-anchors.html" name="" title="Assembly Anchors">Assembly Anchors</a>
</li>
<li>
<a href="transformers.html" name="" title="Transformers">Transformers</a>
</li>
<li>
<a href="render-topology.html" name="" title="Render Topology">Render Topology</a>
</li>
</ul>
</div>
</div>
</div>
</div>
@@ -0,0 +1,2 @@
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Kinematic Topology","href":"topology.html","topicHref":"topology.html"},{"name":"Machine Chain Code","href":"chain-code.html","topicHref":"chain-code.html"},{"name":"Assembly Anchors","href":"assembly-anchors.html","topicHref":"assembly-anchors.html"},{"name":"Transformers","href":"transformers.html","topicHref":"transformers.html"},{"name":"Render Topology","href":"render-topology.html","topicHref":"render-topology.html"}]}
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

@@ -0,0 +1,156 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Kinematic Topology | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Kinematic Topology | HiAPI-C# 2025 ">
<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="">
<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="Usage.HiMech.Topo">
<h1 id="kinematic-topology">Kinematic Topology</h1>
<p>The Kinematic Topology is composed of three elemental classes: <strong><a class="xref" href="../../api/Hi.Mech.Topo.Anchor.html">Anchor</a></strong>, <strong><a class="xref" href="../../api/Hi.Mech.Topo.Branch.html">Branch</a></strong> and <strong><a class="xref" href="../../api/Hi.Mech.Topo.Asmb.html">Asmb</a></strong>.</p>
<h2 id="basic-elements">Basic Elements</h2>
<h3 id="anchors-and-branches">Anchors and Branches</h3>
<p><strong><a class="xref" href="../../api/Hi.Mech.Topo.Anchor.html">Anchor</a></strong> object contains a cartesian coordinate. It can be a mechanical component or a flag.</p>
<p><strong><a class="xref" href="../../api/Hi.Mech.Topo.Branch.html">Branch</a></strong> object is a directional link between two <a class="xref" href="../../api/Hi.Mech.Topo.Anchor.html">Anchor</a> objects. It contains the <strong><a class="xref" href="../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a></strong> object. The <a class="xref" href="../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a> object contains a coordinate <strong>transformation matrix</strong>. As shown in the following sketch:</p>
<p><img src="topology-img/chainLink.png" alt="Chain Structure"></p>
<h3 id="assembly-management">Assembly Management</h3>
<p><strong><a class="xref" href="../../api/Hi.Mech.Topo.Asmb.html">Asmb</a></strong> (Assembly) provides organization and management of Anchors. An Assembly can contain both Anchors and other Assemblies. Key features include:</p>
<ul>
<li>Grouping related Anchors together</li>
<li>Managing coordinate transformations</li>
<li>Providing display and indexing functions</li>
<li>Supporting hierarchical structure</li>
</ul>
<h2 id="kinematic-chain-example">Kinematic Chain Example</h2>
<p>The following figure shows a kinematic chain of a non-orthogonal 5-axis machine tool:</p>
<p><img src="topology-img/vmt.png" alt="VMT Structure"></p>
<p>Each <a class="xref" href="../../api/Hi.Mech.Topo.Anchor.html">Anchor</a> represents a component:</p>
<ul>
<li>Axis components: X, Y, Z, B, C</li>
<li>Base components: O (base1), O* (base2)</li>
<li>Tool components: S (spindle), T (tool body), T* (tool flute)</li>
<li>Workpiece: W</li>
</ul>
<p>The relative transform between two Anchors is calculated by multiplying the transform matrices along the Branch. For example, the transform matrix from W to T is:</p>
<div class="math">
\[
M_{WT} = M_{CW}^{-1} \cdot M_{YC}^{-1} \cdot M_{OY}^{-1} \cdot M_{OO^*} \cdot M_{O^*X} \cdot M_{XZ} \cdot M_{ZB} \cdot M_{BS} \cdot M_{ST}
\]</div>
<p>This matrix can be obtained using <a class="xref" href="../../api/Hi.Mech.Topo.Asmb.html#Hi_Mech_Topo_Asmb_GetMat4d_Hi_Mech_Topo_IGetAnchor_Hi_Mech_Topo_IGetAnchor_">GetMat4d(IGetAnchor, IGetAnchor)</a>.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><p><a href="chain-code.html">Machine Chain Code</a> — the bracket notation that writes this same connectivity down for hand-editing</p>
</li>
<li><p><a href="assembly-anchors.html">Assembly Anchors</a> — the four named buckle anchors a machining scene is assembled at</p>
</li>
<li><p><a href="transformers.html">Handle Transform Matrix by ITransformer</a> — what sits on each branch and moves it</p>
</li>
<li><p><a href="render-topology.html">Render Topology</a> — drawing an assembly through the anchors defined here</p>
</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></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>
@@ -0,0 +1,204 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Handle Transform Matrix by ITransformer | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Handle Transform Matrix by ITransformer | HiAPI-C# 2025 ">
<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="">
<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="HiMech.Tutor.transformers">
<h1 id="handle-transform-matrix-by-itransformer">Handle Transform Matrix by ITransformer</h1>
<p><strong><a class="xref" href="../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a></strong> contains a transform matrix and a inverse transform matrix. The matrix is 4x4 column-major matrix, which describe the orientation or movement between 3D coordinates.</p>
<p>Several common used interface and class are implemented from <a class="xref" href="../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a>. The inheritance is shown:</p>
<ul>
<li><a class="xref" href="../../api/Hi.Mech.Topo.IStaticTransformer.html">IStaticTransformer</a>
<ul>
<li><a class="xref" href="../../api/Hi.Mech.Topo.NoTransform.html">NoTransform</a></li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a></li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a></li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.StaticFreeform.html">StaticFreeform</a></li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.GeneralTransform.html">GeneralTransform</a></li>
</ul>
</li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.IDynamicTransformer.html">IDynamicTransformer</a>
<ul>
<li><a class="xref" href="../../api/Hi.Mech.Topo.IDynamicRegular.html">IDynamicRegular</a>
<ul>
<li><a class="xref" href="../../api/Hi.Mech.Topo.DynamicTranslation.html">DynamicTranslation</a></li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.DynamicRotation.html">DynamicRotation</a></li>
</ul>
</li>
<li><a class="xref" href="../../api/Hi.Mech.Topo.DynamicFreeform.html">DynamicFreeform</a></li>
</ul>
</li>
</ul>
<p><strong><a class="xref" href="../../api/Hi.Mech.Topo.IStaticTransformer.html">IStaticTransformer</a></strong> is transformer with constant matrix. <strong><a class="xref" href="../../api/Hi.Mech.Topo.NoTransform.html">NoTransform</a></strong>, <strong><a class="xref" href="../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a></strong> and <strong><a class="xref" href="../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a></strong> contains transform matrix of identity, translate and rotate respectively. <strong><a class="xref" href="../../api/Hi.Mech.Topo.StaticFreeform.html">StaticFreeform</a></strong> contains a arbitrary constant transform matrix.</p>
<p>The transform matrix of <a class="xref" href="../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a> is:</p>
<div class="math">
\[
M_{StaticTranslate}=
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
Trans.x &amp; Trans.y &amp; Trans.z &amp; 1
\end{bmatrix}
\]</div>
<p>The transform matrix of <a class="xref" href="../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a> and <a class="xref" href="../../api/Hi.Mech.Topo.DynamicRotation.html">DynamicRotation</a> is:</p>
<div class="math">
\[
M_{Rotate}=
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
-Pivot.x &amp; -Pivot.y &amp; -Pivot.z &amp; 1
\end{bmatrix}
\cdot
\\\\
\begin{bmatrix}
Rot_{00}(axis,rad) &amp; Rot_{01}(axis,rad) &amp; Rot_{02}(axis,rad) &amp; 0 \\\\
Rot_{10}(axis,rad) &amp; Rot_{11}(axis,rad) &amp; Rot_{12}(axis,rad) &amp; 0 \\\\
Rot_{20}(axis,rad) &amp; Rot_{21}(axis,rad) &amp; Rot_{22}(axis,rad) &amp; 0 \\\\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\cdot
\\\\
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
Pivot.x &amp; Pivot.y &amp; Pivot.z &amp; 1
\end{bmatrix}
\]</div>
<p>Where <a class="xref" href="../../api/Hi.Mech.Topo.DynamicRotation.html#Hi_Mech_Topo_DynamicRotation_Pivot">Pivot</a> is the position of the rotation axis.</p>
<div class="TIP">
<h5>Tip</h5>
<p>Pivot is a point. However, rotation axis is a line. It means that it causes the same matrix no matter how the pivot is moving along the axis.</p>
</div>
<p><strong><a class="xref" href="../../api/Hi.Mech.Topo.IDynamicTransformer.html">IDynamicTransformer</a></strong> is transformer with inconstant transform matrix. <strong><a class="xref" href="../../api/Hi.Mech.Topo.IDynamicRegular.html">IDynamicRegular</a></strong> has a property <a class="xref" href="../../api/Hi.Mech.Topo.IDynamicRegular.html#Hi_Mech_Topo_IDynamicRegular_Step">Step</a>, implied that the transform matrix is one parameter driven. <a class="xref" href="../../api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_GetSteps_Hi_Mech_Topo_IDynamicRegular___">GetSteps(IDynamicRegular[])</a> and <a class="xref" href="../../api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_SetSteps_Hi_Mech_Topo_IDynamicRegular___System_Double___">SetSteps(IDynamicRegular[], double[])</a> provide easy handle of an array of <a class="xref" href="../../api/Hi.Mech.Topo.IDynamicRegular.html">IDynamicRegular</a> objects.</p>
<p>The transform matrix of <a class="xref" href="../../api/Hi.Mech.Topo.DynamicTranslation.html">DynamicTranslation</a> is:</p>
<div class="math">
\[
M_{DynamicTranslate}=
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
Trans.x \cdot Step &amp; Trans.y \cdot Step &amp; Trans.z \cdot Step &amp; 1
\end{bmatrix}
\]</div>
<div class="NOTE">
<h5>Note</h5>
<p>In convention, <a class="xref" href="../../api/Hi.Mech.Topo.StaticTranslation.html#Hi_Mech_Topo_StaticTranslation_Trans">Trans</a> should be normalized.</p>
</div>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="topology.html">Kinematic Topology</a> — the anchors and branches these matrices move</li>
<li><a href="../../anatomy/geom/transformation-geom-control.html">TransformationGeomControl</a> — the app panel that wraps a geometry in one of these transforms</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></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>