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 in the editor of the cutter's Flute Profile node, the Control-Tree node toolhouse/tool-{toolId}/cutter/profile, reached at /tool-house/<toolId>/cutter/profile under the page route /tool-house/:toolId?/:node*. That same editor carries the Profile Type selector above the fields. The node grows only for a Milling Cutter, and for every one of them.
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 | 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.
The table lists the parameters each type takes, which are also the ones the server's branch for that type reads back into a new APT, so every box shown is live in both directions. TaperApt, for one, is declared over IAptBased, IAptRz, IAptAlpha and IAptBeta and has no round radius, so a Taper profile offers Alpha and Beta and no Rc box. Its Rz is not a box either: a Taper APT is a sharp-cornered taper whose corner sits on both profile lines, so its Rz is D/2 · tan(Alpha) and nothing else. The server derives it when rz_mm is left out of the shaper-profile request and answers 400 to an rz_mm that says otherwise; the read side still reports the derived value as rz_mm. Under the fields the section lists the profile's warnings, the shaperProfile.warnings of the tool detail: Cutter-ShaperProfile--AptRefused for a profile that does not agree with itself — a sharp corner off its lines, a round that the bottom line or the flank misses by more than the tolerance, a negative Rc or Rr (a round centre or a corner across the tool axis) — naming the value each relation needs; its flute envelope is not built until the profile agrees with itself, and a profile within the tolerance is snapped to the exact values silently. Under the warning an Apply the suggested values button offers the D and Rz the other parameters fix (the selfAgreeingDiameter_mm / selfAgreeingRz_mm of the cutter detail, the same numbers the message names); it writes them into the profile through the ordinary shaper-profile request, so the correction is the user's, not the loader's — a file is never corrected on the way in. No button is offered when no single correction exists (a negative Rc or Rr, where either D or Rc may be the wrong one). See Cutter Geometry for the relations.
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 the.../cutter/profilenode these fields are rendered on, one of the Milling Cutter's sections.wwwroot-src/src/router/treeRoutes.ts—routeForTreeId, which turns that node's id into the route's tool number plus the node pathcutter/profile(the path half throughtoolNodePathOf), andtoolTreeId, which rebuilds the id from the two.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; while the pace player is locked — a run in progress or paused — it answers 409ToolEditRefusedWhileRunninginstead, before any of that.Mech/CutterDtoBuilder.cs— the read side that emitsaptType,diameter_mm,fluteHeight_mmand the five interface-cast fields.
See Also
- Milling Cutter Panel — the cutter whose Flute Profile section carries these fields, beside its other sections
- Cutter Geometry — what Diameter, Length of Cut and the five APT parameters mean