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
mmsuffix label- enabled if model not null
- Angle Resolution Input Field, with a degree-sign suffix label
- enabled if model not null
- Enable Custom Resolution CheckBox
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— thesection === 'resolution'branch: the two number fields, seeded fromGetand committed on blur / Enter.wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts— registers that panel as theHolderSectionitem type and grows the Resolution node only for aCylindroidHolder.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) andsetCylindroidHolderResolution.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 freshPolarResolution2dand callsClearCache();GET Getreports a null resolution as 0 / 0.
See Also
- Cylindroid Holder Panel — the holder editor that embeds this panel to tessellate its profile
- Freeform Holder Panel — the other holder editor that embeds it