@splnlss/3d-story-viewer 0.6.0 → 0.8.0

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.
Files changed (38) hide show
  1. package/README.md +11 -0
  2. package/build/assets/viewer/{geojson.worker-QNi-d8kU.js → geojson.worker-D3uq_RbR.js} +1 -1
  3. package/build/assets/viewer/spark-a62bdfe36d20.wasm +0 -0
  4. package/build/assets/viewer/{spark-worker-5ec8a483b87c.js → spark-worker-c1a6c013b888.js} +194 -43
  5. package/build/computeElevation.cjs +1 -1
  6. package/build/computeElevation.js +2 -2
  7. package/build/index-D87IZDc6.cjs +1 -0
  8. package/build/{index-CsZhc21b.js → index-Hz3jbrou.js} +1302 -829
  9. package/build/main-Bdopx4KL.js +15819 -0
  10. package/build/main-CaYKxosA.cjs +1 -0
  11. package/build/spark.module-B1FWS-vq.js +18168 -0
  12. package/build/spark.module-BUdzSHba.cjs +1 -0
  13. package/build/types/src/viewer/ContentLayer/GaussianSplatLayer.d.ts +4 -6
  14. package/build/types/src/viewer/ContentLayer/MeshLayer.d.ts +1 -1
  15. package/build/types/src/viewer/ContentLayer/TilesLayer.d.ts +4 -2
  16. package/build/types/src/viewer/ContentLayer/gaussianSplatUtils.d.ts +2 -1
  17. package/build/types/src/viewer/ContentLayer/index.d.ts +5 -3
  18. package/build/types/src/viewer/EnvironmentControls.d.ts +18 -12
  19. package/build/types/src/viewer/GlobeControls.d.ts +9 -6
  20. package/build/types/src/viewer/GlobeManager.d.ts +2 -1
  21. package/build/types/src/viewer/Sky.d.ts +5 -2
  22. package/build/types/src/viewer/TransitionControls.d.ts +2 -1
  23. package/build/types/src/viewer/index.d.ts +55 -19
  24. package/build/types/src/viewer/keyboardMovement.d.ts +4 -0
  25. package/build/types/src/viewer/loadSpark.d.ts +1 -0
  26. package/build/types/src/viewer/mods.d.ts +1 -0
  27. package/build/types/src/viewer/shaders/chunks.d.ts +1 -0
  28. package/build/types/src/viewer/surfacePicking.d.ts +31 -0
  29. package/build/types/src/viewer/utils.d.ts +6 -4
  30. package/build/types/src/workers/geojson.worker.d.ts +2 -2
  31. package/build/types/utils/elevation/gltf.d.ts +2 -1
  32. package/build/viewer.cjs +1 -1
  33. package/build/viewer.js +5 -28038
  34. package/package.json +18 -16
  35. package/build/assets/viewer/spark-8b93f8c03d97.wasm +0 -0
  36. package/build/assets/viewer/spark-old-worker-932b4a2c87ca.js +0 -8168
  37. package/build/assets/viewer/spark-worker-015de49d2d00.wasm +0 -0
  38. package/build/index-wUFLgXbb.cjs +0 -1
@@ -7,13 +7,11 @@ export class GaussianSplatLayer extends ContentLayer {
7
7
  loadState: string;
8
8
  loadAttempt: number;
9
9
  abortController: AbortController;
10
- splatMesh: SplatMesh;
11
- visible: boolean;
12
- transformMatrix: any;
10
+ splatMesh: any;
11
+ transformMatrix: import("three").Matrix4;
13
12
  load(): Promise<void>;
14
- createPagedMesh(): SplatMesh;
15
- createDirectMesh(attempt: any): Promise<SplatMesh>;
13
+ createPagedMesh(spark: any): any;
14
+ createDirectMesh(spark: any, attempt: any): Promise<any>;
16
15
  disposeMesh(mesh: any): void;
17
16
  }
18
17
  import { ContentLayer } from '.';
