@inweb/viewer-three 25.3.20 → 25.3.21
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.
|
@@ -367,7 +367,9 @@ class Options {
|
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
|
|
370
|
-
const
|
|
370
|
+
const CanvasEvents = [ "click", "contextmenu", "dblclick", "mousedown", "mouseleave", "mousemove", "mouseup", "pointercancel", "pointerdown", "pointerleave", "pointermove", "pointerup", "touchcancel", "touchend", "touchmove", "touchstart", "wheel" ];
|
|
371
|
+
|
|
372
|
+
const CANVAS_EVENTS = CanvasEvents;
|
|
371
373
|
|
|
372
374
|
class EventEmitter2 {
|
|
373
375
|
constructor() {
|
|
@@ -867,7 +869,7 @@ class Viewer extends EventEmitter2 {
|
|
|
867
869
|
this.renderNeeded = false;
|
|
868
870
|
this._options = new Options(this);
|
|
869
871
|
this.client = client;
|
|
870
|
-
this.canvasEvents = CANVAS_EVENTS;
|
|
872
|
+
this.canvasEvents = CANVAS_EVENTS.slice();
|
|
871
873
|
this.canvaseventlistener = event => this.emit(event);
|
|
872
874
|
this.draggerFactory = {
|
|
873
875
|
Pan: PanDragger,
|
|
@@ -1110,5 +1112,5 @@ class Viewer extends EventEmitter2 {
|
|
|
1110
1112
|
}
|
|
1111
1113
|
}
|
|
1112
1114
|
|
|
1113
|
-
export { CANVAS_EVENTS, Options, Viewer, commands, defaultOptions };
|
|
1115
|
+
export { CANVAS_EVENTS, CanvasEvents, Options, Viewer, commands, defaultOptions };
|
|
1114
1116
|
//# sourceMappingURL=viewer-three.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer-three.module.js","sources":["../../viewer-core/dist/viewer-core.module.js","../../eventemitter2/dist/eventemitter2.module.js","../src/Viewer/loaders/GLTFLoadingManager.ts","../src/Viewer/draggers/OrbitDragger.ts","../src/Viewer/draggers/PanDragger.ts","../src/Viewer/draggers/ZoomDragger.ts","../src/Viewer/draggers/WalkDragger.ts","../src/Viewer/draggers/ClippingPlaneDragger.ts","../src/Viewer/components/LightComponent.ts","../src/Viewer/components/BackgroundComponent.ts","../src/Viewer/components/DefaultCameraPositionComponent.ts","../src/Viewer/components/ResizeCanvasComponent.ts","../src/Viewer/components/RenderLoopComponent.ts","../src/Viewer/Viewer.ts"],"sourcesContent":["class Commands {\n constructor() {\n this._commands = new Map;\n }\n registerCommand(id, handler, description, thisArg) {\n this._commands.set(id, {\n id: id,\n handler: handler,\n thisArg: thisArg,\n description: description\n });\n }\n registerCommandAlias(id, alias) {\n this.registerCommand(alias, ((viewer, ...args) => this.executeCommand(id, viewer, ...args)));\n }\n getCommand(id) {\n return this._commands.get(id);\n }\n getCommands() {\n const map = new Map;\n this._commands.forEach(((value, key) => map.set(key, value)));\n return map;\n }\n executeCommand(id, viewer, ...args) {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n const {handler: handler, thisArg: thisArg} = command;\n const result = handler.apply(thisArg, [ viewer, ...args ]);\n viewer === null || viewer === void 0 ? void 0 : viewer.emit({\n type: \"command\",\n data: id,\n args: args\n });\n return result;\n }\n}\n\nconst _commands = new Map;\n\nfunction commands(viewerType = \"\") {\n let result = _commands.get(viewerType);\n if (!result) {\n result = new Commands;\n _commands.set(viewerType, result);\n }\n return result;\n}\n\ncommands(\"\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"VisualizeJS\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"ThreeJS\").registerCommand(\"noop\", (() => {}));\n\nfunction defaultOptions() {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: {\n red: 255,\n green: 152,\n blue: 0\n },\n edgesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n facesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\"\n };\n}\n\nclass Options {\n constructor(emitter) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n static defaults() {\n return defaultOptions();\n }\n notifierChangeEvent() {\n console.warn(\"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\");\n this.change();\n }\n change() {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({\n type: \"optionschange\",\n data: this\n });\n }\n }\n saveToStorage() {\n if (typeof window !== \"undefined\") try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n loadFromStorage() {\n if (typeof window !== \"undefined\") try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = {\n ...data\n };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n resetToDefaults(fields) {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce(((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }), {});\n this.data = {\n ...this.data,\n ...resetData\n };\n } else {\n this.data = {\n ...this.data,\n ...Options.defaults()\n };\n }\n }\n get data() {\n return this._data;\n }\n set data(value) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = {\n ...Options.defaults(),\n ...this._data,\n ...value,\n enablePartialMode: enablePartialMode,\n sceneGraph: sceneGraph\n };\n this.change();\n }\n get showWCS() {\n return this._data.showWCS;\n }\n set showWCS(value) {\n this._data.showWCS = value;\n this.change();\n }\n get cameraAnimation() {\n return this._data.cameraAnimation;\n }\n set cameraAnimation(value) {\n this._data.cameraAnimation = value;\n this.change();\n }\n get antialiasing() {\n return this._data.antialiasing;\n }\n set antialiasing(value) {\n this._data.antialiasing = value;\n this.change();\n }\n get groundShadow() {\n return this._data.groundShadow;\n }\n set groundShadow(value) {\n this._data.groundShadow = value;\n this.change();\n }\n get shadows() {\n return this._data.shadows;\n }\n set shadows(value) {\n this._data.shadows = value;\n this.change();\n }\n get cameraAxisXSpeed() {\n return this._data.cameraAxisXSpeed;\n }\n set cameraAxisXSpeed(value) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n get cameraAxisYSpeed() {\n return this._data.cameraAxisYSpeed;\n }\n set cameraAxisYSpeed(value) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n get ambientOcclusion() {\n return this._data.ambientOcclusion;\n }\n set ambientOcclusion(value) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n get enableStreamingMode() {\n return this._data.enableStreamingMode;\n }\n set enableStreamingMode(value) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n get enablePartialMode() {\n return this._data.enablePartialMode;\n }\n set enablePartialMode(value) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n get memoryLimit() {\n return this._data.memoryLimit;\n }\n set memoryLimit(value) {\n this._data.memoryLimit = value;\n this.change();\n }\n get cuttingPlaneFillColor() {\n return this._data.cuttingPlaneFillColor;\n }\n set cuttingPlaneFillColor(value) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n get edgesColor() {\n return this._data.edgesColor;\n }\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n get facesColor() {\n return this._data.facesColor;\n }\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n set reverseZoomWheel(value) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n set enableZoomWheel(value) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n get enableGestures() {\n return this._data.enableGestures;\n }\n set enableGestures(value) {\n this._data.enableGestures = !!value;\n this.change();\n }\n get geometryType() {\n return this._data.geometryType;\n }\n set geometryType(value) {\n this._data.geometryType = value;\n this.change();\n }\n}\n\nconst CANVAS_EVENTS = [ \"click\", \"dblclick\", \"mousedown\", \"mousemove\", \"mouseup\", \"mouseleave\", \"pointerdown\", \"pointermove\", \"pointerup\", \"pointerleave\", \"pointercancel\", \"wheel\", \"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\" ];\n\nexport { CANVAS_EVENTS, Options, commands, defaultOptions };\n//# sourceMappingURL=viewer-core.module.js.map\n","class EventEmitter2 {\n constructor() {\n this._listeners = {};\n }\n addEventListener(type, listener) {\n if (this._listeners[type] === undefined) this._listeners[type] = [];\n this._listeners[type].push(listener);\n return this;\n }\n removeEventListener(type, listener) {\n if (this._listeners[type] === undefined) return this;\n const listeners = this._listeners[type].filter((x => x !== listener));\n if (listeners.length !== 0) this._listeners[type] = listeners; else delete this._listeners[type];\n return this;\n }\n removeAllListeners(type) {\n if (type) delete this._listeners[type]; else this._listeners = {};\n return this;\n }\n emitEvent(event) {\n if (this._listeners[event.type] === undefined) return false;\n const invoke = this._listeners[event.type].slice();\n invoke.forEach((listener => listener.call(this, event)));\n return true;\n }\n on(type, listener) {\n return this.addEventListener(type, listener);\n }\n off(type, listener) {\n return this.removeEventListener(type, listener);\n }\n emit(event, ...args) {\n if (typeof event === \"string\") return this.emitEvent({\n type: event,\n args: args\n }); else if (typeof event === \"object\") return this.emitEvent(event); else return false;\n }\n}\n\nexport { EventEmitter2 };\n//# sourceMappingURL=eventemitter2.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\n\nexport class GLTFLoadingManager extends THREE.LoadingManager {\n public path = \"\";\n public resourcePath = \"\";\n public fileURL = \"\";\n public dataURLs = new Map();\n\n constructor(\n file: string | ArrayBuffer | Blob,\n externalData: Map<string, string | ArrayBuffer | Blob> = new Map(),\n params: { path?: string } = {}\n ) {\n super();\n\n this.path = params.path || \"\";\n\n if (typeof file === \"string\") {\n this.fileURL = file;\n this.resourcePath = THREE.LoaderUtils.extractUrlBase(file);\n } else {\n externalData.forEach((value, key) => (this.fileURL = value === file ? key : this.fileURL));\n externalData.set(this.fileURL, file);\n }\n\n externalData.forEach((value, key) => {\n let dataURL: string;\n if (typeof value === \"string\") dataURL = value;\n else dataURL = URL.createObjectURL(new Blob([value]));\n this.dataURLs.set(key, dataURL);\n });\n\n this.setURLModifier((url: string) => {\n const key = decodeURI(url)\n .replace(this.path, \"\")\n .replace(this.resourcePath, \"\")\n .replace(/^(\\.?\\/)/, \"\");\n const dataURL = this.dataURLs.get(key);\n return dataURL ?? url;\n });\n }\n\n dispose(): void {\n this.dataURLs.forEach(URL.revokeObjectURL);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GeometryEndEvent } from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport { OrbitControls } from \"three/examples/jsm/controls/OrbitControls.js\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class OrbitDragger extends OrbitControls {\n private viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super(viewer.camera, viewer.canvas);\n this.mouseButtons = { LEFT: THREE.MOUSE.ROTATE, MIDDLE: THREE.MOUSE.PAN, RIGHT: THREE.MOUSE.PAN };\n this.touches = { ONE: THREE.TOUCH.ROTATE, TWO: THREE.TOUCH.DOLLY_PAN };\n this.screenSpacePanning = true;\n this.rotateSpeed = 0.33;\n this.viewer = viewer;\n this.viewer.addEventListener(\"geometryend\", this.geometryEnd);\n this.addEventListener(\"change\", this.updateViewer);\n }\n\n override dispose(): void {\n this.removeEventListener(\"change\", this.updateViewer);\n this.viewer.removeEventListener(\"geometryend\", this.geometryEnd);\n super.dispose();\n }\n\n geometryEnd = (event: GeometryEndEvent) => {\n const { data: scene } = event;\n const box = new THREE.Box3().setFromObject(scene);\n const size = box.getSize(new THREE.Vector3()).length();\n\n this.maxDistance = size * 10;\n this.update();\n };\n\n updateViewer = () => {\n this.viewer.update();\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { OrbitDragger } from \"./OrbitDragger\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class PanDragger extends OrbitDragger {\n constructor(viewer: Viewer) {\n super(viewer);\n this.mouseButtons = { LEFT: THREE.MOUSE.PAN, MIDDLE: THREE.MOUSE.PAN, RIGHT: THREE.MOUSE.PAN };\n this.touches = { ONE: THREE.TOUCH.PAN, TWO: THREE.TOUCH.DOLLY_ROTATE };\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { OrbitDragger } from \"./OrbitDragger\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ZoomDragger extends OrbitDragger {\n constructor(viewer: Viewer) {\n super(viewer);\n this.mouseButtons = { LEFT: THREE.MOUSE.DOLLY, MIDDLE: THREE.MOUSE.PAN, RIGHT: THREE.MOUSE.PAN };\n this.touches = { ONE: THREE.TOUCH.DOLLY_PAN, TWO: THREE.TOUCH.DOLLY_PAN };\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { RenderEvent } from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class WalkDragger {\n protected viewer: Viewer;\n protected camera: THREE.Camera;\n protected canvas: HTMLCanvasElement;\n protected _target: THREE.Vector3;\n protected quaternion: THREE.Quaternion;\n protected mouseStart: THREE.Vector2;\n protected mouseDelta: THREE.Vector2;\n protected xAxis: THREE.Vector3;\n protected yAxis: THREE.Vector3;\n protected zAxis: THREE.Vector3;\n protected speed: THREE.Vector3;\n protected _maxDistance: number;\n protected xRotation: THREE.Quaternion;\n protected yRotation: THREE.Quaternion;\n protected yRotationAxis: THREE.Vector3;\n protected touchStartDistance: number;\n\n public walkSpeed: number;\n public boostSpeed: number;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n\n this._target = new THREE.Vector3();\n\n this.quaternion = this.viewer.camera.quaternion.clone();\n this.xRotation = new THREE.Quaternion();\n this.yRotation = new THREE.Quaternion();\n\n this.mouseStart = new THREE.Vector2();\n this.mouseDelta = new THREE.Vector2();\n\n this.xAxis = new THREE.Vector3();\n this.yAxis = new THREE.Vector3();\n this.zAxis = new THREE.Vector3();\n this.yRotationAxis = new THREE.Vector3(1, 0, 0);\n this.walkSpeed = 1;\n this.boostSpeed = 5;\n this.speed = new THREE.Vector3();\n this._maxDistance = 1;\n\n this.touchStartDistance = 0;\n\n this.viewer.addEventListener(\"render\", this.onRender);\n\n this.viewer.addEventListener(\"contextmenu\", this.onContextMenu);\n\n this.viewer.addEventListener(\"mousedown\", this.onMouseDown);\n this.viewer.addEventListener(\"mouseup\", this.onMouseUp);\n\n this.viewer.addEventListener(\"touchstart\", this.onTouchStart);\n this.viewer.addEventListener(\"touchmove\", this.onTouchMove);\n this.viewer.addEventListener(\"touchend\", this.onTouchEnd);\n\n this.viewer.addEventListener(\"wheel\", this.onMouseWheel);\n\n document.addEventListener(\"keydown\", this.onKeyDown);\n document.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"render\", this.onRender);\n\n this.viewer.removeEventListener(\"contextmenu\", this.onContextMenu);\n\n this.viewer.removeEventListener(\"mousedown\", this.onMouseDown);\n this.viewer.removeEventListener(\"mouseup\", this.onMouseUp);\n this.viewer.removeEventListener(\"mousemove\", this.onMouseMove);\n\n this.viewer.removeEventListener(\"touchstart\", this.onTouchStart);\n this.viewer.removeEventListener(\"touchmove\", this.onTouchMove);\n this.viewer.removeEventListener(\"touchend\", this.onTouchEnd);\n\n this.viewer.removeEventListener(\"wheel\", this.onMouseWheel);\n\n document.removeEventListener(\"keydown\", this.onKeyDown);\n document.removeEventListener(\"keyup\", this.onKeyUp);\n }\n\n onKeyDown = (event: KeyboardEvent) => {\n switch (event.code) {\n case \"KeyW\": // Forward\n if (event.shiftKey) {\n this.speed.z = this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.z = this.walkSpeed;\n }\n break;\n case \"KeyS\": // Backward\n if (event.shiftKey) {\n this.speed.z = -this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.z = -this.walkSpeed;\n }\n break;\n case \"KeyA\": // Left\n if (event.shiftKey) {\n this.speed.x = this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.x = this.walkSpeed;\n }\n break;\n case \"KeyD\": // Right\n if (event.shiftKey) {\n this.speed.x = -this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.x = -this.walkSpeed;\n }\n break;\n default:\n break;\n }\n };\n\n onKeyUp = (event: KeyboardEvent) => {\n switch (event.code) {\n case \"KeyW\":\n this.speed.z = 0;\n break;\n case \"KeyS\":\n this.speed.z = 0;\n break;\n case \"KeyA\":\n this.speed.x = 0;\n break;\n case \"KeyD\":\n this.speed.x = 0;\n break;\n default:\n break;\n }\n };\n\n onMouseDown = (event: PointerEvent) => {\n const { clientX, clientY } = event;\n this.mouseStart.set(clientX, clientY);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n this.viewer.addEventListener(\"mousemove\", this.onMouseMove);\n };\n\n onMouseMove = (event: MouseEvent) => {\n const { clientX, clientY } = event;\n this.mouseDelta.set(this.mouseStart.x - clientX, this.mouseStart.y - clientY);\n this.rotateCamera(this.mouseDelta);\n };\n\n onMouseUp = (event: PointerEvent) => {\n this.speed.set(0, 0, 0);\n this.mouseStart.set(0, 0);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n this.viewer.removeEventListener(\"mousemove\", this.onMouseMove);\n };\n\n onMouseWheel = (event: WheelEvent) => {\n event.preventDefault();\n\n if (-event.deltaY < 0) {\n this.walkSpeed = Math.max(0.001, this.walkSpeed - 1);\n } else if (-event.deltaY > 0) {\n this.walkSpeed++;\n }\n };\n\n onContextMenu = (event: MouseEvent) => {\n console.log(event);\n event.preventDefault();\n event.stopImmediatePropagation();\n };\n\n onTouchStart = (event: TouchEvent) => {\n if (event.touches.length > 1) {\n this.touchStartDistance = this.getTouchsDistance(event.touches);\n } else {\n const { clientX, clientY } = event.touches[0];\n this.mouseStart.set(clientX, clientY);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n }\n };\n\n onTouchEnd = (event: TouchEvent) => {\n if (event.touches.length === 0) {\n this.touchStartDistance = 0;\n }\n this.speed.set(0, 0, 0);\n this.mouseStart.set(0, 0);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n };\n\n onTouchMove = (event: TouchEvent) => {\n if (event.touches.length === 1 && this.touchStartDistance === 0) {\n const { clientX, clientY } = event.touches[0];\n this.mouseDelta.set(this.mouseStart.x - clientX, this.mouseStart.y - clientY);\n this.rotateCamera(this.mouseDelta);\n }\n if (event.touches.length === 2) {\n const distance = this.getTouchsDistance(event.touches);\n this.speed.z = (distance - this.touchStartDistance) / 2;\n }\n };\n\n getTouchsDistance(touches) {\n const [start, end] = touches;\n const dx = start.clientX - end.clientX;\n const dy = start.clientY - end.clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n return distance;\n }\n\n onRender = (event: RenderEvent) => {\n this.viewer.camera.matrix.extractBasis(this.xAxis, this.yAxis, this.zAxis);\n this.viewer.camera.position.add(this.zAxis.multiplyScalar(-event.deltaTime * this.speed.z));\n this.viewer.camera.position.add(this.xAxis.multiplyScalar(-event.deltaTime * this.speed.x));\n };\n\n update() {}\n\n rotateCamera(delta: THREE.Vector2) {\n const rotateX = (Math.PI * delta.x) / this.viewer.canvas.clientWidth;\n const rotateY = (Math.PI * delta.y) / this.viewer.canvas.clientHeight;\n\n const quaternion = this.quaternion.clone();\n this.xRotation.setFromAxisAngle(this.viewer.camera.up, rotateX);\n this.yRotation.setFromAxisAngle(this.yRotationAxis, rotateY);\n quaternion.premultiply(this.xRotation).multiply(this.yRotation).normalize();\n\n this.viewer.camera.setRotationFromQuaternion(quaternion);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\n\nexport class ClippingPlaneDragger {\n protected viewer: any;\n protected start: THREE.Vector3;\n protected end: THREE.Vector3;\n protected delta: THREE.Vector3;\n protected planeHelper: THREE.PlaneHelper;\n\n public plane: THREE.Plane;\n\n constructor(viewer: any) {\n this.viewer = viewer;\n\n this.viewer.addEventListener(\"pointerdown\", this.onPointerDown);\n this.viewer.addEventListener(\"pointerup\", this.onPointerUp);\n\n this.plane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 0);\n\n this.start = new THREE.Vector3();\n this.end = new THREE.Vector3();\n this.delta = new THREE.Vector3();\n if (!this.viewer.renderer.clippingPlanes) this.viewer.renderer.clippingPlanes = [];\n\n this.viewer.renderer.clippingPlanes.push(this.plane);\n\n this.planeHelper = new THREE.PlaneHelper(this.plane, 150, 0xffff00);\n this.viewer.scene.add(this.planeHelper);\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"pointerdown\", this.onPointerDown);\n this.viewer.removeEventListener(\"pointerup\", this.onPointerUp);\n this.viewer.removeEventListener(\"pointermove\", this.onPointerMove);\n\n this.viewer.renderer.clippingPlanes = this.viewer.renderer.clippingPlanes.filter((plane) => this.plane !== plane);\n\n this.planeHelper.removeFromParent();\n }\n\n onPointerDown = (event: PointerEvent) => {\n this.viewer.addEventListener(\"pointermove\", this.onPointerMove);\n\n const { offsetX, offsetY } = event;\n this.start.set(offsetX, offsetY, 0.5);\n this.start = this.screenToPlane(this.start);\n this.delta.set(0, 0, 0);\n this.end.set(0, 0, 0);\n };\n\n onPointerUp = (event: PointerEvent) => {\n this.viewer.removeEventListener(\"pointermove\", this.onPointerMove);\n\n if (this.end.length() === 0) {\n const plane: THREE.Plane = this.plane;\n plane.normal.multiplyScalar(-1);\n plane.constant *= -1;\n } else {\n const { offsetX, offsetY } = event;\n this.end.set(offsetX, offsetY, 0.5);\n this.end = this.screenToPlane(this.end);\n }\n };\n\n onPointerMove = (event: PointerEvent) => {\n const { offsetX, offsetY } = event;\n this.end.set(offsetX, offsetY, 0.5);\n this.end = this.screenToPlane(this.end);\n this.delta.copy(this.end).sub(this.start);\n this.start.copy(this.end);\n\n const plane: THREE.Plane = this.plane;\n plane.translate(this.delta);\n };\n\n update(): void {}\n\n screenToWorld(v: THREE.Vector3): THREE.Vector3 {\n v.x = (2 * v.x) / this.viewer.canvas.clientWidth - 1;\n v.y = 1 - (2 * v.y) / this.viewer.canvas.clientHeight;\n return v.unproject(this.viewer.camera);\n }\n\n screenToPlane(v: THREE.Vector3): THREE.Vector3 {\n v = this.screenToWorld(v);\n const direction = v.sub(this.viewer.camera.position).normalize();\n const ray = new THREE.Ray(this.viewer.camera.position, direction);\n let plane: THREE.Plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);\n const dot = plane.normal.dot(this.plane.normal);\n if (Math.abs(dot) === 1) {\n plane = new THREE.Plane(new THREE.Vector3(1, 0, 0), 0);\n }\n const result = new THREE.Vector3();\n ray.intersectPlane(plane, result);\n return result;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class LightComponent implements IComponent {\n protected viewer: Viewer;\n protected ambientLight: THREE.AmbientLight;\n protected directLight: THREE.DirectionalLight;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n\n this.ambientLight = new THREE.AmbientLight(0xffffff, 0);\n this.viewer.camera.add(this.ambientLight);\n\n this.directLight = new THREE.DirectionalLight(0xffffff, 1);\n this.directLight.position.set(0.5, 0, 0.866); // ~60º\n this.viewer.camera.add(this.directLight);\n }\n\n dispose(): void {\n this.ambientLight.removeFromParent();\n this.directLight.removeFromParent();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { RoomEnvironment } from \"three/examples/jsm/environments/RoomEnvironment.js\";\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class BackgroundComponent implements IComponent {\n protected viewer: Viewer;\n protected backgroundColor: THREE.Color;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n\n this.backgroundColor = new THREE.Color(0xffffff);\n\n const environment = new RoomEnvironment();\n const pmremGenerator = new THREE.PMREMGenerator(this.viewer.renderer);\n\n this.viewer.scene.background = this.backgroundColor;\n this.viewer.scene.environment = pmremGenerator.fromScene(environment).texture;\n this.viewer.addEventListener(\"optionschange\", this.syncOptions);\n\n environment.dispose();\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"optionschange\", this.syncOptions);\n this.viewer.scene.environment = undefined;\n this.viewer.scene.background = undefined;\n }\n\n syncOptions = () => {\n this.backgroundColor.setHex(0xffffff);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GeometryEndEvent } from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class DefaultCameraPositionComponent implements IComponent {\n protected viewer: Viewer;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.viewer.addEventListener(\"geometryend\", this.geometryEnd);\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"geometryend\", this.geometryEnd);\n }\n\n geometryEnd = (event: GeometryEndEvent) => {\n const { data: scene } = event;\n\n scene.updateMatrixWorld();\n\n const box = new THREE.Box3().setFromObject(scene);\n const size = box.getSize(new THREE.Vector3()).length();\n const center = box.getCenter(new THREE.Vector3());\n\n scene.position.x += scene.position.x - center.x;\n scene.position.y += scene.position.y - center.y;\n scene.position.z += scene.position.z - center.z;\n\n this.viewer.camera.near = size / 100;\n this.viewer.camera.far = size * 100;\n\n this.viewer.camera.position.copy(center);\n this.viewer.camera.position.x += size / 2.0;\n this.viewer.camera.position.y += size / 5.0;\n this.viewer.camera.position.z += size / 2.0;\n\n this.viewer.camera.updateMatrixWorld();\n this.viewer.camera.updateProjectionMatrix();\n this.viewer.camera.lookAt(center);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ResizeCanvasComponent implements IComponent {\n protected viewer: Viewer;\n protected resizeObserver: ResizeObserver;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.resizeObserver = new ResizeObserver(this.resizeViewer);\n this.resizeObserver.observe(viewer.canvas.parentElement);\n }\n\n dispose() {\n this.resizeObserver.disconnect();\n }\n\n resizeViewer = (entries: ResizeObserverEntry[]) => {\n const { width, height } = entries[0].contentRect;\n\n if (!width || !height) return; // <- invisible viewer, or viewer with parent removed\n\n this.viewer.camera.aspect = width / height;\n this.viewer.camera.updateProjectionMatrix();\n this.viewer.renderer.setSize(width, height, true);\n\n this.viewer.update(true);\n this.viewer.emitEvent({ type: \"resize\", width, height });\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class RenderLoopComponent implements IComponent {\n protected viewer: Viewer;\n protected requestID = 0;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.animate();\n }\n\n dispose(): void {\n cancelAnimationFrame(this.requestID);\n }\n\n animate = (time = 0) => {\n this.requestID = requestAnimationFrame(this.animate);\n this.viewer.render(time);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { Assembly, Client, File, Model } from \"@inweb/client\";\nimport {\n CANVAS_EVENTS,\n commands,\n IOptions,\n IViewpoint,\n IViewer,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport { GLTF, GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { GLTFLoadingManager } from \"./loaders/GLTFLoadingManager\";\n\nimport { PanDragger } from \"./draggers/PanDragger\";\nimport { OrbitDragger } from \"./draggers/OrbitDragger\";\nimport { ZoomDragger } from \"./draggers/ZoomDragger\";\nimport { WalkDragger } from \"./draggers/WalkDragger\";\nimport { ClippingPlaneDragger } from \"./draggers/ClippingPlaneDragger\";\n\nimport { IComponent } from \"./IComponent\";\nimport { LightComponent } from \"./components/LightComponent\";\nimport { BackgroundComponent } from \"./components/BackgroundComponent\";\nimport { DefaultCameraPositionComponent } from \"./components/DefaultCameraPositionComponent\";\nimport { ResizeCanvasComponent } from \"./components/ResizeCanvasComponent\";\nimport { RenderLoopComponent } from \"./components/RenderLoopComponent\";\n// import { ObjectSelectionComponent } from \"./components/ObjectSelectionComponent\";\n\nexport class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> implements IViewer {\n public client: Client | undefined;\n private _options: Options;\n\n private canvaseventlistener: (event: any) => void;\n\n public canvas: HTMLCanvasElement | undefined;\n public canvasEvents: string[];\n\n public scene: THREE.Scene | undefined;\n public camera: THREE.PerspectiveCamera | undefined;\n public renderer: THREE.WebGLRenderer | undefined;\n public models: Array<GLTF>;\n public selectedObjects: Array<any>;\n\n private draggerFactory: Record<string, any>;\n private _activeDragger: any;\n\n private components: Array<IComponent>;\n\n private renderNeeded = false;\n private renderTime: DOMHighResTimeStamp;\n\n constructor(client?: Client) {\n super();\n this._options = new Options(this);\n\n this.client = client;\n\n this.canvasEvents = CANVAS_EVENTS;\n this.canvaseventlistener = (event: Event) => this.emit(event);\n\n this.draggerFactory = {\n Pan: PanDragger,\n Zoom: ZoomDragger,\n Orbit: OrbitDragger,\n Walk: WalkDragger,\n Clipping: ClippingPlaneDragger,\n };\n this._activeDragger = null;\n\n this.models = [];\n this.components = [];\n this.selectedObjects = [];\n\n this.renderTime = 0;\n\n this.render = this.render.bind(this);\n this.update = this.update.bind(this);\n }\n\n get options(): Options {\n return this._options;\n }\n\n get draggers(): string[] {\n return Object.keys(this.draggerFactory);\n }\n\n initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent<EventTarget>) => void): Promise<this> {\n this.addEventListener(\"optionschange\", (event) => this.syncOptions(event.data));\n\n this.scene = new THREE.Scene();\n\n const rect = canvas.parentElement.getBoundingClientRect();\n const width = rect.width || 1;\n const height = rect.height || 1;\n this.camera = new THREE.PerspectiveCamera(45, width / height, 0.01, 1000);\n this.camera.up.set(0, 0, 1);\n\n this.renderer = new THREE.WebGLRenderer({ canvas, antialias: true });\n this.renderer.setPixelRatio(window.devicePixelRatio);\n this.renderer.setSize(width, height);\n this.renderer.toneMapping = THREE.LinearToneMapping;\n\n this.canvas = canvas;\n this.canvasEvents.forEach((x) => canvas.addEventListener(x, this.canvaseventlistener));\n\n this.components.push(new LightComponent(this));\n this.components.push(new BackgroundComponent(this));\n this.components.push(new DefaultCameraPositionComponent(this));\n this.components.push(new ResizeCanvasComponent(this));\n this.components.push(new RenderLoopComponent(this as any));\n // this.components.push(new ObjectSelectionComponent(this as any));\n\n this.syncOptions();\n\n this.renderTime = performance.now();\n this.render(this.renderTime);\n\n if (typeof onProgress === \"function\")\n onProgress(new ProgressEvent(\"progress\", { lengthComputable: true, loaded: 1, total: 1 }));\n\n return Promise.resolve(this);\n }\n\n dispose(): this {\n this.cancel();\n this.emitEvent({ type: \"dispose\" });\n\n this.components.forEach((component: IComponent) => component.dispose());\n this.components = [];\n\n this.setActiveDragger(\"\");\n this.removeAllListeners();\n\n if (this.canvas) {\n this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n }\n\n if (this.renderer) this.renderer.dispose();\n\n this.renderer = undefined;\n this.camera = undefined;\n this.scene = undefined;\n\n return this;\n }\n\n isInitialized(): boolean {\n return !!this.renderer;\n }\n\n public render(time: DOMHighResTimeStamp): void {\n if (!this.renderNeeded) return;\n if (!this.renderer) return;\n if (!this.scene) return;\n if (!this.camera) return;\n\n this.renderer.render(this.scene, this.camera);\n this.renderNeeded = false;\n\n const deltaTime = (time - this.renderTime) / 1000;\n this.renderTime = time;\n this.emitEvent({ type: \"render\", time, deltaTime });\n }\n\n public update(force = false): void {\n this.renderNeeded = true;\n if (force) this.render(performance.now());\n this.emitEvent({ type: \"update\", data: force });\n }\n\n public syncOptions(options: IOptions = this.options): void {\n // this.update();\n }\n\n loadReferences(model: Model | File | Assembly): Promise<this> {\n // todo: load reference as text fonts\n return Promise.resolve(this);\n }\n\n async open(file: File | Assembly | Model): Promise<this> {\n if (!this.renderer) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", file, model: file });\n\n let model: Model | undefined = undefined;\n if (file) {\n const models = (await file.getModels()) || [];\n model = models.find((model: Model) => model.default) || models[0];\n }\n if (!model) throw new Error(\"No default model found\");\n\n const geometryType = model.database.split(\".\").pop();\n if (geometryType !== \"gltf\") throw new Error(`Unknown geometry type: ${geometryType}`);\n\n const url = `${model.httpClient.serverUrl}${model.path}/${model.database}`;\n const params = { requestHeader: model.httpClient.headers };\n\n await this.loadReferences(model);\n await this.loadGltfFile(url, undefined, params);\n\n return this;\n }\n\n cancel(): this {\n this.emitEvent({ type: \"cancel\" });\n return this;\n }\n\n openGltfFile(\n file: string | ArrayBuffer | Blob,\n externalData: Map<string, string | ArrayBuffer | Blob> = new Map(),\n params: {\n path?: string;\n requestHeader?: HeadersInit;\n crossOrigin?: string;\n withCredentials?: boolean;\n } = {}\n ): Promise<this> {\n if (!this.renderer) return Promise.resolve(this);\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\" });\n\n return this.loadGltfFile(file, externalData, params);\n }\n\n async loadGltfFile(\n file: string | ArrayBuffer | Blob,\n externalData: Map<string, string | ArrayBuffer | Blob> = new Map(),\n params: {\n path?: string;\n requestHeader?: HeadersInit;\n crossOrigin?: string;\n withCredentials?: boolean;\n } = {}\n ): Promise<this> {\n const manager = new GLTFLoadingManager(file, externalData, params);\n try {\n this.emitEvent({ type: \"geometrystart\" });\n\n const loader = new GLTFLoader(manager);\n loader.setPath(manager.path);\n loader.setRequestHeader(params.requestHeader as any);\n loader.setCrossOrigin(params.crossOrigin || loader.crossOrigin);\n loader.setWithCredentials(params.withCredentials || loader.withCredentials);\n\n const gltf = await loader.loadAsync(manager.fileURL, (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.emitEvent({ type: \"geometryprogress\", data: progress });\n });\n\n if (!this.scene) return this;\n if (!gltf.scene) throw new Error(\"No glTF scene found\");\n\n this.models.push(gltf);\n this.scene.add(gltf.scene);\n this.update();\n\n this.emitEvent({ type: \"databasechunk\" });\n this.emitEvent({ type: \"geometryend\", data: gltf.scene });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error });\n throw error;\n } finally {\n manager.dispose();\n }\n\n return this;\n }\n\n clear(): this {\n function disposeMaterial(material: any) {\n const materials = Array.isArray(material) ? material : [material];\n materials.forEach((material: any) => {\n // Object.keys(material).forEach((key) => material[key]?.dispose?.());\n material.dispose();\n });\n }\n\n function disposeObject(object: any) {\n if (object.geometry) object.geometry.dispose();\n if (object.material) disposeMaterial(object.material);\n }\n\n this.selectedObjects = [];\n\n this.models.forEach((gltf) => gltf.scene.traverse(disposeObject));\n this.models.forEach((gltf) => gltf.scene.removeFromParent());\n this.models = [];\n\n this.update();\n this.emitEvent({ type: \"clear\" });\n\n return this;\n }\n\n activeDragger(): any | null {\n return this._activeDragger;\n }\n\n setActiveDragger(name: string): any {\n if (!this._activeDragger || this._activeDragger.name !== name) {\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\n const Constructor = this.draggerFactory[name];\n if (Constructor) {\n this._activeDragger = new Constructor(this);\n this._activeDragger.name = name;\n }\n }\n return this._activeDragger;\n }\n\n resetActiveDragger(): void {\n const dragger = this._activeDragger;\n if (dragger) {\n this.setActiveDragger(\"\");\n this.setActiveDragger(dragger.name);\n }\n }\n\n is3D(): boolean {\n return false;\n }\n\n executeCommand(id: string, ...args: any[]): any {\n return commands(\"ThreeJS\").executeCommand(id, this, ...args);\n }\n\n drawViewpoint(viewpoint: IViewpoint): void {}\n\n createViewpoint(): IViewpoint {\n return {};\n }\n}\n"],"names":["Commands","constructor","this","_commands","Map","registerCommand","id","handler","description","thisArg","set","registerCommandAlias","alias","viewer","args","executeCommand","getCommand","get","getCommands","map","forEach","value","key","command","isDraggerCommand","draggers","includes","setActiveDragger","console","warn","undefined","result","apply","emit","type","data","commands","viewerType","defaultOptions","showWCS","cameraAnimation","antialiasing","groundShadow","shadows","cameraAxisXSpeed","cameraAxisYSpeed","ambientOcclusion","enableStreamingMode","enablePartialMode","memoryLimit","cuttingPlaneFillColor","red","green","blue","edgesColor","r","g","b","facesColor","edgesVisibility","edgesOverlap","facesOverlap","facesTransparancy","enableCustomHighlight","sceneGraph","edgeModel","reverseZoomWheel","enableZoomWheel","enableGestures","geometryType","Options","emitter","_emitter","_data","loadFromStorage","defaults","notifierChangeEvent","change","saveToStorage","window","localStorage","setItem","JSON","stringify","error","item","getItem","parse","resetToDefaults","fields","resetData","reduce","acc","field","Boolean","CANVAS_EVENTS","EventEmitter2","_listeners","addEventListener","listener","push","removeEventListener","listeners","filter","x","length","removeAllListeners","emitEvent","event","invoke","slice","call","on","off","GLTFLoadingManager","THREE","LoadingManager","file","externalData","params","super","path","resourcePath","fileURL","dataURLs","LoaderUtils","extractUrlBase","dataURL","URL","createObjectURL","Blob","setURLModifier","url","decodeURI","replace","dispose","revokeObjectURL","OrbitDragger","OrbitControls","camera","canvas","geometryEnd","scene","box","Box3","setFromObject","size","getSize","Vector3","maxDistance","update","updateViewer","mouseButtons","LEFT","MOUSE","ROTATE","MIDDLE","PAN","RIGHT","touches","ONE","TOUCH","TWO","DOLLY_PAN","screenSpacePanning","rotateSpeed","PanDragger","DOLLY_ROTATE","ZoomDragger","DOLLY","WalkDragger","onKeyDown","code","shiftKey","speed","z","walkSpeed","boostSpeed","onKeyUp","onMouseDown","clientX","clientY","mouseStart","mouseDelta","quaternion","copy","onMouseMove","y","rotateCamera","onMouseUp","onMouseWheel","preventDefault","deltaY","Math","max","onContextMenu","log","stopImmediatePropagation","onTouchStart","touchStartDistance","getTouchsDistance","onTouchEnd","onTouchMove","distance","onRender","matrix","extractBasis","xAxis","yAxis","zAxis","position","add","multiplyScalar","deltaTime","_target","clone","xRotation","Quaternion","yRotation","Vector2","yRotationAxis","_maxDistance","document","start","end","dx","dy","sqrt","delta","rotateX","PI","clientWidth","rotateY","clientHeight","setFromAxisAngle","up","premultiply","multiply","normalize","setRotationFromQuaternion","ClippingPlaneDragger","onPointerDown","onPointerMove","offsetX","offsetY","screenToPlane","onPointerUp","plane","normal","constant","sub","translate","Plane","renderer","clippingPlanes","planeHelper","PlaneHelper","removeFromParent","screenToWorld","v","unproject","direction","ray","Ray","dot","abs","intersectPlane","LightComponent","ambientLight","AmbientLight","directLight","DirectionalLight","BackgroundComponent","syncOptions","backgroundColor","setHex","Color","environment","RoomEnvironment","pmremGenerator","PMREMGenerator","background","fromScene","texture","DefaultCameraPositionComponent","updateMatrixWorld","center","getCenter","near","far","updateProjectionMatrix","lookAt","ResizeCanvasComponent","resizeViewer","entries","width","height","contentRect","aspect","setSize","resizeObserver","ResizeObserver","observe","parentElement","disconnect","RenderLoopComponent","requestID","animate","time","requestAnimationFrame","render","cancelAnimationFrame","Viewer","client","renderNeeded","_options","canvasEvents","canvaseventlistener","draggerFactory","Pan","Zoom","Orbit","Walk","Clipping","_activeDragger","models","components","selectedObjects","renderTime","bind","options","Object","keys","initialize","onProgress","Scene","rect","getBoundingClientRect","PerspectiveCamera","WebGLRenderer","antialias","setPixelRatio","devicePixelRatio","toneMapping","LinearToneMapping","performance","now","ProgressEvent","lengthComputable","loaded","total","Promise","resolve","cancel","component","isInitialized","force","loadReferences","model","open","clear","getModels","find","default","Error","database","split","pop","httpClient","serverUrl","requestHeader","headers","loadGltfFile","openGltfFile","manager","loader","GLTFLoader","setPath","setRequestHeader","setCrossOrigin","crossOrigin","setWithCredentials","withCredentials","gltf","loadAsync","progress","disposeMaterial","material","materials","Array","isArray","disposeObject","object","geometry","traverse","activeDragger","name","Constructor","resetActiveDragger","dragger","is3D","drawViewpoint","viewpoint","createViewpoint"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewer-three.module.js","sources":["../../viewer-core/dist/viewer-core.module.js","../../eventemitter2/dist/eventemitter2.module.js","../src/Viewer/loaders/GLTFLoadingManager.ts","../src/Viewer/draggers/OrbitDragger.ts","../src/Viewer/draggers/PanDragger.ts","../src/Viewer/draggers/ZoomDragger.ts","../src/Viewer/draggers/WalkDragger.ts","../src/Viewer/draggers/ClippingPlaneDragger.ts","../src/Viewer/components/LightComponent.ts","../src/Viewer/components/BackgroundComponent.ts","../src/Viewer/components/DefaultCameraPositionComponent.ts","../src/Viewer/components/ResizeCanvasComponent.ts","../src/Viewer/components/RenderLoopComponent.ts","../src/Viewer/Viewer.ts"],"sourcesContent":["class Commands {\n constructor() {\n this._commands = new Map;\n }\n registerCommand(id, handler, description, thisArg) {\n this._commands.set(id, {\n id: id,\n handler: handler,\n thisArg: thisArg,\n description: description\n });\n }\n registerCommandAlias(id, alias) {\n this.registerCommand(alias, ((viewer, ...args) => this.executeCommand(id, viewer, ...args)));\n }\n getCommand(id) {\n return this._commands.get(id);\n }\n getCommands() {\n const map = new Map;\n this._commands.forEach(((value, key) => map.set(key, value)));\n return map;\n }\n executeCommand(id, viewer, ...args) {\n const command = this._commands.get(id);\n if (!command) {\n if (viewer) {\n const isDraggerCommand = viewer.draggers.includes(id);\n if (isDraggerCommand) return viewer.setActiveDragger(id);\n }\n console.warn(`Command '${id}' not found`);\n return undefined;\n }\n const {handler: handler, thisArg: thisArg} = command;\n const result = handler.apply(thisArg, [ viewer, ...args ]);\n viewer === null || viewer === void 0 ? void 0 : viewer.emit({\n type: \"command\",\n data: id,\n args: args\n });\n return result;\n }\n}\n\nconst _commands = new Map;\n\nfunction commands(viewerType = \"\") {\n let result = _commands.get(viewerType);\n if (!result) {\n result = new Commands;\n _commands.set(viewerType, result);\n }\n return result;\n}\n\ncommands(\"\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"VisualizeJS\").registerCommand(\"noop\", (() => {}));\n\ncommands(\"ThreeJS\").registerCommand(\"noop\", (() => {}));\n\nfunction defaultOptions() {\n return {\n showWCS: true,\n cameraAnimation: true,\n antialiasing: true,\n groundShadow: false,\n shadows: false,\n cameraAxisXSpeed: 4,\n cameraAxisYSpeed: 1,\n ambientOcclusion: false,\n enableStreamingMode: true,\n enablePartialMode: false,\n memoryLimit: 3294967296,\n cuttingPlaneFillColor: {\n red: 255,\n green: 152,\n blue: 0\n },\n edgesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n facesColor: {\n r: 255,\n g: 152,\n b: 0\n },\n edgesVisibility: true,\n edgesOverlap: true,\n facesOverlap: false,\n facesTransparancy: 200,\n enableCustomHighlight: true,\n sceneGraph: false,\n edgeModel: true,\n reverseZoomWheel: false,\n enableZoomWheel: true,\n enableGestures: true,\n geometryType: \"vsfx\"\n };\n}\n\nclass Options {\n constructor(emitter) {\n this._emitter = emitter;\n this._data = defaultOptions();\n this.loadFromStorage();\n }\n static defaults() {\n return defaultOptions();\n }\n notifierChangeEvent() {\n console.warn(\"Options.notifierChangeEvent() has been deprecated since 25.3 and will be removed in a future release, use Options.change() instead.\");\n this.change();\n }\n change() {\n if (this._emitter !== undefined) {\n this.saveToStorage();\n this._emitter.emit({\n type: \"optionschange\",\n data: this\n });\n }\n }\n saveToStorage() {\n if (typeof window !== \"undefined\") try {\n localStorage.setItem(\"od-client-settings\", JSON.stringify(this.data));\n } catch (error) {\n console.error(\"Cannot save client settings.\", error);\n }\n }\n loadFromStorage() {\n if (typeof window !== \"undefined\") try {\n const item = localStorage.getItem(\"od-client-settings\");\n if (item) {\n const data = JSON.parse(item);\n this.data = {\n ...data\n };\n }\n } catch (error) {\n console.error(\"Cannot load client settings.\", error);\n }\n }\n resetToDefaults(fields) {\n if (fields !== undefined) {\n const defaults = Options.defaults();\n const resetData = fields.reduce(((acc, field) => {\n acc[field] = defaults[field];\n return acc;\n }), {});\n this.data = {\n ...this.data,\n ...resetData\n };\n } else {\n this.data = {\n ...this.data,\n ...Options.defaults()\n };\n }\n }\n get data() {\n return this._data;\n }\n set data(value) {\n const enablePartialMode = value.enableStreamingMode ? value.enablePartialMode : false;\n const sceneGraph = enablePartialMode ? false : value.sceneGraph;\n this._data = {\n ...Options.defaults(),\n ...this._data,\n ...value,\n enablePartialMode: enablePartialMode,\n sceneGraph: sceneGraph\n };\n this.change();\n }\n get showWCS() {\n return this._data.showWCS;\n }\n set showWCS(value) {\n this._data.showWCS = value;\n this.change();\n }\n get cameraAnimation() {\n return this._data.cameraAnimation;\n }\n set cameraAnimation(value) {\n this._data.cameraAnimation = value;\n this.change();\n }\n get antialiasing() {\n return this._data.antialiasing;\n }\n set antialiasing(value) {\n this._data.antialiasing = value;\n this.change();\n }\n get groundShadow() {\n return this._data.groundShadow;\n }\n set groundShadow(value) {\n this._data.groundShadow = value;\n this.change();\n }\n get shadows() {\n return this._data.shadows;\n }\n set shadows(value) {\n this._data.shadows = value;\n this.change();\n }\n get cameraAxisXSpeed() {\n return this._data.cameraAxisXSpeed;\n }\n set cameraAxisXSpeed(value) {\n this._data.cameraAxisXSpeed = value;\n this.change();\n }\n get cameraAxisYSpeed() {\n return this._data.cameraAxisYSpeed;\n }\n set cameraAxisYSpeed(value) {\n this.cameraAxisYSpeed = value;\n this.change();\n }\n get ambientOcclusion() {\n return this._data.ambientOcclusion;\n }\n set ambientOcclusion(value) {\n this._data.ambientOcclusion = value;\n this.change();\n }\n get enableStreamingMode() {\n return this._data.enableStreamingMode;\n }\n set enableStreamingMode(value) {\n this._data.enableStreamingMode = value;\n if (!value) this._data.enablePartialMode = false;\n this.change();\n }\n get enablePartialMode() {\n return this._data.enablePartialMode;\n }\n set enablePartialMode(value) {\n this._data.enablePartialMode = value;\n if (value) {\n this._data.enableStreamingMode = true;\n this._data.sceneGraph = false;\n }\n this.change();\n }\n get memoryLimit() {\n return this._data.memoryLimit;\n }\n set memoryLimit(value) {\n this._data.memoryLimit = value;\n this.change();\n }\n get cuttingPlaneFillColor() {\n return this._data.cuttingPlaneFillColor;\n }\n set cuttingPlaneFillColor(value) {\n this._data.cuttingPlaneFillColor = value;\n this.change();\n }\n get edgesColor() {\n return this._data.edgesColor;\n }\n set edgesColor(value) {\n this._data.edgesColor = value;\n this.change();\n }\n get facesColor() {\n return this._data.facesColor;\n }\n set facesColor(value) {\n this._data.facesColor = value;\n this.change();\n }\n get edgesVisibility() {\n return this._data.edgesVisibility;\n }\n set edgesVisibility(value) {\n this._data.edgesVisibility = value;\n this.change();\n }\n get edgesOverlap() {\n return this._data.edgesOverlap;\n }\n set edgesOverlap(value) {\n this._data.edgesOverlap = value;\n this.change();\n }\n get facesOverlap() {\n return this._data.facesOverlap;\n }\n set facesOverlap(value) {\n this._data.facesOverlap = value;\n this.change();\n }\n get facesTransparancy() {\n return this._data.facesTransparancy;\n }\n set facesTransparancy(value) {\n this._data.facesTransparancy = value;\n this.change();\n }\n get enableCustomHighlight() {\n return this._data.enableCustomHighlight;\n }\n set enableCustomHighlight(value) {\n this._data.enableCustomHighlight = value;\n this.change();\n }\n get sceneGraph() {\n return this._data.sceneGraph;\n }\n set sceneGraph(value) {\n this._data.sceneGraph = value;\n if (value) this._data.enablePartialMode = false;\n this.change();\n }\n get edgeModel() {\n return Boolean(this._data.edgeModel);\n }\n set edgeModel(value) {\n this._data.edgeModel = Boolean(value);\n this.change();\n }\n get reverseZoomWheel() {\n return this._data.reverseZoomWheel;\n }\n set reverseZoomWheel(value) {\n this._data.reverseZoomWheel = !!value;\n this.change();\n }\n get enableZoomWheel() {\n return this._data.enableZoomWheel;\n }\n set enableZoomWheel(value) {\n this._data.enableZoomWheel = !!value;\n this.change();\n }\n get enableGestures() {\n return this._data.enableGestures;\n }\n set enableGestures(value) {\n this._data.enableGestures = !!value;\n this.change();\n }\n get geometryType() {\n return this._data.geometryType;\n }\n set geometryType(value) {\n this._data.geometryType = value;\n this.change();\n }\n}\n\nconst CanvasEvents = [ \"click\", \"contextmenu\", \"dblclick\", \"mousedown\", \"mouseleave\", \"mousemove\", \"mouseup\", \"pointercancel\", \"pointerdown\", \"pointerleave\", \"pointermove\", \"pointerup\", \"touchcancel\", \"touchend\", \"touchmove\", \"touchstart\", \"wheel\" ];\n\nconst CANVAS_EVENTS = CanvasEvents;\n\nexport { CANVAS_EVENTS, CanvasEvents, Options, commands, defaultOptions };\n//# sourceMappingURL=viewer-core.module.js.map\n","class EventEmitter2 {\n constructor() {\n this._listeners = {};\n }\n addEventListener(type, listener) {\n if (this._listeners[type] === undefined) this._listeners[type] = [];\n this._listeners[type].push(listener);\n return this;\n }\n removeEventListener(type, listener) {\n if (this._listeners[type] === undefined) return this;\n const listeners = this._listeners[type].filter((x => x !== listener));\n if (listeners.length !== 0) this._listeners[type] = listeners; else delete this._listeners[type];\n return this;\n }\n removeAllListeners(type) {\n if (type) delete this._listeners[type]; else this._listeners = {};\n return this;\n }\n emitEvent(event) {\n if (this._listeners[event.type] === undefined) return false;\n const invoke = this._listeners[event.type].slice();\n invoke.forEach((listener => listener.call(this, event)));\n return true;\n }\n on(type, listener) {\n return this.addEventListener(type, listener);\n }\n off(type, listener) {\n return this.removeEventListener(type, listener);\n }\n emit(event, ...args) {\n if (typeof event === \"string\") return this.emitEvent({\n type: event,\n args: args\n }); else if (typeof event === \"object\") return this.emitEvent(event); else return false;\n }\n}\n\nexport { EventEmitter2 };\n//# sourceMappingURL=eventemitter2.module.js.map\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\n\nexport class GLTFLoadingManager extends THREE.LoadingManager {\n public path = \"\";\n public resourcePath = \"\";\n public fileURL = \"\";\n public dataURLs = new Map();\n\n constructor(\n file: string | ArrayBuffer | Blob,\n externalData: Map<string, string | ArrayBuffer | Blob> = new Map(),\n params: { path?: string } = {}\n ) {\n super();\n\n this.path = params.path || \"\";\n\n if (typeof file === \"string\") {\n this.fileURL = file;\n this.resourcePath = THREE.LoaderUtils.extractUrlBase(file);\n } else {\n externalData.forEach((value, key) => (this.fileURL = value === file ? key : this.fileURL));\n externalData.set(this.fileURL, file);\n }\n\n externalData.forEach((value, key) => {\n let dataURL: string;\n if (typeof value === \"string\") dataURL = value;\n else dataURL = URL.createObjectURL(new Blob([value]));\n this.dataURLs.set(key, dataURL);\n });\n\n this.setURLModifier((url: string) => {\n const key = decodeURI(url)\n .replace(this.path, \"\")\n .replace(this.resourcePath, \"\")\n .replace(/^(\\.?\\/)/, \"\");\n const dataURL = this.dataURLs.get(key);\n return dataURL ?? url;\n });\n }\n\n dispose(): void {\n this.dataURLs.forEach(URL.revokeObjectURL);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GeometryEndEvent } from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport { OrbitControls } from \"three/examples/jsm/controls/OrbitControls.js\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class OrbitDragger extends OrbitControls {\n private viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super(viewer.camera, viewer.canvas);\n this.mouseButtons = { LEFT: THREE.MOUSE.ROTATE, MIDDLE: THREE.MOUSE.PAN, RIGHT: THREE.MOUSE.PAN };\n this.touches = { ONE: THREE.TOUCH.ROTATE, TWO: THREE.TOUCH.DOLLY_PAN };\n this.screenSpacePanning = true;\n this.rotateSpeed = 0.33;\n this.viewer = viewer;\n this.viewer.addEventListener(\"geometryend\", this.geometryEnd);\n this.addEventListener(\"change\", this.updateViewer);\n }\n\n override dispose(): void {\n this.removeEventListener(\"change\", this.updateViewer);\n this.viewer.removeEventListener(\"geometryend\", this.geometryEnd);\n super.dispose();\n }\n\n geometryEnd = (event: GeometryEndEvent) => {\n const { data: scene } = event;\n const box = new THREE.Box3().setFromObject(scene);\n const size = box.getSize(new THREE.Vector3()).length();\n\n this.maxDistance = size * 10;\n this.update();\n };\n\n updateViewer = () => {\n this.viewer.update();\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { OrbitDragger } from \"./OrbitDragger\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class PanDragger extends OrbitDragger {\n constructor(viewer: Viewer) {\n super(viewer);\n this.mouseButtons = { LEFT: THREE.MOUSE.PAN, MIDDLE: THREE.MOUSE.PAN, RIGHT: THREE.MOUSE.PAN };\n this.touches = { ONE: THREE.TOUCH.PAN, TWO: THREE.TOUCH.DOLLY_ROTATE };\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { OrbitDragger } from \"./OrbitDragger\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ZoomDragger extends OrbitDragger {\n constructor(viewer: Viewer) {\n super(viewer);\n this.mouseButtons = { LEFT: THREE.MOUSE.DOLLY, MIDDLE: THREE.MOUSE.PAN, RIGHT: THREE.MOUSE.PAN };\n this.touches = { ONE: THREE.TOUCH.DOLLY_PAN, TWO: THREE.TOUCH.DOLLY_PAN };\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { RenderEvent } from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class WalkDragger {\n protected viewer: Viewer;\n protected camera: THREE.Camera;\n protected canvas: HTMLCanvasElement;\n protected _target: THREE.Vector3;\n protected quaternion: THREE.Quaternion;\n protected mouseStart: THREE.Vector2;\n protected mouseDelta: THREE.Vector2;\n protected xAxis: THREE.Vector3;\n protected yAxis: THREE.Vector3;\n protected zAxis: THREE.Vector3;\n protected speed: THREE.Vector3;\n protected _maxDistance: number;\n protected xRotation: THREE.Quaternion;\n protected yRotation: THREE.Quaternion;\n protected yRotationAxis: THREE.Vector3;\n protected touchStartDistance: number;\n\n public walkSpeed: number;\n public boostSpeed: number;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n\n this._target = new THREE.Vector3();\n\n this.quaternion = this.viewer.camera.quaternion.clone();\n this.xRotation = new THREE.Quaternion();\n this.yRotation = new THREE.Quaternion();\n\n this.mouseStart = new THREE.Vector2();\n this.mouseDelta = new THREE.Vector2();\n\n this.xAxis = new THREE.Vector3();\n this.yAxis = new THREE.Vector3();\n this.zAxis = new THREE.Vector3();\n this.yRotationAxis = new THREE.Vector3(1, 0, 0);\n this.walkSpeed = 1;\n this.boostSpeed = 5;\n this.speed = new THREE.Vector3();\n this._maxDistance = 1;\n\n this.touchStartDistance = 0;\n\n this.viewer.addEventListener(\"render\", this.onRender);\n\n this.viewer.addEventListener(\"contextmenu\", this.onContextMenu);\n\n this.viewer.addEventListener(\"mousedown\", this.onMouseDown);\n this.viewer.addEventListener(\"mouseup\", this.onMouseUp);\n\n this.viewer.addEventListener(\"touchstart\", this.onTouchStart);\n this.viewer.addEventListener(\"touchmove\", this.onTouchMove);\n this.viewer.addEventListener(\"touchend\", this.onTouchEnd);\n\n this.viewer.addEventListener(\"wheel\", this.onMouseWheel);\n\n document.addEventListener(\"keydown\", this.onKeyDown);\n document.addEventListener(\"keyup\", this.onKeyUp);\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"render\", this.onRender);\n\n this.viewer.removeEventListener(\"contextmenu\", this.onContextMenu);\n\n this.viewer.removeEventListener(\"mousedown\", this.onMouseDown);\n this.viewer.removeEventListener(\"mouseup\", this.onMouseUp);\n this.viewer.removeEventListener(\"mousemove\", this.onMouseMove);\n\n this.viewer.removeEventListener(\"touchstart\", this.onTouchStart);\n this.viewer.removeEventListener(\"touchmove\", this.onTouchMove);\n this.viewer.removeEventListener(\"touchend\", this.onTouchEnd);\n\n this.viewer.removeEventListener(\"wheel\", this.onMouseWheel);\n\n document.removeEventListener(\"keydown\", this.onKeyDown);\n document.removeEventListener(\"keyup\", this.onKeyUp);\n }\n\n onKeyDown = (event: KeyboardEvent) => {\n switch (event.code) {\n case \"KeyW\": // Forward\n if (event.shiftKey) {\n this.speed.z = this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.z = this.walkSpeed;\n }\n break;\n case \"KeyS\": // Backward\n if (event.shiftKey) {\n this.speed.z = -this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.z = -this.walkSpeed;\n }\n break;\n case \"KeyA\": // Left\n if (event.shiftKey) {\n this.speed.x = this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.x = this.walkSpeed;\n }\n break;\n case \"KeyD\": // Right\n if (event.shiftKey) {\n this.speed.x = -this.walkSpeed * this.boostSpeed;\n } else {\n this.speed.x = -this.walkSpeed;\n }\n break;\n default:\n break;\n }\n };\n\n onKeyUp = (event: KeyboardEvent) => {\n switch (event.code) {\n case \"KeyW\":\n this.speed.z = 0;\n break;\n case \"KeyS\":\n this.speed.z = 0;\n break;\n case \"KeyA\":\n this.speed.x = 0;\n break;\n case \"KeyD\":\n this.speed.x = 0;\n break;\n default:\n break;\n }\n };\n\n onMouseDown = (event: PointerEvent) => {\n const { clientX, clientY } = event;\n this.mouseStart.set(clientX, clientY);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n this.viewer.addEventListener(\"mousemove\", this.onMouseMove);\n };\n\n onMouseMove = (event: MouseEvent) => {\n const { clientX, clientY } = event;\n this.mouseDelta.set(this.mouseStart.x - clientX, this.mouseStart.y - clientY);\n this.rotateCamera(this.mouseDelta);\n };\n\n onMouseUp = (event: PointerEvent) => {\n this.speed.set(0, 0, 0);\n this.mouseStart.set(0, 0);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n this.viewer.removeEventListener(\"mousemove\", this.onMouseMove);\n };\n\n onMouseWheel = (event: WheelEvent) => {\n event.preventDefault();\n\n if (-event.deltaY < 0) {\n this.walkSpeed = Math.max(0.001, this.walkSpeed - 1);\n } else if (-event.deltaY > 0) {\n this.walkSpeed++;\n }\n };\n\n onContextMenu = (event: MouseEvent) => {\n console.log(event);\n event.preventDefault();\n event.stopImmediatePropagation();\n };\n\n onTouchStart = (event: TouchEvent) => {\n if (event.touches.length > 1) {\n this.touchStartDistance = this.getTouchsDistance(event.touches);\n } else {\n const { clientX, clientY } = event.touches[0];\n this.mouseStart.set(clientX, clientY);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n }\n };\n\n onTouchEnd = (event: TouchEvent) => {\n if (event.touches.length === 0) {\n this.touchStartDistance = 0;\n }\n this.speed.set(0, 0, 0);\n this.mouseStart.set(0, 0);\n this.mouseDelta.set(0, 0);\n this.quaternion.copy(this.viewer.camera.quaternion);\n };\n\n onTouchMove = (event: TouchEvent) => {\n if (event.touches.length === 1 && this.touchStartDistance === 0) {\n const { clientX, clientY } = event.touches[0];\n this.mouseDelta.set(this.mouseStart.x - clientX, this.mouseStart.y - clientY);\n this.rotateCamera(this.mouseDelta);\n }\n if (event.touches.length === 2) {\n const distance = this.getTouchsDistance(event.touches);\n this.speed.z = (distance - this.touchStartDistance) / 2;\n }\n };\n\n getTouchsDistance(touches) {\n const [start, end] = touches;\n const dx = start.clientX - end.clientX;\n const dy = start.clientY - end.clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n return distance;\n }\n\n onRender = (event: RenderEvent) => {\n this.viewer.camera.matrix.extractBasis(this.xAxis, this.yAxis, this.zAxis);\n this.viewer.camera.position.add(this.zAxis.multiplyScalar(-event.deltaTime * this.speed.z));\n this.viewer.camera.position.add(this.xAxis.multiplyScalar(-event.deltaTime * this.speed.x));\n };\n\n update() {}\n\n rotateCamera(delta: THREE.Vector2) {\n const rotateX = (Math.PI * delta.x) / this.viewer.canvas.clientWidth;\n const rotateY = (Math.PI * delta.y) / this.viewer.canvas.clientHeight;\n\n const quaternion = this.quaternion.clone();\n this.xRotation.setFromAxisAngle(this.viewer.camera.up, rotateX);\n this.yRotation.setFromAxisAngle(this.yRotationAxis, rotateY);\n quaternion.premultiply(this.xRotation).multiply(this.yRotation).normalize();\n\n this.viewer.camera.setRotationFromQuaternion(quaternion);\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\n\nexport class ClippingPlaneDragger {\n protected viewer: any;\n protected start: THREE.Vector3;\n protected end: THREE.Vector3;\n protected delta: THREE.Vector3;\n protected planeHelper: THREE.PlaneHelper;\n\n public plane: THREE.Plane;\n\n constructor(viewer: any) {\n this.viewer = viewer;\n\n this.viewer.addEventListener(\"pointerdown\", this.onPointerDown);\n this.viewer.addEventListener(\"pointerup\", this.onPointerUp);\n\n this.plane = new THREE.Plane(new THREE.Vector3(0, 1, 0), 0);\n\n this.start = new THREE.Vector3();\n this.end = new THREE.Vector3();\n this.delta = new THREE.Vector3();\n if (!this.viewer.renderer.clippingPlanes) this.viewer.renderer.clippingPlanes = [];\n\n this.viewer.renderer.clippingPlanes.push(this.plane);\n\n this.planeHelper = new THREE.PlaneHelper(this.plane, 150, 0xffff00);\n this.viewer.scene.add(this.planeHelper);\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"pointerdown\", this.onPointerDown);\n this.viewer.removeEventListener(\"pointerup\", this.onPointerUp);\n this.viewer.removeEventListener(\"pointermove\", this.onPointerMove);\n\n this.viewer.renderer.clippingPlanes = this.viewer.renderer.clippingPlanes.filter((plane) => this.plane !== plane);\n\n this.planeHelper.removeFromParent();\n }\n\n onPointerDown = (event: PointerEvent) => {\n this.viewer.addEventListener(\"pointermove\", this.onPointerMove);\n\n const { offsetX, offsetY } = event;\n this.start.set(offsetX, offsetY, 0.5);\n this.start = this.screenToPlane(this.start);\n this.delta.set(0, 0, 0);\n this.end.set(0, 0, 0);\n };\n\n onPointerUp = (event: PointerEvent) => {\n this.viewer.removeEventListener(\"pointermove\", this.onPointerMove);\n\n if (this.end.length() === 0) {\n const plane: THREE.Plane = this.plane;\n plane.normal.multiplyScalar(-1);\n plane.constant *= -1;\n } else {\n const { offsetX, offsetY } = event;\n this.end.set(offsetX, offsetY, 0.5);\n this.end = this.screenToPlane(this.end);\n }\n };\n\n onPointerMove = (event: PointerEvent) => {\n const { offsetX, offsetY } = event;\n this.end.set(offsetX, offsetY, 0.5);\n this.end = this.screenToPlane(this.end);\n this.delta.copy(this.end).sub(this.start);\n this.start.copy(this.end);\n\n const plane: THREE.Plane = this.plane;\n plane.translate(this.delta);\n };\n\n update(): void {}\n\n screenToWorld(v: THREE.Vector3): THREE.Vector3 {\n v.x = (2 * v.x) / this.viewer.canvas.clientWidth - 1;\n v.y = 1 - (2 * v.y) / this.viewer.canvas.clientHeight;\n return v.unproject(this.viewer.camera);\n }\n\n screenToPlane(v: THREE.Vector3): THREE.Vector3 {\n v = this.screenToWorld(v);\n const direction = v.sub(this.viewer.camera.position).normalize();\n const ray = new THREE.Ray(this.viewer.camera.position, direction);\n let plane: THREE.Plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);\n const dot = plane.normal.dot(this.plane.normal);\n if (Math.abs(dot) === 1) {\n plane = new THREE.Plane(new THREE.Vector3(1, 0, 0), 0);\n }\n const result = new THREE.Vector3();\n ray.intersectPlane(plane, result);\n return result;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class LightComponent implements IComponent {\n protected viewer: Viewer;\n protected ambientLight: THREE.AmbientLight;\n protected directLight: THREE.DirectionalLight;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n\n this.ambientLight = new THREE.AmbientLight(0xffffff, 0);\n this.viewer.camera.add(this.ambientLight);\n\n this.directLight = new THREE.DirectionalLight(0xffffff, 1);\n this.directLight.position.set(0.5, 0, 0.866); // ~60º\n this.viewer.camera.add(this.directLight);\n }\n\n dispose(): void {\n this.ambientLight.removeFromParent();\n this.directLight.removeFromParent();\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport * as THREE from \"three\";\nimport { RoomEnvironment } from \"three/examples/jsm/environments/RoomEnvironment.js\";\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class BackgroundComponent implements IComponent {\n protected viewer: Viewer;\n protected backgroundColor: THREE.Color;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n\n this.backgroundColor = new THREE.Color(0xffffff);\n\n const environment = new RoomEnvironment();\n const pmremGenerator = new THREE.PMREMGenerator(this.viewer.renderer);\n\n this.viewer.scene.background = this.backgroundColor;\n this.viewer.scene.environment = pmremGenerator.fromScene(environment).texture;\n this.viewer.addEventListener(\"optionschange\", this.syncOptions);\n\n environment.dispose();\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"optionschange\", this.syncOptions);\n this.viewer.scene.environment = undefined;\n this.viewer.scene.background = undefined;\n }\n\n syncOptions = () => {\n this.backgroundColor.setHex(0xffffff);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GeometryEndEvent } from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class DefaultCameraPositionComponent implements IComponent {\n protected viewer: Viewer;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.viewer.addEventListener(\"geometryend\", this.geometryEnd);\n }\n\n dispose(): void {\n this.viewer.removeEventListener(\"geometryend\", this.geometryEnd);\n }\n\n geometryEnd = (event: GeometryEndEvent) => {\n const { data: scene } = event;\n\n scene.updateMatrixWorld();\n\n const box = new THREE.Box3().setFromObject(scene);\n const size = box.getSize(new THREE.Vector3()).length();\n const center = box.getCenter(new THREE.Vector3());\n\n scene.position.x += scene.position.x - center.x;\n scene.position.y += scene.position.y - center.y;\n scene.position.z += scene.position.z - center.z;\n\n this.viewer.camera.near = size / 100;\n this.viewer.camera.far = size * 100;\n\n this.viewer.camera.position.copy(center);\n this.viewer.camera.position.x += size / 2.0;\n this.viewer.camera.position.y += size / 5.0;\n this.viewer.camera.position.z += size / 2.0;\n\n this.viewer.camera.updateMatrixWorld();\n this.viewer.camera.updateProjectionMatrix();\n this.viewer.camera.lookAt(center);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class ResizeCanvasComponent implements IComponent {\n protected viewer: Viewer;\n protected resizeObserver: ResizeObserver;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.resizeObserver = new ResizeObserver(this.resizeViewer);\n this.resizeObserver.observe(viewer.canvas.parentElement);\n }\n\n dispose() {\n this.resizeObserver.disconnect();\n }\n\n resizeViewer = (entries: ResizeObserverEntry[]) => {\n const { width, height } = entries[0].contentRect;\n\n if (!width || !height) return; // <- invisible viewer, or viewer with parent removed\n\n this.viewer.camera.aspect = width / height;\n this.viewer.camera.updateProjectionMatrix();\n this.viewer.renderer.setSize(width, height, true);\n\n this.viewer.update(true);\n this.viewer.emitEvent({ type: \"resize\", width, height });\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { IComponent } from \"../IComponent\";\nimport type { Viewer } from \"../Viewer\";\n\nexport class RenderLoopComponent implements IComponent {\n protected viewer: Viewer;\n protected requestID = 0;\n\n constructor(viewer: Viewer) {\n this.viewer = viewer;\n this.animate();\n }\n\n dispose(): void {\n cancelAnimationFrame(this.requestID);\n }\n\n animate = (time = 0) => {\n this.requestID = requestAnimationFrame(this.animate);\n this.viewer.render(time);\n };\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2023, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2021 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { EventEmitter2 } from \"@inweb/eventemitter2\";\nimport { Assembly, Client, File, Model } from \"@inweb/client\";\nimport {\n CANVAS_EVENTS,\n commands,\n IOptions,\n IViewpoint,\n IViewer,\n Options,\n OptionsEventMap,\n ViewerEventMap,\n} from \"@inweb/viewer-core\";\nimport * as THREE from \"three\";\nimport { GLTF, GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { GLTFLoadingManager } from \"./loaders/GLTFLoadingManager\";\n\nimport { PanDragger } from \"./draggers/PanDragger\";\nimport { OrbitDragger } from \"./draggers/OrbitDragger\";\nimport { ZoomDragger } from \"./draggers/ZoomDragger\";\nimport { WalkDragger } from \"./draggers/WalkDragger\";\nimport { ClippingPlaneDragger } from \"./draggers/ClippingPlaneDragger\";\n\nimport { IComponent } from \"./IComponent\";\nimport { LightComponent } from \"./components/LightComponent\";\nimport { BackgroundComponent } from \"./components/BackgroundComponent\";\nimport { DefaultCameraPositionComponent } from \"./components/DefaultCameraPositionComponent\";\nimport { ResizeCanvasComponent } from \"./components/ResizeCanvasComponent\";\nimport { RenderLoopComponent } from \"./components/RenderLoopComponent\";\n// import { ObjectSelectionComponent } from \"./components/ObjectSelectionComponent\";\n\nexport class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> implements IViewer {\n public client: Client | undefined;\n private _options: Options;\n\n private canvaseventlistener: (event: any) => void;\n\n public canvas: HTMLCanvasElement | undefined;\n public canvasEvents: string[];\n\n public scene: THREE.Scene | undefined;\n public camera: THREE.PerspectiveCamera | undefined;\n public renderer: THREE.WebGLRenderer | undefined;\n public models: Array<GLTF>;\n public selectedObjects: Array<any>;\n\n private draggerFactory: Record<string, any>;\n private _activeDragger: any;\n\n private components: Array<IComponent>;\n\n private renderNeeded = false;\n private renderTime: DOMHighResTimeStamp;\n\n constructor(client?: Client) {\n super();\n this._options = new Options(this);\n\n this.client = client;\n\n this.canvasEvents = CANVAS_EVENTS.slice();\n this.canvaseventlistener = (event: Event) => this.emit(event);\n\n this.draggerFactory = {\n Pan: PanDragger,\n Zoom: ZoomDragger,\n Orbit: OrbitDragger,\n Walk: WalkDragger,\n Clipping: ClippingPlaneDragger,\n };\n this._activeDragger = null;\n\n this.models = [];\n this.components = [];\n this.selectedObjects = [];\n\n this.renderTime = 0;\n\n this.render = this.render.bind(this);\n this.update = this.update.bind(this);\n }\n\n get options(): Options {\n return this._options;\n }\n\n get draggers(): string[] {\n return Object.keys(this.draggerFactory);\n }\n\n initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent<EventTarget>) => void): Promise<this> {\n this.addEventListener(\"optionschange\", (event) => this.syncOptions(event.data));\n\n this.scene = new THREE.Scene();\n\n const rect = canvas.parentElement.getBoundingClientRect();\n const width = rect.width || 1;\n const height = rect.height || 1;\n this.camera = new THREE.PerspectiveCamera(45, width / height, 0.01, 1000);\n this.camera.up.set(0, 0, 1);\n\n this.renderer = new THREE.WebGLRenderer({ canvas, antialias: true });\n this.renderer.setPixelRatio(window.devicePixelRatio);\n this.renderer.setSize(width, height);\n this.renderer.toneMapping = THREE.LinearToneMapping;\n\n this.canvas = canvas;\n this.canvasEvents.forEach((x) => canvas.addEventListener(x, this.canvaseventlistener));\n\n this.components.push(new LightComponent(this));\n this.components.push(new BackgroundComponent(this));\n this.components.push(new DefaultCameraPositionComponent(this));\n this.components.push(new ResizeCanvasComponent(this));\n this.components.push(new RenderLoopComponent(this as any));\n // this.components.push(new ObjectSelectionComponent(this as any));\n\n this.syncOptions();\n\n this.renderTime = performance.now();\n this.render(this.renderTime);\n\n if (typeof onProgress === \"function\")\n onProgress(new ProgressEvent(\"progress\", { lengthComputable: true, loaded: 1, total: 1 }));\n\n return Promise.resolve(this);\n }\n\n dispose(): this {\n this.cancel();\n this.emitEvent({ type: \"dispose\" });\n\n this.components.forEach((component: IComponent) => component.dispose());\n this.components = [];\n\n this.setActiveDragger(\"\");\n this.removeAllListeners();\n\n if (this.canvas) {\n this.canvasEvents.forEach((x) => this.canvas.removeEventListener(x, this.canvaseventlistener));\n this.canvas = undefined;\n }\n\n if (this.renderer) this.renderer.dispose();\n\n this.renderer = undefined;\n this.camera = undefined;\n this.scene = undefined;\n\n return this;\n }\n\n isInitialized(): boolean {\n return !!this.renderer;\n }\n\n public render(time: DOMHighResTimeStamp): void {\n if (!this.renderNeeded) return;\n if (!this.renderer) return;\n if (!this.scene) return;\n if (!this.camera) return;\n\n this.renderer.render(this.scene, this.camera);\n this.renderNeeded = false;\n\n const deltaTime = (time - this.renderTime) / 1000;\n this.renderTime = time;\n this.emitEvent({ type: \"render\", time, deltaTime });\n }\n\n public update(force = false): void {\n this.renderNeeded = true;\n if (force) this.render(performance.now());\n this.emitEvent({ type: \"update\", data: force });\n }\n\n public syncOptions(options: IOptions = this.options): void {\n // this.update();\n }\n\n loadReferences(model: Model | File | Assembly): Promise<this> {\n // todo: load reference as text fonts\n return Promise.resolve(this);\n }\n\n async open(file: File | Assembly | Model): Promise<this> {\n if (!this.renderer) return this;\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\", file, model: file });\n\n let model: Model | undefined = undefined;\n if (file) {\n const models = (await file.getModels()) || [];\n model = models.find((model: Model) => model.default) || models[0];\n }\n if (!model) throw new Error(\"No default model found\");\n\n const geometryType = model.database.split(\".\").pop();\n if (geometryType !== \"gltf\") throw new Error(`Unknown geometry type: ${geometryType}`);\n\n const url = `${model.httpClient.serverUrl}${model.path}/${model.database}`;\n const params = { requestHeader: model.httpClient.headers };\n\n await this.loadReferences(model);\n await this.loadGltfFile(url, undefined, params);\n\n return this;\n }\n\n cancel(): this {\n this.emitEvent({ type: \"cancel\" });\n return this;\n }\n\n openGltfFile(\n file: string | ArrayBuffer | Blob,\n externalData: Map<string, string | ArrayBuffer | Blob> = new Map(),\n params: {\n path?: string;\n requestHeader?: HeadersInit;\n crossOrigin?: string;\n withCredentials?: boolean;\n } = {}\n ): Promise<this> {\n if (!this.renderer) return Promise.resolve(this);\n\n this.cancel();\n this.clear();\n\n this.emitEvent({ type: \"open\" });\n\n return this.loadGltfFile(file, externalData, params);\n }\n\n async loadGltfFile(\n file: string | ArrayBuffer | Blob,\n externalData: Map<string, string | ArrayBuffer | Blob> = new Map(),\n params: {\n path?: string;\n requestHeader?: HeadersInit;\n crossOrigin?: string;\n withCredentials?: boolean;\n } = {}\n ): Promise<this> {\n const manager = new GLTFLoadingManager(file, externalData, params);\n try {\n this.emitEvent({ type: \"geometrystart\" });\n\n const loader = new GLTFLoader(manager);\n loader.setPath(manager.path);\n loader.setRequestHeader(params.requestHeader as any);\n loader.setCrossOrigin(params.crossOrigin || loader.crossOrigin);\n loader.setWithCredentials(params.withCredentials || loader.withCredentials);\n\n const gltf = await loader.loadAsync(manager.fileURL, (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.emitEvent({ type: \"geometryprogress\", data: progress });\n });\n\n if (!this.scene) return this;\n if (!gltf.scene) throw new Error(\"No glTF scene found\");\n\n this.models.push(gltf);\n this.scene.add(gltf.scene);\n this.update();\n\n this.emitEvent({ type: \"databasechunk\" });\n this.emitEvent({ type: \"geometryend\", data: gltf.scene });\n } catch (error: any) {\n this.emitEvent({ type: \"geometryerror\", data: error });\n throw error;\n } finally {\n manager.dispose();\n }\n\n return this;\n }\n\n clear(): this {\n function disposeMaterial(material: any) {\n const materials = Array.isArray(material) ? material : [material];\n materials.forEach((material: any) => {\n // Object.keys(material).forEach((key) => material[key]?.dispose?.());\n material.dispose();\n });\n }\n\n function disposeObject(object: any) {\n if (object.geometry) object.geometry.dispose();\n if (object.material) disposeMaterial(object.material);\n }\n\n this.selectedObjects = [];\n\n this.models.forEach((gltf) => gltf.scene.traverse(disposeObject));\n this.models.forEach((gltf) => gltf.scene.removeFromParent());\n this.models = [];\n\n this.update();\n this.emitEvent({ type: \"clear\" });\n\n return this;\n }\n\n activeDragger(): any | null {\n return this._activeDragger;\n }\n\n setActiveDragger(name: string): any {\n if (!this._activeDragger || this._activeDragger.name !== name) {\n if (this._activeDragger) {\n this._activeDragger.dispose();\n this._activeDragger = null;\n }\n const Constructor = this.draggerFactory[name];\n if (Constructor) {\n this._activeDragger = new Constructor(this);\n this._activeDragger.name = name;\n }\n }\n return this._activeDragger;\n }\n\n resetActiveDragger(): void {\n const dragger = this._activeDragger;\n if (dragger) {\n this.setActiveDragger(\"\");\n this.setActiveDragger(dragger.name);\n }\n }\n\n is3D(): boolean {\n return false;\n }\n\n executeCommand(id: string, ...args: any[]): any {\n return commands(\"ThreeJS\").executeCommand(id, this, ...args);\n }\n\n drawViewpoint(viewpoint: IViewpoint): void {}\n\n createViewpoint(): IViewpoint {\n return {};\n }\n}\n"],"names":["Commands","constructor","this","_commands","Map","registerCommand","id","handler","description","thisArg","set","registerCommandAlias","alias","viewer","args","executeCommand","getCommand","get","getCommands","map","forEach","value","key","command","isDraggerCommand","draggers","includes","setActiveDragger","console","warn","undefined","result","apply","emit","type","data","commands","viewerType","defaultOptions","showWCS","cameraAnimation","antialiasing","groundShadow","shadows","cameraAxisXSpeed","cameraAxisYSpeed","ambientOcclusion","enableStreamingMode","enablePartialMode","memoryLimit","cuttingPlaneFillColor","red","green","blue","edgesColor","r","g","b","facesColor","edgesVisibility","edgesOverlap","facesOverlap","facesTransparancy","enableCustomHighlight","sceneGraph","edgeModel","reverseZoomWheel","enableZoomWheel","enableGestures","geometryType","Options","emitter","_emitter","_data","loadFromStorage","defaults","notifierChangeEvent","change","saveToStorage","window","localStorage","setItem","JSON","stringify","error","item","getItem","parse","resetToDefaults","fields","resetData","reduce","acc","field","Boolean","CanvasEvents","CANVAS_EVENTS","EventEmitter2","_listeners","addEventListener","listener","push","removeEventListener","listeners","filter","x","length","removeAllListeners","emitEvent","event","invoke","slice","call","on","off","GLTFLoadingManager","THREE","LoadingManager","file","externalData","params","super","path","resourcePath","fileURL","dataURLs","LoaderUtils","extractUrlBase","dataURL","URL","createObjectURL","Blob","setURLModifier","url","decodeURI","replace","dispose","revokeObjectURL","OrbitDragger","OrbitControls","camera","canvas","geometryEnd","scene","box","Box3","setFromObject","size","getSize","Vector3","maxDistance","update","updateViewer","mouseButtons","LEFT","MOUSE","ROTATE","MIDDLE","PAN","RIGHT","touches","ONE","TOUCH","TWO","DOLLY_PAN","screenSpacePanning","rotateSpeed","PanDragger","DOLLY_ROTATE","ZoomDragger","DOLLY","WalkDragger","onKeyDown","code","shiftKey","speed","z","walkSpeed","boostSpeed","onKeyUp","onMouseDown","clientX","clientY","mouseStart","mouseDelta","quaternion","copy","onMouseMove","y","rotateCamera","onMouseUp","onMouseWheel","preventDefault","deltaY","Math","max","onContextMenu","log","stopImmediatePropagation","onTouchStart","touchStartDistance","getTouchsDistance","onTouchEnd","onTouchMove","distance","onRender","matrix","extractBasis","xAxis","yAxis","zAxis","position","add","multiplyScalar","deltaTime","_target","clone","xRotation","Quaternion","yRotation","Vector2","yRotationAxis","_maxDistance","document","start","end","dx","dy","sqrt","delta","rotateX","PI","clientWidth","rotateY","clientHeight","setFromAxisAngle","up","premultiply","multiply","normalize","setRotationFromQuaternion","ClippingPlaneDragger","onPointerDown","onPointerMove","offsetX","offsetY","screenToPlane","onPointerUp","plane","normal","constant","sub","translate","Plane","renderer","clippingPlanes","planeHelper","PlaneHelper","removeFromParent","screenToWorld","v","unproject","direction","ray","Ray","dot","abs","intersectPlane","LightComponent","ambientLight","AmbientLight","directLight","DirectionalLight","BackgroundComponent","syncOptions","backgroundColor","setHex","Color","environment","RoomEnvironment","pmremGenerator","PMREMGenerator","background","fromScene","texture","DefaultCameraPositionComponent","updateMatrixWorld","center","getCenter","near","far","updateProjectionMatrix","lookAt","ResizeCanvasComponent","resizeViewer","entries","width","height","contentRect","aspect","setSize","resizeObserver","ResizeObserver","observe","parentElement","disconnect","RenderLoopComponent","requestID","animate","time","requestAnimationFrame","render","cancelAnimationFrame","Viewer","client","renderNeeded","_options","canvasEvents","canvaseventlistener","draggerFactory","Pan","Zoom","Orbit","Walk","Clipping","_activeDragger","models","components","selectedObjects","renderTime","bind","options","Object","keys","initialize","onProgress","Scene","rect","getBoundingClientRect","PerspectiveCamera","WebGLRenderer","antialias","setPixelRatio","devicePixelRatio","toneMapping","LinearToneMapping","performance","now","ProgressEvent","lengthComputable","loaded","total","Promise","resolve","cancel","component","isInitialized","force","loadReferences","model","open","clear","getModels","find","default","Error","database","split","pop","httpClient","serverUrl","requestHeader","headers","loadGltfFile","openGltfFile","manager","loader","GLTFLoader","setPath","setRequestHeader","setCrossOrigin","crossOrigin","setWithCredentials","withCredentials","gltf","loadAsync","progress","disposeMaterial","material","materials","Array","isArray","disposeObject","object","geometry","traverse","activeDragger","name","Constructor","resetActiveDragger","dragger","is3D","drawViewpoint","viewpoint","createViewpoint"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Viewer/Viewer.ts
CHANGED
|
@@ -80,7 +80,7 @@ export class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> impl
|
|
|
80
80
|
|
|
81
81
|
this.client = client;
|
|
82
82
|
|
|
83
|
-
this.canvasEvents = CANVAS_EVENTS;
|
|
83
|
+
this.canvasEvents = CANVAS_EVENTS.slice();
|
|
84
84
|
this.canvaseventlistener = (event: Event) => this.emit(event);
|
|
85
85
|
|
|
86
86
|
this.draggerFactory = {
|