@yschindel/ara3d-webgl 1.3.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 (31) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +108 -0
  3. package/dist/ara3d-webgl.mjs +35785 -0
  4. package/dist/ara3d-webgl.mjs.map +1 -0
  5. package/dist/ara3d-webgl.umd.js +5020 -0
  6. package/dist/ara3d-webgl.umd.js.map +1 -0
  7. package/dist/types/images.d.ts +4 -0
  8. package/dist/types/index.d.ts +7 -0
  9. package/dist/types/loader/bimGeometry.d.ts +28 -0
  10. package/dist/types/loader/bimOpenSchemaLoader.d.ts +14 -0
  11. package/dist/types/loader/buildGeometryGroup.d.ts +14 -0
  12. package/dist/types/loader/gltfLoader.d.ts +8 -0
  13. package/dist/types/viewer/camera/camera.d.ts +86 -0
  14. package/dist/types/viewer/camera/cameraMovement.d.ts +19 -0
  15. package/dist/types/viewer/camera/cameraMovementDo.d.ts +20 -0
  16. package/dist/types/viewer/camera/cameraMovementLerp.d.ts +24 -0
  17. package/dist/types/viewer/camera/orthographic.d.ts +8 -0
  18. package/dist/types/viewer/camera/perspective.d.ts +9 -0
  19. package/dist/types/viewer/environment.d.ts +39 -0
  20. package/dist/types/viewer/gizmos/gizmoAxes.d.ts +77 -0
  21. package/dist/types/viewer/gizmos/gizmoOrbit.d.ts +68 -0
  22. package/dist/types/viewer/inputs/input.d.ts +62 -0
  23. package/dist/types/viewer/inputs/inputHandler.d.ts +26 -0
  24. package/dist/types/viewer/inputs/keyboard.d.ts +107 -0
  25. package/dist/types/viewer/inputs/mouse.d.ts +40 -0
  26. package/dist/types/viewer/inputs/touch.d.ts +33 -0
  27. package/dist/types/viewer/rendering/renderer.d.ts +22 -0
  28. package/dist/types/viewer/viewer.d.ts +28 -0
  29. package/dist/types/viewer/viewerSettings.d.ts +109 -0
  30. package/dist/types/viewer/viewport.d.ts +41 -0
  31. package/package.json +76 -0
