Table of Contents

Polar Resolution 2D Panel

The model is PolarResolution2d: a linear step in millimetres plus an angular step, carried in radians and edited in degrees, that together tessellate a revolved shape into an STL mesh. Both clients edit it on a tool holder and nowhere else — the WPF client through this widget, the web client through the Cylindroid holder's Resolution section.

Layout

WPF Layout

  • Polar Resolution 2D Panel
    • Enable Custom Resolution CheckBox
      • checked if the host model is not null; the checkbox itself is always clickable.
      • unchecking sets the host model to null; checking a null model publishes a fresh PolarResolution2d of 0.5 mm / 5 deg through the setter.
    • Linear Resolution Input Field, with an mm suffix label
      • enabled if model not null
    • Angle Resolution Input Field, with a degree-sign suffix label
      • enabled if model not null

Web Layout

  • Holder Resolution Section
    • Resolution Hint Caption — names the STL tessellation used for display and collision meshing
    • Linear Resolution (mm) Input Field
    • Angle Resolution (deg) Input Field

There is no enable checkbox and no null state on the web: both fields are always editable, and each commits on blur or Enter, and only when both values are greater than zero.

Feature

The Enable CheckBox is always shown. The host drives the WPF widget only through GetterFunc / SetterFunc; it calls UpdateUI() after its own model changes and subscribes to OnModelChanged to react to an edit.

An edit republishes a whole new carrier through the setter instead of mutating the current one, in either client. A holder's PolarResolution2d setter swaps the holder's solid for one born with the new value and disposes the old one, and skips a value-equal reassignment — which is what makes the WPF widget's per-keystroke setting affordable. The web client performs the same swap server-side inside SetPolarResolution, then clears the holder's cache.

If the host model is null, it may mean the resolution applied the default value: PolarResolution2d is a snapshot of the solid's identity, and a null carrier lets a parametric geometry apply its own default. Only the WPF client can reach that state. The service reports a null resolution as 0 mm / 0 deg, the two web fields display those zeros, and the commit guard then blocks any write until real numbers are typed.

Source Code Path

See HiNC App Anatomy for git repository links.

HiNC-2025-webservice (Quasar CLI SPA): no standalone widget. The resolution is edited on the Cylindroid holder's Resolution section, at the Control-Tree id toolhouse/tool-{id}/holder/resolution and the route /tool-house/:toolId/holder/resolution. A Freeform holder grows no sections in the web client; its Holder panel shows a hint pointing at the WPF client instead.

  • wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the section === 'resolution' branch: the two number fields, seeded from Get and committed on blur / Enter.
  • wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers that panel as the HolderSection item type and grows the Resolution node only for a CylindroidHolder.
  • wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder stem above it, whose holder-type selector decides which sections appear.
  • wwwroot-src/src/api/cylindroidHolder.ts — PolarResolutionDto (linear_mm / angle_deg) and setCylindroidHolderResolution.
  • wwwroot-src/src/router/treeRoutes.ts — maps the holder's section ids onto the Tool House route params.
  • wwwroot-src/src/i18n/en/toolhouse.ts — the two field labels and the tessellation hint caption.
  • Mech/CylindroidHolderController.cs — POST /api/CylindroidHolder/SetPolarResolution, which rejects a non-positive value, assigns a fresh PolarResolution2d and calls ClearCache(); GET Get reports a null resolution as 0 / 0.

See Also