Strip Charts
The strip charts visualise a windowed, downsampled view of the full mission timeline for physics / quality aspects that are computed per step across the whole NC program. They are rendered as min/max banded series over the ClStrip.GetDispBegin() .. AbsDispEnd window — except on the Color Index chart an ID key (ToolId, FileNo), which is drawn as IDs in the colours the 3D view paints them with, and a color tree's key, which is drawn as one lane per leaf in the same colours (see Layout). Operators use them to spot which segments of the mission are loading the spindle, degrading surface quality, or hitting thermal limits.
They occupy the Strip Charts column of the Execution Page. The anatomy covers three, all sharing BaseStripChart.vue:
| Chart | Source Aspect | Items |
|---|---|---|
| Availability Chart | Availability |
Yielding-stress / max-spindle-torque / max-spindle-power / spindle-working-temperature / thermal-yield ratios (5 series). |
| Surface Roughness Chart | SurfaceRoughness |
Re-cut depth + program-side cusp + Δ tip deflection X / Y / Z in µm (5 series). |
| Color Index Time Chart | Individual |
One series of a user-picked StepPropertyAccessDictionary key (≈90 keys). |
Key Model: MachiningProject via LocalProjectService.ClStrip + LocalProjectService.StepPropertyAccessDictionary.
Layout
One group bar drives all three charts, and each chart is a collapsible panel below it.
- Group Bar
- Range chip —
[{dispBegin}..{absDispEnd}] / {count}, withShowing steps {begin}..{end} of {count} totalas its tool-tip. - Cursor x readout — the hovered x value, shared by all three charts and reserving a fixed width so hovering never reflows the bar. It is the one place the hovered value is printed; the charts themselves carry no per-chart cursor row.
- X-axis mode —
IndexByTime(default) /IndexByStep, applied to every strip chart at once. - Fit View — fits the 3D canvas to the positions in the window that cut (
ClStrip.GetFittingView: the box of the touched steps, or of every step when none touched), or to the home view without a strip. Disabled without a rendering connection id, and the only control here that acts on something other than the charts. - Stick disp-end to live end — keeps the window pinned to the running end of the mission. The state is
dispEnd === -1, so a pan or a wheel turns it off by writing a concrete end, and Reset re-arms it. - Reset display range — returns the window to the whole mission.
- Reload all strip charts.
- Range chip —
- Each chart panel
- Header — title label; the aspect picker on the Color Index chart, a dropdown listing every
StepPropertyAccessDictionarykey with aGetQuantityFunc, each captioned with its unit as Step Properties prints it (unitLabel), sorted by each property's name in the interface language —PresentAttribute.Namein English, the step-field catalog's translation otherwise, where it has one — under that language's collation, and filtered by a type-to-search field over the name, short name, key and unit in either spelling (mm/minormmdmin, never a unitless row'sNone) that ignores letter case, diacritics and character width and finds katakana by their hiragana (Typing and Searching); the Y-axis range editor (Fit / Lock / Symmetric with a ± bound), which the Color Index chart drops while its key is an ID or a color tree's, ignoring any range stored for that key (see Body for an ID key); and, on the Color Index chart only, aColorsdropdown editing the colour guide's floor / ceiling / tone function. That editor drives the 3D workpiece colouring and the colour-scale bar, not the chart's own line. ForToolIdandFileNothe guide has no range, and the dropdown reads This guide has no editable range.; for a color tree's key it lists the tree's leaves instead (see Body for a color tree). - Body —
UplotChart.vuerendering one min/max band pair per item (two stroked series of the same colour plus a filled band at 15% opacity), with uPlot's own legend panel in a splitter pane beside the plot. The legend carries the swatches, labels and live values; its width is shared by all three charts, so dragging one divider moves them together. - Body for an ID key — the Color Index chart inspecting a key whose
isCategoricalis set (IsCategorical(API):ToolIdandFileNo; a color tree's key is categorical too, but its item carries acolorTreeand is drawn in lanes, see Body for a color tree) draws IDs instead of a min/max band: two grey (#616161) stepped series with no fill, where bucket i holds over (x[i−1], x[i]] because x[i] is where bucket i ends; a 6 px ID band of each bucket's colour along the bottom of the plot; a Y scale over the IDs present, from the lowest less half an ID and a margin that keeps its line clear of the ID band, to the highest plus half, with ticks on the IDs only, at least 16 px apart and labelledlabelPrefix+ ID (T16; the file number bare); a 25 % tint of each bucket's ID colour under the grid and the lines; and an 8 px swatch beside each tick, the ID band and the swatches outlined 1 px#616161. The colours are the answer'sidColors. A bucket keeps only its lowest and highest ID, so one spanning IDs paints the upper half of its tint and band in the highest and the lower half in the lowest; an ID between them shows only after a zoom. A step without an ID is a gap, drawn in no colour, and hiding the series in the legend hides the colours too. The legend readsT3, orT1 ~ T3for a bucket spanning IDs. The Y axis keeps the width all three charts share, so the plot areas stay aligned. While one ID key is inspected no poll rebuilds the chart — a new ID only rescales it, new colours only repaint it — and picking another key, another ID key included, rebuilds it. The header follows the picked key'sisCategoricalat once; the chart starts drawing IDs once an ID key's own data has arrived, and stops as soon as another key is picked, showing the previous values as an ordinary banded line until the new key's data arrives. - Body for a color tree — drawn whenever the answer's item carries a
colorTree, which the server sends for a tree's key alone (the project's tree or a script's); the mode rides on that field, never onisCategorical. It keeps the ID chart's frame:- Lanes — the y scale holds every lane
0 … n − 1, the tree's first leaf the highest, a lane no step of the window fell into included, so nothing rescales during a play. The grey staircases are each bucket's lowest and highest lane; the tint, the 6 px band and the swatches are painted fromidColorsalone, keyed by lane, and hiding the tree's row in the legend hides them. - Names on the axis — a lane's tick reads its leaf's name (an unnamed leaf's id), cut with
…to 61 px in the axis font at grapheme boundaries of its NFC form (fitCategoryLabel), inside the gutter every strip chart already has, so the three plots keep one left edge. - Stripes —
UplotChart'slaneMasks(the item'sleafMask) splits a bucket's 25 % tint into one stripe per leaf present, the top lane on top, each an equal share of the plot height; a mask of 0 draws no tint, and without a mask (over 32 leaves) the tint takes the ID chart's halves. The band keeps its halves. - Value bands — a leaf in
leafValuesdraws two stepped edges in its lane atlane − 0.4 + 0.8 (v − lo) / (hi − lo),lo/hithe least and greatest finite value of the leaf's minima and maxima in the window, clamped to ±0.4:hi = lodraws the lane itself, ±Infinity sits on the lane's edge, a bucket without a value is a gap. Edges in the lane's colour at width 1.25, the fill at 15 %, the series keyed by leaf id. - Legend — the tree's row lists the leaves in the hovered bucket, top lane first, joined by
/(without a mask, the highest and lowest joined by~),—for none; a value leaf's row,<leaf> · <value name>and(<unit>)when it has one, reads the bucket'smin ~ max, off the plot the window'slo ~ hi. - Height — the canvas is at least
min(320, max(160, ⌈16 × 1.12 × n⌉ + 97))px (categoryMinCanvasPx: 160 for 3 lanes, 295 for 11, 320 from 13 on, where the ticks thin again). Each mounted Individual chart publishes its card height intouseStripChartGroup, andExecutionPage.vueraises the Color Index panel'sfill-floorto the largest, plus its 30 px header, above the default 240 px. - No rebuild per poll — the series, bands, lanes, tick formatter and least height come from one spec held as a string; a colour change rebuilds once.
- The
Colorsdropdown — while the selected guide is a tree's (the colour guide'stree): Color tree: {name} (the key without a name), In the display range and the leaves in tree order — the leaf's own colour, its name or id, its steps and its share of the drawn time from the chart's latestleafTotalsby leaf id,—while that answer ispendingor another tree's — then a No value row when steps fell into no leaf, and Edit color tree → (?tree=theeditTreeId, through the host's dirty-switch gate) or, for a script's tree, Registered at run, read-only. It sends no request.
- Lanes — the y scale holds every lane
- Empty-state overlay — in order: “No project loaded”; “Pick a property to inspect” (Color Index with no key chosen); “Not ready — reading the values of this property” while the strip has positions and the Color Index answer is pending (the host is still filling the inspecting slots for the picked key, or the key is not yet the project's); “No mission data” when the fetch returned none; then, when every item's min / max arrays are all NaN, “No mapped measurement data for this property” if the Color Index chart inspects a by-mapping property — one whose values are measurements paired onto the steps, so the gap is in the measured data — and “No physics data” otherwise, which is what Availability looks like without a physics licence. A color tree's chart shows neither: a window no step of which fell into a leaf is a result, drawn as its empty lanes.
- Header — title label; the aspect picker on the Color Index chart, a dropdown listing every
Behavior
- Windowed fetch. Only the
ClStrip.GetDispBegin() .. AbsDispEndwindow is fetched, at a bucket count matching the chart's pixel width. The server-sideClStrip.GetMinMaxList(threshold, itemCount)handles down-sampling. - Pointer interactions — every one of them writes the shared
ClStrip, so a gesture on one chart moves all three:wheelover the plot area →POST /api/execution/cl-strip/wheelwithscale = Math.pow(1.05, deltaY * 1/166)+xPositionPercentage.- Right / middle-button drag →
POST /api/execution/cl-strip/panwith accumulatedxOffsetPercentage. Frame-batched viarequestAnimationFrame. Pen drags also pan without a button modifier. - Left-button drag → a rubber-band x-range zoom: a translucent band tracks the drag over the plot area and the release POSTs the swept fractions to
/api/execution/cl-strip/zoom-range. A drag under 6 px, or under half a percent of the plot width, is discarded so the trailing click selects a step instead — which is what makes click-to-select survive an unsteady hand. The gesture is mouse-only. - Left click →
POST /api/execution/cl-strip/select-stepwith the step of the bucket under the pointer (stepIndexAtClientX, shared with the hover): the nearest point on a chart of magnitudes, and on a staircase — an ID's or a tree's — the first bucket whose x is at or after the pointer, since a bucket holds (x[i−1], x[i]]; the legend reads the same bucket. The step is the bucket's own first step (firstStepOfBucket: downsampledindexes[i − 1],dispBeginfor bucket 0; raw the point's own step), and on a tree's chartleafStepIndex[i], the first step of its highest lane, unless that is −1. A click that ended a pan or a zoom drag is ignored. Once the select has answered, the chart hands the step to the Control Tree host'srevealStepInProgram(injected asCONTROL_TREE_HOST): Follow off and, with the selection in the Program branch, the Program viewer brought to the step's file node, pass and line — see Program Branch. - Touch → one finger pans, a second finger converts the pan into an x-axis pinch-zoom; the trailing synthetic click is swallowed so panning past a step never selects it.
- Mouse move (throttled: the first move fires at once, continued movement every 50 ms with the latest position, and nothing while the pointer stays on the same step — in a downsampled answer, within one bucket) →
POST /api/execution/cl-strip/enter-stepfor hover, with the step a click there selects; the bucket the legend reads gives the group bar's readout its x (hoveredXLabel).
- Step to bucket. The selected step's rule (
selectedX) and the entered step's cursor (theStepEnteredecho,setHoverIdx) go to the bucket that holds the step (bucketOfStep), on all three charts alike, whichever chart or the 3D view set it: downsampled, bucket i holds[indexes[i − 1], indexes[i] − 1](bucket 0 fromdispBegin), and the last bucket its own last step as well, the window's last step; raw, a point is its own step (a ceil search onindexes). On a staircase the cursor sits three quarters into its bucket (STEPPED_CURSOR_AT), where both of uPlot's readings name it. - Picked key first. Picking a key on the Color Index chart POSTs it to
/api/execution/inspecting-keybefore the local key changes and the chart fetches; a POST that fails leaves the key the server holds and notifies. A project without an inspecting key gets the picker's fallback posted as its key. While the host fills the slots for the picked key the chart shows Not ready — reading the values of this property and fetches again on theUpdatedbroadcast the scan's end raises. A key set elsewhere is followed: Set as color index on the Step Colors Branch announces it (inspectingKeyAnnouncement) and the chart adopts it; set in another tab or over the REST, the chart's own key answers pending with no item, and the first such answer reads the step properties and adopts theircurrentKey(a failed read is retried at a later pending answer, 5 s on at the soonest), never while the server still serves the chart's key. - Live refresh.
useClStripHubsubscribes toDispRangeChanged(re-fetch when anyone else zooms / pans) andUpdated(coalesced re-broadcast while a mission is running). A rising edge on the execution status hub'shasProjectalso triggers a refetch. - Single-flight load loop. Each chart runs its fetches through one loop that never overlaps two requests: a trigger arriving while a fetch is in flight only marks one more fetch as due, so a burst of
Updatedevents during a fast-running mission coalesces into at most one extra fetch. Consecutive fetch starts are at least 500 ms apart (MIN_LOAD_INTERVAL_MS), capping a chart at two requests a second. - Fetch deadline. A strip-chart request that has not settled after 30 s is aborted and reported in a notification carrying the chart's title — Request timed out (30 s) when no answer had arrived — so the loop is free to fetch again rather than waiting on it for good.
- Superseded and abandoned requests. A newer
load()— an x-axis mode switch, a new Color Index key, a group reload — aborts the request its chart is still waiting on, and a chart that unmounts (its panel collapsed) aborts its own; the aborted call ends silently. On the server the strip walk checks the request's cancellation at every chunk of steps and every 8192 steps within one, stops there, and answers the shape-preserving empty payload without writing an error to the log.
Source Code Path
See HiNC App Anatomy for git repository links.
Web Application
HiNC-2025-webservice (Quasar CLI SPA):
wwwroot-src/src/components/execution/charts/StripChartGroupBar.vue— the group bar over the three charts.wwwroot-src/src/components/execution/charts/BaseStripChart.vue— shared strip-chart skeleton.wwwroot-src/src/components/execution/charts/UplotChart.vue— uplot wrapper.wwwroot-src/src/components/execution/charts/PluralStripAvailabilityChart.vue— availability chart.wwwroot-src/src/components/execution/charts/PluralStripRoughnessChart.vue— surface-roughness chart.wwwroot-src/src/components/execution/charts/StripIndividualChart.vue— aspect-picker individual chart.wwwroot-src/src/api/clStrip.ts— typed REST wrappers for the range calls.wwwroot-src/src/api/executionCharts.ts— the strip-chart fetch, with its 30 s deadline (STRIP_CHART_TIMEOUT_MS) and the caller's abort signal, overfetchWithTimeoutinwwwroot-src/src/api/http.ts; the whitelist parses ofcolorTreeand the colour guide'stree(anything malformed reads as none);inspectingKeyAnnouncement.wwwroot-src/src/i18n/en/charts.ts— the empty-state strings undercharts.empty, and theColorsdropdown's tree strings undercharts.coloring.wwwroot-src/src/composables/useClStripHub.ts— singleton hub wrapper (the same ref-counting pattern as the other execution hubs).wwwroot-src/src/composables/useStripChartConfig.ts— the Y-range and colour-guide state,colorGuideTreeamong it, the guide's answers applied in request order.wwwroot-src/src/composables/useStripChartGroup.ts— the reload tick, the hovered x and the Color Index charts' card heights (cardFloorPx).wwwroot-src/src/pages/ExecutionPage.vue— the Color Index panel'sfill-floor, fromcardFloorPx.Execution/ExecutionChartsController.cs— strip-chart data:GET /api/execution/strip-chart?aspect=Availability|SurfaceRoughness|Individual&xValueCategory=IndexByTime|IndexByStep&widthHint=…&dispBegin=…&dispEnd=…&inspectingKey=…→{ xs, indexes, items:[{ key, label, unit, min, max, isCategorical, labelPrefix, idColors, colorTree }], isXTicksRangeMode, dispBegin, absDispEnd, count }.indexesholds a step a bucket: raw (isXTicksRangeModefalse) the point's own; downsampled the next bucket's first step, the last bucket's the window's last step.unit, the legend's suffix and the Y axis title, is display text — for theIndividualaspect the unit as Step Properties prints it (SelectedStepInfoService.UnitLabel:mm/min, empty for none), not thePhysicsUnitname. The Color Index chart's picked key rides theinspectingKeyquery parameter of that same call. TheIndividualaspect answers only the project's inspecting key (LocalProjectService.InspectingKey: every step keeps that key's value in its inspecting slot, which the series reads; anMC.<axis>key of a wrap-around rotary axis — the axesRotaryReadout.ModuloAxesnames,Common/RotaryReadout.cs— is served folded into [0°, 360°) as the controller's position screen shows it, rounded to 0.001° first, the fold applied to each step's value before a bucket'smin/maxare taken, on the slot path and the registry-getter path alike, while the slot, the step and the step file keep the continuous angle, and every other key is served as it is): another key answers the empty payload withpending: true, and a key that is not a step property of the project answers it withunresolvedKey: true. AfterPOST /api/execution/inspecting-key{ inspectingKey }(→{ success, currentKey, messages }) the host fills every step's slot for the new key, and a read that met a step not yet filled answerspending: truewithNaNthere, besideinspectingGeneration, the generation the values were read under;pendingis true as well when that generation moved under the walk. The chart reads again on the nextUpdatedbroadcast untilpendingis false. A script reads a key the same way: post it, read untilpendingis false (itemsempty withpendingtrue means the key is not the project's — another client posted its own), and when done, while the project's key is still the one posted, post back the key the project held before, whichGET /api/execution/strip-chart-item-configwithout a key answers asinspectingKey, since the key is saved with the project.isCategoricalis true on an item whose value is an ID (ToolId,FileNo, a color tree's key). For a tree's key the inspecting slot holds the step's leaf id packed with the leaf's value, and the series is the lane of that leaf (CompiledStepColorTree.Leaf.Lane: the tree's first leaf the highest lane, its last leaf 0) — the registry is asked once a request whether the key is a tree's, and for its compiled tree — with NaN, a gap, for a step in no leaf; the registry, the 3D view, Step Properties and the step file read the leaf id. Such an item'slabelPrefixis its CategoryLabelPrefix(API) —Tfor the tool ID, empty for the file number and a tree's key — and itsidColorsis{ colors, noValueColor }:colorsmaps every integer in the answer'smin/max— for a tree's key every lane of the tree instead, a lane no step of the window fell into included — keyed by its decimal string, to the#RRGGBBthe 3D view paints it with, the selected guide's GetIdRgb(API): for the tool ID and the file number the ID's own discrete colour, for a tree's lane the hue the tree gives the lane's leaf (IdHues(API)).noValueColoris the colour the 3D view gives a step without an ID, which the chart itself leaves as a gap.idColorsis filled only while the project's selected colour guide is that key's FuncDiscreteColorGuide(API), so the chart never shows colours the 3D view is not painting; a pick, or aColorsguide change, fetches again once the server has made it.labelPrefixandidColorsare null on every other item, andmin/maxkeep their shape.colorTreeis null on every item but a tree's, where it is{ key, name, editTreeId, leaves, leafMask, leafStepIndex, leafValues, leafTotals, noValueTotals, notes }, each per-bucket array aligned withxs:name— the tree's name, its key when it has none;editTreeId— the Control-Tree id of the project's tree under the key on the Step Colors Branch, null for a script's tree.leaves— tree order,{ id, lane, name, hue, color, valueKey, valueLabel, valueUnitLabel, valueHidden }:nameas authored (null or empty for none),huein degrees,colorthe leaf's own#RRGGBB, the value fields null for a leaf showing none (valueUnitLabelempty for a unitless key or one the registry lacks),valueHiddenfor a physics value key the interface hides.leafMask— auinta bucket, bitlaneper leaf a step fell into (test with(mask >>> lane) & 1: lane 31 is 2147483648); null over 32 leaves.leafStepIndex— a bucket's first step in its highest lane, −1 for none.leafValues— per leaf that shows a value and is not hidden,{ lane, min, max }over that leaf's steps (the slot's float32, NaN for none); found bylane.leafTotals{ lane, id, steps, seconds }per leaf andnoValueTotals{ steps, seconds }— over the drawn steps (the window's positions with a step and a finite x); no leaf, a read that threw and a stale slot count as no value, the seconds areStepDuration, provisional whilepending.notes— empty.
GET /api/execution/step-properties→{ success, currentKey, keys:[{ key, name, shortName, unit, unitLabel, source, isMapping, isCategorical }], generation }— the property picker's list.unitis thePhysicsUnitname (mmdmin,Nonefor none),unitLabelthe picker's caption, the unit as Step Properties prints it (mm/min, empty for none);sourceiscolorTreefor a tree's key, elsebuiltIn(the step's own fields and theMC.keys),projectVariable,trainingorsession, as the color trees' key options say it.isCategorical— true forToolId,FileNoand a tree's key — puts the header in its ID mode as soon as the key is picked;generation, the registry generation the list was read at, makes the picker read it again when the execution status names another. AcurrentKeystanding in for a hidden physics key is never a tree's.GET/POST /api/execution/strip-chart-item-config— a key's Y-range config, saved with the project; with no key, the project's inspecting key's.GET/POST /api/execution/color-guide— theColorsdropdown's state, one payload for both: the selected key, the guides, the tone functions, the range rule, andtree—{ key, name, editTreeId, leaves, notes }, the leaves incolorTree.leaves' shape — while the selected key is a tree's, else null.
Execution/SelectedStepInfoService.cs—UnitLabel, the unit as display text thatunitandunitLabelshare.Execution/StepColorTreeController.cs—SourceOf, the classification behindsource.Execution/ClStripController.cs— range manipulation at/api/execution/cl-strip/*(the server-side counterparts of the pointer handlers above):GET range— snapshot{ dispBegin, absDispEnd, count, selectedIndex, enteredIndex }.POST disp-rangebody{ dispBegin, dispEnd }, andPOST zoom-range.POST wheelbody{ scale, xPositionPercentage, xValueCategory }.POST panbody{ xOffsetPercentage, xValueCategory }. LegacyfeelingRatio=2.POST select-stepbody{ stepIndex }→ClStrip.SetSelectedPos(...).POST enter-stepbody{ stepIndex }(nullable) →ClStrip.SetEnteredPos(...).
Execution/ClStripHub.cs+Execution/ClStripBroadcastService.cs— SignalR at/clStripHub. Broadcasts to every clientDispRangeChanged(snapshot),StepSelected({ stepIndex })(not raised when the selected step is selected again),StepEntered({ stepIndex }),Updated(snapshot)andStepPhysicsRecomputed({ begin, end }), the range a step-physics recompute replaced. OneLooseRunnerper channel coalesces re-broadcasts — a burst collapses into the latest, and a slowUpdatedcannot starve aStepSelected; each chart's single-flight load loop and its 500 ms floor handle the rest of the rate-limiting. The same service relays a sixth channel over the other hub: a click on the tool path (ClStrip.PosClicked, raised on the render thread) is sent asStepClickedon/renderingHubto the clicking canvas's connection only, through a runner of its own that keeps the latest click per engine.
HiAPI Engine
HiMech/Coloring/FuncDiscreteColorGuide.cs— the one-colour-per-ID guide, with a hue table for a color tree's leaves (IdHues); itsGetIdRgbgives the coloursidColorscarries.HiMech/MachiningSteps/PresentAttribute.cs—IsCategoricalandCategoryLabelPrefix, the fieldsisCategoricalandlabelPrefixare read from.HiMech/MachiningSteps/MachiningStep.cs— the marks themselves:ToolIdis an ID with the prefixT,FileNoan ID with none.HiMech/NcParsers/Dependencys/RotaryReadoutUtil.cs— the fold of a wrap-around rotary axis' machine coordinate into [0°, 360°) at a display resolution, and theIsModularRotarypredicate ofIMachineAxisConfigthat picks the axes.HiNc/MachiningProcs/LocalProjectService.cs—SelectAndBuildColorGuide: picking an ID key gives the 3D view the one-colour-per-ID guide, the selectionidColorswaits for; a color tree's key gets one built with the tree's hue table, and a tree's guide left under a key that is no tree's any more gives way to the guide the entry's kind calls for.HiNc/MachiningProcs/LocalProjectService.ProjectStepColorTrees.cs— the color trees, the project's and a script's, registered as categorical step properties with no label prefix, andTryGetStepColorTree, the compiled tree an answer reads;HiNc/MachiningProcs/StepColorTreeSlot.cs— the leaf id and the leaf's value packed into one slot value, which the series unpacks.HiNc/MachiningProcs/CompiledStepColorTree.cs— a compiled tree's leaves in tree order, each with its lane (Leaf.Lane, the first leaf the highest) and its hue, which the lanes andleavesfollow.
See Also
- Execution Page — the page whose Strip Charts column hosts these charts
- Color Guide System — the colour guides behind the
Colorsdropdown, among them the one-colour-per-ID guide whose colours an ID chart and a color tree's lanes repeat - Step Colors Branch — the color trees' editor, which Edit color tree → opens and whose Set as color index the Color Index chart follows
- Cycle-Line Charts — per-selected-step charts that share the same
uplotengine - Execution Extended RenderingCanvas Tool Bar — the tool-path display this column's Fit View acts on
- Watching the Run — the task this column serves, with the pointer contract read as a procedure