APT Profile Panel
The main model is AptProfile and its property AptProfile.Apt.
See Cutter Geometry. GeneralApt is the generalization of the other IAptBased types.
These fields have no panel of their own: they are rendered inline by the Flute Profile section of the cutter, the Control-Tree node whose role path is toolhouse/tool-<id>/cutter/profile, reached at /tool-house/:toolId/cutter/profile under the page route /tool-house/:toolId?/:tab?/:subtab?. That same section carries the Profile Type selector above the fields.
Layout
Web Layout
- Flute Profile Section
- Profile Type Selection Dropdown
- General APT (GeneralApt)
- Ball APT (BallApt)
- Column APT (ColumnApt)
- Cone APT (ConeApt)
- Taper APT (TaperApt)
- First row, always present
- Diameter Input Field (mm)
- Length of Cut Input Field (mm)
- Type-dependent rows, one field per row, in this order
- Round Radius (Rc) Input Field (mm)
- Round Ring Radius (Rr) Input Field (mm)
- Round Ring Height (Rz) Input Field (mm)
- Bottom Cone Angle (Alpha) Input Field (deg)
- Top Cone Angle (Beta) Input Field (deg)
- Profile Type Selection Dropdown
Which of the five type-dependent fields appear is decided by a per-APT-type table held in the panel itself, not by testing the APT object's interfaces:
| Profile Type | Fields shown |
|---|---|
| General APT | Rc, Rr, Rz, Alpha, Beta |
| Ball APT | none — Diameter and Length of Cut only |
| Column APT | Rc |
| Cone APT | Alpha |
| Taper APT | Rc, Rz, Alpha, Beta |
The interface casts live one layer down, on the read side: the cutter DTO builder fills rc_mm, rr_mm, rz_mm, alpha_deg and beta_deg by casting the APT to IAptRc, IAptRr, IAptRz, IAptAlpha and IAptBeta, and emits null for a cast that fails.
Taper APT is where the panel's table and the engine's types disagree. TaperApt is declared over IAptBased, IAptRz, IAptAlpha and IAptBeta and carries no round radius, so the table's Rc entry gives a Taper profile a Round Radius box that the DTO fills with null — the field reads 0 — and the value the panel sends back is not read by the server's Taper branch, which builds the APT from Diameter, Rz, Alpha, Beta and Flute Height alone. Rc on a Taper APT is therefore inert in both directions.
Features
Every edit re-sends the whole profile. Changing the type, or any one field, builds a fresh shaper-profile request carrying the type, Diameter, Length of Cut and only those of Rc / Rr / Rz / Alpha / Beta that the chosen type's table lists, and the server replaces the cutter's AptProfile with a newly constructed APT of that type. The panel then clears the tool cache so the canvas redraws.
Clearing a field is ignored. The shared numeric input emits null for an empty box, and the panel returns on null instead of committing, so a blanked box keeps the previous value rather than writing 0.
Because the profile changes the flute geometry, the server does more than drop the cutter's cached solids: it also re-aligns the tool's holder-to-cutter anchor transformer, so the cutter is re-placed under the holder at its new height instead of rendering with a wrong exposed length.
Source Code Path
See HiNC App Anatomy for git repository links.
HiNC-2025-webservice (Quasar CLI SPA):
wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue— the shipped home of these fields: the Profile Type selector, Diameter, Length of Cut, the per-type field table, and the whole-profile commit.wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts— builds theprofilesection node this panel renders.wwwroot-src/src/router/treeRoutes.ts— maps that node's role path onto the page's:subtabparam.wwwroot-src/src/components/widgets/NumericInput.vue— the numeric field behind every APT input: unit as a suffix, commit on blur or Enter, noG4.wwwroot-src/src/i18n/en/toolhouse.ts— the exact labels: "Round Radius (Rc)", "Round Ring Radius (Rr)", "Round Ring Height (Rz)", "Bottom Cone Angle (Alpha)", "Top Cone Angle (Beta)", “Diameter”, “Length of Cut”, and the five APT type names.wwwroot-src/src/api/toolHouse.ts—setShaperProfileand the shaper-profile DTO shape, which carries only the fields the selected APT type lists.Mech/CutterController.cs— the shaper-profile endpoint: it builds aColumnApt,ConeApt,BallApt,TaperAptorGeneralAptfrom the DTO, assigns a new AptProfile, and runs the cache-clear and re-align hook.Mech/CutterDtoBuilder.cs— the read side that emitsaptType,diameter_mm,fluteHeight_mmand the five interface-cast fields.