Scope tracked readouts and selection context to each scene

Give each scene attachment its own tracked readout, follow subscription,
selected context, active card identity and label-subject cache. Bind layer
context publishers to that attachment and preserve the page selection slot
and existing selection and awareness event payloads. Mirror a clear to the
page only when it clears the page selection. Capture display context
services so retired callbacks cannot publish into a replacement attachment.
Route aircraft, satellite, Local ADS-B and ALPR label refreshes and annotation
card lookup to the attached readout. Remove Local ADS-B contexts before
dropping its outgoing renderer, and mirror context pruning to the page.

Carry the retained page selection through the layer session when an attachment
is released. Adopt it only if the page still selects the same record, seed the
incoming readout on initialization, and replace its retained carrier when the
new display registers its marker. Keep the original page selection timestamp
and avoid a duplicate page selection event. A clear between attachments wins,
and page teardown still clears the selection. Seed the incoming readout from
that retained record without validating the outgoing display's visibility:
FIRMS waits for camera restoration before registering its new display. Keep a
matching selected fire in the refresh set before pruning top-N contexts, so
weaker selected detections retain the page selection too.

Preserve Cesium's label text, selected-card policy, visual anchors and
follow-camera anti-jitter. Navara retains the same shared behavior. There is
no intended user-visible change on either engine. Tests cover simultaneous
follows, identical selection IDs, independent refresh and clear, stale
notifications, destruction, parked reattachment and real layer publication
on the fake and headless Cesium engines. The production aircraft tests also
cover grounded fleet and tracked models, the display floor on both sides of
the zoom boundary, follow-label refresh and cached position reads. The fire
regression exercises the application scene handoff, delayed viewport resume,
top-N pruning, unchanged selection timestamp and deliberate clear on both
engines. These fixes preserve the reference Cesium selection behavior.

All eleven coupling counts remain unchanged; none fell or grew. The counts
remain 0 and 189 renderer lines, 3 external Cesium import files, 891 viewer
lines, 1 Navara kind check, 0 engine-sniff calls, 3 extension reads, 1 ground
pass, 3 SDK loads, 4 screen-handler files and 32 engine-name lines.

Checked in the browser, keyless: the overlay baselines on both engines, the
ALPR and FIRMS fire-camera switches, and the layer handoff, Local ADS-B,
Contacts, space, infrastructure, CCTV, urban, transit, directions and
annotation engine switches pass. The tracking regression passes every check
that passes before this change.
This commit is contained in:
German Khokhlov committed 2026-11-07 21:14:09 +04:00
1 parent 3814221cbc
commit c1e857f798
32 files changed
+1751 -414

No files matched your search

+22 -10
View File
@@ -1237,7 +1237,9 @@
"src/overlays/worldOverlay.js",
"src/overlays/worldOverlayDraw.js",
"src/overlays/worldOverlayTokens.js",
"src/time/clock.js"
"src/time/clock.js",
"src/data/contextStore.js",
"src/data/trackedReadout.js"
],
"external": ["cesium", "vue", "pinia", "vue-i18n"]
},
@@ -1464,7 +1466,8 @@
"src/globe/contract.js",
"src/globe/cesium/engineFromViewer.js",
"src/layers/shared/color.js",
"src/layers/aircraft/qaDrawn.js"
"src/layers/aircraft/qaDrawn.js",
"src/data/bindContextStore.js"
],
"external": ["cesium"]
},
@@ -1532,7 +1535,8 @@
"src/time/clock.js",
"src/globe/contract.js",
"src/globe/cesium/engineFromViewer.js",
"src/layers/aircraft/qaDrawn.js"
"src/layers/aircraft/qaDrawn.js",
"src/data/bindContextStore.js"
],
"external": ["cesium"]
},
@@ -1617,7 +1621,8 @@
"src/geo/",
"src/globe/contract.js",
"src/globe/cesium/engineFromViewer.js",
"src/overlays/bindOverlayHost.js"
"src/overlays/bindOverlayHost.js",
"src/data/bindContextStore.js"
],
"external": ["cesium"]
},
@@ -1700,7 +1705,8 @@
"src/geo/",
"src/layers/firms/rectangle.js",
"src/layers/shared/color.js",
"src/overlays/bindOverlayHost.js"
"src/overlays/bindOverlayHost.js",
"src/data/bindContextStore.js"
],
"external": []
},
@@ -1743,7 +1749,8 @@
"src/geo/",
"src/time/clock.js",
"src/layers/shared/color.js",
"src/overlays/bindOverlayHost.js"
"src/overlays/bindOverlayHost.js",
"src/data/bindContextStore.js"
],
"external": ["cesium", "satellite.js"]
},
@@ -3634,7 +3641,8 @@
"src/globe/navara/meshes.js",
"src/globe/exclusivePointer.js",
"src/globe/cesium/followOffset.js",
"src/overlays/bindOverlayHost.js"
"src/overlays/bindOverlayHost.js",
"src/data/bindContextStore.js"
],
"external": [
"hls.js",
@@ -4399,7 +4407,8 @@
"src/globe/meshes.js",
"src/globe/exclusivePointer.js",
"src/globe/cesium/followOffset.js",
"src/overlays/bindOverlayHost.js"
"src/overlays/bindOverlayHost.js",
"src/data/bindContextStore.js"
],
"external": [
"hls.js",
@@ -5170,7 +5179,9 @@
"src/globe/meshes.js",
"src/globe/exclusivePointer.js",
"src/data/selectionDispatcher.js",
"src/overlays/bindOverlayHost.js"
"src/overlays/bindOverlayHost.js",
"src/data/contextStore.js",
"src/data/trackedReadout.js"
],
"external": ["cesium", "egm96-universal", "pbf"]
},
@@ -5741,7 +5752,8 @@
"src/layers/wildlifeSightings/display.js",
"src/data/spriteOrder.js",
"src/layers/shared/color.js",
"src/overlays/bindOverlayHost.js"
"src/overlays/bindOverlayHost.js",
"src/data/bindContextStore.js"
],
"external": ["cesium"]
},