Skip to content

Commit 7832610

Browse files
committed
Fix incorrect ECEF->LLH transformation in CesiumCartographicPolygon.
1 parent f97f2f2 commit 7832610

File tree

5 files changed

+84
-3
lines changed

5 files changed

+84
-3
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
##### Fixes :wrench:
66

77
- Fixed a bug that caused a `NullReferenceException` when attempting to get or set the `longitudeLatitudeHeight` property on a disabled `CesiumGlobeAnchor`.
8+
- Fixed a bug introduced in v1.11.0 that caused `CesiumCartographicPolygon` positions to be interpreted incorrectly, making polygon clipping unusable.
89

910
### v1.11.0 - 2024-07-01
1011

Runtime/CesiumCartographicPolygon.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ internal List<double2> GetCartographicPoints(Matrix4x4 worldToTileset)
138138
float3 worldPosition = knot.Transform(localToWorld).Position;
139139
float3 unityPosition = worldToTileset.MultiplyPoint3x4(worldPosition);
140140
double3 ecefPosition = georeference.TransformUnityPositionToEarthCenteredEarthFixed(unityPosition);
141-
double3 cartographicPosition = georeference.ellipsoid.LongitudeLatitudeHeightToCenteredFixed(ecefPosition);
141+
double3 cartographicPosition = georeference.ellipsoid.CenteredFixedToLongitudeLatitudeHeight(ecefPosition);
142142

143143
cartographicPoints.Add(cartographicPosition.xy);
144144
}

Tests/CesiumTests.asmdef

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"UnityEngine.TestRunner",
66
"UnityEditor.TestRunner",
77
"CesiumRuntime",
8-
"Unity.Mathematics"
8+
"Unity.Mathematics",
9+
"Unity.Splines"
910
],
1011
"includePlatforms": [],
1112
"excludePlatforms": [],
@@ -18,6 +19,12 @@
1819
"defineConstraints": [
1920
"UNITY_INCLUDE_TESTS"
2021
],
21-
"versionDefines": [],
22+
"versionDefines": [
23+
{
24+
"name": "com.unity.splines",
25+
"expression": "1.0.0",
26+
"define": "SUPPORTS_SPLINES"
27+
}
28+
],
2229
"noEngineReferences": false
2330
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using CesiumForUnity;
2+
using NUnit.Framework;
3+
using System.Collections.Generic;
4+
using Unity.Mathematics;
5+
using UnityEngine;
6+
7+
#if SUPPORTS_SPLINES
8+
using UnityEngine.Splines;
9+
#endif
10+
11+
public class TestCesiumCartographicPolygon
12+
{
13+
#if SUPPORTS_SPLINES
14+
[Test]
15+
public void GetCartographicPoints()
16+
{
17+
GameObject go = new GameObject("Game Object");
18+
19+
CesiumGeoreference georeference = go.AddComponent<CesiumGeoreference>();
20+
georeference.SetOriginLongitudeLatitudeHeight(12.0, 23.0, 456.0);
21+
22+
CesiumCartographicPolygon polygonComponent = go.AddComponent<CesiumCartographicPolygon>();
23+
SplineContainer splineContainer = go.GetComponent<SplineContainer>();
24+
25+
// Remove existing spline(s).
26+
IReadOnlyList<Spline> splines = splineContainer.Splines;
27+
for (int i = splines.Count - 1; i >= 0; i--)
28+
{
29+
splineContainer.RemoveSpline(splines[i]);
30+
}
31+
32+
// Add a new spline.
33+
Spline defaultSpline = new Spline();
34+
35+
BezierKnot[] knots = new BezierKnot[] {
36+
new BezierKnot(new float3(-100.0f, 0f, -100.0f)),
37+
new BezierKnot(new float3(100.0f, 0f, -100.0f)),
38+
new BezierKnot(new float3(100.0f, 0f, 100.0f)),
39+
new BezierKnot(new float3(-100.0f, 0f, 100.0f)),
40+
};
41+
42+
defaultSpline.Knots = knots;
43+
defaultSpline.Closed = true;
44+
defaultSpline.SetTangentMode(TangentMode.Linear);
45+
46+
splineContainer.AddSpline(defaultSpline);
47+
48+
List<double2> cartographicPoints = polygonComponent.GetCartographicPoints(Matrix4x4.identity);
49+
Assert.AreEqual(cartographicPoints.Count, 4);
50+
51+
// All points are near the georeference origin
52+
Assert.AreEqual(cartographicPoints[0].x, 12.0, 0.01);
53+
Assert.AreEqual(cartographicPoints[0].y, 23.0, 0.01);
54+
Assert.AreEqual(cartographicPoints[1].x, 12.0, 0.01);
55+
Assert.AreEqual(cartographicPoints[1].y, 23.0, 0.01);
56+
Assert.AreEqual(cartographicPoints[2].x, 12.0, 0.01);
57+
Assert.AreEqual(cartographicPoints[2].y, 23.0, 0.01);
58+
Assert.AreEqual(cartographicPoints[3].x, 12.0, 0.01);
59+
Assert.AreEqual(cartographicPoints[3].y, 23.0, 0.01);
60+
}
61+
#endif
62+
}

Tests/TestCesiumCartographicPolygon.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)