From 4b5d0a3a991ac2f9e0882f7ad9b9507119a38113 Mon Sep 17 00:00:00 2001 From: Nanda Date: Mon, 28 Aug 2023 12:03:32 +1000 Subject: [PATCH 1/7] Update CHANGES and CONTRIBUTORS. --- CHANGES.md | 1 + CONTRIBUTORS.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index a71c54b02d4..6ad891f42ba 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,7 @@ #### next release (8.3.3) +- Fixes broken point dragging interaction for user drawing in 3d-mode. - [The next improvement] #### 8.3.2 - 2023-08-11 diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index d7cde650241..0e37040f28c 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -62,3 +62,4 @@ The following people have contributed to TerriaJS: - [Zoran Kokeza](https://github.com/zoran995) - [J. Garcia](https://github.com/ctwhome) - [Yusuke Kiuchi](https://github.com/ykiu) +- [Tomoyuki Hisada](https://github.com/hisayan) From e2a3b51bbfc61d3ec74f4787ea4e3431e4c6dd0e Mon Sep 17 00:00:00 2001 From: Nanda Date: Mon, 28 Aug 2023 18:35:50 +1000 Subject: [PATCH 2/7] Fix rectangle drawing in 2d mode. --- lib/Models/UserDrawing.ts | 3 +-- lib/ReactViewModels/MouseCoords.ts | 3 +-- test/Models/LeafletSpec.ts | 29 ++++++++++++++++++++++++++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/Models/UserDrawing.ts b/lib/Models/UserDrawing.ts index 869be649614..b2ea987192e 100644 --- a/lib/Models/UserDrawing.ts +++ b/lib/Models/UserDrawing.ts @@ -385,8 +385,7 @@ export default class UserDrawing extends MappableMixin( const scratchPosition = new Cartesian3(); this.mousePointEntity.position = new CallbackProperty(() => { const cartographicMouseCoords = - this.terria.currentViewer.terria.currentViewer.mouseCoords - .cartographic; + this.terria.currentViewer.mouseCoords.cartographic; let mousePosition = undefined; if (cartographicMouseCoords) { mousePosition = Ellipsoid.WGS84.cartographicToCartesian( diff --git a/lib/ReactViewModels/MouseCoords.ts b/lib/ReactViewModels/MouseCoords.ts index 8cb06d99968..314ea9bf364 100644 --- a/lib/ReactViewModels/MouseCoords.ts +++ b/lib/ReactViewModels/MouseCoords.ts @@ -196,10 +196,9 @@ export default class MouseCoords { const coordinates = Cartographic.fromDegrees( latLng.lng, latLng.lat, - undefined, + 0, scratchCartographic ); - coordinates.height = undefined; this.cartographicToFields(coordinates); } diff --git a/test/Models/LeafletSpec.ts b/test/Models/LeafletSpec.ts index e32117d6525..aaf00710265 100644 --- a/test/Models/LeafletSpec.ts +++ b/test/Models/LeafletSpec.ts @@ -1,11 +1,11 @@ import L from "leaflet"; -import { computed } from "mobx"; -import CustomDataSource from "terriajs-cesium/Source/DataSources/CustomDataSource"; +import { action, computed, when } from "mobx"; +import { ViewerMode } from "terriajs-plugin-api"; +import WebMapServiceCatalogItem from "../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem"; import CommonStrata from "../../lib/Models/Definition/CommonStrata"; import createStratumInstance from "../../lib/Models/Definition/createStratumInstance"; import Leaflet from "../../lib/Models/Leaflet"; import Terria from "../../lib/Models/Terria"; -import WebMapServiceCatalogItem from "../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem"; import { RectangleTraits } from "../../lib/Traits/TraitsClasses/MappableTraits"; import TerriaViewer from "../../lib/ViewModels/TerriaViewer"; @@ -154,4 +154,27 @@ describe("Leaflet Model", function () { }); }); }); + + describe("mouseCoords", function () { + beforeEach( + action(async function () { + const container = document.createElement("div"); + document.body.appendChild(container); + terria.mainViewer.attach(container); + terria.mainViewer.viewerMode = ViewerMode.Leaflet; + await when(() => terria.leaflet !== undefined); + }) + ); + + it("correctly updates mouse coordinates on mouse move", function () { + const leaflet = terria.leaflet!; + expect(leaflet.mouseCoords.cartographic).toBeUndefined(); + // A minimal stub event to get the test working + const stubMouseMoveEvent = { + originalEvent: new MouseEvent("mousemove", { clientX: 10, clientY: 10 }) + }; + leaflet.map.fireEvent("mousemove", stubMouseMoveEvent); + expect(leaflet.mouseCoords.cartographic).toBeDefined(); + }); + }); }); From 0120f5254c3a2ae302c8992b71bdd0d016d39705 Mon Sep 17 00:00:00 2001 From: Nanda Date: Mon, 28 Aug 2023 18:39:11 +1000 Subject: [PATCH 3/7] Updated CHANGES.md. --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 6ad891f42ba..e00c6187da5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,7 +2,8 @@ #### next release (8.3.3) -- Fixes broken point dragging interaction for user drawing in 3d-mode. +- Fixed broken point dragging interaction for user drawing in 3D mode. +- Fixed rectangle drawing in 2D mode. - [The next improvement] #### 8.3.2 - 2023-08-11 From d796971e3dd44f1109b5a931586437b56c3cde3e Mon Sep 17 00:00:00 2001 From: Nanda Date: Mon, 28 Aug 2023 18:51:02 +1000 Subject: [PATCH 4/7] Fix import path. --- test/Models/LeafletSpec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Models/LeafletSpec.ts b/test/Models/LeafletSpec.ts index aaf00710265..1793ead1cc2 100644 --- a/test/Models/LeafletSpec.ts +++ b/test/Models/LeafletSpec.ts @@ -1,11 +1,11 @@ import L from "leaflet"; import { action, computed, when } from "mobx"; -import { ViewerMode } from "terriajs-plugin-api"; import WebMapServiceCatalogItem from "../../lib/Models/Catalog/Ows/WebMapServiceCatalogItem"; import CommonStrata from "../../lib/Models/Definition/CommonStrata"; import createStratumInstance from "../../lib/Models/Definition/createStratumInstance"; import Leaflet from "../../lib/Models/Leaflet"; import Terria from "../../lib/Models/Terria"; +import ViewerMode from "../../lib/Models/ViewerMode"; import { RectangleTraits } from "../../lib/Traits/TraitsClasses/MappableTraits"; import TerriaViewer from "../../lib/ViewModels/TerriaViewer"; From 40a7fc56462375c69d3065775cd99e718be0e643 Mon Sep 17 00:00:00 2001 From: Nanda Date: Tue, 29 Aug 2023 08:53:45 +1000 Subject: [PATCH 5/7] Add stricter tests. --- test/Models/LeafletSpec.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/Models/LeafletSpec.ts b/test/Models/LeafletSpec.ts index 1793ead1cc2..a21b88be15e 100644 --- a/test/Models/LeafletSpec.ts +++ b/test/Models/LeafletSpec.ts @@ -175,6 +175,10 @@ describe("Leaflet Model", function () { }; leaflet.map.fireEvent("mousemove", stubMouseMoveEvent); expect(leaflet.mouseCoords.cartographic).toBeDefined(); + const { longitude, latitude, height } = leaflet.mouseCoords.cartographic!; + expect(longitude).toBeCloseTo(-23, 0); + expect(latitude).toBeCloseTo(1.5707); + expect(height).toBe(0); }); }); }); From eac71bc9d84949cd10ff22530a7c3f9ee7ed44f8 Mon Sep 17 00:00:00 2001 From: Nanda Date: Tue, 29 Aug 2023 09:38:19 +1000 Subject: [PATCH 6/7] Just check for not NaN to make tests less flaky. --- test/Models/LeafletSpec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Models/LeafletSpec.ts b/test/Models/LeafletSpec.ts index a21b88be15e..0e7c375821c 100644 --- a/test/Models/LeafletSpec.ts +++ b/test/Models/LeafletSpec.ts @@ -176,8 +176,8 @@ describe("Leaflet Model", function () { leaflet.map.fireEvent("mousemove", stubMouseMoveEvent); expect(leaflet.mouseCoords.cartographic).toBeDefined(); const { longitude, latitude, height } = leaflet.mouseCoords.cartographic!; - expect(longitude).toBeCloseTo(-23, 0); - expect(latitude).toBeCloseTo(1.5707); + expect(longitude).not.toBeNaN(); + expect(latitude).not.toBeNaN(); expect(height).toBe(0); }); }); From fa496704c55e5ffce55afcebad901cfee1d39cad Mon Sep 17 00:00:00 2001 From: Nanda Date: Thu, 31 Aug 2023 13:58:51 +1000 Subject: [PATCH 7/7] Fix rectangle drawing in 3d-smooth mode. --- lib/ReactViewModels/MouseCoords.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ReactViewModels/MouseCoords.ts b/lib/ReactViewModels/MouseCoords.ts index 314ea9bf364..409e4e56346 100644 --- a/lib/ReactViewModels/MouseCoords.ts +++ b/lib/ReactViewModels/MouseCoords.ts @@ -120,7 +120,7 @@ export default class MouseCoords { let errorBar; if (globe.terrainProvider instanceof EllipsoidTerrainProvider) { - intersection.height = undefined; + intersection.height = 0; } else { const barycentric = Intersections2D.computeBarycentricCoordinates( intersection.longitude,