3dtiles-inspector 0.2.12 → 0.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +1 -1
- package/dist/inspector-assets/viewer/app.js +924 -7574
- package/package.json +1 -2
- package/src/server/viewerHtml.js +39 -0
- package/src/viewer/app.js +2 -0
- package/src/viewer/dom/elements.js +1 -0
- package/src/viewer/dom/events.js +3 -1
- package/src/viewer/dom/viewerToggles.js +18 -2
- package/src/viewer/scene/globeController.js +3 -2
- package/src/viewer/scene/tiles.js +9 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "3dtiles-inspector",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"description": "Inspect, align, and save local 3D Tiles root transforms in an interactive browser session.",
|
|
5
5
|
"author": "William Liu <lyz15972107087@gmail.com>",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -57,7 +57,6 @@
|
|
|
57
57
|
"@sparkjsdev/spark": "2.1.0",
|
|
58
58
|
"3d-tiles-renderer": "0.4.27",
|
|
59
59
|
"3d-tiles-rendererjs-3dgs-plugin": "0.1.11",
|
|
60
|
-
"cesium": "1.140.0",
|
|
61
60
|
"esbuild": "^0.25.11"
|
|
62
61
|
},
|
|
63
62
|
"dependencies": {
|
package/src/server/viewerHtml.js
CHANGED
|
@@ -654,6 +654,34 @@ function buildViewerHtml(viewerConfig) {
|
|
|
654
654
|
background: rgba(255, 255, 255, 0.92);
|
|
655
655
|
}
|
|
656
656
|
|
|
657
|
+
.token-field {
|
|
658
|
+
display: grid;
|
|
659
|
+
gap: 5px;
|
|
660
|
+
min-width: 0;
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
.token-field span {
|
|
664
|
+
min-width: 0;
|
|
665
|
+
font-size: 11px;
|
|
666
|
+
font-weight: 600;
|
|
667
|
+
letter-spacing: 0.04em;
|
|
668
|
+
text-transform: uppercase;
|
|
669
|
+
color: #5d738b;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
.token-field input {
|
|
673
|
+
width: 100%;
|
|
674
|
+
min-width: 0;
|
|
675
|
+
padding: 8px 10px;
|
|
676
|
+
border: 1px solid rgba(22, 50, 79, 0.16);
|
|
677
|
+
border-radius: 10px;
|
|
678
|
+
font: inherit;
|
|
679
|
+
font-size: 12px;
|
|
680
|
+
font-weight: 600;
|
|
681
|
+
color: #16324f;
|
|
682
|
+
background: rgba(255, 255, 255, 0.92);
|
|
683
|
+
}
|
|
684
|
+
|
|
657
685
|
.coordinate-actions {
|
|
658
686
|
display: grid;
|
|
659
687
|
grid-template-columns: 1fr;
|
|
@@ -901,6 +929,17 @@ function buildViewerHtml(viewerConfig) {
|
|
|
901
929
|
<p class="toolbar-section-title">Canvas</p>
|
|
902
930
|
</div>
|
|
903
931
|
<div class="coordinate-actions">
|
|
932
|
+
<label class="token-field">
|
|
933
|
+
<span>Cesium ion token</span>
|
|
934
|
+
<input
|
|
935
|
+
id="cesium-ion-token"
|
|
936
|
+
type="password"
|
|
937
|
+
autocomplete="off"
|
|
938
|
+
autocapitalize="off"
|
|
939
|
+
spellcheck="false"
|
|
940
|
+
placeholder="Required for terrain"
|
|
941
|
+
/>
|
|
942
|
+
</label>
|
|
904
943
|
<button id="terrain" class="wide" type="button">Terrain</button>
|
|
905
944
|
<button id="bounding-volume" class="wide" type="button">Bounding Volume</button>
|
|
906
945
|
<button id="move-to-tiles" type="button">Move To Tiles</button>
|
package/src/viewer/app.js
CHANGED
|
@@ -46,6 +46,7 @@ const viewerElements = getViewerElements();
|
|
|
46
46
|
const {
|
|
47
47
|
boundingVolumeButton,
|
|
48
48
|
cacheBytesValueEl,
|
|
49
|
+
cesiumIonTokenInput,
|
|
49
50
|
cropSectionEl,
|
|
50
51
|
geometricErrorLayerScaleInput,
|
|
51
52
|
geometricErrorLayerValueEl,
|
|
@@ -142,6 +143,7 @@ const globeController = createGlobeController({
|
|
|
142
143
|
|
|
143
144
|
const viewerToggles = createViewerToggles({
|
|
144
145
|
boundingVolumeButton,
|
|
146
|
+
cesiumIonTokenInput,
|
|
145
147
|
globeController,
|
|
146
148
|
setStatus,
|
|
147
149
|
terrainButton,
|
|
@@ -4,6 +4,7 @@ export function getViewerElements() {
|
|
|
4
4
|
return {
|
|
5
5
|
boundingVolumeButton: document.getElementById('bounding-volume'),
|
|
6
6
|
cacheBytesValueEl: document.getElementById('cache-bytes-value'),
|
|
7
|
+
cesiumIonTokenInput: document.getElementById('cesium-ion-token'),
|
|
7
8
|
cropCountValueEl: document.getElementById('crop-count-value'),
|
|
8
9
|
cropListEl: document.getElementById('crop-list'),
|
|
9
10
|
cropSectionEl: document.getElementById('crop-section'),
|
package/src/viewer/dom/events.js
CHANGED
|
@@ -156,7 +156,9 @@ export function bindViewerEvents({
|
|
|
156
156
|
handlers.toggleToolbarVisibility,
|
|
157
157
|
);
|
|
158
158
|
terrainButton.addEventListener('click', () => {
|
|
159
|
-
handlers.setTerrainEnabled(!getTerrainEnabled())
|
|
159
|
+
if (!handlers.setTerrainEnabled(!getTerrainEnabled())) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
160
162
|
setStatus(
|
|
161
163
|
getTerrainEnabled()
|
|
162
164
|
? 'Terrain enabled with Cesium World Terrain.'
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export function createViewerToggles({
|
|
2
2
|
boundingVolumeButton,
|
|
3
|
+
cesiumIonTokenInput,
|
|
3
4
|
globeController,
|
|
4
5
|
setStatus,
|
|
5
6
|
terrainButton,
|
|
@@ -19,8 +20,23 @@ export function createViewerToggles({
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
function setTerrainEnabled(enabled) {
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
try {
|
|
24
|
+
const cesiumIonToken = cesiumIonTokenInput?.value?.trim() || '';
|
|
25
|
+
if (enabled && !cesiumIonToken) {
|
|
26
|
+
cesiumIonTokenInput?.focus();
|
|
27
|
+
setStatus('Enter a Cesium ion token to enable terrain.', true);
|
|
28
|
+
syncTerrainButton();
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
globeController.setTerrainEnabled(enabled, { cesiumIonToken });
|
|
33
|
+
syncTerrainButton();
|
|
34
|
+
return true;
|
|
35
|
+
} catch (err) {
|
|
36
|
+
setStatus(err && err.message ? err.message : String(err), true);
|
|
37
|
+
syncTerrainButton();
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
24
40
|
}
|
|
25
41
|
|
|
26
42
|
function syncBoundingVolumeButton() {
|
|
@@ -11,11 +11,12 @@ export function createGlobeController({
|
|
|
11
11
|
renderer,
|
|
12
12
|
}) {
|
|
13
13
|
let tiles = null;
|
|
14
|
-
let terrainEnabled =
|
|
14
|
+
let terrainEnabled = false;
|
|
15
15
|
|
|
16
|
-
function setTerrainEnabled(enabled) {
|
|
16
|
+
function setTerrainEnabled(enabled, { cesiumIonToken = '' } = {}) {
|
|
17
17
|
const globeTileOptions = {
|
|
18
18
|
camera,
|
|
19
|
+
cesiumIonToken,
|
|
19
20
|
preprocessURL: normalizeLocalResourceUrl,
|
|
20
21
|
renderer,
|
|
21
22
|
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Ion } from 'cesium';
|
|
2
1
|
import { TilesRenderer } from '3d-tiles-renderer';
|
|
3
2
|
import { ImplicitTilingPlugin } from '3d-tiles-renderer/src/core/plugins/ImplicitTilingPlugin.js';
|
|
4
3
|
import { CesiumIonAuthPlugin } from '3d-tiles-renderer/src/three/plugins/CesiumIonAuthPlugin.js';
|
|
@@ -22,7 +21,6 @@ const SATELLITE_IMAGERY = {
|
|
|
22
21
|
levels: 18,
|
|
23
22
|
};
|
|
24
23
|
const CESIUM_ION_TERRAIN = {
|
|
25
|
-
apiToken: Ion.defaultAccessToken,
|
|
26
24
|
assetId: 1,
|
|
27
25
|
};
|
|
28
26
|
|
|
@@ -73,13 +71,21 @@ export function createImageryGlobeTiles(options) {
|
|
|
73
71
|
}
|
|
74
72
|
|
|
75
73
|
export function createTerrainGlobeTiles(options) {
|
|
74
|
+
const apiToken =
|
|
75
|
+
typeof options.cesiumIonToken === 'string'
|
|
76
|
+
? options.cesiumIonToken.trim()
|
|
77
|
+
: '';
|
|
78
|
+
if (!apiToken) {
|
|
79
|
+
throw new Error('Cesium ion token is required to enable terrain.');
|
|
80
|
+
}
|
|
81
|
+
|
|
76
82
|
const next = new TilesRenderer();
|
|
77
83
|
const satelliteOverlay = createSatelliteOverlay(options.preprocessURL);
|
|
78
84
|
next.downloadQueue.maxJobs = 8;
|
|
79
85
|
next.parseQueue.maxJobs = 2;
|
|
80
86
|
next.registerPlugin(
|
|
81
87
|
new CesiumIonAuthPlugin({
|
|
82
|
-
apiToken
|
|
88
|
+
apiToken,
|
|
83
89
|
assetId: String(CESIUM_ION_TERRAIN.assetId),
|
|
84
90
|
autoRefreshToken: true,
|
|
85
91
|
assetTypeHandler: (type, tilesRenderer) => {
|