3dtiles-inspector 0.2.11 → 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 +18 -0
- package/README.md +1 -1
- package/dist/inspector-assets/viewer/app.js +1743 -8426
- package/package.json +3 -4
- package/src/server/viewerHtml.js +53 -14
- 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/cameraController.js +153 -206
- 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",
|
|
@@ -55,9 +55,8 @@
|
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
57
|
"@sparkjsdev/spark": "2.1.0",
|
|
58
|
-
"3d-tiles-renderer": "0.4.
|
|
59
|
-
"3d-tiles-rendererjs-3dgs-plugin": "0.1.
|
|
60
|
-
"cesium": "1.140.0",
|
|
58
|
+
"3d-tiles-renderer": "0.4.27",
|
|
59
|
+
"3d-tiles-rendererjs-3dgs-plugin": "0.1.11",
|
|
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,11 +929,36 @@ 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>
|
|
907
946
|
</div>
|
|
908
947
|
</div>
|
|
948
|
+
<div class="toolbar-section">
|
|
949
|
+
<div class="toolbar-section-header">
|
|
950
|
+
<p class="toolbar-section-title">Coordinate</p>
|
|
951
|
+
</div>
|
|
952
|
+
<div class="coordinate-grid">
|
|
953
|
+
<label><span>Latitude</span><input id="latitude" type="number" step="any" value="0" /></label>
|
|
954
|
+
<label><span>Longitude</span><input id="longitude" type="number" step="any" value="0" /></label>
|
|
955
|
+
<label><span>Height</span><input id="height" type="number" step="any" value="0" /></label>
|
|
956
|
+
</div>
|
|
957
|
+
<div class="coordinate-actions">
|
|
958
|
+
<button id="move-camera-to-coordinate" class="wide" type="button">Move Camera</button>
|
|
959
|
+
<button id="move-tiles-to-coordinate" class="wide" type="button">Move Tiles</button>
|
|
960
|
+
</div>
|
|
961
|
+
</div>
|
|
909
962
|
<div class="toolbar-section">
|
|
910
963
|
<div class="toolbar-section-header">
|
|
911
964
|
<p class="toolbar-section-title">Transform</p>
|
|
@@ -937,20 +990,6 @@ function buildViewerHtml(viewerConfig) {
|
|
|
937
990
|
<button id="reset" class="full-span" type="button">Reset</button>
|
|
938
991
|
</div>
|
|
939
992
|
</div>
|
|
940
|
-
<div class="toolbar-section">
|
|
941
|
-
<div class="toolbar-section-header">
|
|
942
|
-
<p class="toolbar-section-title">Coordinate</p>
|
|
943
|
-
</div>
|
|
944
|
-
<div class="coordinate-grid">
|
|
945
|
-
<label><span>Latitude</span><input id="latitude" type="number" step="any" value="0" /></label>
|
|
946
|
-
<label><span>Longitude</span><input id="longitude" type="number" step="any" value="0" /></label>
|
|
947
|
-
<label><span>Height</span><input id="height" type="number" step="any" value="0" /></label>
|
|
948
|
-
</div>
|
|
949
|
-
<div class="coordinate-actions">
|
|
950
|
-
<button id="move-camera-to-coordinate" class="wide" type="button">Move Camera</button>
|
|
951
|
-
<button id="move-tiles-to-coordinate" class="wide" type="button">Move Tiles</button>
|
|
952
|
-
</div>
|
|
953
|
-
</div>
|
|
954
993
|
<div class="toolbar-section">
|
|
955
994
|
<div class="toolbar-section-header">
|
|
956
995
|
<p class="toolbar-section-title">LOD</p>
|
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() {
|