From 29090b369a4c860b4b7140efa0cd8e78676f4d3a Mon Sep 17 00:00:00 2001 From: "jerome.fayot" Date: Fri, 7 Feb 2025 11:32:57 +0100 Subject: [PATCH] fix: fixes #12465 --- .../engine/Source/DataSources/EntityView.js | 13 +------ packages/engine/Source/Widget/CesiumWidget.js | 8 ++-- .../Specs/DataSources/EntityViewSpec.js | 39 +++++++------------ 3 files changed, 19 insertions(+), 41 deletions(-) diff --git a/packages/engine/Source/DataSources/EntityView.js b/packages/engine/Source/DataSources/EntityView.js index 9e7ae33234b..904134b5bbf 100644 --- a/packages/engine/Source/DataSources/EntityView.js +++ b/packages/engine/Source/DataSources/EntityView.js @@ -43,7 +43,7 @@ function updateTransform( ellipsoid, ) { const mode = that.scene.mode; - let cartesian = positionProperty.getValue(time, that._lastCartesian); + const cartesian = positionProperty.getValue(time, that._lastCartesian); if (defined(cartesian)) { let hasBasis = false; let invertVelocity = false; @@ -216,10 +216,6 @@ function updateTransform( } } - if (defined(that.boundingSphere)) { - cartesian = that.boundingSphere.center; - } - let position; let direction; let up; @@ -346,12 +342,6 @@ function EntityView(entity, scene, ellipsoid) { */ this.ellipsoid = defaultValue(ellipsoid, Ellipsoid.default); - /** - * The bounding sphere of the object. - * @type {BoundingSphere} - */ - this.boundingSphere = undefined; - // Shadow copies of the objects so we can detect changes. this._lastEntity = undefined; this._mode = undefined; @@ -445,7 +435,6 @@ EntityView.prototype.update = function (time, boundingSphere) { } camera.viewBoundingSphere(boundingSphere, scratchHeadingPitchRange); - this.boundingSphere = boundingSphere; updateLookAt = false; saveCamera = false; } else if ( diff --git a/packages/engine/Source/Widget/CesiumWidget.js b/packages/engine/Source/Widget/CesiumWidget.js index b4c34adffd7..29f8d960810 100644 --- a/packages/engine/Source/Widget/CesiumWidget.js +++ b/packages/engine/Source/Widget/CesiumWidget.js @@ -1134,6 +1134,8 @@ CesiumWidget.prototype._updateCanAnimate = function (isUpdated) { this._clock.canAnimate = isUpdated; }; +const boundingSphereScratch = new BoundingSphere(); + /** * @private */ @@ -1146,15 +1148,15 @@ CesiumWidget.prototype._onTick = function (clock) { } const entityView = this._entityView; - if (defined(entityView) && defined(entityView.boundingSphere)) { + if (defined(entityView)) { const trackedEntity = this._trackedEntity; const trackedState = this._dataSourceDisplay.getBoundingSphere( trackedEntity, false, - entityView.boundingSphere, + boundingSphereScratch, ); if (trackedState === BoundingSphereState.DONE) { - entityView.update(time, entityView.boundingSphere); + entityView.update(time, boundingSphereScratch); } } }; diff --git a/packages/engine/Specs/DataSources/EntityViewSpec.js b/packages/engine/Specs/DataSources/EntityViewSpec.js index 61223cc1dd0..7b83c3017e4 100644 --- a/packages/engine/Specs/DataSources/EntityViewSpec.js +++ b/packages/engine/Specs/DataSources/EntityViewSpec.js @@ -89,43 +89,30 @@ describe( expect(view.scene.camera.position).toEqualEpsilon(sampleOffset, 1e-10); }); - it("uses entity bounding sphere", function () { - const sampleOffset = new Cartesian3( - -1.3322676295501878e-15, - -7.348469228349534, - 7.3484692283495345, - ); + it("uses provided bounding sphere", function () { + const bs = new BoundingSphere(new Cartesian3(3, 4, 5), 6); + scene.camera.viewBoundingSphere(bs); + const positionWC = scene.camera.positionWC.clone(); + const entity = new Entity(); entity.position = new ConstantPositionProperty( Cartesian3.fromDegrees(0.0, 0.0), ); const view = new EntityView(entity, scene, undefined); - view.update( - JulianDate.now(), - new BoundingSphere(new Cartesian3(3, 4, 5), 6), - ); - expect(view.scene.camera.position).toEqualEpsilon(sampleOffset, 1e-10); + view.update(JulianDate.now(), bs); + expect(scene.camera.positionWC).toEqualEpsilon(positionWC, 1e-10); entity.trackingReferenceFrame = TrackingReferenceFrame.INERTIAL; - view.update( - JulianDate.now(), - new BoundingSphere(new Cartesian3(3, 4, 5), 6), - ); - expect(view.scene.camera.position).toEqualEpsilon(sampleOffset, 1e-10); + view.update(JulianDate.now(), bs); + expect(scene.camera.positionWC).toEqualEpsilon(positionWC, 1e-10); entity.trackingReferenceFrame = TrackingReferenceFrame.VELOCITY; - view.update( - JulianDate.now(), - new BoundingSphere(new Cartesian3(3, 4, 5), 6), - ); - expect(view.scene.camera.position).toEqualEpsilon(sampleOffset, 1e-10); + view.update(JulianDate.now(), bs); + expect(scene.camera.positionWC).toEqualEpsilon(positionWC, 1e-10); entity.trackingReferenceFrame = TrackingReferenceFrame.ENU; - view.update( - JulianDate.now(), - new BoundingSphere(new Cartesian3(3, 4, 5), 6), - ); - expect(view.scene.camera.position).toEqualEpsilon(sampleOffset, 1e-10); + view.update(JulianDate.now(), bs); + expect(scene.camera.positionWC).toEqualEpsilon(positionWC, 1e-10); }); it("uses entity viewFrom if available and boundingsphere is supplied", function () {