2025-12-22 23:35:40 +08:00

452 lines
19 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 &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="">
<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>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>Milling Cutter Panel
<ul>
<li>Tabs
<ul>
<li><a href="#flute-profile-tab">Flute-Profile Tab</a></li>
<li>Upper-Beam Tab
<ul>
<li><a href="../../geom/geom-manage-control.html">Geometry Management Control</a>
<a class="xref" href="../../../../../api/Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a> option is enabled.</li>
</ul>
</li>
<li><a href="#property-tab">Property Tab</a></li>
<li><a href="#insert-cutter-tab">Insert-Cutter Tab</a></li>
<li><a href="#material-tab">Material Tab</a></li>
<li><a href="#flute-contours-tab">Flute-Contours Tab</a></li>
<li><a href="#flute-inner-beam-tab">Flute-Inner-Beam Tab</a></li>
<li><a href="#optimization-tab">Optimization Tab</a></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>
<h3 id="flute-profile-tab">Flute-Profile Tab</h3>
<ul>
<li>Profile Type Selection Dropdown
<ul>
<li>APT General (<a class="xref" href="../../../../../api/Hi.Milling.Apts.GeneralApt.html">GeneralApt</a>)</li>
<li>APT Ball (<a class="xref" href="../../../../../api/Hi.Milling.Apts.BallApt.html">BallApt</a>)</li>
<li>APT Column (<a class="xref" href="../../../../../api/Hi.Milling.Apts.ColumnApt.html">ColumnApt</a>)</li>
<li>APT Cone (<a class="xref" href="../../../../../api/Hi.Milling.Apts.ConeApt.html">ConeApt</a>)</li>
<li>APT Taper (<a class="xref" href="../../../../../api/Hi.Milling.Apts.TaperApt.html">TaperApt</a>)</li>
<li>Custom Spinning Profile (<a class="xref" href="../../../../../api/Hi.Milling.Cutters.CustomSpinningProfile.html">CustomSpinningProfile</a>)</li>
</ul>
</li>
<li>Profile Configuration Panel
<ul>
<li>Dynamic component based on selected profile type</li>
</ul>
</li>
</ul>
<p>See <a class="xref" href="../../../../sample/Sample.Machining.DemoBuildMachiningProject.html">DemoBuildMachiningProject</a> for creating the apt profile and setting to the cutter.</p>
<p>See <a href="apt-profile-panel.html">APT Panel</a> for APT-based Profile Configuration Panel. The APT series option is all wrap by <a class="xref" href="../../../../../api/Hi.Milling.Cutters.AptProfile.html">AptProfile</a> but with different property <a class="xref" href="../../../../../api/Hi.Milling.Cutters.AptProfile.html">AptProfile</a>.<a class="xref" href="../../../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> assigned.</p>
<ul>
<li>Custom Spinning Profile Panel
<ul>
<li><a href="../../geom/geom-manage-control.html">Geometry Management Control</a></li>
</ul>
</li>
</ul>
<h3 id="property-tab">Property Tab</h3>
<p>Visible if &lt;xref:Hi.HiNcKits.AppService&gt;.&lt;xref:Hi.HiNcKits.AppService.EnablePhysics&gt; is true.</p>
<ul>
<li>Integral Mode Selection Dropdown
<ul>
<li>Solid End</li>
<li>Insert End</li>
</ul>
</li>
<li>Cutter/Shank Mass Input Field (g)
<ul>
<li>Show the label &lsquo;Cutter Mass&rsquo; if the Cutter is Solid End Integral Mode; Show the label &lsquo;Shank Mass&rsquo; if the Cutter is Insert End Integral Mode.</li>
<li>Value format &ldquo;G4&rdquo;</li>
<li>Auto Update CheckBox
The model is <a class="xref" href="../../../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_ShankMassAssignmentMode">ShankMassAssignmentMode</a>.
<ul>
<li>When enabled: field becomes readonly and shows calculated value.</li>
<li>When disabled: field is editable</li>
<li>Functionality Note: The value is calculate by the volume and density. The volume is the inner beam volume and the upper beam volume.</li>
</ul>
</li>
</ul>
</li>
<li>Hone Radius (μm) Input Field</li>
<li>Relief Angle (deg) Input Field</li>
<li>Minimum Available Cutting Thickness (μm)
<ul>
<li>Readonly field with format &ldquo;G4&rdquo;</li>
<li>Shows calculated value 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>. The argument (cutting parameter) is obtained by the <a class="xref" href="../../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.&lt;xref:Hi.MachiningProcs.MachiningProject.Workpiece*&gt;.<a class="xref" href="../../../../../api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_CuttingPara">CuttingPara</a>. Series pass the models by the GUI if needed.</li>
<li>Note Label
<ul>
<li>Show Workpiece Cutting Parameter Name.
Label Text &quot;Reference: Workpiece Cutting Parameter - {<a class="xref" href="../../../../../api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_CuttingPara">CuttingPara</a>.<a class="xref" href="../../../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>}&quot;.
Since the thickness depdents on the Workpiece Cutting Parameter and hone radius.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="insert-cutter-tab">Insert-Cutter Tab</h3>
<p>Visible if &lt;xref:Hi.HiNcKits.AppService&gt;.&lt;xref:Hi.HiNcKits.AppService.EnablePhysics&gt; is true and Integral Mode is Insert End.</p>
<ul>
<li>Insert Number Input field</li>
<li>Insert Mass Input field (g)
<ul>
<li>Format &ldquo;G4&rdquo;</li>
</ul>
</li>
<li>Insert Thickness Input field (mm)
<ul>
<li>Format &ldquo;G4&rdquo;</li>
<li>The Insert Thickness is for computing heat transfer.</li>
</ul>
</li>
</ul>
<h3 id="material-tab">Material Tab</h3>
<p>Visible if &lt;xref:Hi.HiNcKits.AppService&gt;.&lt;xref:Hi.HiNcKits.AppService.EnablePhysics&gt; is true.</p>
<ul>
<li>Shank Material (visible only for Integral Mode is Insert End mode)
<ul>
<li>Material File Selector
Apply <a class="xref" href="../../../../../api/Hi.Physics.IStructureMaterial.html">IStructureMaterial</a>
<ul>
<li>Menu Dropdown
<ul>
<li>Browse Button</li>
<li>Browse Resource Button</li>
</ul>
</li>
<li>Readonly Name TextBox (<a class="xref" href="../../../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
<ul>
<li>ToolTip by <a class="xref" href="../../../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a> from the material</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Flute Material
<ul>
<li>Material File Selector
Apply <a class="xref" href="../../../../../api/Hi.Physics.CutterMaterial.html">CutterMaterial</a>
<ul>
<li>Menu Dropdown
<ul>
<li>Browse Button</li>
<li>Browse Resource Button</li>
</ul>
</li>
<li>Readonly Name TextBox (<a class="xref" href="../../../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
<ul>
<li>ToolTip by <a class="xref" href="../../../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a> from the material</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Coating Panel
<ul>
<li>Show note that the sequence starts from surface, i.e. from outer to inner.</li>
<li>Manages <a class="xref" href="../../../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_CoatingLayerList">CoatingLayerList</a>
<ul>
<li>Exists sequence management.</li>
<li>The first layer has the remark: Air-Exposing Coating.</li>
<li><a class="xref" href="../../../../../api/Hi.Physics.ThermalLayer1D.html">ThermalLayer1D</a> Component
<div class="TIP">
<h5>Tip</h5>
<ul>
<li>Keep the child components to one line.</li>
<li>After Coating Material is manual loaded, set the <a class="xref" href="../../../../../api/Hi.Physics.CoatingMaterial.html#Hi_Physics_CoatingMaterial_PreferedThickness_um">PreferedThickness_um</a> to the <a class="xref" href="../../../../../api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_Length_um">Length_um</a> and update the corresponding field.</li>
</ul>
</div>
<ul>
<li>Coating Material
<ul>
<li>Material File Selector
Apply <a class="xref" href="../../../../../api/Hi.Physics.CoatingMaterial.html">CoatingMaterial</a>
<ul>
<li>Menu Dropdown
<ul>
<li>Browse Button</li>
<li>Browse Resource Button</li>
</ul>
</li>
<li>Readonly Name TextBox (<a class="xref" href="../../../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
<ul>
<li>ToolTip by <a class="xref" href="../../../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a> from the material</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Thickness Input Field (um) (editable)
<ul>
<li><a class="xref" href="../../../../../api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_Length_um">Length_um</a></li>
<li>Use format &ldquo;G4&rdquo;</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>If the cutter is Solid End, the Shank Material should keep the same with Flute Material. i.e. Set the Shank Material when Flute Material set.</p>
<h4 id="default-resource">Default Resource</h4>
<p>The default resources of Material exist in <code>Resource</code> folder under application folder (Not project folder). Set the corresponding default folder of the File Selector to the <code>Resource</code> sub folder:</p>
<ul>
<li>&ldquo;Resource/StructureMaterial&rdquo;</li>
<li>&ldquo;Resource/CutterMaterial&rdquo;</li>
<li>&ldquo;Resource/CoatingMaterial&rdquo;</li>
</ul>
<h3 id="flute-contours-tab">Flute-Contours Tab</h3>
<p>Visible if &lt;xref:Hi.HiNcKits.AppService&gt;.&lt;xref:Hi.HiNcKits.AppService.EnablePhysics&gt; is true.</p>
<p>This part manages <a class="xref" href="../../../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_FluteContourTray">FluteContourTray</a>.</p>
<ul>
<li>Contour Tray Selection Dropdown
<ul>
<li>Uniform Contour Tray (<a class="xref" href="../../../../../api/Hi.Milling.FluteContours.UniformContourTray.html">UniformContourTray</a>)</li>
<li>Free Contour Tray (<a class="xref" href="../../../../../api/Hi.Milling.FluteContours.FreeContourTray.html">FreeContourTray</a>)</li>
<li>Unset</li>
</ul>
</li>
<li>Contour Tray Configuration Panel
<ul>
<li>Dynamic component based on selected contour tray type</li>
<li>For Uniform Contour Tray:
<ul>
<li>Track Number Input Field</li>
<li>Baseline Contour Configuration
//building</li>
</ul>
</li>
<li>For Free Contour Tray:
<ul>
<li>Individual contour configuration for each flute
//building</li>
<li>Add/Remove contour controls</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="flute-inner-beam-tab">Flute-Inner-Beam Tab</h3>
<p>Visible if &lt;xref:Hi.HiNcKits.AppService&gt;.&lt;xref:Hi.HiNcKits.AppService.EnablePhysics&gt; is true.</p>
<p>This part manages <a class="xref" href="../../../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_InnerBeamProfile">InnerBeamProfile</a>.</p>
<ul>
<li>Profile Type Selection Dropdown
<ul>
<li>Flute Dependent Ratio Profile (<a class="xref" href="../../../../../api/Hi.Milling.Cutters.FluteDependentRatioProfile.html">FluteDependentRatioProfile</a>)</li>
<li>Const Ratio Profile (<a class="xref" href="../../../../../api/Hi.Milling.Cutters.ConstRatioProfile.html">ConstRatioProfile</a>)</li>
<li>Custom Spinning Profile (<a class="xref" href="../../../../../api/Hi.Milling.Cutters.CustomSpinningProfile.html">CustomSpinningProfile</a>)</li>
<li>Unset</li>
</ul>
</li>
<li>Profile Configuration Panel
<ul>
<li>Dynamic component based on selected profile type</li>
<li>For Flute Dependent Ratio Profile:
<ul>
<li>Radius Ratio Number Field (readonly)
<ul>
<li>Label also shows the additional information: &lsquo;Dependent on flute num xxx&rsquo;, the &lsquo;xxx&rsquo; is the flute number that pass by <a class="xref" href="../../../../../api/Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a>.<a class="xref" href="../../../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_FluteContourTray_">FluteContourTray</a>. Series pass the model by the GUI if needed.</li>
</ul>
</li>
</ul>
</li>
<li>For Const Ratio Profile:
<ul>
<li>Radius Ratio Number Field (editable)</li>
</ul>
</li>
<li>For Custom Spinning Profile:
<ul>
<li><a href="../../geom/geom-manage-control.html">Geometry Management Control</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="optimization-tab">Optimization Tab</h3>
<p>Visible if &lt;xref:Hi.HiNcKits.AppService&gt;.&lt;xref:Hi.HiNcKits.AppService.EnablePhysics&gt; is true.</p>
<p>This part manages <a class="xref" href="../../../../../api/Hi.NcOpt.MillingCutterOptOption.html">MillingCutterOptOption</a>.</p>
<ul>
<li>Enable Optimization Checkbox
<ul>
<li>Controls whether optimization limits are active</li>
</ul>
</li>
<li>When optimization is enabled:
<ul>
<li>Limit by Theoretical Minimum Feed Per Tooth Checkbox
<ul>
<li>Shows calculated minimum uncut chip thickness value.
To get the value, <a class="xref" href="../../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.&lt;xref:Hi.MachiningProcs.MachiningProject.Workpiece*&gt;.<a class="xref" href="../../../../../api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_CuttingPara_">CuttingPara</a> and <a class="xref" href="../../../../../api/Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a> are required. Series pass the model by the GUI if needed.</li>
<li>When checked, enforces minimum feed constraint</li>
</ul>
</li>
<li>Min Feed Per Tooth (mm) Number Field
<ul>
<li>Step (If UI supported): 0.01</li>
</ul>
</li>
<li>Max Feed Per Tooth (mm) Number Field
<ul>
<li>Step (If UI supported): 0.01</li>
</ul>
</li>
<li>Safety Factor for Yielding Number Field
<ul>
<li>Step (If UI supported): 0.1</li>
<li>Default value typically around 2.0</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>Mech/ToolHouse/MillingCutterPanel</li>
<li>Mech/ToolHouse/AptProfilePanel</li>
<li>Mech/ToolHouse/MaterialTabPanel</li>
<li>Mech/ToolHouse/PropertyTabPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/mech/cutter/milling-cutter-panel.js</li>
<li>wwwroot/mech/cutter/apt-profile-panel.js</li>
<li>wwwroot/mech/cutter/material-tab-panel.js</li>
<li>wwwroot/mech/cutter/property-tab-panel.js</li>
<li>Controller/Mech/MechController.cs</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>