Skip to content

Commit 28d2045

Browse files
committed
Merge remote-tracking branch 'origin' into cesium.com
2 parents 8178bf6 + 408dcdd commit 28d2045

File tree

117 files changed

+2640
-925
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

117 files changed

+2640
-925
lines changed

.vscode/launch.json

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"version": "0.2.0",
33
"configurations": [
4+
45
{
56
"type": "node",
67
"request": "launch",
@@ -21,6 +22,32 @@
2122
"type": "chrome",
2223
"url": "http://localhost:8080",
2324
"webRoot": "${workspaceFolder}"
25+
},
26+
{
27+
"request": "attach",
28+
"name": "Attach to Karma",
29+
"type": "chrome",
30+
"port": 9333, // This is the remote debugging port specified in karma.conf.cjs
31+
"webRoot": "${workspaceFolder}",
32+
"timeout": 60000
33+
},
34+
{
35+
"type": "node",
36+
"request": "launch",
37+
"name": "Launch Test Suite",
38+
"cwd": "${workspaceFolder}",
39+
"runtimeExecutable": "npm",
40+
"runtimeArgs": ["run", "test", "--", "--includeName", "${fileDirnameBasename}${/}${fileBasenameNoExtension}", "--debug"],
41+
"console": "integratedTerminal"
42+
}
43+
],
44+
"compounds": [
45+
{
46+
"name": "Launch Test Suite and Debug in VSCode",
47+
"configurations": [
48+
"Launch Test Suite",
49+
"Attach to Karma"
50+
]
2451
}
2552
]
2653
}

