Skip to content

Commit 0158ca0

Browse files
committed
Merge remote-tracking branch 'origin/main' into quadtree-performance
# Conflicts: # CHANGES.md
2 parents f8ac577 + 85477fc commit 0158ca0

File tree

117 files changed

+7492
-3766
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

+7492
-3766
lines changed

.github/workflows/prod.yml

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
name: prod
2-
on:
2+
on:
33
push:
4-
branches:
5-
- 'cesium.com'
4+
branches:
5+
- "cesium.com"
66
jobs:
77
lint:
88
runs-on: ubuntu-latest
@@ -11,7 +11,7 @@ jobs:
1111
- name: install node 22
1212
uses: actions/setup-node@v5
1313
with:
14-
node-version: '22'
14+
node-version: "22"
1515
- name: npm install
1616
run: npm install
1717
- name: lint *.js
@@ -36,13 +36,17 @@ jobs:
3636
- name: install node 22
3737
uses: actions/setup-node@v5
3838
with:
39-
node-version: '22'
39+
node-version: "22"
4040
- name: npm install
4141
run: npm install
4242
- name: build website release
4343
run: npm run website-release
4444
- name: build apps
4545
run: npm run build-apps
46+
- name: build types
47+
run: npm run build-ts
48+
- name: build prod sandcastle
49+
run: npm run build-prod -w packages/sandcastle -- -l warn
4650
- name: deploy to cesium.com
4751
if: ${{ env.AWS_ACCESS_KEY_ID != '' }}
4852
run: |
@@ -51,4 +55,4 @@ jobs:
5155
aws s3 sync Build/release/ s3://cesium-website/cesiumjs/releases/$(cat package.json | jq -r '.version' | sed 's/\.0$//')/ --cache-control "public, max-age=1800" --delete
5256
aws s3 sync Build/Documentation/ s3://cesium-website/cesiumjs/ref-doc/ --cache-control "public, max-age=1800" --delete
5357
aws s3 sync Build/CesiumViewer/ s3://cesium-website/cesiumjs/cesium-viewer/ --cache-control "public, max-age=1800" --delete
54-
aws s3 sync Build/Sandcastle/ s3://cesium-sandcastle-website/ --cache-control "public, max-age=1800" --delete
58+
aws s3 sync Build/Sandcastle2/ s3://cesium-sandcastle-website/ --cache-control "public, max-age=1800" --delete
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6+
<meta
7+
name="viewport"
8+
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
9+
/>
10+
<meta
11+
name="description"
12+
content="Imagery tiles from Google Maps with additional parameters to create overlays and custom styles."
13+
/>
14+
<meta name="cesium-sandcastle-labels" content="Beginner, Showcases" />
15+
<title>Cesium Demo</title>
16+
<script type="text/javascript" src="../Sandcastle-header.js"></script>
17+
<script type="module" src="../load-cesium-es6.js"></script>
18+
</head>
19+
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
20+
<style>
21+
@import url(../templates/bucket.css);
22+
</style>
23+
<div id="cesiumContainer" class="fullSize"></div>
24+
<div id="loadingOverlay"><h1>Loading...</h1></div>
25+
<div id="toolbar"></div>
26+
<script id="cesium_sandcastle_script">
27+
window.startup = async function (Cesium) {
28+
"use strict";
29+
//Sandcastle_Begin
30+
const assetId = 3830184;
31+
32+
const base = Cesium.ImageryLayer.fromProviderAsync(
33+
Cesium.Google2DImageryProvider.fromIonAssetId({
34+
assetId,
35+
mapType: "satellite",
36+
}),
37+
);
38+
39+
const overlay = Cesium.ImageryLayer.fromProviderAsync(
40+
Cesium.Google2DImageryProvider.fromIonAssetId({
41+
assetId,
42+
overlayLayerType: "layerRoadmap",
43+
styles: [
44+
{
45+
stylers: [{ hue: "#00ffe6" }, { saturation: -20 }],
46+
},
47+
{
48+
featureType: "road",
49+
elementType: "geometry",
50+
stylers: [{ lightness: 100 }, { visibility: "simplified" }],
51+
},
52+
],
53+
}),
54+
);
55+
56+
const viewer = new Cesium.Viewer("cesiumContainer", {
57+
animation: false,
58+
baseLayer: false,
59+
baseLayerPicker: false,
60+
geocoder: Cesium.IonGeocodeProviderType.GOOGLE,
61+
timeline: false,
62+
sceneModePicker: false,
63+
navigationHelpButton: false,
64+
homeButton: false,
65+
terrainProvider: await Cesium.CesiumTerrainProvider.fromIonAssetId(1),
66+
});
67+
viewer.geocoder.viewModel.keepExpanded = true;
68+
69+
viewer.imageryLayers.add(base);
70+
viewer.imageryLayers.add(overlay);
71+
72+
viewer.scene.camera.flyTo({
73+
duration: 0,
74+
destination: new Cesium.Rectangle.fromDegrees(
75+
//Philly
76+
-75.280266,
77+
39.867004,
78+
-74.955763,
79+
40.137992,
80+
),
81+
});
82+
//Sandcastle_End
83+
Sandcastle.finishedLoading();
84+
};
85+
if (typeof Cesium !== "undefined") {
86+
window.startupCalled = true;
87+
window.startup(Cesium).catch((error) => {
88+
"use strict";
89+
console.error(error);
90+
});
91+
}
92+
</script>
93+
</body>
94+
</html>
29 KB
Loading
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6+
<meta
7+
name="viewport"
8+
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
9+
/>
10+
<meta name="description" content="Global imagery data from Google Maps." />
11+
<meta name="cesium-sandcastle-labels" content="Beginner, Showcases" />
12+
<title>Cesium Demo</title>
13+
<script type="text/javascript" src="../Sandcastle-header.js"></script>
14+
<script type="module" src="../load-cesium-es6.js"></script>
15+
</head>
16+
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
17+
<style>
18+
@import url(../templates/bucket.css);
19+
</style>
20+
<div id="cesiumContainer" class="fullSize"></div>
21+
<div id="loadingOverlay"><h1>Loading...</h1></div>
22+
<div id="toolbar"></div>
23+
<script id="cesium_sandcastle_script">
24+
window.startup = async function (Cesium) {
25+
"use strict";
26+
//Sandcastle_Begin
27+
const assetId = 3830184;
28+
29+
const google = Cesium.ImageryLayer.fromProviderAsync(
30+
Cesium.IonImageryProvider.fromAssetId(assetId),
31+
);
32+
33+
const viewer = new Cesium.Viewer("cesiumContainer", {
34+
animation: false,
35+
baseLayer: false,
36+
baseLayerPicker: false,
37+
geocoder: Cesium.IonGeocodeProviderType.GOOGLE,
38+
timeline: false,
39+
sceneModePicker: false,
40+
navigationHelpButton: false,
41+
homeButton: false,
42+
terrainProvider: await Cesium.CesiumTerrainProvider.fromIonAssetId(1),
43+
});
44+
viewer.geocoder.viewModel.keepExpanded = true;
45+
46+
viewer.imageryLayers.add(google);
47+
48+
viewer.scene.camera.flyTo({
49+
duration: 0,
50+
destination: new Cesium.Rectangle.fromDegrees(
51+
//Philly
52+
-75.280266,
53+
39.867004,
54+
-74.955763,
55+
40.137992,
56+
),
57+
}); //Sandcastle_End
58+
Sandcastle.finishedLoading();
59+
};
60+
if (typeof Cesium !== "undefined") {
61+
window.startupCalled = true;
62+
window.startup(Cesium).catch((error) => {
63+
"use strict";
64+
console.error(error);
65+
});
66+
}
67+
</script>
68+
</body>
69+
</html>
20.1 KB
Loading
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
6+
<meta
7+
name="viewport"
8+
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"
9+
/>
10+
<meta name="description" content="Global imagery assets available from Cesium ion." />
11+
<meta name="cesium-sandcastle-labels" content="Beginner, Showcases" />
12+
<title>Cesium Demo</title>
13+
<script type="text/javascript" src="../Sandcastle-header.js"></script>
14+
<script type="module" src="../load-cesium-es6.js"></script>
15+
</head>
16+
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html">
17+
<style>
18+
@import url(../templates/bucket.css);
19+
</style>
20+
<div id="cesiumContainer" class="fullSize"></div>
21+
<div id="loadingOverlay"><h1>Loading...</h1></div>
22+
<div id="toolbar"></div>
23+
<script id="cesium_sandcastle_script">
24+
window.startup = async function (Cesium) {
25+
"use strict";
26+
//Sandcastle_Begin
27+
const viewer = new Cesium.Viewer("cesiumContainer", {
28+
animation: false,
29+
baseLayer: false,
30+
baseLayerPicker: false,
31+
geocoder: Cesium.IonGeocodeProviderType.GOOGLE,
32+
timeline: false,
33+
sceneModePicker: false,
34+
navigationHelpButton: false,
35+
homeButton: false,
36+
terrainProvider: await Cesium.CesiumTerrainProvider.fromIonAssetId(1),
37+
});
38+
viewer.geocoder.viewModel.keepExpanded = true;
39+
40+
const menuOptions = [];
41+
42+
const dropdownOptions = [
43+
{ label: "Google Maps 2D Contour", assetId: 3830186 },
44+
{ label: "Google Maps 2D Labels Only", assetId: 3830185 },
45+
{ label: "Google Maps 2D Roadmap", assetId: 3830184 },
46+
{ label: "Google Maps 2D Satellite", assetId: 3830182 },
47+
{ label: "Google Maps 2D Satellite with Labels", assetId: 3830183 },
48+
{ label: "Bing Maps Aerial", assetId: 2 },
49+
{ label: "Bing Maps Aerial with Labels", assetId: 3 },
50+
{ label: "Bing Maps Road", assetId: 4 },
51+
{ label: "Bing Maps Labels Only", assetId: 2411391 },
52+
{ label: "Sentinel-2", assetId: 3954 },
53+
];
54+
55+
function showLayer(assetId) {
56+
viewer.imageryLayers.removeAll(true);
57+
const layer = Cesium.ImageryLayer.fromProviderAsync(
58+
Cesium.IonImageryProvider.fromAssetId(assetId),
59+
);
60+
viewer.imageryLayers.add(layer);
61+
}
62+
63+
dropdownOptions.forEach((opt) => {
64+
const option = {
65+
text: opt.label,
66+
onselect: function () {
67+
showLayer(opt.assetId);
68+
},
69+
};
70+
menuOptions.push(option);
71+
});
72+
73+
Sandcastle.addToolbarMenu(menuOptions);
74+
75+
showLayer(3830186);
76+
77+
viewer.scene.camera.flyTo({
78+
duration: 0,
79+
destination: new Cesium.Rectangle.fromDegrees(
80+
//Philly
81+
-75.280266,
82+
39.867004,
83+
-74.955763,
84+
40.137992,
85+
),
86+
}); //Sandcastle_End
87+
Sandcastle.finishedLoading();
88+
};
89+
if (typeof Cesium !== "undefined") {
90+
window.startupCalled = true;
91+
window.startup(Cesium).catch((error) => {
92+
"use strict";
93+
console.error(error);
94+
});
95+
}
96+
</script>
97+
</body>
98+
</html>
7.91 KB
Loading

