Table of Contents

Freeform Remover Panel

The key model is FreeformRemover: a cutter whose removal volume comes from two referenced geometries — a non-cutting strut and a cutting shaper — anchored to the holder mount.

This cutter is shown here but not built or edited here. There is no Freeform Remover editor and no freeform-remover endpoint in the backend, so a tool gets one only from a loaded tool house or project; the shipped caption says as much, and names HiNcRcl as the place to edit one.

Layout

Web Layout

  • Cutter Node Panel — the Cutter root of the picked tool's Control Tree on the Tool House Page, the node toolhouse/tool-{toolId}/cutter at /tool-house/<toolId>/cutter
    • Cutter Type Selector — its second option, Freeform Remover, is this cutter: the current, enabled option on a tool that carries one, listed but disabled on every other tool
    • Freeform Remover Caption (toolhouse.cutter.freeformRemoverUnavailable) — the panel's whole body while the tool carries one
    • Discard Confirmation Dialog — Discard the Freeform Remover?, opened when that tool's selector is moved to Milling Cutter or None, with Cancel and Discard

Nothing else on this surface belongs to this cutter. The Integral Mode selector and the Shank Mass / Hone Radius / Relief Angle fields on that panel are gated to the Milling Cutter branch, and the cutter's child builder grows section nodes only for a MillingCutter, so the Cutter node is a leaf here: no Insert, Material, Flute Profile, Flute Contours, Inner Beam, Upper Beam or Optimization node grows. See Cutter Panel for the panel these live on.

Geometry Definitions

  • Strut Geometry — The non-cutting portion (holder/shank)
    • Used for collision detection
  • Shaper Geometry — The cutting portion
    • Defines cutting surfaces
    • Used for material removal simulation

Features

A loaded freeform remover shows as one. The tool detail, GET /api/ToolHouse/{id}, answers hasCutter for a cutter of any kind and cutterType with its type name — FreeformRemover here — while the embedded cutter DTO stays null, because it describes a MillingCutter only; the tool list carries the same two fields. The panel takes the selector's value from cutterType, so such a tool opens on Freeform Remover and its caption. Until that read answers the panel renders none of its three branches, so the no-cutter hint never flashes on the way.

The option cannot be picked on another tool. Since nothing on this surface builds a freeform remover, the selector lists it disabled on a Milling Cutter or empty tool, and it is enabled only as the current kind of a tool that already carries one.

Leaving it asks first. Moving that tool's selector to Milling Cutter or None opens the discard confirmation, because the model cannot be rebuilt here. Cancel sends nothing and keeps the cutter. Discard runs the ordinary type change: Milling Cutter calls EnsureCutter, which assigns a new MillingCutter in its place, and None calls ClearCutter; the Cutter node then grows the MillingCutter's sections, or stays a leaf.

Cache clearing needs no user action. No endpoint mutates this cutter, so it never needs a clear of its own; it is cleared only with its tool, whose ClearCache() forwards to whatever cutter the tool holds. The tool-cache clear a type change performs — like the one the Holder panel runs after a holder-type change — reaches the cutter's own ClearCache() that way and clears the holder's as well, and the change event the panel then emits redraws the canvas.

Source Code Path

See HiNC App Anatomy for git repository links.

HiNC-2025-webservice (Quasar CLI SPA):

  • wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the only web surface this cutter has: the selector option (enabled only as the tool's current kind), the caption shown in its place, and the confirmation a type change passes through before it discards the model.
  • wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — its cutter child builder grows sections only for a MillingCutter, so this cutter's Cutter node is a leaf.
  • wwwroot-src/src/i18n/en/toolhouse.ts — toolhouse.cutter.freeformRemover, the option label, and toolhouse.cutter.freeformRemoverUnavailable, the caption; wwwroot-src/src/i18n/en/dialog.ts — dialog.toolhouse.discardFreeformRemoverTitle and …Message, the confirmation; the zh-Hans, zh-Hant, vi and ja files carry the same keys.
  • Mech/ToolHouseController.cs — the tool detail and the tool list, which report hasCutter and cutterType for a cutter of any kind; the embedded cutter DTO is built for a MillingCutter only.
  • Mech/CutterController.cs — EnsureCutter, which replaces a non-milling cutter with a new MillingCutter; ClearCutter, which drops any cutter; and every other cutter mutation. Each of those works on a MillingCutter only: the shaper-profile, fluting, general, opt-limit, integral-mode, upper-beam create, flute- and shank-material and coating-layer add endpoints first ensure one the way EnsureCutter does, so they also replace a freeform remover, and the rest refuse a tool without one. All of them answer 409 ToolEditRefusedWhileRunning while the pace player is locked — a run in progress or paused. The backend has no freeform-remover endpoint.

See Also

  • Cutter Branch — the Cutter node and the nodes it grows, of which this cutter grows none
  • Cutter Panel — the Cutter node's panel, whose type selector is this cutter's only web surface