mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-14 23:32:20 +00:00
The layer loaded two GeoJsonDataSources and a CustomDataSource: 6,459 entities. Every enable rebuilt them (a 100-250 ms task or three and about 1 GB of heap that stayed until the next collection), every disable removed them in a 130-150 ms task, and each horizon sweep that showed a landing marker made Cesium create its billboard again and read the terrain height under it once more. The layer now makes the primitives Cesium built from those entities itself: one GroundPolylinePrimitive for every line, one BillboardCollection for the point markers, one PointPrimitiveCollection for the reference tips and one static polyline Primitive for the stems in view, rebuilt in a worker when a sweep moves a tip. A disable hides them and an enable shows them again, so only the first enable builds anything. A marker is clamped to the ground once, 48 per frame as before; after that Cesium follows the terrain within its own time budget and hiding or showing the marker reads nothing. A map-stack change re-classifies the lines in place. Lines keep the distance-display attribute the entity display gave them: with a float attribute present Cesium keeps the 2.5 px width, and without one it is stored as a byte and drawn 2 px. Co-Authored-By: Claude Fable 5.2 <[email protected]>
40 lines
1.6 KiB
JavaScript
40 lines
1.6 KiB
JavaScript
import * as Cesium from 'cesium';
|
|
import { CABLE_GLOBE_STACK_IDS } from './policy.js';
|
|
|
|
/**
|
|
* Ground-line classification for one map stack. The photoreal stack renders
|
|
* Google 3D tiles with the Cesium globe HIDDEN, so cable ground lines only
|
|
* need the 3D-tile classification pass there; every other known stack (the
|
|
* bing stacks and osm) renders imagery on the shown globe, so only the
|
|
* terrain pass applies.
|
|
* Classifying against just the active surface halves the
|
|
* GroundPolylinePrimitive's emitted command sets. BOTH is the safe fallback
|
|
* for an unknown stack — it renders on every surface, exactly the shipped
|
|
* pre-optimization behavior.
|
|
* @param {string|null|undefined} activeId MapStackController stack id.
|
|
* @returns {Cesium.ClassificationType}
|
|
*/
|
|
|
|
export function cableClassificationTypeForStack(activeId) {
|
|
if (activeId === 'photoreal') return Cesium.ClassificationType.CESIUM_3D_TILE;
|
|
if (CABLE_GLOBE_STACK_IDS.has(activeId))
|
|
return Cesium.ClassificationType.TERRAIN;
|
|
return Cesium.ClassificationType.BOTH;
|
|
}
|
|
|
|
/**
|
|
* Derive the active surface from live scene state. The boot-time
|
|
* `setStack(..., { silent: true })` fires no 'gev:map-stack-changed' event,
|
|
* so the initial classification reads the scene the way the height-datum
|
|
* listeners do: the photoreal regime is exactly "globe hidden".
|
|
* @param {Cesium.Scene|null|undefined} scene
|
|
* @returns {Cesium.ClassificationType}
|
|
*/
|
|
|
|
export function cableClassificationTypeForScene(scene) {
|
|
if (!scene?.globe) return Cesium.ClassificationType.BOTH;
|
|
return scene.globe.show === false
|
|
? Cesium.ClassificationType.CESIUM_3D_TILE
|
|
: Cesium.ClassificationType.TERRAIN;
|
|
}
|