Apps/Sandcastle/gallery/Voxel Picking.html

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,17 @@
8080
this.names = ["color"];
8181
this.types = [Cesium.MetadataType.VEC4];
8282
this.componentTypes = [Cesium.MetadataComponentType.FLOAT32];
83-
this._levelCount = 3;
83+
this.availableLevels = 3;
8484
this.globalTransform = globalTransform;
8585
}
8686

8787
ProceduralMultiTileVoxelProvider.prototype.requestData = function (options) {
8888
const { tileLevel, tileX, tileY, tileZ } = options;
8989

90-
if (tileLevel >= this._levelCount) {
91-
return Promise.reject(`No tiles available beyond level ${this._levelCount}`);
90+
if (tileLevel >= this.availableLevels) {
91+
return Promise.reject(
92+
`No tiles available beyond level ${this.availableLevels - 1}`,
93+
);
9294
}
9395

9496
const dimensions = this.dimensions;
@@ -174,6 +176,7 @@
174176
customShader: customShader,
175177
});
176178
voxelPrimitive.nearestSampling = true;
179+
voxelPrimitive.stepSize = 0.7;
177180

178181
viewer.scene.primitives.add(voxelPrimitive);
179182
camera.flyToBoundingSphere(voxelPrimitive.boundingSphere, {

Apps/Sandcastle/gallery/Voxels.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,14 @@
123123
this.componentTypes = [Cesium.MetadataComponentType.FLOAT32];
124124
this.globalTransform = globalTransform;
125125

126-
this._levelCount = 2;
127-
this._allVoxelData = new Array(this._levelCount);
126+
this.availableLevels = 2;
127+
this._allVoxelData = new Array(this.availableLevels);
128128

129129
const allVoxelData = this._allVoxelData;
130130
const channelCount = Cesium.MetadataType.getComponentCount(this.types[0]);
131131
const { dimensions } = this;
132132

133-
for (let level = 0; level < this._levelCount; level++) {
133+
for (let level = 0; level < this.availableLevels; level++) {
134134
const dimAtLevel = Math.pow(2, level);
135135
const voxelCountX = dimensions.x * dimAtLevel;
136136
const voxelCountY = dimensions.y * dimAtLevel;
@@ -158,9 +158,9 @@
158158
ProceduralMultiTileVoxelProvider.prototype.requestData = function (options) {
159159
const { tileLevel, tileX, tileY, tileZ } = options;
160160

161-
if (tileLevel >= this._levelCount) {
161+
if (tileLevel >= this.availableLevels) {
162162
return Promise.reject(
163-
`No tiles available beyond level ${this._levelCount - 1}`,
163+
`No tiles available beyond level ${this.availableLevels - 1}`,
164164
);
165165
}
166166

0 commit comments

Comments
 (0)