19
- import { SplatMesh } from '@sparkjsdev/spark';
@@ -1,6 +1,6 @@
1
1
  export class MeshLayer extends ContentLayer {
2
2
  constructor(url: any, options?: {}, callbacks?: {});
3
3
  isMeshLayer: boolean;
4
- mesh: any;
4
+ mesh: import("three").Group<import("three").Object3DEventMap>;
5
5
  }
6
6
  import { ContentLayer } from '.';
@@ -4,9 +4,11 @@ export class TilesLayer extends ContentLayer {
4
4
  firstSet: any;
5
5
  camera: any;
6
6
  renderer: any;
7
- dracoLoader: any;
8
- ktx2loader: any;
7
+ dracoLoader: DRACOLoader;
8
+ ktx2loader: KTX2Loader;
9
9
  tiles: TilesRenderer<import("3d-tiles-renderer").TilesRendererEventMap>;
10
10
  }
11
11
  import { ContentLayer } from '.';
12
+ import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
13
+ import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js';
12
14
  import { TilesRenderer } from '3d-tiles-renderer';
@@ -1,2 +1,3 @@
1
1
  export function validateGaussianSplatLayerDefinition(definition: any): any;
2
- export function makeGaussianSplatTransform(transform: any): any;
2
+ export function makeGaussianSplatTransform(transform: any): Matrix4;
3
+ import { Matrix4 } from 'three';
@@ -1,11 +1,13 @@
1
- export class ContentLayer {
1
+ export class ContentLayer extends Object3D<import("three").Object3DEventMap> {
2
+ constructor();
2
3
  type: string;
3
4
  isContentLayer: boolean;
5
+ /** @type {string | null} */
6
+ contentLayerId: string | null;
4
7
  labels: Set<any>;
5
8
  setLabels(labels: any): void;
6
9
  setEnabled(enabled: any): void;
7
- visible: any;
8
10
  update(): void;
9
- dispose(): void;
10
11
  disposeObjectResources(root?: this): void;
11
12
  }
13
+ import { Object3D } from 'three';
@@ -3,7 +3,7 @@ export const DRAG: 1;
3
3
  export const ROTATE: 2;
4
4
  export const ZOOM: 3;
5
5
  export const WAITING: 4;
6
- export class EnvironmentControls {
6
+ export class EnvironmentControls extends EventDispatcher<any> {
7
7
  constructor(scene?: any, camera?: any, domElement?: any, tilesRenderer?: any);
8
8
  set enabled(v: boolean);
9
9
  get enabled(): boolean;
@@ -25,7 +25,7 @@ export class EnvironmentControls {
25
25
  adjustHeight: boolean;
26
26
  enableDamping: boolean;
27
27
  dampingFactor: number;
28
- fallbackPlane: any;
28
+ fallbackPlane: Plane;
29
29
  useFallbackPlane: boolean;
30
30
  scaleZoomOrientationAtEdges: boolean;
31
31
  autoAdjustCameraRotation: boolean;
@@ -33,21 +33,21 @@ export class EnvironmentControls {
33
33
  pointerTracker: any;
34
34
  needsUpdate: boolean;
35
35
  actionHeightOffset: number;
36
- pivotPoint: any;
36
+ pivotPoint: Vector3;
37
37
  zoomDirectionSet: boolean;
38
38
  zoomPointSet: boolean;
39
- zoomDirection: any;
40
- zoomPoint: any;
39
+ zoomDirection: Vector3;
40
+ zoomPoint: Vector3;
41
41
  zoomDelta: number;
42
- rotationInertiaPivot: any;
43
- rotationInertia: any;
44
- dragInertia: any;
42
+ rotationInertiaPivot: Vector3;
43
+ rotationInertia: Vector2;
44
+ dragInertia: Vector3;
45
45
  inertiaTargetDistance: number;
46
46
  inertiaStableFrames: number;
47
47
  pivotMesh: any;
48
- raycaster: any;
49
- up: any;
50
- clock: any;
48
+ raycaster: Raycaster;
49
+ up: Vector3;
50
+ clock: Clock;
51
51
  _detachCallback: () => void;
52
52
  _upInitialized: boolean;
53
53
  _lastUsedState: number;
@@ -71,7 +71,7 @@ export class EnvironmentControls {
71
71
  _updateZoom(): void;
72
72
  _updateZoomDirection(): void;
73
73
  _updateZoomPoint(): boolean;
74
- _getPointBelowCamera(point?: any, up?: any): any;
74
+ _getPointBelowCamera(point?: any, up?: Vector3): any;
75
75
  _updatePosition(deltaTime: any): void;
76
76
  _updateRotation(deltaTime: any): void;
77
77
  _applyRotation(x: any, y: any, pivotPoint: any): void;
@@ -80,3 +80,9 @@ export class EnvironmentControls {
80
80
  _alignCameraUp(up: any, alpha?: number): void;
81
81
  _clampRotation(up: any): void;
82
82
  }
83
+ import { EventDispatcher } from 'three';
84
+ import { Plane } from 'three';
85
+ import { Vector3 } from 'three';
86
+ import { Vector2 } from 'three';
87
+ import { Raycaster } from 'three';
88
+ import { Clock } from 'three';
@@ -1,17 +1,17 @@
1
1
  export class GlobeControls extends EnvironmentControls {
2
- get tilesGroup(): any;
3
- get ellipsoidFrame(): any;
2
+ get tilesGroup(): Matrix4;
3
+ get ellipsoidFrame(): Matrix4;
4
4
  get ellipsoidFrameInverse(): any;
5
5
  isGlobeControls: boolean;
6
6
  _dragMode: number;
7
7
  _rotationMode: number;
8
8
  nearMargin: number;
9
9
  farMargin: number;
10
- globeInertia: any;
10
+ globeInertia: Quaternion;
11
11
  globeInertiaFactor: number;
12
12
  ellipsoid: Ellipsoid;
13
- ellipsoidGroup: any;
14
- _ellipsoidFrameInverse: any;
13
+ ellipsoidGroup: Group<import("three").Object3DEventMap>;
14
+ _ellipsoidFrameInverse: Matrix4;
15
15
  setEllipsoid(ellipsoid: any, ellipsoidGroup: any): void;
16
16
  getVectorToCenter(target: any): any;
17
17
  getDistanceToCenter(): any;
@@ -27,4 +27,7 @@ export class GlobeControls extends EnvironmentControls {
27
27
  _isNearControls(): boolean;
28
28
  }
29
29
  import { EnvironmentControls } from './EnvironmentControls.js';
30
- import { Ellipsoid } from '../../node_modules/3d-tiles-renderer/src/three/renderer/math/Ellipsoid.js';
30
+ import { Matrix4 } from 'three';
31
+ import { Quaternion } from 'three';
32
+ import { Ellipsoid } from '3d-tiles-renderer';
33
+ import { Group } from 'three';
@@ -4,7 +4,7 @@ export class GlobeManager extends EventDispatcher {
4
4
  camera: any;
5
5
  renderer: any;
6
6
  tiles: TilesRenderer<import("3d-tiles-renderer").TilesRendererEventMap>;
7
- dracoLoader: any;
7
+ dracoLoader: DRACOLoader;
8
8
  apiToken: any;
9
9
  googleMapsToken: any;
10
10
  initTiles(): void;
@@ -13,3 +13,4 @@ export class GlobeManager extends EventDispatcher {
13
13
  }
14
14
  import { EventDispatcher } from '../modules/EventDispatcher';
15
15
  import { TilesRenderer } from '3d-tiles-renderer';
16
+ import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
@@ -1,6 +1,9 @@
1
- export class Sky {
1
+ export class Sky extends Mesh<import("three").BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>, import("three").Material<import("three").MaterialEventMap> | import("three").Material<import("three").MaterialEventMap>[], import("three").Object3DEventMap> {
2
+ constructor();
2
3
  isSky: boolean;
3
4
  type: string;
4
- material: any;
5
+ material: ShaderMaterial;
5
6
  setSurfaceUp(v: any): void;
6
7
  }
8
+ import { Mesh } from 'three';
9
+ import { ShaderMaterial } from 'three';
@@ -1,7 +1,7 @@
1
1
  export class TransitionControls extends EventDispatcher {
2
2
  constructor(camera: any);
3
3
  camera: any;
4
- lookAt: any;
4
+ lookAt: Vector3;
5
5
  cameraTween: any;
6
6
  lookAtTween: any;
7
7
  activeTransition: {
@@ -17,3 +17,4 @@ export class TransitionControls extends EventDispatcher {
17
17
  cameraUpTween: any;
18
18
  }
19
19
  import { EventDispatcher } from '../modules/EventDispatcher';
20
+ import { Vector3 } from 'three';
@@ -24,18 +24,18 @@ declare class Viewer extends EventDispatcher {
24
24
  isViewer: boolean;
25
25
  type: string;
26
26
  disposed: boolean;
27
- sparkRenderer: SparkRenderer;
27
+ sparkRenderer: any;
28
28
  transparentBackground: boolean;
29
29
  state: StateDispatcher;
30
- renderer: any;
31
- css2DRenderer: any;
32
- clock: any;
33
- camera: any;
34
- cameraForward: any;
35
- cameraRight: any;
36
- cameraUp: any;
37
- scene: any;
38
- content: any;
30
+ renderer: WebGLRenderer;
31
+ css2DRenderer: CSS2DRenderer;
32
+ clock: Clock;
33
+ camera: PerspectiveCamera;
34
+ cameraForward: Vector3;
35
+ cameraRight: Vector3;
36
+ cameraUp: Vector3;
37
+ scene: Scene<import("three").Object3DEventMap>;
38
+ content: Group<import("three").Object3DEventMap>;
39
39
  topLayerIndex: number;
40
40
  enabledLayers: any[];
41
41
  labels: Map<any, any>;
@@ -48,9 +48,13 @@ declare class Viewer extends EventDispatcher {
48
48
  cameraCoords: ViewerCoords;
49
49
  /** @type {ViewerCoords} */
50
50
  pointerCoords: ViewerCoords;
51
- pointerXYZ: any;
51
+ pointerXYZ: Vector3;
52
52
  keysDown: {};
53
- keysEnabled: boolean;
53
+ _keysEnabled: boolean;
54
+ /** Camera-relative translation speed in WGS84 ECEF metres/second. */
55
+ movementSpeed: number;
56
+ /** Dimensionless multiplier while BOOST is held. */
57
+ boostMultiplier: number;
54
58
  movementKeys: {
55
59
  BOOST: string[];
56
60
  FRONT: string[];
@@ -73,18 +77,23 @@ declare class Viewer extends EventDispatcher {
73
77
  _onKeyUp: (event: any) => void;
74
78
  _onResize: (event: any) => void;
75
79
  sky: Sky;
76
- pointerRaycaster: any;
80
+ pointerRaycaster: Raycaster;
77
81
  _onPointerMove: (event: any) => void;
82
+ set keysEnabled(enabled: boolean);
83
+ get keysEnabled(): boolean;
78
84
  updateMovementState(): void;
79
85
  /**
80
86
  * @param {number} lon
81
87
  * @param {number} lat
82
- * @returns {{ lon: number, lat: number, alt: number }}
88
+ * @param {import('./surfacePicking.js').SurfacePickOptions} [options]
89
+ * @returns {{ lon: number, lat: number, alt: number, source: 'splats' | 'globe' | 'content', layerId: string | null }} WGS84 degrees and ellipsoidal meters, from loaded surfaces only.
83
90
  */
84
- getElevation(lon: number, lat: number): {
91
+ getElevation(lon: number, lat: number, options?: import("./surfacePicking.js").SurfacePickOptions): {
85
92
  lon: number;
86
93
  lat: number;
87
94
  alt: number;
95
+ source: "splats" | "globe" | "content";
96
+ layerId: string | null;
88
97
  };
89
98
  /**
90
99
  * @param {[number, number, number?][]} coords
@@ -94,15 +103,16 @@ declare class Viewer extends EventDispatcher {
94
103
  setBackgroundColor(color: any): void;
95
104
  appendTo(container: any): void;
96
105
  container: any;
97
- stats: any;
106
+ stats: Stats;
98
107
  updateCameraDirections(): void;
99
108
  setAnimate(bool?: boolean): void;
100
109
  /** @param {Event} [event] */
101
110
  resizeView(event?: Event): void;
102
111
  loadEnv(url: any): Promise<void>;
103
112
  clearContentLayers(): void;
104
- ensureSparkRenderer(): SparkRenderer;
113
+ ensureSparkRenderer(): Promise<any>;
105
114
  disposeSparkRenderer(): void;
115
+ sparkRendererGeneration: any;
106
116
  /** @param {import('../main.js').ContentLayerDefinition[]} content */
107
117
  defineContentLayers(content?: import("../main.js").ContentLayerDefinition[]): void;
108
118
  enableContentLayers(labels?: any[]): void;
@@ -126,7 +136,25 @@ declare class Viewer extends EventDispatcher {
126
136
  }): HTMLElement;
127
137
  animate(time: any): void;
128
138
  render(): void;
129
- getCameraPivot(): any;
139
+ /**
140
+ * Explicit-action raycast; do not call on every pointermove. Returns the nearest
141
+ * loaded surface, not a survey measurement. RAD accuracy depends on streamed LOD.
142
+ * @param {number} screenX Client X in CSS pixels.
143
+ * @param {number} screenY Client Y in CSS pixels.
144
+ * @param {import('./surfacePicking.js').SurfacePickOptions} [options]
145
+ * @returns {{ lon: number, lat: number, alt: number, point: Vector3, source: 'splats' | 'globe' | 'content', layerId: string | null } | null} WGS84 degrees, ellipsoidal meters, ECEF point in meters.
146
+ */
147
+ pickCoordinates(screenX: number, screenY: number, options?: import("./surfacePicking.js").SurfacePickOptions): {
148
+ lon: number;
149
+ lat: number;
150
+ alt: number;
151
+ point: Vector3;
152
+ source: "splats" | "globe" | "content";
153
+ layerId: string | null;
154
+ } | null;
155
+ /** @param {Raycaster} raycaster @param {import('./surfacePicking.js').SurfacePickOptions} [options] */
156
+ _raycastSurfaces(raycaster: Raycaster, options?: import("./surfacePicking.js").SurfacePickOptions): any;
157
+ getCameraPivot(): Vector3;
130
158
  /**
131
159
  * @param {number} lon
132
160
  * @param {number} lat
@@ -168,10 +196,18 @@ export namespace ViewerEvents {
168
196
  let CONTENT_LAYER_ERROR: "content-layer-error";
169
197
  }
170
198
  import { EventDispatcher } from '../modules/EventDispatcher';
171
- import { SparkRenderer } from '@sparkjsdev/spark';
172
199
  import { StateDispatcher } from '../modules/StateDispatcher';
200
+ import { WebGLRenderer } from 'three';
201
+ import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer.js';
202
+ import { Clock } from 'three';
203
+ import { PerspectiveCamera } from 'three';
204
+ import { Vector3 } from 'three';
205
+ import { Scene } from 'three';
206
+ import { Group } from 'three';
173
207
  import { GlobeControls } from './GlobeControls';
174
208
  import { TransitionControls } from './TransitionControls';
175
209
  import { GlobeManager } from './GlobeManager';
176
210
  import { Sky } from './Sky';
211
+ import { Raycaster } from 'three';
212
+ import Stats from 'stats.js';
177
213
  export { Viewer as default };
@@ -0,0 +1,4 @@
1
+ /** Apply camera-relative translation to a WGS84 ECEF position (metres).
2
+ * Speed is metres/second; deltaTime is seconds; boost is dimensionless.
3
+ */
4
+ export function applyKeyboardMovement(position: any, forward: any, right: any, up: any, state: any, deltaTime: any, movementSpeed: any, boostMultiplier: any): void;
@@ -0,0 +1 @@
1
+ export function loadSpark(): any;
@@ -1 +1,2 @@
1
1
  export { ShaderChunk as default };
2
+ import { ShaderChunk } from 'three';
@@ -1 +1,2 @@
1
1
  export { ShaderChunk as default };
2
+ import { ShaderChunk } from 'three';
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @typedef {Object} SurfacePickOptions
3
+ * @property {'all' | 'splats' | 'globe' | 'content'} [source] Defaults to all (nearest hit).
4
+ * @property {string[]} [layerIds] Restrict content to these IDs; never includes the globe.
5
+ */
6
+ /**
7
+ * Explicit-action splat picking, deliberately separate from camera/hover raycasts.
8
+ * Spark 2.2's WASM quadratic uses float32 b*b-a*c: long rays against small splats
9
+ * lose the discriminant. Work in float64 and calculate closest approach instead.
10
+ * Uses Spark's public iterator: original direct-format splats, or currently selected
11
+ * RAD pages (not its coarser raycastIndices). This is not a full-resolution survey.
12
+ * Gaussian ellipsoid/disk approximation follows Spark 2.2's rust raycast.rs.
13
+ */
14
+ export function raycastGaussianSplats(mesh: any, raycaster: any): {
15
+ distance: any;
16
+ point: any;
17
+ object: any;
18
+ splatIndex: number;
19
+ };
20
+ /** @param {SurfacePickOptions} options */
21
+ export function raycastSurfaces(viewer: any, raycaster: any, options?: SurfacePickOptions): any;
22
+ export type SurfacePickOptions = {
23
+ /**
24
+ * Defaults to all (nearest hit).
25
+ */
26
+ source?: "all" | "splats" | "globe" | "content";
27
+ /**
28
+ * Restrict content to these IDs; never includes the globe.
29
+ */
30
+ layerIds?: string[];
31
+ };
@@ -3,10 +3,12 @@ export function ecefToGeodeticRotation(x: any, y: any, z: any, quaternion: any):
3
3
  lat: number;
4
4
  alt: number;
5
5
  pitch: number;
6
- yaw: any;
7
- roll: any;
6
+ yaw: number;
7
+ roll: number;
8
8
  };
9
- export function geodeticToEcefUpVector(lon: any, lat: any): any;
10
- export function geodeticToEcefRotation(lon: any, lat: any, pitch: any, yaw: any, roll: any): any;
9
+ export function geodeticToEcefUpVector(lon: any, lat: any): Vector3;
10
+ export function geodeticToEcefRotation(lon: any, lat: any, pitch: any, yaw: any, roll: any): Quaternion;
11
11
  export function exportScene(root: any): void;
12
+ import { Vector3 } from 'three';
13
+ import { Quaternion } from 'three';
12
14
  export { ecefToGeodeticPosition, geodeticToEcefPosition } from "../geospatial.js";
@@ -1,9 +1,9 @@
1
1
  export function createArrowGeometry(data: any): {
2
- origin: any;
2
+ origin: import("three").Vector3Tuple;
3
3
  meshVertexBuffer: Float32Array<any>;
4
4
  };
5
5
  export function createPerimeterGeometry(data: any, color: any): {
6
- origin: any;
6
+ origin: import("three").Vector3Tuple;
7
7
  lineVertexBuffer: Float32Array<any>;
8
8
  lineVertexRGBBuffer: Uint8Array<ArrayBuffer>;
9
9
  meshVertexBuffer: Float32Array<any>;
@@ -12,4 +12,5 @@ export function raycastMesh(rayOrigin: any, rayDir: any, positions: any, indices
12
12
  point: any[];
13
13
  barycentric: number[];
14
14
  };
15
- export function intersectGltf(nodes: any, meshes: any, point: any): any;
15
+ export function intersectGltf(nodes: any, meshes: any, point: any): Vector3;
16
+ import { Vector3 } from 'three';