Apps/Sandcastle/gallery/3D Tiles Compare.html

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,30 @@
3939
#slider:hover {
4040
cursor: ew-resize;
4141
}
42+
43+
.split-label {
44+
position: absolute;
45+
top: 50%;
46+
transform: translateY(-50%);
47+
background: rgba(42, 42, 42, 0.8);
48+
padding: 8px;
49+
border-radius: 4px;
50+
z-index: 9999;
51+
font-size: large;
52+
font-weight: bold;
53+
text-align: center;
54+
}
55+
.split-label.left {
56+
left: 0;
57+
}
58+
.split-label.right {
59+
right: 0;
60+
}
4261
</style>
4362
<div id="cesiumContainer" class="fullSize">
4463
<div id="slider"></div>
64+
<div class="split-label left">3D Tiles<br />Mesh</div>
65+
<div class="split-label right">3D Tiles<br />OSM buildings</div>
4566
</div>
4667
<div id="loadingOverlay"><h1>Loading...</h1></div>
4768
<div id="toolbar"></div>
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" />
6+
<!-- Use Chrome Frame in IE -->
7+
<meta
8+
name="viewport"
9+
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
10+
/>
11+
<meta
12+
name="description"
13+
content="View the same 3D Tiles power station dataset with Gaussian splatting (or Gaussian splats) rendering versus triangle-based mesh rendering."
14+
/>
15+
<meta name="cesium-sandcastle-labels" content="Showcases, 3D Tiles" />
16+
<title>Cesium Demo</title>
17+
<script type="text/javascript" src="../Sandcastle-header.js"></script>
18+
<script
19+
type="text/javascript"
20+
src="../../../Build/CesiumUnminified/Cesium.js"
21+
nomodule
22+
></script>
23+
<script type="module" src="../load-cesium-es6.js"></script>
24+
</head>
25+
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
26+
<style>
27+
@import url(../templates/bucket.css);
28+
29+
#slider {
30+
position: absolute;
31+
left: 50%;
32+
top: 0px;
33+
background-color: #d3d3d3;
34+
width: 5px;
35+
height: 100%;
36+
z-index: 9999;
37+
}
38+
39+
#slider:hover {
40+
cursor: ew-resize;
41+
}
42+
.split-label {
43+
position: absolute;
44+
top: 50%;
45+
transform: translateY(-50%);
46+
background: rgba(42, 42, 42, 0.8);
47+
padding: 8px;
48+
border-radius: 4px;
49+
z-index: 9999;
50+
font-size: large;
51+
font-weight: bold;
52+
text-align: center;
53+
}
54+
.split-label.left {
55+
left: 0;
56+
}
57+
.split-label.right {
58+
right: 0;
59+
}
60+
</style>
61+
<div id="cesiumContainer" class="fullSize">
62+
<div id="slider"></div>
63+
<div class="split-label left">3D Tiles<br />Gaussian splats</div>
64+
<div class="split-label right">3D Tiles<br />Mesh</div>
65+
</div>
66+
<div id="loadingOverlay"><h1>Loading...</h1></div>
67+
<div id="toolbar"></div>
68+
<script id="cesium_sandcastle_script">
69+
window.startup = async function (Cesium) {
70+
"use strict";
71+
//Sandcastle_Begin
72+
const viewer = new Cesium.Viewer("cesiumContainer", {
73+
terrain: Cesium.Terrain.fromWorldTerrain(),
74+
});
75+
76+
try {
77+
const left = await Cesium.Cesium3DTileset.fromIonAssetId(3591160);
78+
viewer.scene.primitives.add(left);
79+
left.splitDirection = Cesium.SplitDirection.LEFT;
80+
81+
viewer.zoomTo(
82+
left,
83+
new Cesium.HeadingPitchRange(
84+
Cesium.Math.toRadians(-50),
85+
Cesium.Math.toRadians(-20),
86+
100.0,
87+
),
88+
);
89+
90+
const right = await Cesium.Cesium3DTileset.fromIonAssetId(3443919);
91+
viewer.scene.primitives.add(right);
92+
right.splitDirection = Cesium.SplitDirection.RIGHT;
93+
} catch (error) {
94+
console.log(`Error loading tileset: ${error}`);
95+
}
96+
97+
// Sync the position of the slider with the split position
98+
const slider = document.getElementById("slider");
99+
viewer.scene.splitPosition = slider.offsetLeft / slider.parentElement.offsetWidth;
100+
101+
const handler = new Cesium.ScreenSpaceEventHandler(slider);
102+
103+
let moveActive = false;
104+
105+
function move(movement) {
106+
if (!moveActive) {
107+
return;
108+
}
109+
110+
const relativeOffset = movement.endPosition.x;
111+
const splitPosition =
112+
(slider.offsetLeft + relativeOffset) / slider.parentElement.offsetWidth;
113+
slider.style.left = `${100.0 * splitPosition}%`;
114+
viewer.scene.splitPosition = splitPosition;
115+
}
116+
117+
handler.setInputAction(function () {
118+
moveActive = true;
119+
}, Cesium.ScreenSpaceEventType.LEFT_DOWN);
120+
handler.setInputAction(function () {
121+
moveActive = true;
122+
}, Cesium.ScreenSpaceEventType.PINCH_START);
123+
124+
handler.setInputAction(move, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
125+
handler.setInputAction(move, Cesium.ScreenSpaceEventType.PINCH_MOVE);
126+
127+
handler.setInputAction(function () {
128+
moveActive = false;
129+
}, Cesium.ScreenSpaceEventType.LEFT_UP);
130+
handler.setInputAction(function () {
131+
moveActive = false;
132+
}, Cesium.ScreenSpaceEventType.PINCH_END);
133+
//Sandcastle_End
134+
};
135+
if (typeof Cesium !== "undefined") {
136+
window.startupCalled = true;
137+
window.startup(Cesium).catch((error) => {
138+
"use strict";
139+
console.error(error);
140+
});
141+
Sandcastle.finishedLoading();
142+
}
143+
</script>
144+
</body>
145+
</html>
53.3 KB
Loading

Apps/Sandcastle/gallery/3D Tiles Gaussian Splatting.html

Lines changed: 9 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
/>
1111
<meta
1212
name="description"
13-
content="View the same 3D Tiles power station dataset as a 3D Gaussian splatting tileset and a mesh tileset."
13+
content="A 3D Gaussian splatting (or Gaussian splats) dataset rendered with 3D Tiles."
1414
/>
1515
<meta name="cesium-sandcastle-labels" content="Showcases, 3D Tiles" />
1616
<title>Cesium Demo</title>
@@ -25,91 +25,30 @@
2525
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
2626
<style>
2727
@import url(../templates/bucket.css);
28-
29-
#slider {
30-
position: absolute;
31-
left: 50%;
32-
top: 0px;
33-
background-color: #d3d3d3;
34-
width: 5px;
35-
height: 100%;
36-
z-index: 9999;
37-
}
38-
39-
#slider:hover {
40-
cursor: ew-resize;
41-
}
4228
</style>
43-
<div id="cesiumContainer" class="fullSize">
44-
<div id="slider"></div>
45-
</div>
29+
<div id="cesiumContainer" class="fullSize"></div>
4630
<div id="loadingOverlay"><h1>Loading...</h1></div>
4731
<div id="toolbar"></div>
4832
<script id="cesium_sandcastle_script">
4933
window.startup = async function (Cesium) {
5034
"use strict";
5135
//Sandcastle_Begin
52-
const viewer = new Cesium.Viewer("cesiumContainer", {
53-
terrain: Cesium.Terrain.fromWorldTerrain(),
54-
});
36+
const viewer = new Cesium.Viewer("cesiumContainer");
5537

5638
try {
57-
const left = await Cesium.Cesium3DTileset.fromIonAssetId(3443920);
58-
viewer.scene.primitives.add(left);
59-
left.splitDirection = Cesium.SplitDirection.LEFT;
60-
39+
const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(3591124);
40+
viewer.scene.primitives.add(tileset);
6141
viewer.zoomTo(
62-
left,
42+
tileset,
6343
new Cesium.HeadingPitchRange(
64-
Cesium.Math.toRadians(-50),
65-
Cesium.Math.toRadians(-20),
66-
100.0,
44+
Cesium.Math.toRadians(0.0),
45+
Cesium.Math.toRadians(-15.0),
46+
200.0,
6747
),
6848
);
69-
70-
const right = await Cesium.Cesium3DTileset.fromIonAssetId(3443919);
71-
viewer.scene.primitives.add(right);
72-
right.splitDirection = Cesium.SplitDirection.RIGHT;
7349
} catch (error) {
7450
console.log(`Error loading tileset: ${error}`);
7551
}
76-
77-
// Sync the position of the slider with the split position
78-
const slider = document.getElementById("slider");
79-
viewer.scene.splitPosition = slider.offsetLeft / slider.parentElement.offsetWidth;
80-
81-
const handler = new Cesium.ScreenSpaceEventHandler(slider);
82-
83-
let moveActive = false;
84-
85-
function move(movement) {
86-
if (!moveActive) {
87-
return;
88-
}
89-
90-
const relativeOffset = movement.endPosition.x;
91-
const splitPosition =
92-
(slider.offsetLeft + relativeOffset) / slider.parentElement.offsetWidth;
93-
slider.style.left = `${100.0 * splitPosition}%`;
94-
viewer.scene.splitPosition = splitPosition;
95-
}
96-
97-
handler.setInputAction(function () {
98-
moveActive = true;
99-
}, Cesium.ScreenSpaceEventType.LEFT_DOWN);
100-
handler.setInputAction(function () {
101-
moveActive = true;
102-
}, Cesium.ScreenSpaceEventType.PINCH_START);
103-
104-
handler.setInputAction(move, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
105-
handler.setInputAction(move, Cesium.ScreenSpaceEventType.PINCH_MOVE);
106-
107-
handler.setInputAction(function () {
108-
moveActive = false;
109-
}, Cesium.ScreenSpaceEventType.LEFT_UP);
110-
handler.setInputAction(function () {
111-
moveActive = false;
112-
}, Cesium.ScreenSpaceEventType.PINCH_END);
11352
//Sandcastle_End
11453
};
11554
if (typeof Cesium !== "undefined") {
-35.4 KB
Loading

Apps/Sandcastle/gallery/Bing Maps Labels Only.html

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,36 @@
3838
#slider:hover {
3939
cursor: ew-resize;
4040
}
41+
42+
.split-label {
43+
position: absolute;
44+
top: 50%;
45+
transform: translateY(-50%);
46+
background: rgba(42, 42, 42, 0.8);
47+
padding: 8px;
48+
border-radius: 4px;
49+
z-index: 9999;
50+
font-size: large;
51+
font-weight: bold;
52+
text-align: center;
53+
}
54+
.split-label.left {
55+
left: 0;
56+
}
57+
.split-label.right {
58+
right: 0;
59+
}
4160
</style>
4261

4362
<div id="cesiumContainer" class="fullSize">
4463
<div id="slider"></div>
64+
<div class="split-label left">
65+
Bing Maps (labeled)<br />+<br />Washington Imagery
66+
</div>
67+
<div class="split-label right">
68+
Bing Maps (unlabeled)<br />+<br />Washington Imagery<br />+<br />Bing Maps (labels
69+
only)
70+
</div>
4571
</div>
4672
<div id="loadingOverlay"><h1>Loading...</h1></div>
4773
<div id="toolbar"></div>
@@ -105,6 +131,13 @@
105131
// Add a button to toggle the display of the Bing Maps Labels Only layer
106132
Sandcastle.addToggleButton("Show Bing Maps Labels Only", true, (checked) => {
107133
bingMapsLabelsOnly.show = checked;
134+
const rightLabel = document.querySelector(".split-label.right");
135+
if (checked) {
136+
rightLabel.innerHTML =
137+
"Bing Maps (unlabeled)<br />+<br />Washington Imagery<br />+<br />Bing Maps (labels only)";
138+
} else {
139+
rightLabel.innerHTML = "Bing Maps (unlabeled)<br />+<br />Washington Imagery";
140+
}
108141
});
109142

110143
// The remaining code synchronizes the position of the slider with the split position

0 commit comments

Comments
 (0)