@@ -0,0 +1,107 @@
1
+ import { InputHandler } from './inputHandler';
2
+ export declare const KEYS: {
3
+ KEY_0: number;
4
+ KEY_1: number;
5
+ KEY_2: number;
6
+ KEY_3: number;
7
+ KEY_4: number;
8
+ KEY_5: number;
9
+ KEY_6: number;
10
+ KEY_7: number;
11
+ KEY_8: number;
12
+ KEY_9: number;
13
+ KEY_LEFT: number;
14
+ KEY_RIGHT: number;
15
+ KEY_UP: number;
16
+ KEY_DOWN: number;
17
+ KEY_CTRL: number;
18
+ KEY_SHIFT: number;
19
+ KEY_ENTER: number;
20
+ KEY_SPACE: number;
21
+ KEY_TAB: number;
22
+ KEY_ESCAPE: number;
23
+ KEY_BACKSPACE: number;
24
+ KEY_HOME: number;
25
+ KEY_END: number;
26
+ KEY_INSERT: number;
27
+ KEY_DELETE: number;
28
+ KEY_ALT: number;
29
+ KEY_F1: number;
30
+ KEY_F2: number;
31
+ KEY_F3: number;
32
+ KEY_F4: number;
33
+ KEY_F5: number;
34
+ KEY_F6: number;
35
+ KEY_F7: number;
36
+ KEY_F8: number;
37
+ KEY_F9: number;
38
+ KEY_F10: number;
39
+ KEY_F11: number;
40
+ KEY_F12: number;
41
+ KEY_NUMPAD0: number;
42
+ KEY_NUMPAD1: number;
43
+ KEY_NUMPAD2: number;
44
+ KEY_NUMPAD3: number;
45
+ KEY_NUMPAD4: number;
46
+ KEY_NUMPAD5: number;
47
+ KEY_NUMPAD6: number;
48
+ KEY_NUMPAD7: number;
49
+ KEY_NUMPAD8: number;
50
+ KEY_NUMPAD9: number;
51
+ KEY_ADD: number;
52
+ KEY_SUBTRACT: number;
53
+ KEY_MULTIPLY: number;
54
+ KEY_DIVIDE: number;
55
+ KEY_SEPARATOR: number;
56
+ KEY_DECIMAL: number;
57
+ KEY_OEM_PLUS: number;
58
+ KEY_OEM_MINUS: number;
59
+ KEY_A: number;
60
+ KEY_B: number;
61
+ KEY_C: number;
62
+ KEY_D: number;
63
+ KEY_E: number;
64
+ KEY_F: number;
65
+ KEY_G: number;
66
+ KEY_H: number;
67
+ KEY_I: number;
68
+ KEY_J: number;
69
+ KEY_K: number;
70
+ KEY_L: number;
71
+ KEY_M: number;
72
+ KEY_N: number;
73
+ KEY_O: number;
74
+ KEY_P: number;
75
+ KEY_Q: number;
76
+ KEY_R: number;
77
+ KEY_S: number;
78
+ KEY_T: number;
79
+ KEY_U: number;
80
+ KEY_V: number;
81
+ KEY_W: number;
82
+ KEY_X: number;
83
+ KEY_Y: number;
84
+ KEY_Z: number;
85
+ };
86
+ /**
87
+ * Manages keyboard user inputs
88
+ */
89
+ export declare class KeyboardHandler extends InputHandler {
90
+ private SHIFT_MULTIPLIER;
91
+ isUpPressed: boolean;
92
+ isDownPressed: boolean;
93
+ isLeftPressed: boolean;
94
+ isRightPressed: boolean;
95
+ isEPressed: boolean;
96
+ isQPressed: boolean;
97
+ isShiftPressed: boolean;
98
+ isCtrlPressed: boolean;
99
+ arrowsEnabled: boolean;
100
+ protected addListeners(): void;
101
+ reset(): void;
102
+ private get camera();
103
+ private onKeyUp;
104
+ private onKeyDown;
105
+ private onKey;
106
+ private applyMove;
107
+ }
@@ -0,0 +1,40 @@
1
+ import { InputHandler } from './inputHandler';
2
+ import { Viewer } from '../viewer';
3
+ /**
4
+ * Manages mouse user inputs
5
+ */
6
+ export declare class MouseHandler extends InputHandler {
7
+ private readonly _idleDelayMs;
8
+ zoomSpeed: number;
9
+ panSpeed: number;
10
+ rotateSpeed: number;
11
+ orbitSpeed: number;
12
+ private _buttonDown;
13
+ private _hasMouseMoved;
14
+ private _hasCameraMoved;
15
+ private _idleTimeout;
16
+ private _idlePosition;
17
+ private _lastPosition;
18
+ private _downPosition;
19
+ constructor(viewer: Viewer);
20
+ private get camera();
21
+ private get viewport();
22
+ private get canvas();
23
+ private get inputs();
24
+ protected addListeners(): void;
25
+ reset: () => void;
26
+ private resetIdle;
27
+ private onMouseOut;
28
+ private onCameraMoved;
29
+ private onMouseMove;
30
+ private onMouseDown;
31
+ private onMouseDrag;
32
+ private toRotation;
33
+ private onMouseMainDrag;
34
+ private onMouseMiddleDrag;
35
+ private onMouseRightDrag;
36
+ private onMouseWheel;
37
+ private getButton;
38
+ private onMouseUp;
39
+ private getModifier;
40
+ }
@@ -0,0 +1,33 @@
1
+ import { InputHandler } from './inputHandler';
2
+ import { Viewer } from '../viewer';
3
+ export declare class TouchHandler extends InputHandler {
4
+ private readonly TAP_DURATION_MS;
5
+ private readonly DOUBLE_TAP_DELAY_MS;
6
+ private readonly TAP_MAX_MOVE_PIXEL;
7
+ private readonly ZOOM_SPEED;
8
+ private readonly MOVE_SPEED;
9
+ rotateSpeed: number;
10
+ orbitSpeed: number;
11
+ constructor(viewer: Viewer);
12
+ private get camera();
13
+ private get viewport();
14
+ private _touch;
15
+ private _touch1;
16
+ private _touch2;
17
+ private _touchStartTime;
18
+ private _lastTapMs;
19
+ private _touchStart;
20
+ protected addListeners(): void;
21
+ reset: () => void;
22
+ private onTap;
23
+ private onTouchStart;
24
+ private toRotation;
25
+ private onDrag;
26
+ private onDoubleDrag;
27
+ private onPinchOrSpread;
28
+ private onTouchMove;
29
+ private onTouchEnd;
30
+ private isSingleTouch;
31
+ private touchToVector;
32
+ private average;
33
+ }
@@ -0,0 +1,22 @@
1
+ import * as THREE from 'three';
2
+ import { Viewport } from '../viewport';
3
+ import { Camera } from '../camera/camera';
4
+ import { Settings } from '../viewerSettings';
5
+ export declare class Renderer {
6
+ renderer: THREE.WebGLRenderer;
7
+ antialias: boolean;
8
+ scene: THREE.Scene;
9
+ viewport: Viewport;
10
+ camera: Camera;
11
+ needsUpdate: boolean;
12
+ constructor(scene: THREE.Scene, viewport: Viewport, camera: Camera, settings: Settings);
13
+ dispose(): void;
14
+ get background(): THREE.Color | THREE.Texture;
15
+ set background(color: THREE.Color | THREE.Texture);
16
+ render(): void;
17
+ add(target: THREE.Object3D): boolean;
18
+ remove(target: THREE.Object3D): void;
19
+ clear(): void;
20
+ private _lastSize;
21
+ private fitViewport;
22
+ }
@@ -0,0 +1,28 @@
1
+ import * as THREE from 'three';
2
+ import { Settings, PartialSettings } from './viewerSettings';
3
+ import { Camera } from './camera/camera';
4
+ import { Input } from './inputs/input';
5
+ import { Environment } from './environment';
6
+ import { GizmoOrbit } from './gizmos/gizmoOrbit';
7
+ import { Viewport } from './viewport';
8
+ import { Renderer } from './rendering/renderer';
9
+ export declare class Viewer {
10
+ settings: Settings;
11
+ renderer: Renderer;
12
+ viewport: Viewport;
13
+ inputs: Input;
14
+ camera: Camera;
15
+ environment: Environment;
16
+ gizmoOrbit: GizmoOrbit;
17
+ running: boolean;
18
+ updateId: number | null;
19
+ clock: any;
20
+ scene: any;
21
+ constructor(options?: PartialSettings);
22
+ start(): void;
23
+ stop(): void;
24
+ private animate;
25
+ add(obj: THREE.Object3D, frameCamera?: boolean): void;
26
+ clear(): void;
27
+ dispose(): void;
28
+ }
@@ -0,0 +1,109 @@
1
+ import * as THREE from 'three';
2
+ export type TextureEncoding = 'url' | 'base64' | undefined;
3
+ export { GizmoOptions } from './gizmos/gizmoAxes';
4
+ /**
5
+ * Makes all field optional recursively
6
+ * https://stackoverflow.com/questions/41980195/recursive-partialt-in-typescript
7
+ */
8
+ export type RecursivePartial<T> = {
9
+ [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] : T[P] extends object ? RecursivePartial<T[P]> : T[P];
10
+ };
11
+ /** Viewer related options */
12
+ export type Settings = {
13
+ /**
14
+ * Webgl canvas related options
15
+ */
16
+ canvas: {
17
+ /** Canvas dom model id. If none provided a new canvas will be created */
18
+ id: string | undefined;
19
+ /** Limits how often canvas will be resized if window is resized. */
20
+ resizeDelay: number;
21
+ };
22
+ /**
23
+ * Three.js camera related options
24
+ */
25
+ camera: {
26
+ /** Start with orthographic camera */
27
+ orthographic: boolean;
28
+ /** Vector3 of 0 or 1 to enable/disable movement along each axis */
29
+ allowedMovement: THREE.Vector3;
30
+ /** Vector2 of 0 or 1 to enable/disable rotation around x or y. */
31
+ allowedRotation: THREE.Vector2;
32
+ /** Near clipping plane distance */
33
+ near: number;
34
+ /** Far clipping plane distance */
35
+ far: number;
36
+ /** Fov angle in degrees */
37
+ fov: number;
38
+ /** Zoom level */
39
+ zoom: number;
40
+ /** Initial forward of the camera */
41
+ forward: THREE.Vector3;
42
+ /** Camera controls related options */
43
+ controls: {
44
+ /**
45
+ * <p>Set true to start in orbit mode.</p>
46
+ * <p>Camera has two modes: First person and orbit</p>
47
+ * <p>First person allows to moves the camera around freely</p>
48
+ * <p>Orbit rotates the camera around a focus point</p>
49
+ */
50
+ orbit: boolean;
51
+ /** Camera rotation speed factor */
52
+ rotateSpeed: number;
53
+ orbitSpeed: number;
54
+ /** Camera movement speed factor */
55
+ moveSpeed: number;
56
+ };
57
+ /** Camera gizmo related options */
58
+ gizmo: {
59
+ enable: boolean;
60
+ size: number;
61
+ color: THREE.Color;
62
+ opacity: number;
63
+ opacityAlways: number;
64
+ };
65
+ };
66
+ /**
67
+ * Rendering background options
68
+ */
69
+ background: {
70
+ color: THREE.Color;
71
+ };
72
+ /**
73
+ * Plane under scene related options
74
+ */
75
+ groundPlane: {
76
+ /** Enables/Disables plane under scene */
77
+ visible: boolean;
78
+ encoding: TextureEncoding;
79
+ /** Local or remote texture url for plane */
80
+ texture: string;
81
+ /** Opacity of the plane */
82
+ opacity: number;
83
+ /** Color of the plane */
84
+ color: THREE.Color;
85
+ /** Actual size is SceneRadius*size */
86
+ size: number;
87
+ };
88
+ /**
89
+ * Skylight (hemisphere light) options
90
+ */
91
+ skylight: {
92
+ skyColor: THREE.Color;
93
+ groundColor: THREE.Color;
94
+ intensity: number;
95
+ };
96
+ /**
97
+ * Sunlight (directional light) options
98
+ */
99
+ sunLights: {
100
+ position: THREE.Vector3;
101
+ color: THREE.Color;
102
+ intensity: number;
103
+ }[];
104
+ rendering: {
105
+ onDemand: boolean;
106
+ };
107
+ };
108
+ export type PartialSettings = RecursivePartial<Settings>;
109
+ export declare function getSettings(options?: PartialSettings): Settings;
@@ -0,0 +1,41 @@
1
+ import { Settings } from './viewerSettings';
2
+ export declare class Viewport {
3
+ /** HTML Canvas on which the model is rendered */
4
+ canvas: HTMLCanvasElement;
5
+ /** HTML Element in which text is rendered */
6
+ text: HTMLElement | undefined;
7
+ private _unregisterResize;
8
+ private _ownedCanvas;
9
+ private _onResize;
10
+ get onResize(): import("ste-signals").ISignal;
11
+ constructor(settings: Settings);
12
+ /**
13
+ * Either returns html canvas at provided Id or creates a canvas at root level
14
+ */
15
+ private static getOrCreateCanvas;
16
+ /** Returns a text renderer that will render html in an html element sibling to canvas */
17
+ createTextRenderer(): any;
18
+ /** Removes canvas if owned */
19
+ dispose(): void;
20
+ /**
21
+ * Returns the pixel size of the parent element.
22
+ */
23
+ getParentSize(): any;
24
+ /**
25
+ * Returns the pixel size of the canvas.
26
+ */
27
+ getSize(): any;
28
+ /** Returns x/y of the parent size */
29
+ getAspectRatio(): number;
30
+ /**
31
+ * Resizes canvas and update camera to match new parent dimensions.
32
+ */
33
+ ResizeToParent(): void;
34
+ /**
35
+ * Set a callback for canvas resize with debouncing
36
+ * https://stackoverflow.com/questions/5825447/javascript-event-for-canvas-resize/30688151
37
+ * @param callback code to be called
38
+ * @param timeout time after the last resize before code will be called
39
+ */
40
+ private watchResize;
41
+ }
package/package.json ADDED
@@ -0,0 +1,76 @@
1
+ {
2
+ "name": "@yschindel/ara3d-webgl",
3
+ "version": "1.3.0",
4
+ "description": "A 3D viewer designed for large architectural (BIM) models built on top of Three.JS.",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "types": "./dist/types/index.d.ts",
9
+ "module": "dist/ara3d-webgl.mjs",
10
+ "homepage": "https://github.com/ara3d/ara3d-webgl.git",
11
+ "bugs": {
12
+ "url": "https://github.com/ara3d/ara3d-webgl/issues"
13
+ },
14
+ "license": "MIT",
15
+ "author": "Ara 3D <info@ara3d.com>",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/ara3d/ara3d-webgl.git"
19
+ },
20
+ "scripts": {
21
+ "dev": "vite --config vite.config.docs.js --host",
22
+ "build:docs": "vite build --config vite.config.docs.js && npm run gentypes",
23
+ "build:lib": "npx vite build --config vite.config.lib.js && npm run gentypes",
24
+ "preview:docs": "vite preview --mode github --config vite.config.docs.js --host",
25
+ "serve:docs": "http-server ./docs -o --host",
26
+ "eslint": "eslint --ext .js,.ts src --fix",
27
+ "gentypes": "tsc --declaration --emitDeclarationOnly --outdir ./dist/types",
28
+ "prepare": "npm run build:lib"
29
+ },
30
+ "devDependencies": {
31
+ "@types/axios": "^0.14.0",
32
+ "@typescript-eslint/eslint-plugin": "^5.45.1",
33
+ "@typescript-eslint/parser": "^5.45.1",
34
+ "eslint": "^8.29.0",
35
+ "eslint-config-prettier": "^8.5.0",
36
+ "eslint-config-standard": "^17.0.0",
37
+ "eslint-plugin-import": "^2.26.0",
38
+ "eslint-plugin-node": "^11.1.0",
39
+ "eslint-plugin-prettier": "^4.2.1",
40
+ "eslint-plugin-promise": "^6.1.1",
41
+ "http-server": "^14",
42
+ "opener": "^1.5.2",
43
+ "prettier": "^2.8.0",
44
+ "typescript": "^5.9.3",
45
+ "vite": "^3.2.5"
46
+ },
47
+ "dependencies": {
48
+ "@types/node": "^18.11.11",
49
+ "deepmerge": "^4.2.2",
50
+ "hyparquet": "^1.23.2",
51
+ "hyparquet-compressors": "^1.1.1",
52
+ "jszip": "^3.10.1",
53
+ "ste-events": "^3.0.7",
54
+ "ste-signals": "^3.0.9",
55
+ "ste-simple-events": "^3.0.7"
56
+ },
57
+ "peerDependencies": {
58
+ "three": ">=0.150.0"
59
+ },
60
+ "keywords": [
61
+ "3d",
62
+ "ara3d",
63
+ "ara 3d",
64
+ "bim",
65
+ "viewer",
66
+ "three.js",
67
+ "model",
68
+ "aec",
69
+ "BIM Open Schema",
70
+ "BIM",
71
+ "BOS",
72
+ ".bos",
73
+ "loader",
74
+ "webgl"
75
+ ]
76
+ }