@splnlss/3d-story-viewer 0.7.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 (36) hide show
  1. package/build/assets/viewer/{geojson.worker-QNi-d8kU.js → geojson.worker-D3uq_RbR.js} +1 -1
  2. package/build/assets/viewer/spark-a62bdfe36d20.wasm +0 -0
  3. package/build/assets/viewer/{spark-worker-5ec8a483b87c.js → spark-worker-c1a6c013b888.js} +194 -43
  4. package/build/computeElevation.cjs +1 -1
  5. package/build/computeElevation.js +2 -2
  6. package/build/index-D87IZDc6.cjs +1 -0
  7. package/build/{index-CsZhc21b.js → index-Hz3jbrou.js} +1302 -829
  8. package/build/main-Bdopx4KL.js +15819 -0
  9. package/build/main-CaYKxosA.cjs +1 -0
  10. package/build/spark.module-B1FWS-vq.js +18168 -0
  11. package/build/spark.module-BUdzSHba.cjs +1 -0
  12. package/build/types/src/viewer/ContentLayer/GaussianSplatLayer.d.ts +4 -6
  13. package/build/types/src/viewer/ContentLayer/MeshLayer.d.ts +1 -1
  14. package/build/types/src/viewer/ContentLayer/TilesLayer.d.ts +4 -2
  15. package/build/types/src/viewer/ContentLayer/gaussianSplatUtils.d.ts +2 -1
  16. package/build/types/src/viewer/ContentLayer/index.d.ts +5 -3
  17. package/build/types/src/viewer/EnvironmentControls.d.ts +18 -12
  18. package/build/types/src/viewer/GlobeControls.d.ts +9 -6
  19. package/build/types/src/viewer/GlobeManager.d.ts +2 -1
  20. package/build/types/src/viewer/Sky.d.ts +5 -2
  21. package/build/types/src/viewer/TransitionControls.d.ts +2 -1
  22. package/build/types/src/viewer/index.d.ts +48 -18
  23. package/build/types/src/viewer/loadSpark.d.ts +1 -0
  24. package/build/types/src/viewer/mods.d.ts +1 -0
  25. package/build/types/src/viewer/shaders/chunks.d.ts +1 -0
  26. package/build/types/src/viewer/surfacePicking.d.ts +31 -0
  27. package/build/types/src/viewer/utils.d.ts +6 -4
  28. package/build/types/src/workers/geojson.worker.d.ts +2 -2
  29. package/build/types/utils/elevation/gltf.d.ts +2 -1
  30. package/build/viewer.cjs +1 -1
  31. package/build/viewer.js +5 -28044
  32. package/package.json +18 -16
  33. package/build/assets/viewer/spark-8b93f8c03d97.wasm +0 -0
  34. package/build/assets/viewer/spark-old-worker-932b4a2c87ca.js +0 -8168
  35. package/build/assets/viewer/spark-worker-015de49d2d00.wasm +0 -0
  36. 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,7 +48,7 @@ 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
53
  _keysEnabled: boolean;
54
54
  /** Camera-relative translation speed in WGS84 ECEF metres/second. */
@@ -77,7 +77,7 @@ declare class Viewer extends EventDispatcher {
77
77
  _onKeyUp: (event: any) => void;
78
78
  _onResize: (event: any) => void;
79
79
  sky: Sky;
80
- pointerRaycaster: any;
80
+ pointerRaycaster: Raycaster;
81
81
  _onPointerMove: (event: any) => void;
82
82
  set keysEnabled(enabled: boolean);
83
83
  get keysEnabled(): boolean;
@@ -85,12 +85,15 @@ declare class Viewer extends EventDispatcher {
85
85
  /**
86
86
  * @param {number} lon
87
87
  * @param {number} lat
88
- * @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.
89
90
  */
90
- getElevation(lon: number, lat: number): {
91
+ getElevation(lon: number, lat: number, options?: import("./surfacePicking.js").SurfacePickOptions): {
91
92
  lon: number;
92
93
  lat: number;
93
94
  alt: number;
95
+ source: "splats" | "globe" | "content";
96
+ layerId: string | null;
94
97
  };
95
98
  /**
96
99
  * @param {[number, number, number?][]} coords
@@ -100,15 +103,16 @@ declare class Viewer extends EventDispatcher {
100
103
  setBackgroundColor(color: any): void;
101
104
  appendTo(container: any): void;
102
105
  container: any;
103
- stats: any;
106
+ stats: Stats;
104
107
  updateCameraDirections(): void;
105
108
  setAnimate(bool?: boolean): void;
106
109
  /** @param {Event} [event] */
107
110
  resizeView(event?: Event): void;
108
111
  loadEnv(url: any): Promise<void>;
109
112
  clearContentLayers(): void;
110
- ensureSparkRenderer(): SparkRenderer;
113
+ ensureSparkRenderer(): Promise<any>;
111
114
  disposeSparkRenderer(): void;
115
+ sparkRendererGeneration: any;
112
116
  /** @param {import('../main.js').ContentLayerDefinition[]} content */
113
117
  defineContentLayers(content?: import("../main.js").ContentLayerDefinition[]): void;
114
118
  enableContentLayers(labels?: any[]): void;
@@ -132,7 +136,25 @@ declare class Viewer extends EventDispatcher {
132
136
  }): HTMLElement;
133
137
  animate(time: any): void;
134
138
  render(): void;
135
- 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;
136
158
  /**
137
159
  * @param {number} lon
138
160
  * @param {number} lat
@@ -174,10 +196,18 @@ export namespace ViewerEvents {
174
196
  let CONTENT_LAYER_ERROR: "content-layer-error";
175
197
  }
176
198
  import { EventDispatcher } from '../modules/EventDispatcher';
177
- import { SparkRenderer } from '@sparkjsdev/spark';
178
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';
179
207
  import { GlobeControls } from './GlobeControls';
180
208
  import { TransitionControls } from './TransitionControls';
181
209
  import { GlobeManager } from './GlobeManager';
182
210
  import { Sky } from './Sky';
211
+ import { Raycaster } from 'three';
212
+ import Stats from 'stats.js';
183
213
  export { Viewer as default };
@@ -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';