Archived
395 lines
28 KiB
HTML
395 lines
28 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Milling Cutter Panel | HiAPI-C# 2025 </title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="title" content="Milling Cutter Panel | 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 "{query}"">
|
|
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
|
<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="Anatomy-MillingCutterPanel">
|
|
<h1 id="milling-cutter-panel">Milling Cutter Panel</h1>
|
|
|
|
<p>The key model is <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a>, the cutter type both clients edit in full.</p>
|
|
<p>On the web client this cutter is not one panel but the section tabs the <a class="xref" href="cutter-panel.html">Cutter Panel</a> grows once a Milling Cutter is assigned: the Control-Tree nodes under <code>toolhouse/tool-<id>/cutter</code>, reached at <code>/tool-house/:toolId/cutter/:subtab</code> under the page route <code>/tool-house/:toolId?/:tab?/:subtab?</code>. The five <code>:subtab</code> values are <code>material</code>, <code>profile</code>, <code>contours</code>, <code>upper-beam</code> and <code>opt</code>. The cutter's General fields — Shank Mass, Hone Radius, Relief Angle — are not among them: they sit on the Cutter node's own panel. In the WPF client the same cutter is one tab control, and it carries several groups the web does not offer.</p>
|
|
<h2 id="layout">Layout</h2>
|
|
<h3 id="web-layout">Web Layout</h3>
|
|
<ul>
|
|
<li>Cutter Section Tabs, in this order
|
|
<ul>
|
|
<li><a href="#material-section">Material Section</a> — grows only while the Advanced Physics preference is on</li>
|
|
<li><a href="#flute-profile-section">Flute Profile Section</a></li>
|
|
<li><a href="#flute-contours-section">Flute Contours Section</a></li>
|
|
<li><a href="#upper-beam-section">Upper Beam Section</a></li>
|
|
<li><a href="#optimization-section">Optimization Section</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>Material is the only physics-gated section. Flute Profile, Flute Contours, Upper Beam and Optimization grow for every Milling Cutter. The preference behind the gate is the SPA's Advanced Physics option, held as <code>isShowPhysicsOptions</code> in the app-state store and read from the server's preference endpoint, which reports it as on only while the physics feature is licensed. <code>UserService.EnablePhysics</code> is the WPF client's name for the same preference.</p>
|
|
<p>Integral mode is read-only on the web. The cutter DTO reports it, and the Material section reads it to decide whether the Shank Material picker applies, but no endpoint sets it; it is chosen on the WPF client's Property tab.</p>
|
|
<h4 id="material-section">Material Section</h4>
|
|
<ul>
|
|
<li>Material Section (<code>.../cutter/material</code>)
|
|
<ul>
|
|
<li>Flute Material
|
|
Applies <a class="xref" href="../../../api/Hi.Physics.CutterMaterial.html">CutterMaterial</a>
|
|
<ul>
|
|
<li>Intro caption naming the <code>.CutterMaterial</code> extension</li>
|
|
<li>Material File Selector
|
|
<ul>
|
|
<li>Menu Dropdown — Browse Resource…, plus Clear once a file is picked</li>
|
|
<li>Readonly path TextBox with the placeholder “No flute material selected”</li>
|
|
</ul>
|
|
</li>
|
|
<li>Name and note caption beneath the picker, the two joined on one line</li>
|
|
</ul>
|
|
</li>
|
|
<li>Shank Material, rendered only while the cutter's integral mode is Insert End
|
|
Applies <a class="xref" href="../../../api/Hi.Physics.IStructureMaterial.html">IStructureMaterial</a>
|
|
<ul>
|
|
<li>Intro caption naming the <code>.xml</code> structure material and the <code>.CutterMaterial</code> alternative</li>
|
|
<li>Material File Selector, filtered to <code>.xml</code> — same Browse Resource… menu, with the placeholder “Default: AlloySteel42CrMo”</li>
|
|
<li>Name and note caption beneath the picker</li>
|
|
</ul>
|
|
</li>
|
|
<li>Solid-End Note, shown in place of that block for a solid-end cutter — the shank material mirrors the flute material, so it has no separate setting</li>
|
|
<li>Coating Layers
|
|
Manages <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_CoatingLayerList">CoatingLayerList</a>
|
|
<ul>
|
|
<li>Add Layer Button</li>
|
|
<li>One sequence hint above the whole list: the sequence starts from the surface, <code>#0</code> is the outermost / air-exposing layer, and each layer is a <code>.CoatingMaterial</code> plus a thickness in um</li>
|
|
<li>One row per <a class="xref" href="../../../api/Hi.Physics.ThermalLayer1D.html">ThermalLayer1D</a>, all controls on that one line
|
|
<ul>
|
|
<li>Index Badge <code>#i</code></li>
|
|
<li>Coating Material File Selector — Browse Resource…, placeholder “No coating material”</li>
|
|
<li>Thickness Input Field (um) — <a class="xref" href="../../../api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_Length_um">Length_um</a></li>
|
|
<li>Move Toward Surface Button, disabled on the first row</li>
|
|
<li>Move Toward Body Button, disabled on the last row</li>
|
|
<li>Delete Layer Button</li>
|
|
</ul>
|
|
</li>
|
|
<li>Empty state caption “No coating layers.”</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>All three pickers are resource-only, which is what leaves the dropdown with a single browse entry: the absolute Browse item is hidden and only Browse Resource… remains. The picked material's name and note are rendered as a caption line under the picker rather than as a tooltip on a readonly name box.</p>
|
|
<p>The mirroring for a solid-end cutter is enforced server-side: loading a flute material onto a solid-end cutter assigns the same material as the shank material, and unsetting it clears both. For an insert-end cutter, unsetting the shank material resets it to the built-in AlloySteel42CrMo rather than to nothing.</p>
|
|
<p>Every coating endpoint answers with the whole cutter DTO, so the row list re-renders from the server's own ordering after an add, a move or a delete.</p>
|
|
<h5 id="default-resource">Default Resource</h5>
|
|
<p>The default resources of Material live in the built-in <code>Resource</code> folder the server exposes as a named root of its own — not in the project folder. Each picker opens Browse Resource… into its own subfolder of that root:</p>
|
|
<ul>
|
|
<li><code>StructureMaterial</code> — the Shank Material picker</li>
|
|
<li><code>CutterMaterial</code> — the Flute Material picker</li>
|
|
<li><code>CoatingMaterial</code> — the coating rows' pickers</li>
|
|
</ul>
|
|
<h4 id="flute-profile-section">Flute Profile Section</h4>
|
|
<ul>
|
|
<li>Flute Profile Section (<code>.../cutter/profile</code>)
|
|
<ul>
|
|
<li>Profile Type Selection Dropdown
|
|
<ul>
|
|
<li>General APT (<a class="xref" href="../../../api/Hi.Milling.Apts.GeneralApt.html">GeneralApt</a>)</li>
|
|
<li>Ball APT (<a class="xref" href="../../../api/Hi.Milling.Apts.BallApt.html">BallApt</a>)</li>
|
|
<li>Column APT (<a class="xref" href="../../../api/Hi.Milling.Apts.ColumnApt.html">ColumnApt</a>)</li>
|
|
<li>Cone APT (<a class="xref" href="../../../api/Hi.Milling.Apts.ConeApt.html">ConeApt</a>)</li>
|
|
<li>Taper APT (<a class="xref" href="../../../api/Hi.Milling.Apts.TaperApt.html">TaperApt</a>)</li>
|
|
</ul>
|
|
</li>
|
|
<li>The APT fields themselves, rendered inline in this same panel</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>The five types are all wrapped by <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html">AptProfile</a>, with a different <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> assigned; which fields appear depends on the type. See <a class="xref" href="apt-profile-panel.html">APT Profile Panel</a> for the field list and the per-type table that drives it.</p>
|
|
<p>See the <code>DemoBuildMachiningProject</code> sample in the <a class="xref" href="../../../technique/api-foundations/packages-and-samples.html">Hi.Sample repository</a> for creating the APT profile and setting it on the cutter.</p>
|
|
<p><code>CustomSpinningProfile</code> is the WPF client's sixth profile type; the web offers the five APT types only.</p>
|
|
<h4 id="flute-contours-section">Flute Contours Section</h4>
|
|
<p>This part manages <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_Fluting">Fluting</a>. It is a stem, not a leaf: the section node carries only the type selector, and the fluting itself is a sub-tree of nodes below it.</p>
|
|
<ul>
|
|
<li>Flute Contours Section (<code>.../cutter/contours</code>)
|
|
<ul>
|
|
<li>Title Label — Fluting</li>
|
|
<li>Fluting Type Selection Dropdown
|
|
<ul>
|
|
<li>Uniform (shared baseline) — <a class="xref" href="../../../api/Hi.Milling.FluteContours.UniformFluting.html">UniformFluting</a></li>
|
|
<li>Free (per-flute) — <a class="xref" href="../../../api/Hi.Milling.FluteContours.FreeFluting.html">FreeFluting</a></li>
|
|
<li><code>— unset —</code></li>
|
|
</ul>
|
|
</li>
|
|
<li>A caption describing the chosen kind, or “Fluting unset.” while none is set</li>
|
|
<li>Fluting Node, grown only once a fluting is set — labelled Uniform Fluting or Free Fluting
|
|
<ul>
|
|
<li>For a uniform fluting: Flute Number Input Field (minimum 1)</li>
|
|
<li>For a free fluting: a “Flutes: n” caption and an Add Flute Button, with a “No flutes yet” hint while the list is empty</li>
|
|
<li>Flute Contour Node(s)
|
|
<ul>
|
|
<li>One Baseline Contour node (<code>.../fluting/baseline</code>) for a uniform fluting; one Flute <em>n</em> node (<code>.../fluting/flute-{i}</code>) per flute for a free fluting</li>
|
|
<li>Setup Angle Input Field (deg)</li>
|
|
<li>Delete This Flute Button — free fluting only</li>
|
|
<li>Side Contour Sub-Node (<code>.../baseline/side</code>, <code>.../flute-{i}/side</code>)
|
|
<ul>
|
|
<li>Kind Selector — Const Helix / Freeform / <code>— unset —</code></li>
|
|
<li>Const Helix Side Contour form: Helix Angle (deg), Radial Rake Angle (deg), Radial Relief Angle (deg)</li>
|
|
<li>Freeform Side Contour form: the span-position table, ordered by Z</li>
|
|
</ul>
|
|
</li>
|
|
<li>Bottom Contour Sub-Node (<code>.../baseline/bottom</code>, <code>.../flute-{i}/bottom</code>)
|
|
<ul>
|
|
<li>Kind Selector — Slide / Freeform / <code>— unset —</code></li>
|
|
<li>Slide Bottom Contour form: Outer Radius (mm), Cutter Length on Bottom Projection (mm), Eccentric Angle (deg), Disk Angle (deg), Axial Rake Angle (deg)</li>
|
|
<li>Freeform Bottom Contour form: the span-position table, ordered by R</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>Both freeform forms share one span-position table: four numeric columns — R (mm), A (deg), Z (mm), R.Ang (deg) — one row per 4D span position, with an insert-next button that clones the row and a double-click to remove it. The header wording mirrors the CSV field order the wire format uses, and the R.Ang column carries a tooltip explaining that the radial angle feeds the bottom-surface loft.</p>
|
|
<p>A flute contour is always committed as a whole. Editing a Setup Angle, a side contour or a bottom contour re-sends the entire contour: a uniform fluting re-sends the fluting with its current flute number, and a free fluting updates the slot at its index. Free flute node ids are positional, so adding or deleting a flute rebuilds the branch to re-point them.</p>
|
|
<p>Picking <code>— unset —</code> in the Fluting Type selector is inert — the panel returns without a call, because the backend exposes no way to null a fluting. Picking <code>— unset —</code> on a Side or Bottom Contour, in contrast, does commit: it clears that contour on the flute.</p>
|
|
<h4 id="upper-beam-section">Upper Beam Section</h4>
|
|
<p>The upper beam is the cutter's shank / body above the flute.</p>
|
|
<ul>
|
|
<li>Upper Beam Section (<code>.../cutter/upper-beam</code>)
|
|
<ul>
|
|
<li>Intro caption</li>
|
|
<li>Warnings Banner — one orange banner per geometry issue the backend reports, e.g. an ExtendedCylinder beam whose FullLength sits below the flute top</li>
|
|
<li><a class="xref" href="../../geom/geom-manage-control.html">Geometry Management Control</a>, limited to the six <a class="xref" href="../../../api/Hi.Geom.IGetStl.html">IGetStl</a> kinds an upper beam can be
|
|
<ul>
|
|
<li><a class="xref" href="../../../api/Hi.Geom.Cylindroid.html">Cylindroid</a></li>
|
|
<li><a class="xref" href="../../../api/Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a></li>
|
|
<li><a class="xref" href="../../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a></li>
|
|
<li><a class="xref" href="../../../api/Hi.Geom.StlFile.html">StlFile</a></li>
|
|
<li><a class="xref" href="../../../api/Hi.Geom.Box3d.html">Box3d</a></li>
|
|
<li><a class="xref" href="../../../api/Hi.Geom.GeomCombination.html">GeomCombination</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>The banner is persistent rather than a transient toast: the same unreasonable settings fail thermal physics at run time as configuration errors, so they are surfaced at edit time. Creating a geometry here is container-aware — the server builds it, sets it as the cutter's upper-beam geometry, auto-links an ExtendedCylinder to the flute with a valid seed length, and indexes it under the same key so the per-kind editor edits it in place. Each later edit resyncs the cutter and refreshes the warning list.</p>
|
|
<h4 id="optimization-section">Optimization Section</h4>
|
|
<p>This part manages <a class="xref" href="../../../api/Hi.NcOpt.MillingCutterOptOption.html">MillingCutterOptOption</a>.</p>
|
|
<ul>
|
|
<li>Optimization Section (<code>.../cutter/opt</code>)
|
|
<ul>
|
|
<li>Enable Optimization Checkbox
|
|
<ul>
|
|
<li>Controls whether the limits below are shown and active</li>
|
|
</ul>
|
|
</li>
|
|
<li>When optimization is enabled:
|
|
<ul>
|
|
<li>Limit by Theoretical Minimum Feed Per Tooth Checkbox</li>
|
|
<li>Limit by Relief Angle Checkbox</li>
|
|
<li>Min Feed Per Tooth Input Field (mm)</li>
|
|
<li>Max Feed Per Tooth Input Field (mm)</li>
|
|
<li>Yielding Utilization Factor Input Field
|
|
<ul>
|
|
<li>The reciprocal of the Yielding Safety Factor the server stores; the panel converts in both directions</li>
|
|
</ul>
|
|
</li>
|
|
<li>Hint caption: typical values run 0.33 (conservative) to 1.0 (aggressive)</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>Both checkboxes are plain labelled checkboxes — neither displays a computed value. The server's defaults when a limit set is written without them are a Yielding Safety Factor of 3 (a utilization factor of about 0.33), a Max Feed Per Tooth of 999, and both limit flags on.</p>
|
|
<p>The minimum uncut chip thickness itself is not on this surface: no cutter endpoint returns it, and no field displays it. It is the WPF client's Optimization panel that computes it from the cutter and the project workpiece's cutting parameter and shows it beside the checkbox.</p>
|
|
<h3 id="wpf-layout">WPF Layout</h3>
|
|
<ul>
|
|
<li>Milling Cutter Panel
|
|
<ul>
|
|
<li>Tabs
|
|
<ul>
|
|
<li>Flute-Profile Tab — the profile type dropdown plus the APT panel, and the <code>CustomSpinningProfile</code> option with its own geometry-management panel</li>
|
|
<li>Upper-Beam Tab
|
|
<ul>
|
|
<li><a class="xref" href="../../geom/geom-manage-control.html">Geometry Management Control</a>, with the <a class="xref" href="../../../api/Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a> option enabled</li>
|
|
</ul>
|
|
</li>
|
|
<li>Property Tab
|
|
<ul>
|
|
<li>Integral Mode Selection Dropdown — Solid End / Insert End</li>
|
|
<li>Cutter/Shank Mass Input Field (g), with an Auto Update CheckBox driven by <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_ShankMassAssignmentMode">ShankMassAssignmentMode</a>: when enabled the field turns readonly and shows the mass computed from the inner-beam and upper-beam volume and the density</li>
|
|
<li>Hone Radius (um) and Relief Angle (deg) Input Fields</li>
|
|
<li>Minimum Available Cutting Thickness (um), readonly, from <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_GetMinimumUncutChipThickness_um_Hi_MillingForces_Fittings_ICuttingPara_">GetMinimumUncutChipThickness_um(ICuttingPara)</a> with the project workpiece's <a class="xref" href="../../../api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_CuttingPara">CuttingPara</a>, and a note label naming that cutting parameter</li>
|
|
</ul>
|
|
</li>
|
|
<li>Insert-Cutter Tab
|
|
<ul>
|
|
<li>Insert Number, Insert Mass (g) and Insert Thickness (mm) Input Fields; the thickness feeds heat transfer</li>
|
|
</ul>
|
|
</li>
|
|
<li>Material Tab</li>
|
|
<li>Flute-Contours Tab</li>
|
|
<li>Flute-Inner-Beam Tab
|
|
<ul>
|
|
<li>Profile Type Selection Dropdown for <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_InnerBeamProfile">InnerBeamProfile</a> — Flute Dependent Ratio (<a class="xref" href="../../../api/Hi.Milling.Cutters.FluteDependentRatioProfile.html">FluteDependentRatioProfile</a>), Const Ratio (<a class="xref" href="../../../api/Hi.Milling.Cutters.ConstRatioProfile.html">ConstRatioProfile</a>), Custom Spinning (<a class="xref" href="../../../api/Hi.Milling.Cutters.CustomSpinningProfile.html">CustomSpinningProfile</a>)</li>
|
|
<li>For Flute Dependent Ratio: a readonly Radius Ratio field whose label also names the flute number it depends on</li>
|
|
<li>For Const Ratio: an editable Radius Ratio field</li>
|
|
<li>For Custom Spinning: a <a class="xref" href="../../geom/geom-manage-control.html">Geometry Management Control</a></li>
|
|
</ul>
|
|
</li>
|
|
<li>Optimization Tab — the same limits as the web section, plus the computed minimum uncut chip thickness beside the minimum-feed checkbox</li>
|
|
<li>Info Tab
|
|
<ul>
|
|
<li>Name TextField (editable)</li>
|
|
<li>AbstractNote TextField (readonly)</li>
|
|
<li>Note TextField (editable)</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p><code>UserService.EnablePhysics</code> gates the Property, Material, Flute-Contours, Flute-Inner-Beam and Optimization tabs on this client; the Insert-Cutter tab additionally requires Insert End. Flute-Profile, Upper-Beam and Info are always visible. On the web only the Material section is gated, and the same preference is named <code>isShowPhysicsOptions</code>.</p>
|
|
<p>Numeric fields on this client are formatted <code>G4</code>. The web's numeric field applies no format: it shows the value as stored and commits on blur or Enter.</p>
|
|
<p>The cutter has no identity fields on the web. Tool ID, Note and the auto-derived Abstract Note belong to the tool, one level up, and are edited on the tool's own General tab; see <a class="xref" href="../index.html">Tool House Page</a>.</p>
|
|
<h2 id="features">Features</h2>
|
|
<p>Every web edit is a whole-object commit followed by a cache clear. The Flute Profile panel re-sends the entire shaper profile on any field change — only the fields the selected APT type carries are included — then clears the tool cache. The contour panels re-send the whole flute contour. The optimization panel re-sends the whole limit set. The material and coating endpoints each answer with the full cutter DTO, which the panels re-render from.</p>
|
|
<p>A blanked numeric box commits nothing. The shared numeric field emits null for an empty entry, and every cutter panel returns on null rather than writing a zero, so clearing a field leaves the stored value alone.</p>
|
|
<h2 id="source-code-path">Source Code Path</h2>
|
|
<p>See <a class="xref" href="../../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
|
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
|
<ul>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts</code> — the item-type registry and the child builders: the cutter's five sections, the Material physics gate, and the fluting / flute / side / bottom sub-tree.</li>
|
|
<li><code>wwwroot-src/src/router/treeRoutes.ts</code> — role-path to route translation; <code>CUTTER_SECTIONS</code> pins <code>material</code>, <code>profile</code>, <code>contours</code>, <code>upper-beam</code> and <code>opt</code>, and it also translates a <code>…/contours/tray…</code> id onto the <code>fluting</code> segment the node carries, so both spellings of the engine's Fluting type family resolve.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue</code> — the parent Cutter node: the type selector plus the cutter's General fields.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue</code> — the one panel shared by the material / profile / upper-beam / opt sections, keyed off the node's last role segment. It renders the Flute Profile fields inline and delegates the other three.</li>
|
|
<li><code>wwwroot-src/src/components/toolhouse/MaterialDiv.vue</code> — the Material section: flute material, the insert-end-only shank material, the solid-end note, and the coating list.</li>
|
|
<li><code>wwwroot-src/src/components/toolhouse/CoatingLayersDiv.vue</code> — the coating rows: index badge, material picker, thickness, move toward surface / body, delete.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolhouse/CutterContoursPanel.vue</code> — the Flute Contours stem: the Fluting Type selector.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolhouse/FlutingPanel.vue</code> — the concrete fluting node: Flute Number for uniform, the flute count and Add Flute for free.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolhouse/FluteContourPanel.vue</code> — one flute contour node: Setup Angle, and Delete This Flute for a free flute.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue</code> and <code>wwwroot-src/src/components/controlTree/toolhouse/FluteBottomContourPanel.vue</code> — the two sub-nodes: kind selector plus the matching form.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/toolhouse/fluteContourNode.ts</code> — the shared load and commit logic behind those three panels, and the rule that a contour is committed whole.</li>
|
|
<li><code>wwwroot-src/src/components/toolhouse/fluting/ConstHelixSideContourDiv.vue</code>, <code>wwwroot-src/src/components/toolhouse/fluting/SlideBottomContourDiv.vue</code>, <code>wwwroot-src/src/components/toolhouse/fluting/FreeformSideContourDiv.vue</code> and <code>wwwroot-src/src/components/toolhouse/fluting/FreeformBottomContourDiv.vue</code> — the four contour parameter forms.</li>
|
|
<li><code>wwwroot-src/src/components/toolhouse/fluting/SpanContourPosListDiv.vue</code> — the R / A / Z / R.Ang span-position table both freeform forms share.</li>
|
|
<li><code>wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue</code> — the Upper Beam section: the six allowed geometry kinds, the container-aware create, the resync-on-edit and the warnings banner.</li>
|
|
<li><code>wwwroot-src/src/components/geom/GeometryEditor.vue</code> — the shared geometry editor that section reuses.</li>
|
|
<li><code>wwwroot-src/src/components/toolhouse/MillingCutterOptLimitDiv.vue</code> — the Optimization section, including the Yielding Utilization Factor conversion.</li>
|
|
<li><code>wwwroot-src/src/components/widgets/NumericInput.vue</code> — the numeric field every cutter form uses: no <code>G4</code>, commit on blur or Enter, revert on an unparseable entry.</li>
|
|
<li><code>wwwroot-src/src/components/widgets/FilePathInput.vue</code> — the picker behind the material selectors; its resource-only mode hides the absolute Browse item and leaves Browse Resource….</li>
|
|
<li><code>wwwroot-src/src/stores/appState.ts</code> — holds <code>isShowPhysicsOptions</code>, the Advanced Physics preference that gates the Material section.</li>
|
|
<li><code>wwwroot-src/src/i18n/en/toolhouse.ts</code> — every label quoted above: <code>cutter.*</code>, <code>material.*</code>, <code>contour.*</code>, <code>fluting.*</code>, <code>upperBeam.*</code> and <code>opt.*</code>.</li>
|
|
<li><code>wwwroot-src/src/api/toolHouse.ts</code> — the typed wrapper over <code>/api/Cutter</code>: shaper profile, fluting, the free-contour CRUD, the material and coating endpoints, the upper beam and the opt limit.</li>
|
|
<li><code>Mech/CutterController.cs</code> — the cutter backend: the APT construction from the profile DTO, the fluting builders, the opt-limit defaults, the solid-end shank-material mirroring, and the cache clear every field and geometry mutator performs.</li>
|
|
<li><code>Mech/CutterDtoBuilder.cs</code> — the read-side cutter DTO: integral mode, general, shaper profile, fluting, opt limit and material.</li>
|
|
<li><code>Mech/ToolHouseController.cs</code> — the tool detail that embeds that DTO, which every cutter section refreshes from.</li>
|
|
</ul>
|
|
<h2 id="see-also">See Also</h2>
|
|
<ul>
|
|
<li><a class="xref" href="../../geom/extended-cylinder-panel.html">Extended Cylinder Panel</a> — the Upper Beam's kind that exists
|
|
for this cutter, and the one surface that gives it a start section</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>
|