UNPKG

463 kBSource Map (JSON)View Raw
1{"version":3,"file":"view3d.esm.js","sources":["../src/core/EventEmitter.ts","../src/core/Renderer.ts","../src/consts/internal.ts","../src/View3DError.ts","../src/consts/error.ts","../src/utils.ts","../src/core/Scene.ts","../src/core/camera/Controller.ts","../src/core/camera/Pose.ts","../src/consts/easing.ts","../src/consts/default.ts","../src/controls/Motion.ts","../src/controls/AnimationControl.ts","../src/core/camera/Camera.ts","../src/core/ModelAnimator.ts","../src/core/XRManager.ts","../src/consts/event.ts","../src/View3D.ts","../src/core/Model.ts","../src/controls/AutoControl.ts","../src/consts/css.ts","../src/controls/RotateControl.ts","../src/controls/TranslateControl.ts","../src/controls/DistanceControl.ts","../src/controls/OrbitControl.ts","../src/loaders/DracoLoader.ts","../src/environments/AutoDirectionalLight.ts","../src/environments/ShadowPlane.ts","../src/loaders/GLTFLoader.ts","../src/loaders/TextureLoader.ts","../src/consts/xr.ts","../src/xr/features/DOMOverlay.ts","../src/xr/WebARSession.ts","../src/xr/features/HitTest.ts","../src/core/Animation.ts","../src/controls/ar/ui/RotationIndicator.ts","../src/controls/ar/common/ARSwirlControl.ts","../src/controls/ar/floor/ARFloorTranslateControl.ts","../src/controls/ar/ui/ScaleUI.ts","../src/controls/ar/common/ARScaleControl.ts","../src/controls/ar/ui/FloorIndicator.ts","../src/consts/touch.ts","../src/controls/ar/common/DeadzoneChecker.ts","../src/controls/ar/floor/ARFloorControl.ts","../src/xr/FloorARSession.ts","../src/controls/ar/ui/ArrowIndicator.ts","../src/controls/ar/wall/ARWallTranslateControl.ts","../src/controls/ar/wall/ARWallControl.ts","../src/xr/WallARSession.ts","../src/controls/ar/common/ARSwipeControl.ts","../src/controls/ar/hover/ARHoverRotateControl.ts","../src/controls/ar/hover/ARHoverTranslateControl.ts","../src/controls/ar/hover/ARHoverControl.ts","../src/xr/HoverARSession.ts","../src/consts/browser.ts","../src/xr/SceneViewerSession.ts","../src/xr/QuickLookSession.ts","../src/extra/TextureModel.ts"],"sourcesContent":["/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { AnyFunction } from \"~/types/external\";\n\ntype NoArguments = undefined | null | void | never;\ntype EventMap = Record<string, any>;\ntype EventKey<T extends EventMap> = string & keyof T;\ntype EventCallback<T extends EventMap, K extends EventKey<T>>\n = T[K] extends NoArguments\n ? () => any\n : T[K] extends AnyFunction\n ? T[K]\n : (event: T[K]) => any;\n\nclass EventEmitter<T extends EventMap> {\n private _listenerMap: {\n [keys: string]: EventCallback<T, EventKey<T>>[],\n };\n\n constructor() {\n this._listenerMap = {};\n }\n\n public on<K extends EventKey<T>>(eventName: K, callback: EventCallback<T, K>): this {\n const listenerMap = this._listenerMap;\n const listeners = listenerMap[eventName];\n\n if (listeners && listeners.indexOf(callback) < 0) {\n listeners.push(callback);\n } else {\n listenerMap[eventName] = [callback];\n }\n return this;\n }\n\n public once<K extends EventKey<T>>(eventName: K, callback: EventCallback<T, K>): this {\n const listenerMap = this._listenerMap;\n const listeners = listenerMap[eventName];\n\n const onceCallback = (...params: any[]) => {\n callback(params);\n this.off(eventName, onceCallback as any);\n };\n\n if (listeners && listeners.indexOf(callback) < 0) {\n listeners.push(callback);\n } else {\n listenerMap[eventName] = [callback];\n }\n return this;\n }\n\n public off<K extends EventKey<T>>(eventName?: K, callback?: EventCallback<T, K>): this {\n const listenerMap = this._listenerMap;\n\n if (!eventName) {\n this._listenerMap = {};\n return this;\n }\n\n if (!callback) {\n delete listenerMap[eventName];\n return this;\n }\n\n const listeners = listenerMap[eventName];\n\n if (listeners) {\n const callbackIdx = listeners.indexOf(callback);\n if (callbackIdx >= 0) {\n listeners.splice(callbackIdx, 1);\n }\n }\n\n return this;\n }\n\n public emit<K extends EventKey<T>>(\n eventName: K,\n ...event: T[K] extends NoArguments ? void[] : T[K] extends AnyFunction ? Parameters<T[K]> : [T[K]]\n ): this {\n const listeners = this._listenerMap[eventName];\n\n if (listeners) {\n listeners.forEach(callback => {\n callback(...event);\n });\n }\n\n return this;\n }\n}\n\nexport default EventEmitter;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Scene from \"./Scene\";\nimport Camera from \"./camera/Camera\";\n\n/**\n * Renderer that renders View3D's Scene\n * @category Core\n */\nclass Renderer {\n private _renderer: THREE.WebGLRenderer;\n private _canvas: HTMLCanvasElement;\n private _clock: THREE.Clock;\n\n /**\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement HTMLCanvasElement} given when creating View3D instance\n * @type HTMLCanvasElement\n * @readonly\n */\n public get canvas() { return this._canvas; }\n /**\n * Current {@link https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext WebGLRenderingContext}\n * @type WebGLRenderingContext\n * @readonly\n */\n public get context() { return this._renderer.context; }\n /**\n * The width and height of the renderer's output canvas\n * @see https://threejs.org/docs/#api/en/math/Vector2\n * @type THREE.Vector2\n */\n public get size() { return this._renderer.getSize(new THREE.Vector2()); }\n /**\n * Three.js {@link https://threejs.org/docs/#api/en/renderers/WebGLRenderer WebGLRenderer} instance\n * @type THREE.WebGLRenderer\n * @readonly\n */\n public get threeRenderer() { return this._renderer; }\n\n public set size(val: THREE.Vector2) {\n this._renderer.setSize(val.x, val.y, false);\n }\n\n /**\n * Create new Renderer instance\n * @param canvas \\<canvas\\> element to render 3d model\n */\n constructor(canvas: HTMLCanvasElement) {\n this._canvas = canvas;\n\n this._renderer = new THREE.WebGLRenderer({\n canvas: this._canvas,\n alpha: true,\n antialias: true,\n preserveDrawingBuffer: true,\n });\n\n this._renderer.xr.enabled = true;\n\n this._renderer.outputEncoding = THREE.sRGBEncoding;\n\n this._clock = new THREE.Clock(false);\n this.enableShadow();\n }\n\n /**\n * Resize the renderer based on current canvas width / height\n * @returns {void} Nothing\n */\n public resize(): void {\n const renderer = this._renderer;\n const canvas = this._canvas;\n\n if (renderer.xr.isPresenting) return;\n\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.setSize(canvas.offsetWidth, canvas.offsetHeight, false);\n }\n\n /**\n * Render a scene using a camera.\n * @see https://threejs.org/docs/#api/en/renderers/WebGLRenderer.render\n * @param scene {@link Scene} to render\n * @param camera {@link Camera} to render\n */\n public render(scene: Scene, camera: Camera): void {\n this._renderer.render(scene.root, camera.threeCamera);\n }\n\n public setAnimationLoop(callback: (delta: number, frame?: any) => void): void {\n this._clock.start();\n this._renderer.setAnimationLoop((timestamp: number, frame: any) => {\n const delta = this._clock.getDelta();\n callback(delta, frame);\n });\n }\n\n public stopAnimationLoop(): void {\n this._clock.stop();\n // See https://threejs.org/docs/#api/en/renderers/WebGLRenderer.setAnimationLoop\n this._renderer.setAnimationLoop(null);\n }\n\n /**\n * Enable shadow map\n */\n public enableShadow() {\n const threeRenderer = this._renderer;\n\n threeRenderer.shadowMap.enabled = true;\n threeRenderer.shadowMap.type = THREE.PCFSoftShadowMap;\n }\n\n /**\n * Disable shadow map\n */\n public disableShadow() {\n const threeRenderer = this._renderer;\n\n threeRenderer.shadowMap.enabled = false;\n }\n}\n\nexport default Renderer;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\n// Constants that used internally\n\n// Texture map names that used in THREE#MeshStandardMaterial\nexport const STANDARD_MAPS = [\n \"alphaMap\",\n \"aoMap\",\n \"bumpMap\",\n \"displacementMap\",\n \"emissiveMap\",\n \"envMap\",\n \"lightMap\",\n \"map\",\n \"metalnessMap\",\n \"normalMap\",\n \"roughnessMap\",\n];\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nclass View3DError extends Error {\n constructor(\n public message: string,\n public code: number) {\n super(message);\n Object.setPrototypeOf(this, View3DError.prototype);\n this.name = \"View3DError\";\n }\n}\n\nexport default View3DError;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\n/**\n * Error codes of {@link View3DError}\n * @name ERROR_CODES\n * @memberof Constants\n * @type object\n * @property {number} WRONG_TYPE 0\n * @property {number} ELEMENT_NOT_FOUND 1\n * @property {number} CANVAS_NOT_FOUND 2\n * @property {number} WEBGL_NOT_SUPPORTED 3\n * @property {number} ADD_CONTROL_FIRST 4\n * @property {number} PROVIDE_WIDTH_OR_HEIGHT 5\n */\nexport const CODES: {\n [key in keyof typeof MESSAGES]: number;\n} = {\n WRONG_TYPE: 0,\n ELEMENT_NOT_FOUND: 1,\n ELEMENT_NOT_CANVAS: 2,\n WEBGL_NOT_SUPPORTED: 3,\n ADD_CONTROL_FIRST: 4,\n PROVIDE_WIDTH_OR_HEIGHT: 5,\n};\n\nexport const MESSAGES = {\n WRONG_TYPE: (val: any, types: string[]) => `${typeof val} is not a ${types.map(type => `\"${type}\"`).join(\" or \")}.`,\n ELEMENT_NOT_FOUND: (query: string) => `Element with selector \"${query}\" not found.`,\n ELEMENT_NOT_CANVAS: (el: HTMLElement) => `Given element <${el.tagName}> is not a canvas.`,\n WEBGL_NOT_SUPPORTED: \"WebGL is not supported on this browser.\",\n ADD_CONTROL_FIRST: \"Control is enabled before setting a target element.\",\n PROVIDE_WIDTH_OR_HEIGHT: \"Either width or height should be given.\",\n};\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport View3DError from \"./View3DError\";\nimport * as ERROR from \"~/consts/error\";\n\nexport function getElement(el: HTMLElement | string | null, parent?: HTMLElement): HTMLElement | null {\n let targetEl: HTMLElement | null = null;\n\n if (typeof el === \"string\") {\n const parentEl = parent ? parent : document;\n const queryResult = parentEl.querySelector(el);\n if (!queryResult) {\n throw new View3DError(ERROR.MESSAGES.ELEMENT_NOT_FOUND(el), ERROR.CODES.ELEMENT_NOT_FOUND);\n }\n targetEl = queryResult as HTMLElement;\n } else if (el && el.nodeType === Node.ELEMENT_NODE) {\n targetEl = el;\n }\n\n return targetEl;\n}\n\nexport function getCanvas(el: HTMLElement | string): HTMLCanvasElement {\n const targetEl = getElement(el);\n\n if (!targetEl) {\n throw new View3DError(ERROR.MESSAGES.WRONG_TYPE(el, [\"HTMLElement\", \"string\"]), ERROR.CODES.WRONG_TYPE);\n }\n\n if (!/^canvas$/i.test(targetEl.tagName)) {\n throw new View3DError(ERROR.MESSAGES.ELEMENT_NOT_CANVAS(targetEl), ERROR.CODES.ELEMENT_NOT_CANVAS);\n }\n\n return targetEl as HTMLCanvasElement;\n}\n\nexport function range(end: number): number[] {\n if (!end || end <= 0) {\n return [];\n }\n\n return Array.apply(0, Array(end)).map((undef, idx) => idx);\n}\n\nexport function toRadian(x: number) {\n return x * Math.PI / 180;\n}\n\nexport function clamp(x: number, min: number, max: number) {\n return Math.max(Math.min(x, max), min);\n}\n\nexport function findIndex<T>(target: T, list: T[]) {\n let index = -1;\n for (const itemIndex of range(list.length)) {\n if (list[itemIndex] === target) {\n index = itemIndex;\n break;\n }\n }\n return index;\n}\n\n// Linear interpolation between a and b\nexport function mix(a: number, b: number, t: number) {\n return a * (1 - t) + b * t;\n}\n\nexport function circulate(val: number, min: number, max: number) {\n const size = Math.abs(max - min);\n\n if (val < min) {\n const offset = (min - val) % size;\n val = max - offset;\n } else if (val > max) {\n const offset = (val - max) % size;\n val = min + offset;\n }\n\n return val;\n}\n\nexport function merge(target: object, ...srcs: object[]): object {\n srcs.forEach(source => {\n Object.keys(source).forEach(key => {\n const value = source[key];\n if (Array.isArray(target[key]) && Array.isArray(value)) {\n target[key] = [...target[key], ...value];\n } else {\n target[key] = value;\n }\n });\n });\n\n return target;\n}\n\nexport function getBoxPoints(box: THREE.Box3) {\n return [\n box.min.clone(),\n new THREE.Vector3(box.min.x, box.min.y, box.max.z),\n new THREE.Vector3(box.min.x, box.max.y, box.min.z),\n new THREE.Vector3(box.min.x, box.max.y, box.max.z),\n new THREE.Vector3(box.max.x, box.min.y, box.min.z),\n new THREE.Vector3(box.max.x, box.min.y, box.max.z),\n new THREE.Vector3(box.max.x, box.max.y, box.min.z),\n box.max.clone(),\n ];\n}\n\nexport function toPowerOfTwo(val: number) {\n let result = 1;\n\n while (result < val) {\n result *= 2;\n }\n\n return result;\n}\n\nexport function getPrimaryAxisIndex(basis: THREE.Vector3[], viewDir: THREE.Vector3) {\n let primaryIdx = 0;\n let maxDot = 0;\n\n basis.forEach((axes, axesIdx) => {\n const dotProduct = Math.abs(viewDir.dot(axes));\n\n if (dotProduct > maxDot) {\n primaryIdx = axesIdx;\n maxDot = dotProduct;\n }\n });\n\n return primaryIdx;\n}\n\n// In radian\nexport function getRotationAngle(center: THREE.Vector2, v1: THREE.Vector2, v2: THREE.Vector2) {\n const centerToV1 = new THREE.Vector2().subVectors(v1, center).normalize();\n const centerToV2 = new THREE.Vector2().subVectors(v2, center).normalize();\n\n // Get the rotation angle with the model's NDC coordinates as the center.\n const deg = centerToV2.angle() - centerToV1.angle();\n const compDeg = -Math.sign(deg) * (2 * Math.PI - Math.abs(deg));\n // Take the smaller deg\n const rotationAngle = Math.abs(deg) < Math.abs(compDeg) ? deg : compDeg;\n\n return rotationAngle;\n}\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Model from \"./Model\";\nimport Environment from \"~/environments/Environment\";\nimport { STANDARD_MAPS } from \"~/consts/internal\";\nimport { findIndex } from \"~/utils\";\n\n/**\n * Scene that View3D will render.\n * All model datas including Mesh, Lights, etc. will be included on this\n * @category Core\n */\nclass Scene {\n private _root: THREE.Scene;\n private _userObjects: THREE.Group;\n private _envObjects: THREE.Group;\n private _envs: Environment[];\n\n /**\n * Root {@link https://threejs.org/docs/#api/en/scenes/Scene THREE.Scene} object\n */\n public get root() { return this._root; }\n\n /**\n * {@link Environment}s inside scene\n */\n public get environments() { return this._envs; }\n\n /**\n * Return the visibility of the root scene\n */\n public get visible() { return this._root.visible; }\n\n /**\n * Create new Scene instance\n */\n constructor() {\n this._root = new THREE.Scene();\n this._userObjects = new THREE.Group();\n this._envObjects = new THREE.Group();\n this._envs = [];\n\n const root = this._root;\n const userObjects = this._userObjects;\n const envObjects = this._envObjects;\n\n userObjects.name = \"userObjects\";\n envObjects.name = \"envObjects\";\n\n root.add(userObjects);\n root.add(envObjects);\n }\n\n /**\n * Update scene to fit the given model\n * @param model model to fit\n * @param override options for specific environments\n */\n public update(model: Model, override?: any): void {\n this._envs.forEach(env => env.fit(model, override));\n }\n\n /**\n * Reset scene to initial state\n * @returns {void} Nothing\n */\n public reset(): void {\n this.resetModel();\n this.resetEnv();\n }\n\n /**\n * Fully remove all objects that added by calling {@link Scene#add add()}\n * @returns {void} Nothing\n */\n public resetModel(): void {\n this._removeChildsOf(this._userObjects);\n }\n\n /**\n * Remove all objects that added by calling {@link Scene#addEnv addEnv()}\n * This will also reset scene background & envmap\n * @returns {void} Nothing\n */\n public resetEnv(): void {\n this._removeChildsOf(this._envObjects);\n this._envs = [];\n\n this._root.background = null;\n this._root.environment = null;\n }\n\n /**\n * Add new Three.js {@link https://threejs.org/docs/#api/en/core/Object3D Object3D} into the scene\n * @param object {@link https://threejs.org/docs/#api/en/core/Object3D THREE.Object3D}s to add\n * @returns {void} Nothing\n */\n public add(...object: THREE.Object3D[]): void {\n this._userObjects.add(...object);\n }\n\n /**\n * Add new {@link Environment} or Three.js {@link https://threejs.org/docs/#api/en/core/Object3D Object3D}s to the scene, which won't be removed after displaying another 3D model\n * @param envs {@link Environment} | {@link https://threejs.org/docs/#api/en/core/Object3D THREE.Object3D}s to add\n * @returns {void} Nothing\n */\n public addEnv(...envs: (Environment | THREE.Object3D)[]): void {\n envs.forEach(env => {\n if ((env as THREE.Object3D).isObject3D) {\n this._envObjects.add(env as THREE.Object3D);\n } else {\n this._envs.push(env as Environment);\n this._envObjects.add(...(env as Environment).objects);\n }\n });\n }\n\n /**\n * Remove Three.js {@link https://threejs.org/docs/#api/en/core/Object3D Object3D} into the scene\n * @param object {@link https://threejs.org/docs/#api/en/core/Object3D THREE.Object3D}s to add\n * @returns {void} Nothing\n */\n public remove(...object: THREE.Object3D[]): void {\n this._userObjects.remove(...object);\n }\n\n /**\n * Remove {@link Environment} or Three.js {@link https://threejs.org/docs/#api/en/core/Object3D Object3D}s to the scene, which won't be removed after displaying another 3D model\n * @param envs {@link Environment} | {@link https://threejs.org/docs/#api/en/core/Object3D THREE.Object3D}s to add\n * @returns {void} Nothing\n */\n public removeEnv(...envs: (Environment | THREE.Object3D)[]): void {\n envs.forEach(env => {\n if ((env as THREE.Object3D).isObject3D) {\n this._envObjects.remove(env as THREE.Object3D);\n } else {\n const envIndex = findIndex(env as Environment, this._envs);\n if (envIndex > -1) {\n this._envs.splice(envIndex, 1);\n }\n this._envObjects.remove(...(env as Environment).objects);\n }\n });\n }\n\n /**\n * Set background of the scene.\n * @see {@link https://threejs.org/docs/#api/en/scenes/Scene.background THREE.Scene.background}\n * @param background A texture to set as background\n * @returns {void} Nothing\n */\n public setBackground(background: THREE.Color | THREE.Texture | THREE.CubeTexture | THREE.WebGLCubeRenderTarget | null): void {\n // Three.js's type definition does not include WebGLCubeRenderTarget, but it works and defined on their document\n // See https://threejs.org/docs/#api/en/scenes/Scene.background\n this._root.background = background as THREE.Texture | null;\n }\n\n /**\n * Set scene's environment map that affects all physical materials in the scene\n * @see {@link https://threejs.org/docs/#api/en/scenes/Scene.environment THREE.Scene.environment}\n * @param envmap A texture to set as environment map\n * @returns {void} Nothing\n */\n public setEnvMap(envmap: THREE.Texture | THREE.CubeTexture | THREE.WebGLCubeRenderTarget | null): void {\n // Next line written to silence Three.js's warning\n const environment = (envmap as THREE.WebGLCubeRenderTarget).texture ? (envmap as THREE.WebGLCubeRenderTarget).texture : envmap;\n this._root.environment = environment as THREE.Texture | null;\n }\n\n /**\n * Make this scene visible\n * @returns {void} Nothing\n */\n public show(): void {\n this._root.visible = true;\n }\n\n /**\n * Make this scene invisible\n * @returns {void} Nothing\n */\n public hide(): void {\n this._root.visible = false;\n }\n\n private _removeChildsOf(obj: THREE.Object3D) {\n obj.traverse(child => {\n if ((child as any).isMesh) {\n const mesh = child as THREE.Mesh;\n\n // Release geometry & material memory\n mesh.geometry.dispose();\n const materials = Array.isArray(mesh.material) ? mesh.material : [mesh.material];\n\n materials.forEach(mat => {\n STANDARD_MAPS.forEach(map => {\n if (mat[map]) {\n mat[map].dispose();\n }\n });\n });\n }\n });\n\n while (obj.children.length > 0) {\n obj.remove(obj.children[0]);\n }\n }\n}\n\nexport default Scene;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Camera from \"./Camera\";\nimport CameraControl from \"~/controls/CameraControl\";\nimport { findIndex } from \"~/utils\";\n\n/**\n * Controller that controls camera of the View3D\n * @category Core\n */\nclass Controller {\n private _canvas: HTMLCanvasElement;\n private _camera: Camera;\n private _controls: CameraControl[] = [];\n\n /**\n * {@link CameraControl CameraControl} instances that is added on this controller.\n */\n public get controls() { return this._controls; }\n\n /**\n * Create new Controller instance\n */\n constructor(canvas: HTMLCanvasElement, camera: Camera) {\n this._canvas = canvas;\n this._camera = camera;\n }\n\n /**\n * Remove all attached controls, and removes all event listeners attached by that controls.\n * @returns {void} Nothing\n */\n public clear(): void {\n this._controls.forEach(control => control.destroy());\n this._controls = [];\n }\n\n /**\n * Add a new control\n * @param control {@link CameraControl CameraControl} instance to add\n * @see Adding Controls\n * @returns {void} Nothing\n */\n public add(control: CameraControl): void {\n const canvas = this._canvas;\n if (!control.element) {\n // Set canvas as default element\n control.setElement(canvas);\n }\n control.sync(this._camera);\n control.enable();\n this._controls.push(control);\n }\n\n /**\n * Remove control and disable it\n * @param control {@link CameraControl CameraControl} instance to remove\n * @returns removed control or null if it doesn't exists\n */\n public remove(control: CameraControl): CameraControl | null {\n const controls = this._controls;\n const controlIndex = findIndex(control, controls);\n if (controlIndex < 0) return null;\n\n const removedControl = controls.splice(controlIndex, 1)[0];\n removedControl.disable();\n\n return removedControl;\n }\n\n /**\n * Enable all controls attached\n * @returns {void} Nothing\n */\n public enableAll(): void {\n this._controls.forEach(control => control.enable());\n this.syncToCamera();\n }\n\n /**\n * Disable all controls attached\n * @returns {void} Nothing\n */\n public disableAll(): void {\n this._controls.forEach(control => control.disable());\n }\n\n /**\n * Update all controls attached to given screen size.\n * @param size Size of the screen. Noramlly size of the canvas is used.\n * @returns {void} Nothing\n */\n public resize(size: THREE.Vector2): void {\n this._controls.forEach(control => control.resize(size));\n }\n\n /**\n * Synchronize all controls attached to current camera position.\n * @returns {void} Nothing\n */\n public syncToCamera(): void {\n this._controls.forEach(control => control.sync(this._camera));\n }\n\n /**\n * Update all controls attached to this controller & update camera position based on it.\n * @param delta number of seconds to update controls\n * @returns {void} Nothing\n */\n public update(delta: number): void {\n const deltaMiliSec = delta * 1000;\n const camera = this._camera;\n\n this._controls.forEach(control => {\n control.update(camera, deltaMiliSec);\n });\n\n camera.updatePosition();\n }\n}\n\nexport default Controller;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\n\n/**\n * Data class of camera's pose\n */\nclass Pose {\n /**\n * Create new instance of pose\n * @param yaw yaw\n * @param pitch pitch\n * @param distance distance\n * @param pivot pivot\n * @see https://threejs.org/docs/#api/en/math/Vector3\n * @example\n * import { THREE, Pose } from \"@egjs/view3d\";\n *\n * const pose = new Pose(180, 45, 150, new THREE.Vector3(5, -1, 3));\n */\n constructor(\n public yaw: number,\n public pitch: number,\n public distance: number,\n public pivot: THREE.Vector3 = new THREE.Vector3(0, 0, 0),\n ) {}\n\n /**\n * Clone this pose\n * @returns Cloned pose\n */\n public clone(): Pose {\n return new Pose(\n this.yaw, this.pitch, this.distance,\n this.pivot.clone(),\n );\n }\n}\n\nexport default Pose;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\n/**\n * Collection of easing functions\n * @namespace EASING\n * @example\n * import View3D, { RotateControl, EASING } from \"@egjs/view3d\";\n *\n * new RotateControl({\n * easing: EASING.EASE_OUT_CUBIC,\n * });\n */\n\n/**\n * @memberof EASING\n * @name SINE_WAVE\n */\nexport const SINE_WAVE = (x: number) => Math.sin(x * Math.PI * 2);\n/**\n * @memberof EASING\n * @name EASE_OUT_CUBIC\n */\nexport const EASE_OUT_CUBIC = (x: number) => 1 - Math.pow(1 - x, 3);\n/**\n * @memberof EASING\n * @name EASE_OUT_BOUNCE\n */\nexport const EASE_OUT_BOUNCE = (x: number): number => {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1) {\n return n1 * x * x;\n } else if (x < 2 / d1) {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n } else if (x < 2.5 / d1) {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n } else {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n};\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Pose from \"~/core/camera/Pose\";\nimport { EASE_OUT_CUBIC } from \"./easing\";\nimport { Range } from \"~/types/internal\";\n\nexport const MODEL_SIZE = 80;\n\n// Animation related\nexport const EASING = EASE_OUT_CUBIC;\nexport const ANIMATION_DURATION = 500;\nexport const ANIMATION_LOOP = false;\nexport const ANIMATION_RANGE: Readonly<Range> = {\n min: 0, max: 1,\n};\n\n// Camera related\nexport const CAMERA_POSE: Readonly<Pose> = new Pose(0, 0, 100, new THREE.Vector3(0, 0, 0));\nexport const INFINITE_RANGE: Readonly<Range> = {\n min: -Infinity, max: Infinity,\n};\nexport const PITCH_RANGE: Readonly<Range> = {\n min: -89.9, max: 89.9,\n};\nexport const DISTANCE_RANGE: Readonly<Range> = {\n min: 0, max: 500,\n};\nexport const MINIMUM_DISTANCE = 1;\nexport const MAXIMUM_DISTANCE = 500;\nexport const NULL_ELEMENT: HTMLElement | string | null = null;\nexport const DRACO_DECODER_URL = \"https://www.gstatic.com/draco/v1/decoders/\";\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport { clamp, mix, circulate } from \"~/utils\";\nimport { Range } from \"~/types/internal\";\nimport * as DEFAULT from \"~/consts/default\";\n\nclass Motion {\n // Options\n private _duration: number;\n private _loop: boolean;\n private _range: Range;\n private _easing: (x: number) => number;\n\n // Internal states\n private _progress: number;\n private _val: number;\n private _start: number;\n private _end: number;\n private _activated: boolean;\n\n public get val() { return this._val; }\n public get start() { return this._start; }\n public get end() { return this._end; }\n public get progress() { return this._progress; }\n public get duration() { return this._duration; }\n public get loop() { return this._loop; }\n public get range() { return this._range; }\n public get easing() { return this._easing; }\n\n public set duration(val: number) { this._duration = val; }\n public set loop(val: boolean) { this._loop = val; }\n public set range(val: Range) { this._range = val; }\n public set easing(val: (x: number) => number) { this._easing = val; }\n\n constructor({\n duration = DEFAULT.ANIMATION_DURATION,\n loop = DEFAULT.ANIMATION_LOOP,\n range = DEFAULT.ANIMATION_RANGE,\n easing = DEFAULT.EASING,\n } = {}) {\n this._duration = duration;\n this._loop = loop;\n this._range = range;\n this._easing = easing;\n this._activated = false;\n this.reset(0);\n }\n\n /**\n * Update motion and progress it by given deltaTime\n * @param deltaTime number of milisec to update motion\n * @returns Difference(delta) of the value from the last update.\n */\n public update(deltaTime: number): number {\n if (!this._activated) return 0;\n\n const start = this._start;\n const end = this._end;\n const duration = this._duration;\n const prev = this._val;\n const loop = this._loop;\n\n const nextProgress = this._progress + deltaTime / duration;\n\n this._progress = loop\n ? circulate(nextProgress, 0, 1)\n : clamp(nextProgress, 0, 1);\n\n const easedProgress = this._easing(this._progress);\n this._val = mix(start, end, easedProgress);\n\n if (!loop && this._progress >= 1) {\n this._activated = false;\n }\n\n return this._val - prev;\n }\n\n public reset(defaultVal: number): void {\n const range = this._range;\n const val = clamp(defaultVal, range.min, range.max);\n this._start = val;\n this._end = val;\n this._val = val;\n this._progress = 0;\n this._activated = false;\n }\n\n public setEndDelta(delta: number): void {\n const range = this._range;\n\n this._start = this._val;\n this._end = clamp(this._end + delta, range.min, range.max);\n this._progress = 0;\n this._activated = true;\n }\n}\n\nexport default Motion;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport CameraControl from \"./CameraControl\";\nimport Motion from \"./Motion\";\nimport Camera from \"~/core/camera/Camera\";\nimport Pose from \"~/core/camera/Pose\";\nimport * as DEFAULT from \"~/consts/default\";\nimport { AnyFunction } from \"~/types/external\";\nimport { mix, circulate } from \"~/utils\";\n\n/**\n * Control that animates model without user input\n * @category Controls\n */\nclass AnimationControl implements CameraControl {\n // Options\n private _from: Pose;\n private _to: Pose;\n\n // Internal values\n private _motion: Motion;\n private _enabled: boolean = false;\n private _finishCallbacks: AnyFunction[] = [];\n\n public get element() { return null; }\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n /**\n * Duration of the animation\n */\n public get duration() { return this._motion.duration; }\n /**\n * Easing function of the animation\n */\n public get easing() { return this._motion.easing; }\n\n public set duration(val: number) { this._motion.duration = val; }\n public set easing(val: (x: number) => number) { this._motion.easing = val; }\n\n /**\n * Create new instance of AnimationControl\n * @param from Start pose\n * @param to End pose\n * @param {object} options Options\n * @param {number} [options.duration=500] Animation duration\n * @param {function} [options.easing=(x: number) => 1 - Math.pow(1 - x, 3)] Animation easing function\n */\n constructor(from: Pose, to: Pose, {\n duration = DEFAULT.ANIMATION_DURATION,\n easing = DEFAULT.EASING,\n } = {}) {\n from = from.clone();\n to = to.clone();\n\n from.yaw = circulate(from.yaw, 0, 360);\n to.yaw = circulate(to.yaw, 0, 360);\n\n // Take the smaller degree\n if (Math.abs(to.yaw - from.yaw) > 180) {\n to.yaw = to.yaw < from.yaw\n ? to.yaw + 360\n : to.yaw - 360;\n }\n\n this._motion = new Motion({ duration, range: DEFAULT.ANIMATION_RANGE, easing });\n this._from = from;\n this._to = to;\n }\n\n /**\n * Destroy the instance and remove all event listeners attached\n * This also will reset CSS cursor to intial\n * @returns {void} Nothing\n */\n public destroy(): void {\n this.disable();\n }\n\n /**\n * Update control by given deltaTime\n * @param camera Camera to update position\n * @param deltaTime Number of milisec to update\n * @returns {void} Nothing\n */\n public update(camera: Camera, deltaTime: number): void {\n if (!this._enabled) return;\n\n const from = this._from;\n const to = this._to;\n const motion = this._motion;\n motion.update(deltaTime);\n\n // Progress that easing is applied\n const progress = motion.val;\n\n camera.yaw = mix(from.yaw, to.yaw, progress);\n camera.pitch = mix(from.pitch, to.pitch, progress);\n camera.distance = mix(from.distance, to.distance, progress);\n camera.pivot = from.pivot.clone().lerp(to.pivot, progress);\n\n if (motion.progress >= 1) {\n this.disable();\n this._finishCallbacks.forEach(callback => callback());\n }\n }\n\n /**\n * Enable this input and add event listeners\n * @returns {void} Nothing\n */\n public enable(): void {\n if (this._enabled) return;\n\n this._enabled = true;\n this._motion.reset(0);\n this._motion.setEndDelta(1);\n }\n\n /**\n * Disable this input and remove all event handlers\n * @returns {void} Nothing\n */\n public disable(): void {\n if (!this._enabled) return;\n\n this._enabled = false;\n }\n\n /**\n * Add callback which is called when animation is finished\n * @param callback Callback that will be called when animation finishes\n * @returns {void} Nothing\n */\n public onFinished(callback: AnyFunction): void {\n this._finishCallbacks.push(callback);\n }\n\n /**\n * Remove all onFinished callbacks\n * @returns {void} Nothing\n */\n public clearFinished(): void {\n this._finishCallbacks = [];\n }\n\n public resize(size: THREE.Vector2) {\n // DO NOTHING\n }\n\n public setElement(element: HTMLElement) {\n // DO NOTHING\n }\n\n public sync(camera: Camera): void {\n // Do nothing\n }\n}\n\nexport default AnimationControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Pose from \"./Pose\";\nimport Controller from \"./Controller\";\nimport AnimationControl from \"~/controls/AnimationControl\";\nimport { toRadian, clamp, circulate } from \"~/utils\";\nimport * as DEFAULT from \"~/consts/default\";\n\n/**\n * Camera that renders the scene of View3D\n * @category Core\n */\nclass Camera {\n private _threeCamera: THREE.PerspectiveCamera;\n private _controller: Controller;\n private _minDistance: number = DEFAULT.MINIMUM_DISTANCE;\n private _maxDistance: number = DEFAULT.MAXIMUM_DISTANCE;\n private _defaultPose: Pose = DEFAULT.CAMERA_POSE;\n private _currentPose: Pose = this._defaultPose.clone();\n\n /**\n * Three.js {@link https://threejs.org/docs/#api/en/cameras/PerspectiveCamera PerspectiveCamera} instance\n * @readonly\n * @type THREE.PerspectiveCamera\n */\n public get threeCamera() { return this._threeCamera; }\n\n /**\n * Controller of the camera\n * @readonly\n * @type Controller\n */\n public get controller() { return this._controller; }\n\n /**\n * Camera's default pose(yaw, pitch, distance, pivot)\n * This will be new currentPose when {@link Camera#reset reset()} is called\n * @readonly\n * @type Pose\n */\n public get defaultPose(): Readonly<Pose> { return this._defaultPose; }\n\n /**\n * Camera's current pose value\n * @readonly\n * @type Pose\n */\n public get currentPose(): Pose { return this._currentPose.clone(); }\n\n /**\n * Camera's current yaw\n * {@link Camera#updatePosition} should be called after changing this value, and normally it is called every frame.\n * @type number\n */\n public get yaw() { return this._currentPose.yaw; }\n\n /**\n * Camera's current pitch\n * {@link Camera#updatePosition} should be called after changing this value, and normally it is called every frame.\n * @type number\n */\n public get pitch() { return this._currentPose.pitch; }\n\n /**\n * Camera's current distance\n * {@link Camera#updatePosition} should be called after changing this value, and normally it is called every frame.\n * @type number\n */\n public get distance() { return this._currentPose.distance; }\n\n /**\n * Current pivot point of camera rotation\n * @readonly\n * @type THREE.Vector3\n * @see {@link https://threejs.org/docs/#api/en/math/Vector3 THREE#Vector3}\n */\n public get pivot() { return this._currentPose.pivot; }\n\n /**\n * Minimum distance from lookAtPosition\n * @type number\n * @example\n * import View3D from \"@egjs/view3d\";\n *\n * const view3d = new View3D(\"#view3d-canvas\");\n * view3d.camera.minDistance = 100;\n */\n public get minDistance() { return this._minDistance; }\n\n /**\n * Maximum distance from lookAtPosition\n * @type number\n * @example\n * import View3D from \"@egjs/view3d\";\n *\n * const view3d = new View3D(\"#view3d-canvas\");\n * view3d.camera.maxDistance = 400;\n */\n public get maxDistance() { return this._maxDistance; }\n\n /**\n * Camera's focus of view value\n * @type number\n * @see {@link https://threejs.org/docs/#api/en/cameras/PerspectiveCamera.fov THREE#PerspectiveCamera}\n */\n public get fov() { return this._threeCamera.fov; }\n\n /**\n * Camera's frustum width on current distance value\n * @type number\n */\n public get renderWidth() { return this.renderHeight * this._threeCamera.aspect; }\n\n /**\n * Camera's frustum height on current distance value\n * @type number\n */\n public get renderHeight() { return 2 * this.distance * Math.tan(toRadian(this.fov / 2)); }\n\n public set minDistance(val: number) { this._minDistance = val; }\n public set maxDistance(val: number) { this._maxDistance = val; }\n public set pose(val: Pose) {\n this._currentPose = val;\n this._controller.syncToCamera();\n }\n public set yaw(val: number) { this._currentPose.yaw = val; }\n public set pitch(val: number) { this._currentPose.pitch = val; }\n public set distance(val: number) { this._currentPose.distance = val; }\n public set pivot(val: THREE.Vector3) { this._currentPose.pivot = val; }\n\n public set fov(val: number) {\n this._threeCamera.fov = val;\n this._threeCamera.updateProjectionMatrix();\n }\n\n /**\n * Create new Camera instance\n * @param canvas \\<canvas\\> element to render 3d model\n */\n constructor(canvas: HTMLCanvasElement) {\n this._threeCamera = new THREE.PerspectiveCamera();\n this._controller = new Controller(canvas, this);\n }\n\n /**\n * Reset camera to default pose\n * @param duration Duration of the reset animation\n * @param easing Easing function for the reset animation\n * @returns Promise that resolves when the animation finishes\n */\n public reset(duration: number = 0, easing: (x: number) => number = DEFAULT.EASING): Promise<void> {\n const controller = this._controller;\n const currentPose = this._currentPose;\n const defaultPose = this._defaultPose;\n\n if (duration <= 0) {\n // Reset camera immediately\n this._currentPose = defaultPose.clone();\n\n controller.syncToCamera();\n\n return Promise.resolve();\n } else {\n // Add reset animation control to controller\n const resetControl = new AnimationControl(currentPose, defaultPose);\n resetControl.duration = duration;\n resetControl.easing = easing;\n\n return new Promise(resolve => {\n resetControl.onFinished(() => {\n controller.remove(resetControl);\n controller.syncToCamera();\n resolve();\n });\n\n controller.add(resetControl);\n });\n }\n }\n\n /**\n * Update camera's aspect to given size\n * @param size {@link THREE.Vector2} instance that has width(x), height(y)\n * @returns {void} Nothing\n */\n public resize(size: THREE.Vector2): void {\n const cam = this._threeCamera;\n const aspect = size.x / size.y;\n\n cam.aspect = aspect;\n cam.updateProjectionMatrix();\n\n this._controller.resize(size);\n }\n\n /**\n * Set default position of camera relative to the 3d model\n * New default pose will be used when {@link Camera#reset reset()} is called\n * @param newDefaultPose new default pose to apply\n * @returns {void} Nothing\n */\n public setDefaultPose(newDefaultPose: Partial<{\n yaw: number,\n pitch: number,\n distance: number,\n pivot: THREE.Vector3,\n }>): void {\n const defaultPose = this._defaultPose;\n const { yaw, pitch, distance, pivot } = newDefaultPose;\n\n if (yaw != null) {\n defaultPose.yaw = yaw;\n }\n if (pitch != null) {\n defaultPose.pitch = pitch;\n }\n if (distance != null) {\n defaultPose.distance = distance;\n }\n if (pivot != null) {\n defaultPose.pivot = pivot;\n }\n }\n\n /**\n * Update camera position base on the {@link Camera#currentPose currentPose} value\n * @returns {void} Nothing\n */\n public updatePosition(): void {\n this._clampCurrentPose();\n\n const threeCamera = this._threeCamera;\n const pose = this._currentPose;\n\n const yaw = toRadian(pose.yaw);\n const pitch = toRadian(pose.pitch);\n // Should use minimum distance to prevent distance becomes 0, which makes whole x,y,z to 0 regardless of pose\n const distance = Math.max(pose.distance + this._minDistance, DEFAULT.MINIMUM_DISTANCE);\n\n const newCamPos = new THREE.Vector3(0, 0, 0);\n newCamPos.y = distance * Math.sin(pitch);\n newCamPos.z = distance * Math.cos(pitch);\n\n newCamPos.x = newCamPos.z * Math.sin(-yaw);\n newCamPos.z = newCamPos.z * Math.cos(-yaw);\n\n newCamPos.add(pose.pivot);\n\n threeCamera.position.copy(newCamPos);\n threeCamera.lookAt(pose.pivot);\n threeCamera.updateProjectionMatrix();\n }\n\n private _clampCurrentPose() {\n const currentPose = this._currentPose;\n\n currentPose.yaw = circulate(currentPose.yaw, 0, 360);\n currentPose.pitch = clamp(currentPose.pitch, DEFAULT.PITCH_RANGE.min, DEFAULT.PITCH_RANGE.max);\n currentPose.distance = clamp(currentPose.distance, this._minDistance, this._maxDistance);\n }\n}\n\nexport default Camera;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\n\n/**\n * Component that manages animations of the 3D Model\n * @category Core\n */\nclass ModelAnimator {\n private _mixer: THREE.AnimationMixer;\n private _clips: THREE.AnimationClip[];\n private _actions: THREE.AnimationAction[];\n\n /**\n * Three.js {@link https://threejs.org/docs/#api/en/animation/AnimationClip AnimationClip}s that stored\n * @type THREE.AnimationClip\n * @readonly\n */\n public get clips() { return this._clips; }\n\n /**\n * {@link https://threejs.org/docs/index.html#api/en/animation/AnimationMixer THREE.AnimationMixer} instance\n * @type THREE.AnimationMixer\n * @readonly\n */\n public get mixer() { return this._mixer; }\n\n /**\n * Create new ModelAnimator instance\n * @param scene {@link https://threejs.org/docs/index.html#api/en/scenes/Scene THREE.Scene} instance that is root of all 3d objects\n */\n constructor(scene: THREE.Scene) {\n this._mixer = new THREE.AnimationMixer(scene);\n this._clips = [];\n this._actions = [];\n }\n\n /**\n * Store the given clips\n * @param clips Three.js {@link https://threejs.org/docs/#api/en/animation/AnimationClip AnimationClip}s of the model\n * @returns {void} Nothing\n * @example\n * // After loading model\n * view3d.animator.setClips(model.animations);\n */\n public setClips(clips: THREE.AnimationClip[]): void {\n const mixer = this._mixer;\n this._clips = clips;\n this._actions = clips.map(clip => mixer.clipAction(clip));\n }\n\n /**\n * Play one of the model's animation\n * @param index Index of the animation to play\n * @returns {void} Nothing\n */\n public play(index: number): void {\n const action = this._actions[index];\n\n if (action) {\n action.play();\n }\n }\n\n /**\n * Pause one of the model's animation\n * If you want to stop animation completely, you should call {@link ModelAnimator#stop stop} instead\n * You should call {@link ModelAnimator#resume resume} to resume animation\n * @param index Index of the animation to pause\n * @returns {void} Nothing\n */\n public pause(index: number): void {\n const action = this._actions[index];\n\n if (action) {\n action.timeScale = 0;\n }\n }\n\n /**\n * Resume one of the model's animation\n * This will play animation from the point when the animation is paused\n * @param index Index of the animation to resume\n * @returns {void} Nothing\n */\n public resume(index: number): void {\n const action = this._actions[index];\n\n if (action) {\n action.timeScale = 1;\n }\n }\n\n /**\n * Fully stops one of the model's animation\n * @param index Index of the animation to stop\n * @returns {void} Nothing\n */\n public stop(index: number): void {\n const action = this._actions[index];\n\n if (action) {\n action.stop();\n }\n }\n\n /**\n * Update animations\n * @param delta number of seconds to play animations attached\n * @returns {void} Nothing\n */\n public update(delta: number): void {\n this._mixer.update(delta);\n }\n\n /**\n * Reset the instance and remove all cached animation clips attached to it\n * @returns {void} Nothing\n */\n public reset(): void {\n const mixer = this._mixer;\n\n mixer.uncacheRoot(mixer.getRoot());\n\n this._clips = [];\n this._actions = [];\n }\n}\n\nexport default ModelAnimator;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport View3D from \"~/View3D\";\nimport XRSession from \"../xr/XRSession\";\nimport WebARSession from \"../xr/WebARSession\";\n\n/**\n * XRManager that manages XRSessions\n * @category Core\n */\nclass XRManager {\n private _view3d: View3D;\n private _sessions: XRSession[];\n private _currentSession: XRSession | null;\n\n /**\n * Array of {@link XRSession}s added\n */\n public get sessions() { return this._sessions; }\n /**\n * Current entry session. Note that only WebXR type session can be returned.\n */\n public get currentSession() { return this._currentSession; }\n\n /**\n * Create a new instance of the XRManager\n * @param view3d Instance of the View3D\n */\n constructor(view3d: View3D) {\n this._view3d = view3d;\n this._sessions = [];\n this._currentSession = null;\n }\n\n /**\n * Return a Promise containing whether any of the added session is available\n */\n public async isAvailable(): Promise<boolean> {\n const results = await Promise.all(this._sessions.map(session => session.isAvailable()));\n\n return results.some(result => result === true);\n }\n\n /**\n * Add new {@link XRSession}.\n * The XRSession's order added is the same as the order of entry.\n * @param xrSession XRSession to add\n */\n public addSession(...xrSession: XRSession[]) {\n this._sessions.push(...xrSession);\n }\n\n /**\n * Enter XR Session.\n */\n public async enter(): Promise<void> {\n return this._enterSession(0, []);\n }\n\n /**\n * Exit current XR Session.\n */\n public exit() {\n if (this._currentSession) {\n this._currentSession.exit(this._view3d);\n this._currentSession = null;\n }\n }\n\n private async _enterSession(sessionIdx: number, errors: any[]) {\n const view3d = this._view3d;\n const sessions = this._sessions;\n\n if (sessionIdx >= sessions.length) {\n if (errors.length < 1) {\n errors.push(new Error(\"No sessions available\"));\n }\n return Promise.reject(errors);\n }\n\n const xrSession = sessions[sessionIdx];\n const isSessionAvailable = await xrSession.isAvailable();\n if (!isSessionAvailable) {\n return this._enterSession(sessionIdx + 1, errors);\n }\n\n return await xrSession.enter(view3d).then(() => {\n if (xrSession.isWebXRSession) {\n // Non-webxr sessions are ignored\n this._currentSession = xrSession;\n (xrSession as WebARSession).session.addEventListener(\"end\", () => {\n this._currentSession = null;\n });\n }\n return errors;\n }).catch(e => {\n errors.push(e);\n return this._enterSession(sessionIdx + 1, errors);\n });\n }\n}\n\nexport default XRManager;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nexport const EVENTS = {\n MOUSE_DOWN: \"mousedown\",\n MOUSE_MOVE: \"mousemove\",\n MOUSE_UP: \"mouseup\",\n TOUCH_START: \"touchstart\",\n TOUCH_MOVE: \"touchmove\",\n TOUCH_END: \"touchend\",\n WHEEL: \"wheel\",\n RESIZE: \"resize\",\n CONTEXT_MENU: \"contextmenu\",\n MOUSE_ENTER: \"mouseenter\",\n MOUSE_LEAVE: \"mouseleave\",\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent.button\nexport enum MOUSE_BUTTON {\n LEFT,\n MIDDLE,\n RIGHT,\n}\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport EventEmitter from \"./core/EventEmitter\";\nimport Renderer from \"./core/Renderer\";\nimport Scene from \"./core/Scene\";\nimport Camera from \"./core/camera/Camera\";\nimport Model from \"./core/Model\";\nimport ModelAnimator from \"./core/ModelAnimator\";\nimport XRManager from \"./core/XRManager\";\nimport { EVENTS } from \"./consts/event\";\nimport * as DEFAULT from \"./consts/default\";\nimport { getCanvas } from \"./utils\";\n\n/**\n * Yet another 3d model viewer\n * @category Core\n * @mermaid\n * classDiagram\n * class View3D\n * View3D *-- Camera\n * View3D *-- Renderer\n * View3D *-- Scene\n * View3D *-- ModelAnimator\n * Camera *-- Controller\n * @event resize\n * @event beforeRender\n * @event afterRender\n */\nclass View3D extends EventEmitter<{\n resize: {\n width: number;\n height: number;\n target: View3D;\n };\n beforeRender: View3D;\n afterRender: View3D;\n}> {\n /**\n * Current version of the View3D\n */\n public static VERSION: string = \"#__VERSION__#\";\n\n private _model: Model | null;\n private _renderer: Renderer;\n private _scene: Scene;\n private _camera: Camera;\n private _animator: ModelAnimator;\n private _xr: XRManager;\n\n /**\n * {@link Renderer} instance of the View3D\n * @type {Renderer}\n */\n public get renderer() { return this._renderer; }\n /**\n * {@link Scene} instance of the View3D\n * @type {Scene}\n */\n public get scene() { return this._scene; }\n /**\n * {@link Camera} instance of the View3D\n * @type {Camera}\n */\n public get camera() { return this._camera; }\n /**\n * {@link Controller} instance of the Camera\n * @type {Controller}\n */\n public get controller() { return this._camera.controller; }\n /**\n * {@link ModelAnimator} instance of the View3D\n * @type {ModelAnimator}\n */\n public get animator() { return this._animator; }\n /**\n * {@link XRManager} instance of the View3D\n * @type {XRManager}\n */\n public get xr() { return this._xr; }\n /**\n * {@link Model} that View3D is currently showing\n * @type {Model|null}\n */\n public get model() { return this._model; }\n\n /**\n * Creates new View3D instance\n * @example\n * import View3D, { ERROR_CODES } from \"@egjs/view3d\";\n *\n * try {\n * const view3d = new View3D(\"#wrapper\")\n * } catch (e) {\n * if (e.code === ERROR_CODES.ELEMENT_NOT_FOUND) {\n * console.error(\"Element not found\")\n * }\n * }\n * @throws {View3DError} `CODES.WRONG_TYPE`<br/>When the parameter is not either string or the canvas element.\n * @throws {View3DError} `CODES.ELEMENT_NOT_FOUND`<br/>When the element with given query does not exist.\n * @throws {View3DError} `CODES.ELEMENT_NOT_CANVAS`<br/>When the element given is not a \\<canvas\\> element.\n * @throws {View3DError} `CODES.WEBGL_NOT_SUPPORTED`<br/>When browser does not support WebGL.\n * @see Model\n * @see Camera\n * @see Renderer\n * @see Scene\n * @see Controller\n * @see XRManager\n */\n constructor(el: string | HTMLCanvasElement) {\n super();\n const canvas = getCanvas(el);\n\n this._renderer = new Renderer(canvas);\n this._camera = new Camera(canvas);\n this._scene = new Scene();\n this._animator = new ModelAnimator(this._scene.root);\n this._xr = new XRManager(this);\n this._model = null;\n\n this.resize();\n\n window.addEventListener(EVENTS.RESIZE, this.resize);\n }\n\n /**\n * Destroy View3D instance and remove all events attached to it\n * @returns {void} Nothing\n */\n public destroy(): void {\n this._scene.reset();\n this.controller.clear();\n this._model = null;\n\n window.removeEventListener(EVENTS.RESIZE, this.resize);\n }\n\n /**\n * Resize View3D instance to fit current canvas size\n * @method\n * @returns {void} Nothing\n */\n public resize = (): void => {\n this._renderer.resize();\n\n const newSize = this._renderer.size;\n this._camera.resize(newSize);\n\n this.emit(\"resize\", { ...newSize, target: this });\n }\n\n /**\n * Display the given model.\n * This method will remove the current displaying model, and reset the camera & control to default position.\n * View3D can only show one model at a time\n * @param model {@link Model} instance to show\n * @param {object} [options={}] Display options\n * @param {number} [options.applySize=true] Whether to change model size to given \"size\" option.\n * @param {number} [options.size=80] Size of the model to show as.\n * @param {boolean} [options.resetView=true] Whether to reset the view to the camera's default pose.\n * @returns {void} Nothing\n */\n public display(model: Model, {\n applySize = true,\n size = DEFAULT.MODEL_SIZE,\n resetView = true,\n } = {}): void {\n const renderer = this._renderer;\n const scene = this._scene;\n const camera = this._camera;\n const animator = this._animator;\n\n if (applySize) {\n model.size = size;\n }\n // model.moveToOrigin();\n\n scene.resetModel();\n\n if (resetView) {\n camera.reset();\n }\n\n animator.reset();\n\n this._model = model;\n\n scene.add(model.scene);\n animator.setClips(model.animations);\n\n scene.update(model);\n\n renderer.stopAnimationLoop();\n renderer.setAnimationLoop(this.renderLoop);\n }\n\n /**\n * View3D's basic render loop function\n * @param delta Number of seconds passed since last frame\n */\n public renderLoop = (delta: number) => {\n const renderer = this._renderer;\n const scene = this._scene;\n const camera = this._camera;\n const controller = this.controller;\n const animator = this._animator;\n\n animator.update(delta);\n controller.update(delta);\n\n this.emit(\"beforeRender\", this);\n renderer.render(scene, camera);\n this.emit(\"afterRender\", this);\n }\n}\n\nexport default View3D;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\n\n/**\n * Data class for loaded 3d model\n * @category Core\n */\nclass Model {\n private _scene: THREE.Group;\n private _animations: THREE.AnimationClip[];\n private _initialBbox: THREE.Box3;\n private _originalSize: number;\n private _cachedLights: THREE.Light[] | null;\n private _cachedMeshes: THREE.Mesh[] | null;\n private _fixSkinnedBbox: boolean;\n\n /**\n * Scene of the model, see {@link https://threejs.org/docs/#api/en/objects/Group THREE.Group}\n * @readonly\n */\n public get scene() { return this._scene; }\n /**\n * {@link https://threejs.org/docs/#api/en/animation/AnimationClip THREE.AnimationClip}s inside model\n */\n public get animations() { return this._animations; }\n /***\n * {@link https://threejs.org/docs/#api/en/lights/Light THREE.Light}s inside model if there's any.\n * @readonly\n */\n public get lights() {\n return this._cachedLights ? this._cachedLights : this._getAllLights();\n }\n /**\n * {@link https://threejs.org/docs/#api/en/objects/Mesh THREE.Mesh}es inside model if there's any.\n * @readonly\n */\n public get meshes() {\n return this._cachedMeshes ? this._cachedMeshes : this._getAllMeshes();\n }\n /**\n * Get a copy of model's current bounding box\n * @type THREE#Box3\n * @see https://threejs.org/docs/#api/en/math/Box3\n */\n public get bbox() {\n return this._getTransformedBbox();\n }\n /**\n * Get a copy of model's initial bounding box without transform\n */\n public get initialBbox() {\n return this._initialBbox.clone();\n }\n /**\n * Model's bounding box size\n * Changing this will scale the model.\n * @type number\n * @example\n * import { GLTFLoader } from \"@egjs/view3d\";\n * new GLTFLoader().load(URL_TO_GLTF)\n * .then(model => {\n * model.size = 100;\n * })\n */\n public get size() {\n return this._getTransformedBbox().getSize(new THREE.Vector3()).length();\n }\n\n /**\n * Whether to apply inference from skeleton when calculating bounding box\n * This can fix some models with skinned mesh when it has wrong bounding box\n * @type boolean\n */\n public get fixSkinnedBbox() { return this._fixSkinnedBbox; }\n\n /**\n * Return the model's original bbox size before applying any transform\n * @type number\n */\n public get originalSize() { return this._originalSize; }\n\n /**\n * Whether the model's meshes gets rendered into shadow map\n * @type boolean\n * @example\n * model.castShadow = true;\n */\n public set castShadow(val: boolean) {\n const meshes = this.meshes;\n meshes.forEach(mesh => mesh.castShadow = val);\n }\n\n /**\n * Whether the model's mesh materials receive shadows\n * @type boolean\n * @example\n * model.receiveShadow = true;\n */\n public set receiveShadow(val: boolean) {\n const meshes = this.meshes;\n meshes.forEach(mesh => mesh.receiveShadow = val);\n }\n\n public set size(val: number) {\n const scene = this._scene;\n const initialBbox = this._initialBbox;\n\n // Modify scale\n const bboxSize = initialBbox.getSize(new THREE.Vector3());\n const scale = val / bboxSize.length();\n scene.scale.setScalar(scale);\n scene.updateMatrix();\n }\n\n public set fixSkinnedBbox(val: boolean) { this._fixSkinnedBbox = val; }\n\n /**\n * Create new Model instance\n */\n constructor({\n scenes,\n animations = [],\n fixSkinnedBbox = false,\n castShadow = true,\n receiveShadow = false,\n }: {\n scenes: THREE.Object3D[],\n animations?: THREE.AnimationClip[],\n fixSkinnedBbox?: boolean,\n castShadow?: boolean,\n receiveShadow?: boolean,\n }) {\n // This guarantees model's root has identity matrix at creation\n this._scene = new THREE.Group();\n const pivot = new THREE.Object3D();\n pivot.name = \"Pivot\";\n pivot.add(...scenes);\n this._scene.add(pivot);\n\n this._animations = animations;\n this._fixSkinnedBbox = fixSkinnedBbox;\n this._cachedLights = null;\n this._cachedMeshes = null;\n\n this._setInitialBbox();\n\n const bboxCenter = this._initialBbox.getCenter(new THREE.Vector3());\n pivot.position.copy(bboxCenter.negate());\n\n this._moveInitialBboxToCenter();\n\n this._originalSize = this.size;\n\n this.castShadow = castShadow;\n this.receiveShadow = receiveShadow;\n }\n\n /**\n * Translate the model to center the model's bounding box to world origin (0, 0, 0).\n */\n public moveToOrigin() {\n // Translate scene position to origin\n const scene = this._scene;\n const initialBbox = this._initialBbox.clone();\n\n initialBbox.min.multiply(scene.scale);\n initialBbox.max.multiply(scene.scale);\n\n const bboxCenter = initialBbox.getCenter(new THREE.Vector3());\n scene.position.copy(bboxCenter.negate());\n scene.updateMatrix();\n }\n\n private _setInitialBbox() {\n this._scene.updateMatrixWorld();\n if (this._fixSkinnedBbox && this._hasSkinnedMesh()) {\n this._initialBbox = this._getSkeletonBbox();\n } else {\n this._initialBbox = new THREE.Box3().setFromObject(this._scene);\n }\n }\n\n private _getSkeletonBbox() {\n const bbox = new THREE.Box3();\n\n this.meshes.forEach((mesh: THREE.SkinnedMesh) => {\n if (!mesh.isSkinnedMesh) {\n bbox.expandByObject(mesh);\n return;\n }\n\n const geometry = mesh.geometry as THREE.BufferGeometry;\n const positions = geometry.attributes.position;\n const skinIndicies = geometry.attributes.skinIndex;\n const skinWeights = geometry.attributes.skinWeight;\n const skeleton = mesh.skeleton;\n\n skeleton.update();\n const boneMatricies = skeleton.boneMatrices;\n\n const finalMatrix = new THREE.Matrix4();\n for (let posIdx = 0; posIdx < positions.count; posIdx++) {\n finalMatrix.identity();\n\n const skinned = new THREE.Vector4();\n skinned.set(0, 0, 0, 0);\n const skinVertex = new THREE.Vector4();\n skinVertex.set(\n positions.getX(posIdx),\n positions.getY(posIdx),\n positions.getZ(posIdx),\n 1,\n ).applyMatrix4(mesh.bindMatrix);\n\n const weights = [\n skinWeights.getX(posIdx),\n skinWeights.getY(posIdx),\n skinWeights.getZ(posIdx),\n skinWeights.getW(posIdx),\n ];\n\n const indicies = [\n skinIndicies.getX(posIdx),\n skinIndicies.getY(posIdx),\n skinIndicies.getZ(posIdx),\n skinIndicies.getW(posIdx),\n ];\n\n weights.forEach((weight, index) => {\n const boneMatrix = new THREE.Matrix4().fromArray(boneMatricies, indicies[index] * 16);\n skinned.add(skinVertex.clone().applyMatrix4(boneMatrix).multiplyScalar(weight));\n });\n\n const transformed = new THREE.Vector3().fromArray(skinned.applyMatrix4(mesh.bindMatrixInverse).toArray());\n transformed.applyMatrix4(mesh.matrixWorld);\n\n bbox.expandByPoint(transformed);\n }\n });\n\n return bbox;\n }\n\n private _moveInitialBboxToCenter() {\n const bboxCenter = this._initialBbox.getCenter(new THREE.Vector3());\n this._initialBbox.translate(bboxCenter.negate());\n }\n\n private _getAllLights(): THREE.Light[] {\n const lights: THREE.Light[] = [];\n\n this._scene.traverse(obj => {\n if ((obj as any).isLight) {\n lights.push(obj as THREE.Light);\n }\n });\n\n this._cachedLights = lights;\n\n return lights;\n }\n\n /**\n * Get all {@link https://threejs.org/docs/#api/en/objects/Mesh THREE.Mesh}es inside model if there's any.\n * @private\n * @returns Meshes found at model's scene\n */\n private _getAllMeshes(): THREE.Mesh[] {\n const meshes: THREE.Mesh[] = [];\n\n this._scene.traverse(obj => {\n if ((obj as any).isMesh) {\n meshes.push(obj as THREE.Mesh);\n }\n });\n\n this._cachedMeshes = meshes;\n\n return meshes;\n }\n\n private _hasSkinnedMesh(): boolean {\n return this.meshes.some(mesh => (mesh as THREE.SkinnedMesh).isSkinnedMesh);\n }\n\n private _getTransformedBbox(): THREE.Box3 {\n return this._initialBbox.clone().applyMatrix4(this._scene.matrix);\n }\n}\n\nexport default Model;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport CameraControl from \"./CameraControl\";\nimport View3DError from \"~/View3DError\";\nimport Camera from \"~/core/camera/Camera\";\nimport { getElement } from \"~/utils\";\nimport { EVENTS, MOUSE_BUTTON } from \"~/consts/event\";\nimport * as ERROR from \"~/consts/error\";\nimport * as DEFAULT from \"~/consts/default\";\n\n/**\n * Control that animates model without user input\n * @category Controls\n */\nclass AutoControl implements CameraControl {\n // Options\n private _delay: number;\n private _delayOnMouseLeave: number;\n private _speed: number;\n private _pauseOnHover: boolean;\n private _canInterrupt: boolean;\n private _disableOnInterrupt: boolean;\n\n // Internal values\n private _targetEl: HTMLElement | null = null;\n private _enabled: boolean = false;\n private _interrupted: boolean = false;\n private _interruptionTimer: number = -1;\n private _hovering: boolean = false;\n\n /**\n * Control's current target element to attach event listeners\n * @readonly\n */\n public get element() { return this._targetEl; }\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n /**\n * Reactivation delay after mouse input in milisecond\n */\n public get delay() { return this._delay; }\n /**\n * Reactivation delay after mouse leave\n * This option only works when {@link AutoControl#pauseOnHover pauseOnHover} is activated\n */\n public get delayOnMouseLeave() { return this._delayOnMouseLeave; }\n /**\n * Y-axis(yaw) rotation speed\n * @default 1\n */\n public get speed() { return this._speed; }\n /**\n * Whether to pause rotation on mouse hover\n * @default false\n */\n public get pauseOnHover() { return this._pauseOnHover; }\n /**\n * Whether user can interrupt the rotation with click/wheel input\n * @default true\n */\n public get canInterrupt() { return this._canInterrupt; }\n /**\n * Whether to disable control on user interrupt\n * @default false\n */\n public get disableOnInterrupt() { return this._disableOnInterrupt; }\n\n public set delay(val: number) { this._delay = val; }\n public set delayOnMouseLeave(val: number) { this._delayOnMouseLeave = val; }\n public set speed(val: number) { this._speed = val; }\n public set pauseOnHover(val: boolean) { this._pauseOnHover = val; }\n public set canInterrupt(val: boolean) { this._canInterrupt = val; }\n public set disableOnInterrupt(val: boolean) { this._disableOnInterrupt = val; }\n\n /**\n * Create new RotateControl instance\n * @param {object} options Options\n * @param {HTMLElement | string | null} [options.element=null] Attaching element / selector of the element\n * @param {number} [options.delay=2000] Reactivation delay after mouse input in milisecond\n * @param {number} [options.delayOnMouseLeave=0] Reactivation delay after mouse leave\n * @param {number} [options.speed=1] Y-axis(yaw) rotation speed\n * @param {boolean} [options.pauseOnHover=false] Whether to pause rotation on mouse hover\n * @param {boolean} [options.canInterrupt=true] Whether user can interrupt the rotation with click/wheel input\n * @param {boolean} [options.disableOnInterrupt=false] Whether to disable control on user interrupt\n * @tutorial Adding Controls\n */\n constructor({\n element = DEFAULT.NULL_ELEMENT,\n delay = 2000,\n delayOnMouseLeave = 0,\n speed = 1,\n pauseOnHover = false,\n canInterrupt = true,\n disableOnInterrupt = false,\n } = {}) {\n const targetEl = getElement(element);\n if (targetEl) {\n this.setElement(targetEl);\n }\n this._delay = delay;\n this._delayOnMouseLeave = delayOnMouseLeave;\n this._speed = speed;\n this._pauseOnHover = pauseOnHover;\n this._canInterrupt = canInterrupt;\n this._disableOnInterrupt = disableOnInterrupt;\n }\n\n /**\n * Destroy the instance and remove all event listeners attached\n * This also will reset CSS cursor to intial\n * @returns {void} Nothing\n */\n public destroy(): void {\n this.disable();\n }\n\n /**\n * Update control by given deltaTime\n * @param camera Camera to update position\n * @param deltaTime Number of milisec to update\n * @returns {void} Nothing\n */\n public update(camera: Camera, deltaTime: number): void {\n if (!this._enabled) return;\n if (this._interrupted) {\n if (this._disableOnInterrupt) {\n this.disable();\n }\n\n return;\n }\n\n camera.yaw += this._speed * deltaTime / 100;\n }\n\n // This is not documetned on purpose as it doesn't do nothing\n public resize(size: THREE.Vector2) {\n // DO NOTHING\n }\n\n /**\n * Enable this input and add event listeners\n * @returns {void} Nothing\n */\n public enable(): void {\n if (this._enabled) return;\n if (!this._targetEl) {\n throw new View3DError(ERROR.MESSAGES.ADD_CONTROL_FIRST, ERROR.CODES.ADD_CONTROL_FIRST);\n }\n\n const targetEl = this._targetEl;\n\n targetEl.addEventListener(EVENTS.MOUSE_DOWN, this._onMouseDown, false);\n\n targetEl.addEventListener(EVENTS.TOUCH_START, this._onTouchStart, false);\n targetEl.addEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n targetEl.addEventListener(EVENTS.MOUSE_ENTER, this._onMouseEnter, false);\n targetEl.addEventListener(EVENTS.MOUSE_LEAVE, this._onMouseLeave, false);\n\n targetEl.addEventListener(EVENTS.WHEEL, this._onWheel, false);\n\n this._enabled = true;\n }\n\n /**\n * Disable this input and remove all event handlers\n * @returns {void} Nothing\n */\n public disable(): void {\n if (!this._enabled || !this._targetEl) return;\n\n const targetEl = this._targetEl;\n\n targetEl.removeEventListener(EVENTS.MOUSE_DOWN, this._onMouseDown, false);\n window.removeEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n\n targetEl.removeEventListener(EVENTS.TOUCH_START, this._onTouchStart, false);\n targetEl.removeEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n targetEl.removeEventListener(EVENTS.MOUSE_ENTER, this._onMouseEnter, false);\n targetEl.removeEventListener(EVENTS.MOUSE_LEAVE, this._onMouseLeave, false);\n\n targetEl.removeEventListener(EVENTS.WHEEL, this._onWheel, false);\n\n this._enabled = false;\n this._interrupted = false;\n this._hovering = false;\n\n this._clearTimeout();\n }\n\n // This does nothing\n public sync(camera: Camera): void {\n // Do nothing\n }\n\n /**\n * Set target element to attach event listener\n * @param element target element\n * @returns {void} Nothing\n */\n public setElement(element: HTMLElement): void {\n this._targetEl = element;\n }\n\n private _onMouseDown = (evt: MouseEvent) => {\n if (!this._canInterrupt) return;\n if (evt.button !== MOUSE_BUTTON.LEFT && evt.button !== MOUSE_BUTTON.RIGHT) return;\n\n this._interrupted = true;\n this._clearTimeout();\n window.addEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n }\n\n private _onMouseUp = () => {\n window.removeEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n this._setUninterruptedAfterDelay(this._delay);\n }\n\n private _onTouchStart = () => {\n if (!this._canInterrupt) return;\n this._interrupted = true;\n this._clearTimeout();\n }\n\n private _onTouchEnd = () => {\n this._setUninterruptedAfterDelay(this._delay);\n }\n\n private _onMouseEnter = () => {\n if (!this._pauseOnHover) return;\n this._interrupted = true;\n this._hovering = true;\n }\n\n private _onMouseLeave = () => {\n if (!this._pauseOnHover) return;\n this._hovering = false;\n this._setUninterruptedAfterDelay(this._delayOnMouseLeave);\n }\n\n private _onWheel = () => {\n if (!this._canInterrupt) return;\n this._interrupted = true;\n this._setUninterruptedAfterDelay(this._delay);\n }\n\n private _setUninterruptedAfterDelay(delay: number): void {\n if (this._hovering) return;\n\n this._clearTimeout();\n\n if (delay > 0) {\n this._interruptionTimer = window.setTimeout(() => {\n this._interrupted = false;\n this._interruptionTimer = -1;\n }, delay);\n } else {\n this._interrupted = false;\n this._interruptionTimer = -1;\n }\n }\n\n private _clearTimeout(): void {\n if (this._interruptionTimer >= 0) {\n window.clearTimeout(this._interruptionTimer);\n this._interruptionTimer = -1;\n }\n }\n}\n\nexport default AutoControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nexport const CURSOR: {\n GRAB: \"grab\",\n GRABBING: \"grabbing\",\n} = {\n GRAB: \"grab\",\n GRABBING: \"grabbing\",\n};\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport CameraControl from \"./CameraControl\";\nimport Motion from \"./Motion\";\nimport View3DError from \"~/View3DError\";\nimport Camera from \"~/core/camera/Camera\";\nimport { getElement } from \"~/utils\";\nimport { EVENTS, MOUSE_BUTTON } from \"~/consts/event\";\nimport { CURSOR } from \"~/consts/css\";\nimport * as DEFAULT from \"~/consts/default\";\nimport * as ERROR from \"~/consts/error\";\nimport { ValueOf } from \"~/types/internal\";\n\n/**\n * Model's rotation control that supports both mouse & touch\n * @category Controls\n */\nclass RotateControl implements CameraControl {\n // Options\n private _useGrabCursor: boolean;\n private _scaleToElement: boolean;\n private _userScale: THREE.Vector2;\n\n // Internal values\n private _targetEl: HTMLElement | null = null;\n private _xMotion: Motion;\n private _yMotion: Motion;\n private _screenScale: THREE.Vector2 = new THREE.Vector2(0, 0);\n private _prevPos: THREE.Vector2 = new THREE.Vector2(0, 0);\n private _enabled: boolean = false;\n\n /**\n * Control's current target element to attach event listeners\n * @readonly\n */\n public get element() { return this._targetEl; }\n /**\n * Scale factor for panning, x is for horizontal and y is for vertical panning.\n * @type THREE.Vector2\n * @see https://threejs.org/docs/#api/en/math/Vector2\n * @example\n * const rotateControl = new View3D.RotateControl();\n * rotateControl.scale.setX(2);\n */\n public get scale() { return this._userScale; }\n /**\n * Whether to apply CSS style `cursor: grab` on the target element or not\n * @default true\n * @example\n * const rotateControl = new View3D.RotateControl();\n * rotateControl.useGrabCursor = true;\n */\n public get useGrabCursor() { return this._useGrabCursor; }\n /**\n * Whether to scale control to fit element size.\n * When this is true and {@link RotateControl#scale scale.x} is 1, panning through element's width will make 3d model's yaw rotate 360°.\n * When this is true and {@link RotateControl#scale scale.y} is 1, panning through element's height will make 3d model's pitch rotate 180°.\n * @default true\n * @example\n * import View3D, { RotateControl } from \"@egjs/view3d\";\n * const view3d = new View3D(\"#view3d-canvas\");\n * const rotateControl = new RotateControl();\n * rotateControl.scaleToElement = true;\n * view3d.controller.add(rotateControl);\n * view3d.resize();\n */\n public get scaleToElement() { return this._scaleToElement; }\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n\n public set scale(val: THREE.Vector2) {\n this._userScale.copy(val);\n }\n public set useGrabCursor(val: boolean) {\n if (!val) {\n this._setCursor(\"\");\n this._useGrabCursor = false;\n } else {\n this._useGrabCursor = true;\n this._setCursor(CURSOR.GRAB);\n }\n }\n public set scaleToElement(val: boolean) {\n this._scaleToElement = val;\n }\n\n /**\n * Create new RotateControl instance\n * @param {object} options Options\n * @param {HTMLElement | null} [options.element] Target element.\n * @param {number} [options.duration=500] Motion's duration.\n * @param {function} [options.easing=(x: number) => 1 - Math.pow(1 - x, 3)] Motion's easing function.\n * @param {THREE.Vector2} [options.scale=new THREE.Vector2(1, 1)] Scale factor for panning, x is for horizontal and y is for vertical panning.\n * @param {boolean} [options.useGrabCursor=true] Whether to apply CSS style `cursor: grab` on the target element or not.\n * @param {boolean} [options.scaleToElement=true] Whether to scale control to fit element size.\n * @tutorial Adding Controls\n */\n constructor({\n element = DEFAULT.NULL_ELEMENT,\n duration = DEFAULT.ANIMATION_DURATION,\n easing = DEFAULT.EASING,\n scale = new THREE.Vector2(1, 1),\n useGrabCursor = true,\n scaleToElement = true,\n } = {}) {\n const targetEl = getElement(element);\n if (targetEl) {\n this.setElement(targetEl);\n }\n this._userScale = scale;\n this._useGrabCursor = useGrabCursor;\n this._scaleToElement = scaleToElement;\n this._xMotion = new Motion({ duration, range: DEFAULT.INFINITE_RANGE, easing });\n this._yMotion = new Motion({ duration, range: DEFAULT.PITCH_RANGE, easing });\n }\n\n /**\n * Destroy the instance and remove all event listeners attached\n * This also will reset CSS cursor to intial\n * @returns {void} Nothing\n */\n public destroy(): void {\n this.disable();\n }\n\n /**\n * Update control by given deltaTime\n * @param camera Camera to update position\n * @param deltaTime Number of milisec to update\n * @returns {void} Nothing\n */\n public update(camera: Camera, deltaTime: number): void {\n const xMotion = this._xMotion;\n const yMotion = this._yMotion;\n\n const delta = new THREE.Vector2(\n xMotion.update(deltaTime),\n yMotion.update(deltaTime),\n );\n\n camera.yaw += delta.x;\n camera.pitch += delta.y;\n }\n\n /**\n * Resize control to match target size\n * This method is only meaningful when {@link RotateControl#scaleToElement scaleToElement} is enabled\n * @param size {@link https://threejs.org/docs/#api/en/math/Vector2 THREE.Vector2} instance of width(x), height(y)\n */\n public resize(size: THREE.Vector2) {\n this._screenScale.set(360 / size.x, 180 / size.y);\n }\n\n /**\n * Enable this input and add event listeners\n * @returns {void} Nothing\n */\n public enable(): void {\n if (this._enabled) return;\n if (!this._targetEl) {\n throw new View3DError(ERROR.MESSAGES.ADD_CONTROL_FIRST, ERROR.CODES.ADD_CONTROL_FIRST);\n }\n\n const targetEl = this._targetEl;\n\n targetEl.addEventListener(EVENTS.MOUSE_DOWN, this._onMouseDown, false);\n\n targetEl.addEventListener(EVENTS.TOUCH_START, this._onTouchStart, false);\n targetEl.addEventListener(EVENTS.TOUCH_MOVE, this._onTouchMove, false);\n targetEl.addEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n this._enabled = true;\n this._setCursor(CURSOR.GRAB);\n }\n\n /**\n * Disable this input and remove all event handlers\n * @returns {void} Nothing\n */\n public disable(): void {\n if (!this._enabled || !this._targetEl) return;\n\n const targetEl = this._targetEl;\n\n targetEl.removeEventListener(EVENTS.MOUSE_DOWN, this._onMouseDown, false);\n window.removeEventListener(EVENTS.MOUSE_MOVE, this._onMouseMove, false);\n window.removeEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n\n targetEl.removeEventListener(EVENTS.TOUCH_START, this._onTouchStart, false);\n targetEl.removeEventListener(EVENTS.TOUCH_MOVE, this._onTouchMove, false);\n targetEl.removeEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n this._setCursor(\"\");\n this._enabled = false;\n }\n\n /**\n * Synchronize this control's state to given camera position\n * @param camera Camera to match state\n * @returns {void} Nothing\n */\n public sync(camera: Camera): void {\n this._xMotion.reset(camera.yaw);\n this._yMotion.reset(camera.pitch);\n }\n\n /**\n * Set target element to attach event listener\n * @param element target element\n * @returns {void} Nothing\n */\n public setElement(element: HTMLElement): void {\n this._targetEl = element;\n this.resize(new THREE.Vector2(element.offsetWidth, element.offsetHeight));\n }\n\n private _setCursor(val: ValueOf<typeof CURSOR> | \"\") {\n const targetEl = this._targetEl;\n if (!this._useGrabCursor || !targetEl || !this._enabled) return;\n\n targetEl.style.cursor = val;\n }\n\n private _onMouseDown = (evt: MouseEvent) => {\n if (evt.button !== MOUSE_BUTTON.LEFT) return;\n\n const targetEl = this._targetEl!;\n evt.preventDefault();\n\n targetEl.focus ? targetEl.focus() : window.focus();\n\n this._prevPos.set(evt.clientX, evt.clientY);\n window.addEventListener(EVENTS.MOUSE_MOVE, this._onMouseMove, false);\n window.addEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n\n this._setCursor(CURSOR.GRABBING);\n }\n\n private _onMouseMove = (evt: MouseEvent) => {\n evt.preventDefault();\n\n const prevPos = this._prevPos;\n const rotateDelta = new THREE.Vector2(evt.clientX, evt.clientY)\n .sub(prevPos)\n .multiply(this._userScale);\n\n if (this._scaleToElement) {\n rotateDelta.multiply(this._screenScale);\n }\n\n this._xMotion.setEndDelta(rotateDelta.x);\n this._yMotion.setEndDelta(rotateDelta.y);\n\n prevPos.set(evt.clientX, evt.clientY);\n }\n\n private _onMouseUp = () => {\n this._prevPos.set(0, 0);\n window.removeEventListener(EVENTS.MOUSE_MOVE, this._onMouseMove, false);\n window.removeEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n\n this._setCursor(CURSOR.GRAB);\n }\n\n private _onTouchStart = (evt: TouchEvent) => {\n evt.preventDefault();\n\n const touch = evt.touches[0];\n this._prevPos.set(touch.clientX, touch.clientY);\n }\n\n private _onTouchMove = (evt: TouchEvent) => {\n // Only the one finger motion should be considered\n if (evt.touches.length > 1) return;\n\n if (evt.cancelable !== false) {\n evt.preventDefault();\n }\n evt.stopPropagation();\n\n const touch = evt.touches[0];\n\n const prevPos = this._prevPos;\n const rotateDelta = new THREE.Vector2(touch.clientX, touch.clientY)\n .sub(prevPos)\n .multiply(this._userScale);\n\n if (this._scaleToElement) {\n rotateDelta.multiply(this._screenScale);\n }\n\n this._xMotion.setEndDelta(rotateDelta.x);\n this._yMotion.setEndDelta(rotateDelta.y);\n\n prevPos.set(touch.clientX, touch.clientY);\n }\n\n private _onTouchEnd = (evt: TouchEvent) => {\n const touch = evt.touches[0];\n if (touch) {\n this._prevPos.set(touch.clientX, touch.clientY);\n } else {\n this._prevPos.set(0, 0);\n }\n }\n}\n\nexport default RotateControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport CameraControl from \"./CameraControl\";\nimport Motion from \"./Motion\";\nimport View3DError from \"~/View3DError\";\nimport Camera from \"~/core/camera/Camera\";\nimport { getElement } from \"~/utils\";\nimport { EVENTS, MOUSE_BUTTON } from \"~/consts/event\";\nimport { CURSOR } from \"~/consts/css\";\nimport * as DEFAULT from \"~/consts/default\";\nimport * as ERROR from \"~/consts/error\";\nimport { ValueOf } from \"~/types/internal\";\n\n/**\n * Model's translation control that supports both mouse & touch\n * @category Controls\n */\nclass TranslateControl implements CameraControl {\n // Options\n private _useGrabCursor: boolean;\n private _scaleToElement: boolean;\n private _userScale: THREE.Vector2;\n\n // Internal values\n private _targetEl: HTMLElement | null = null;\n private _enabled: boolean = false;\n // Sometimes, touchstart for second finger doesn't triggered.\n // This flag checks whether that happened\n private _touchInitialized: boolean = false;\n private _xMotion: Motion;\n private _yMotion: Motion;\n private _prevPos: THREE.Vector2 = new THREE.Vector2(0, 0);\n private _screenSize: THREE.Vector2 = new THREE.Vector2(0, 0);\n\n /**\n * Control's current target element to attach event listeners\n * @readonly\n */\n public get element() { return this._targetEl; }\n /**\n * Scale factor for translation\n * @type THREE.Vector2\n * @see https://threejs.org/docs/#api/en/math/Vector2\n * @example\n * import { TranslateControl } from \"@egjs/view3d\";\n * const translateControl = new TranslateControl();\n * translateControl.scale.set(2, 2);\n */\n public get scale() { return this._userScale; }\n /**\n * Whether to apply CSS style `cursor: grab` on the target element or not\n * @default true\n * @example\n * import { TranslateControl } from \"@egjs/view3d\";\n * const translateControl = new TranslateControl();\n * translateControl.useGrabCursor = true;\n */\n public get useGrabCursor() { return this._useGrabCursor; }\n /**\n * Scale control to fit element size.\n * When this is true, camera's pivot change will correspond same amount you've dragged.\n * @default true\n * @example\n * import View3D, { TranslateControl } from \"@egjs/view3d\";\n * const view3d = new View3D(\"#view3d-canvas\");\n * const translateControl = new TranslateControl();\n * translateControl.scaleToElement = true;\n * view3d.controller.add(translateControl);\n * view3d.resize();\n */\n public get scaleToElement() { return this._scaleToElement; }\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n\n public set scale(val: THREE.Vector2) {\n this._userScale.copy(val);\n }\n public set useGrabCursor(val: boolean) {\n if (!val) {\n this._setCursor(\"\");\n this._useGrabCursor = false;\n } else {\n this._useGrabCursor = true;\n this._setCursor(CURSOR.GRAB);\n }\n }\n public set scaleToElement(val: boolean) {\n this._scaleToElement = val;\n }\n\n /**\n * Create new TranslateControl instance\n * @param {object} options Options\n * @param {HTMLElement | null} [options.element] Target element.\n * @param {function} [options.easing=(x: number) => 1 - Math.pow(1 - x, 3)] Motion's easing function.\n * @param {THREE.Vector2} [options.scale=new THREE.Vector2(1, 1)] Scale factor for translation.\n * @param {boolean} [options.useGrabCursor=true] Whether to apply CSS style `cursor: grab` on the target element or not.\n * @param {boolean} [options.scaleToElement=true] Whether to scale control to fit element size.\n * @tutorial Adding Controls\n */\n constructor({\n element = DEFAULT.NULL_ELEMENT,\n easing = DEFAULT.EASING,\n scale = new THREE.Vector2(1, 1),\n useGrabCursor = true,\n scaleToElement = true,\n } = {}) {\n const targetEl = getElement(element);\n if (targetEl) {\n this.setElement(targetEl);\n }\n this._xMotion = new Motion({ duration: 0, range: DEFAULT.INFINITE_RANGE, easing });\n this._yMotion = new Motion({ duration: 0, range: DEFAULT.INFINITE_RANGE, easing });\n this._userScale = scale;\n this._useGrabCursor = useGrabCursor;\n this._scaleToElement = scaleToElement;\n }\n\n /**\n * Destroy the instance and remove all event listeners attached\n * This also will reset CSS cursor to intial\n * @returns {void} Nothing\n */\n public destroy(): void {\n this.disable();\n }\n\n /**\n * Update control by given deltaTime\n * @param deltaTime Number of milisec to update\n * @returns {void} Nothing\n */\n public update(camera: Camera, deltaTime: number): void {\n const screenSize = this._screenSize;\n\n const delta = new THREE.Vector2(\n this._xMotion.update(deltaTime),\n this._yMotion.update(deltaTime),\n );\n\n const viewXDir = new THREE.Vector3(1, 0, 0).applyQuaternion(camera.threeCamera.quaternion);\n const viewYDir = new THREE.Vector3(0, 1, 0).applyQuaternion(camera.threeCamera.quaternion);\n\n if (this._scaleToElement) {\n const screenScale = new THREE.Vector2(camera.renderWidth, camera.renderHeight).divide(screenSize);\n delta.multiply(screenScale);\n }\n\n camera.pivot.add(viewXDir.multiplyScalar(delta.x));\n camera.pivot.add(viewYDir.multiplyScalar(delta.y));\n }\n\n /**\n * Resize control to match target size\n * This method is only meaningful when {@link RotateControl#scaleToElementSize scaleToElementSize} is enabled\n * @param size {@link https://threejs.org/docs/#api/en/math/Vector2 THREE.Vector2} instance of width(x), height(y)\n */\n public resize(size: THREE.Vector2) {\n const screenSize = this._screenSize;\n\n screenSize.copy(size);\n }\n\n /**\n * Enable this input and add event listeners\n * @returns {void} Nothing\n */\n public enable(): void {\n if (this._enabled) return;\n if (!this._targetEl) {\n throw new View3DError(ERROR.MESSAGES.ADD_CONTROL_FIRST, ERROR.CODES.ADD_CONTROL_FIRST);\n }\n\n const targetEl = this._targetEl;\n\n targetEl.addEventListener(EVENTS.MOUSE_DOWN, this._onMouseDown, false);\n\n targetEl.addEventListener(EVENTS.TOUCH_START, this._onTouchStart, false);\n targetEl.addEventListener(EVENTS.TOUCH_MOVE, this._onTouchMove, false);\n targetEl.addEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n targetEl.addEventListener(EVENTS.CONTEXT_MENU, this._onContextMenu, false);\n\n this._enabled = true;\n this._setCursor(CURSOR.GRAB);\n }\n\n /**\n * Disable this input and remove all event handlers\n * @returns {void} Nothing\n */\n public disable(): void {\n if (!this._enabled || !this._targetEl) return;\n\n const targetEl = this._targetEl;\n\n targetEl.removeEventListener(EVENTS.MOUSE_DOWN, this._onMouseDown, false);\n window.removeEventListener(EVENTS.MOUSE_MOVE, this._onMouseMove, false);\n window.removeEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n\n targetEl.removeEventListener(EVENTS.TOUCH_START, this._onTouchStart, false);\n targetEl.removeEventListener(EVENTS.TOUCH_MOVE, this._onTouchMove, false);\n targetEl.removeEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n targetEl.removeEventListener(EVENTS.CONTEXT_MENU, this._onContextMenu, false);\n\n this._setCursor(\"\");\n this._enabled = false;\n }\n\n /**\n * Synchronize this control's state to given camera position\n * @param camera Camera to match state\n * @returns {void} Nothing\n */\n public sync(camera: Camera): void {\n this._xMotion.reset(0);\n this._yMotion.reset(0);\n }\n\n /**\n * Set target element to attach event listener\n * @param element target element\n * @returns {void} Nothing\n */\n public setElement(element: HTMLElement): void {\n this._targetEl = element;\n this.resize(new THREE.Vector2(element.offsetWidth, element.offsetHeight));\n }\n\n private _setCursor(val: ValueOf<typeof CURSOR> | \"\") {\n const targetEl = this._targetEl;\n if (!this._useGrabCursor || !targetEl || !this._enabled) return;\n\n targetEl.style.cursor = val;\n }\n\n private _onMouseDown = (evt: MouseEvent) => {\n if (evt.button !== MOUSE_BUTTON.RIGHT) return;\n\n const targetEl = this._targetEl!;\n evt.preventDefault();\n\n targetEl.focus ? targetEl.focus() : window.focus();\n\n this._prevPos.set(evt.clientX, evt.clientY);\n window.addEventListener(EVENTS.MOUSE_MOVE, this._onMouseMove, false);\n window.addEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n\n this._setCursor(CURSOR.GRABBING);\n }\n\n private _onMouseMove = (evt: MouseEvent) => {\n evt.preventDefault();\n\n const prevPos = this._prevPos;\n const delta = new THREE.Vector2(evt.clientX, evt.clientY)\n .sub(prevPos)\n .multiply(this._userScale);\n\n // X value is negated to match cursor direction\n this._xMotion.setEndDelta(-delta.x);\n this._yMotion.setEndDelta(delta.y);\n\n prevPos.set(evt.clientX, evt.clientY);\n }\n\n private _onMouseUp = () => {\n this._prevPos.set(0, 0);\n window.removeEventListener(EVENTS.MOUSE_MOVE, this._onMouseMove, false);\n window.removeEventListener(EVENTS.MOUSE_UP, this._onMouseUp, false);\n\n this._setCursor(CURSOR.GRAB);\n }\n\n private _onTouchStart = (evt: TouchEvent) => {\n // Only the two finger motion should be considered\n if (evt.touches.length !== 2) return;\n evt.preventDefault();\n\n this._prevPos.copy(this._getTouchesMiddle(evt.touches));\n this._touchInitialized = true;\n }\n\n private _onTouchMove = (evt: TouchEvent) => {\n // Only the two finger motion should be considered\n if (evt.touches.length !== 2) return;\n\n if (evt.cancelable !== false) {\n evt.preventDefault();\n }\n evt.stopPropagation();\n\n const prevPos = this._prevPos;\n const middlePoint = this._getTouchesMiddle(evt.touches);\n\n if (!this._touchInitialized) {\n prevPos.copy(middlePoint);\n this._touchInitialized = true;\n return;\n }\n\n const delta = new THREE.Vector2()\n .subVectors(middlePoint, prevPos)\n .multiply(this._userScale);\n\n // X value is negated to match cursor direction\n this._xMotion.setEndDelta(-delta.x);\n this._yMotion.setEndDelta(delta.y);\n\n prevPos.copy(middlePoint);\n }\n\n private _onTouchEnd = (evt: TouchEvent) => {\n // Only the two finger motion should be considered\n if (evt.touches.length !== 2) {\n this._touchInitialized = false;\n return;\n }\n\n // Three fingers to two fingers\n this._prevPos.copy(this._getTouchesMiddle(evt.touches));\n this._touchInitialized = true;\n }\n\n private _getTouchesMiddle(touches: TouchEvent[\"touches\"]): THREE.Vector2 {\n return new THREE.Vector2(\n touches[0].clientX + touches[1].clientX,\n touches[0].clientY + touches[1].clientY,\n ).multiplyScalar(0.5);\n }\n\n private _onContextMenu = (evt: MouseEvent) => {\n evt.preventDefault();\n }\n}\n\nexport default TranslateControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport CameraControl from \"./CameraControl\";\nimport Motion from \"./Motion\";\nimport View3DError from \"~/View3DError\";\nimport Camera from \"~/core/camera/Camera\";\nimport { getElement } from \"~/utils\";\nimport { EVENTS } from \"~/consts/event\";\nimport * as DEFAULT from \"~/consts/default\";\nimport * as ERROR from \"~/consts/error\";\n\n/**\n * Distance controller handling both mouse wheel and pinch zoom\n * @category Controls\n */\nclass DistanceControl implements CameraControl {\n // Options\n private _scale: number = 1;\n\n // Internal values\n private _targetEl: HTMLElement | null = null;\n private _scaleModifier: number = 0.25;\n private _motion: Motion;\n private _prevTouchDistance: number = -1;\n private _enabled: boolean = false;\n\n /**\n * Control's current target element to attach event listeners\n * @readonly\n */\n public get element() { return this._targetEl; }\n /**\n * Scale factor of the distance\n * @type number\n * @example\n * import { DistanceControl } from \"@egjs/view3d\";\n * const distanceControl = new DistanceControl();\n * distanceControl.scale = 2;\n */\n public get scale() { return this._scale; }\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n\n public set scale(val: number) { this._scale = val; }\n\n /**\n * Create new DistanceControl instance\n * @tutorial Adding Controls\n * @param {object} options Options\n * @param {HTMLElement | string | null} [options.element=null] Attaching element / selector of the element.\n * @param {number} [options.duration=500] Motion's duration.\n * @param {object} [options.range={min: 0, max: 500}] Motion's range.\n * @param {function} [options.easing=(x: number) => 1 - Math.pow(1 - x, 3)] Motion's easing function.\n */\n constructor({\n element = DEFAULT.NULL_ELEMENT,\n duration = DEFAULT.ANIMATION_DURATION,\n range = DEFAULT.DISTANCE_RANGE,\n easing = DEFAULT.EASING,\n } = {}) {\n const targetEl = getElement(element);\n if (targetEl) {\n this.setElement(targetEl);\n }\n this._motion = new Motion({ duration, range, easing });\n }\n\n /**\n * Destroy the instance and remove all event listeners attached\n * @returns {void} Nothing\n */\n public destroy(): void {\n this.disable();\n }\n\n /**\n * Update control by given deltaTime\n * @param camera Camera to update position\n * @param deltaTime Number of milisec to update\n * @returns {void} Nothing\n */\n public update(camera: Camera, deltaTime: number): void {\n const motion = this._motion;\n\n camera.distance += motion.update(deltaTime);\n }\n\n // This is not documetned on purpose as it doesn't do nothing\n public resize(size: THREE.Vector2) {\n // DO NOTHING\n }\n\n /**\n * Enable this input and add event listeners\n * @returns {void} Nothing\n */\n public enable(): void {\n if (this._enabled) return;\n if (!this._targetEl) {\n throw new View3DError(ERROR.MESSAGES.ADD_CONTROL_FIRST, ERROR.CODES.ADD_CONTROL_FIRST);\n }\n\n const targetEl = this._targetEl;\n\n targetEl.addEventListener(EVENTS.WHEEL, this._onWheel, false);\n targetEl.addEventListener(EVENTS.TOUCH_MOVE, this._onTouchMove, false);\n targetEl.addEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n this._enabled = true;\n }\n\n /**\n * Disable this input and remove all event handlers\n * @returns {void} Nothing\n */\n public disable(): void {\n if (!this._enabled || !this._targetEl) return;\n\n const targetEl = this._targetEl;\n\n targetEl.removeEventListener(EVENTS.WHEEL, this._onWheel, false);\n targetEl.removeEventListener(EVENTS.TOUCH_MOVE, this._onTouchMove, false);\n targetEl.removeEventListener(EVENTS.TOUCH_END, this._onTouchEnd, false);\n\n this._enabled = false;\n }\n\n /**\n * Synchronize this control's state to given camera position\n * @param camera Camera to match state\n * @returns {void} Nothing\n */\n public sync(camera: Camera): void {\n this._motion.range.min = camera.minDistance;\n this._motion.range.max = camera.maxDistance;\n this._motion.reset(camera.distance);\n }\n\n /**\n * Set target element to attach event listener\n * @param element target element\n * @returns {void} Nothing\n */\n public setElement(element: HTMLElement): void {\n this._targetEl = element;\n }\n\n private _onWheel = (evt: MouseWheelEvent) => {\n if (evt.deltaY === 0) return;\n\n evt.preventDefault();\n evt.stopPropagation();\n\n const animation = this._motion;\n const delta = this._scale * this._scaleModifier * evt.deltaY;\n\n animation.setEndDelta(delta);\n }\n\n private _onTouchMove = (evt: TouchEvent) => {\n const touches = evt.touches;\n if (touches.length !== 2) return;\n\n if (evt.cancelable !== false) {\n evt.preventDefault();\n }\n evt.stopPropagation();\n\n const animation = this._motion;\n const prevTouchDistance = this._prevTouchDistance;\n\n const touchPoint1 = new THREE.Vector2(touches[0].pageX, touches[0].pageY);\n const touchPoint2 = new THREE.Vector2(touches[1].pageX, touches[1].pageY);\n const touchDiff = touchPoint1.sub(touchPoint2);\n const touchDistance = touchDiff.length() * this._scale * this._scaleModifier;\n const delta = -(touchDistance - prevTouchDistance);\n\n this._prevTouchDistance = touchDistance;\n\n if (prevTouchDistance < 0) return;\n\n animation.setEndDelta(delta);\n }\n\n private _onTouchEnd = () => {\n this._prevTouchDistance = -1;\n }\n}\n\nexport default DistanceControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport CameraControl from \"./CameraControl\";\nimport RotateControl from \"./RotateControl\";\nimport TranslateControl from \"./TranslateControl\";\nimport DistanceControl from \"./DistanceControl\";\nimport Camera from \"~/core/camera/Camera\";\nimport View3DError from \"~/View3DError\";\nimport { getElement } from \"~/utils\";\nimport * as ERROR from \"~/consts/error\";\nimport * as DEFAULT from \"~/consts/default\";\n\n/**\n * Aggregation of {@link RotateControl}, {@link TranslateControl}, and {@link DistanceControl}.\n * @category Controls\n */\nclass OrbitControl implements CameraControl {\n private _targetEl: HTMLElement | null;\n private _rotateControl: RotateControl;\n private _translateControl: TranslateControl;\n private _distanceControl: DistanceControl;\n private _enabled: boolean = false;\n\n /**\n * Control's current target element to attach event listeners\n * @readonly\n */\n public get element() { return this._targetEl; }\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n /**\n * {@link RotateControl} of this control\n */\n public get rotate() { return this._rotateControl; }\n /**\n * {@link TranslateControl} of this control\n */\n public get translate() { return this._translateControl; }\n /**\n * {@link DistanceControl} of this control\n */\n public get distance() { return this._distanceControl; }\n\n /**\n * Create new OrbitControl instance\n * @param {object} options Options\n * @param {HTMLElement | string | null} [options.element=null] Attaching element / selector of the element\n * @param {object} [options.rotate={}] Constructor options of {@link RotateControl}\n * @param {object} [options.translate={}] Constructor options of {@link TranslateControl}\n * @param {object} [options.distance={}] Constructor options of {@link DistanceControl}\n * @tutorial Adding Controls\n */\n constructor({\n element = DEFAULT.NULL_ELEMENT,\n rotate = {},\n translate = {},\n distance = {},\n }: Partial<{\n rotate: ConstructorParameters<typeof RotateControl>[0],\n translate: ConstructorParameters<typeof TranslateControl>[0],\n distance: ConstructorParameters<typeof DistanceControl>[0],\n element: HTMLElement | string | null,\n }> = {}) {\n this._targetEl = getElement(element);\n this._rotateControl = new RotateControl({ ...rotate, element: rotate.element || this._targetEl });\n this._translateControl = new TranslateControl({ ...translate, element: translate.element || this._targetEl });\n this._distanceControl = new DistanceControl({ ...distance, element: distance.element || this._targetEl });\n }\n\n /**\n * Destroy the instance and remove all event listeners attached\n * This also will reset CSS cursor to intial\n * @returns {void} Nothing\n */\n public destroy(): void {\n this._rotateControl.destroy();\n this._translateControl.destroy();\n this._distanceControl.destroy();\n }\n\n /**\n * Update control by given deltaTime\n * @param camera Camera to update position\n * @param deltaTime Number of milisec to update\n * @returns {void} Nothing\n */\n public update(camera: Camera, deltaTime: number): void {\n this._rotateControl.update(camera, deltaTime);\n this._translateControl.update(camera, deltaTime);\n this._distanceControl.update(camera, deltaTime);\n }\n\n /**\n * Resize control to match target size\n * @param size {@link https://threejs.org/docs/#api/en/math/Vector2 THREE.Vector2} instance of width(x), height(y)\n */\n public resize(size: THREE.Vector2) {\n this._rotateControl.resize(size);\n this._translateControl.resize(size);\n this._distanceControl.resize(size);\n }\n\n /**\n * Enable this control and add event listeners\n * @returns {void} Nothingß\n */\n public enable(): void {\n if (this._enabled) return;\n if (!this._targetEl) {\n throw new View3DError(ERROR.MESSAGES.ADD_CONTROL_FIRST, ERROR.CODES.ADD_CONTROL_FIRST);\n }\n\n this._rotateControl.enable();\n this._translateControl.enable();\n this._distanceControl.enable();\n\n this._enabled = true;\n }\n\n /**\n * Disable this control and remove all event handlers\n * @returns {void} Nothing\n */\n public disable(): void {\n if (!this._enabled || !this._targetEl) return;\n\n this._rotateControl.disable();\n this._translateControl.disable();\n this._distanceControl.disable();\n\n this._enabled = false;\n }\n\n /**\n * Synchronize this control's state to given camera position\n * @param camera Camera to match state\n * @returns {void} Nothing\n */\n public sync(camera: Camera): void {\n this._rotateControl.sync(camera);\n this._translateControl.sync(camera);\n this._distanceControl.sync(camera);\n }\n\n /**\n * Set target element to attach event listener\n * @param element target element\n * @returns {void} Nothing\n */\n public setElement(element: HTMLElement): void {\n this._targetEl = element;\n this._rotateControl.setElement(element);\n this._translateControl.setElement(element);\n this._distanceControl.setElement(element);\n }\n}\n\nexport default OrbitControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\nimport * as THREE from \"three\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader\";\nimport Model from \"~/core/Model\";\nimport * as DEFAULT from \"~/consts/default\";\nimport { DracoLoadOption } from \"~/types/external\";\n\n/**\n * DracoLoader\n * @category Loaders\n */\nclass DracoLoader {\n /**\n * Load new DRC model from the given url\n * @param url URL to fetch .drc file\n * @param options Options for a loaded model\n * @returns Promise that resolves {@link Model}\n */\n public load(url: string, options: Partial<DracoLoadOption> = {}): Promise<Model> {\n const loader = new DRACOLoader();\n loader.setCrossOrigin(\"anonymous\");\n loader.setDecoderPath(DEFAULT.DRACO_DECODER_URL);\n loader.manager = new THREE.LoadingManager();\n\n return new Promise((resolve, reject) => {\n loader.load(url, geometry => {\n const model = this._parseToModel(geometry, options);\n loader.dispose();\n resolve(model);\n }, undefined, err => {\n loader.dispose();\n reject(err);\n });\n });\n }\n\n private _parseToModel(geometry: THREE.BufferGeometry, {\n fixSkinnedBbox = false,\n color = 0xffffff,\n point = false,\n pointOptions = {}\n }: Partial<DracoLoadOption> = {}): Model {\n geometry.computeVertexNormals();\n\n\t\tconst material = point\n ? new THREE.PointsMaterial({ color, ...pointOptions })\n : new THREE.MeshStandardMaterial({ color });\n\t\tconst mesh = point\n ? new THREE.Points(geometry, material)\n : new THREE.Mesh(geometry, material);\n\n const model = new Model({\n scenes: [mesh],\n fixSkinnedBbox,\n });\n\n return model;\n }\n}\n\nexport default DracoLoader;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Environment from \"./Environment\";\nimport Model from \"~/core/Model\";\nimport { getBoxPoints } from \"~/utils\";\n\n/**\n * THREE.DirectionalLight wrapper that will automatically update its shadow size to model\n * Shadow is enabled by default, use {@link AutoDirectionalLight#disableShadow disableShadow} to disable it\n * @category Environment\n */\nclass AutoDirectionalLight implements Environment {\n private _light: THREE.DirectionalLight;\n private _direction: THREE.Vector3; // Direction to light, from (0, 0, 0)\n\n /**\n * Array of lights that used in this preset\n * @see https://threejs.org/docs/#api/en/lights/Light\n */\n public get objects(): THREE.Object3D[] {\n return [this._light, this._light.target];\n }\n\n /**\n * The actual THREE.DirectionalLight\n * @type THREE#DirectionalLight\n * @see https://threejs.org/docs/#api/en/lights/DirectionalLight\n */\n public get light() { return this._light; }\n\n /**\n * Position of the light\n * @type THREE#Vector3\n * @see https://threejs.org/docs/#api/en/math/Vector3\n */\n public get position() { return this._light.position; }\n\n public get direction() { return this._direction; }\n\n /**\n * Create new instance of AutoDirectionalLight\n * @param [color=\"#ffffff\"] Color of the light\n * @param [intensity=1] Intensity of the light\n * @param {object} [options={}] Additional options\n * @param {THREE.Vector3} [options.direction=new THREE.Vector3(-1, -1, -1)] Direction of the light\n */\n constructor(color: string | number | THREE.Color = \"#ffffff\", intensity: number = 1, {\n direction = new THREE.Vector3(-1, -1, -1),\n } = {}) {\n this._light = new THREE.DirectionalLight(color, intensity);\n\n // Set the default position ratio of the directional light\n const light = this._light;\n light.castShadow = true; // Is enabled by default\n light.shadow.mapSize.width = 2048;\n light.shadow.mapSize.height = 2048;\n light.matrixAutoUpdate = false;\n\n this._direction = direction.clone().normalize();\n }\n\n /**\n * Make light cast a shadow\n */\n public enableShadow() {\n this._light.castShadow = true;\n }\n\n /**\n * Make light don't cast a shadow\n */\n public disableShadow() {\n this._light.castShadow = false;\n }\n\n /**\n * Modify light's position & shadow camera size from model's bounding box\n * @param model Model to fit size\n * @param scale Scale factor for shadow camera size\n */\n public fit(model: Model, {\n scale = 1.5,\n } = {}) {\n const bbox = model.bbox;\n const light = this._light;\n const direction = this._direction;\n const boxSize = bbox.getSize(new THREE.Vector3()).length();\n const boxCenter = bbox.getCenter(new THREE.Vector3());\n\n // Position fitting\n const newPos = new THREE.Vector3().addVectors(boxCenter, direction.clone().negate().multiplyScalar(boxSize * 0.5));\n light.position.copy(newPos);\n light.target.position.copy(boxCenter);\n light.updateMatrix();\n\n // Shadowcam fitting\n const shadowCam = light.shadow.camera;\n shadowCam.near = 0;\n shadowCam.far = 2 * boxSize;\n shadowCam.position.copy(newPos);\n shadowCam.lookAt(boxCenter);\n\n shadowCam.left = -1;\n shadowCam.right = 1;\n shadowCam.top = 1;\n shadowCam.bottom = -1;\n\n shadowCam.updateMatrixWorld();\n shadowCam.updateProjectionMatrix();\n\n const bboxPoints = getBoxPoints(bbox);\n const projectedPoints = bboxPoints.map(position => position.project(shadowCam));\n const screenBbox = new THREE.Box3().setFromPoints(projectedPoints);\n\n shadowCam.left *= -scale * screenBbox.min.x;\n shadowCam.right *= scale * screenBbox.max.x;\n shadowCam.top *= scale * screenBbox.max.y;\n shadowCam.bottom *= -scale * screenBbox.min.y;\n\n shadowCam.updateProjectionMatrix();\n }\n}\n\nexport default AutoDirectionalLight;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Model from \"~/core/Model\";\nimport Environment from \"./Environment\";\n\n/**\n * Helper class to easily add shadow plane under your 3D model\n * @category Environment\n * @example\n * import View3D, { ShadowPlane } from \"@egjs/view3d\";\n *\n * const view3d = new View3D(\"#view3d-canvas\");\n * const shadowPlane = new ShadowPlane();\n * view3d.scene.addEnv(shadowPlane);\n */\nclass ShadowPlane implements Environment {\n // Developers can change those values if they know what they're doing\n // So I'm leaving those values public\n\n /**\n * Geometry of the shadow plane\n * @see https://threejs.org/docs/#api/en/geometries/PlaneGeometry\n */\n public geometry: THREE.PlaneGeometry;\n /**\n * Material of the shadow plane\n * @see https://threejs.org/docs/#api/en/materials/ShadowMaterial\n */\n public material: THREE.ShadowMaterial;\n /**\n * Mesh of the shadow plane\n * @see https://threejs.org/docs/#api/en/objects/Mesh\n */\n public mesh: THREE.Mesh;\n\n public get objects() { return [this.mesh]; }\n\n /**\n * Shadow opacity, value can be between 0(invisible) and 1(solid)\n * @type number\n */\n public get opacity() {\n return this.material.opacity;\n }\n\n public set opacity(val: number) {\n this.material.opacity = val;\n }\n\n /**\n * Create new shadow plane\n * @param {object} options Options\n * @param {number} [options.size=10000] Size of the shadow plane\n * @param {number} [options.opacity=0.3] Opacity of the shadow\n */\n constructor({\n size = 10000,\n opacity = 0.3,\n } = {}) {\n this.geometry = new THREE.PlaneGeometry(size, size, 100, 100);\n this.material = new THREE.ShadowMaterial({ opacity });\n this.mesh = new THREE.Mesh(this.geometry, this.material);\n\n const mesh = this.mesh;\n mesh.rotateX(-Math.PI / 2);\n mesh.receiveShadow = true;\n }\n\n /**\n * Fit shadow plane's size & position to given model\n * @param model Model to fit\n */\n public fit(model: Model, {\n floorPosition,\n floorRotation = new THREE.Quaternion(0, 0, 0, 1),\n }: Partial<{\n floorPosition: THREE.Vector3,\n floorRotation: THREE.Quaternion,\n }> = {}): void {\n const modelPosition = model.scene.position;\n const localYAxis = new THREE.Vector3(0, 1, 0).applyQuaternion(floorRotation);\n\n // Apply position\n if (floorPosition) {\n // Apply a tiny offset to prevent z-fighting with original model\n this.mesh.position.copy(floorPosition.clone().add(localYAxis.clone().multiplyScalar(0.001)));\n } else {\n const modelBbox = model.bbox;\n const modelBboxYOffset = modelBbox.getCenter(new THREE.Vector3()).y - modelBbox.min.y;\n const modelFloor = new THREE.Vector3().addVectors(\n modelPosition,\n // Apply a tiny offset to prevent z-fighting with original model\n localYAxis.multiplyScalar(-modelBboxYOffset + 0.0001),\n );\n this.mesh.position.copy(modelFloor);\n }\n\n // Apply rotation\n const rotX90 = new THREE.Quaternion().setFromEuler(new THREE.Euler(-Math.PI / 2, 0, 0));\n const shadowRotation = new THREE.Quaternion().multiplyQuaternions(floorRotation, rotX90);\n\n this.mesh.quaternion.copy(shadowRotation);\n this.mesh.updateMatrix();\n }\n}\n\nexport default ShadowPlane;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport { GLTFLoader as ThreeGLTFLoader, GLTF } from \"three/examples/jsm/loaders/GLTFLoader\";\nimport { DRACOLoader } from \"three/examples/jsm/loaders/DRACOLoader\";\nimport Model from \"~/core/Model\";\nimport * as DEFAULT from \"~/consts/default\";\nimport View3D from \"~/View3D\";\nimport { ShadowPlane, AutoDirectionalLight } from \"~/environments\";\nimport { ModelLoadOption } from \"~/types/external\";\n\n/**\n * GLTFLoader\n * @category Loaders\n */\nclass GLTFLoader {\n private _loader: ThreeGLTFLoader;\n private _dracoLoader: DRACOLoader;\n\n public get loader() { return this._loader; }\n public get dracoLoader() { return this._dracoLoader; }\n\n /**\n * Create a new instance of GLTFLoader\n */\n constructor() {\n this._loader = new ThreeGLTFLoader();\n this._dracoLoader = new DRACOLoader();\n\n const loader = this._loader;\n loader.setCrossOrigin(\"anonymous\");\n\n const dracoLoader = this._dracoLoader;\n dracoLoader.setDecoderPath(DEFAULT.DRACO_DECODER_URL);\n loader.setDRACOLoader(dracoLoader);\n }\n\n /**\n * Load new GLTF model from the given url\n * @param url URL to fetch glTF/glb file\n * @param options Options for a loaded model\n * @returns Promise that resolves {@link Model}\n */\n public load(url: string, options: Partial<ModelLoadOption> = {}): Promise<Model> {\n const loader = this._loader;\n loader.manager = new THREE.LoadingManager();\n\n return new Promise((resolve, reject) => {\n loader.load(url, gltf => {\n const model = this._parseToModel(gltf, options);\n resolve(model);\n }, undefined, err => {\n reject(err);\n });\n });\n }\n\n /**\n * Load preset generated from View3D editor.\n * @param viewer Instance of the {@link View3D}.\n * @param url Preset url\n * @param {object} options Options\n * @param {string} [options.path] Base path for additional files.\n * @param {function} [options.onLoad] Callback which called after each model LOD is loaded.\n * @returns {Model} Model instance with highest LOD\n */\n public loadPreset(viewer: View3D, url: string, options: Partial<{\n path: string;\n onLoad: (model: Model, lodIndex: number) => any;\n }> = {}): Promise<Model> {\n const loader = this._loader;\n const fileLoader = new THREE.FileLoader();\n\n return fileLoader.loadAsync(url)\n .then(jsonRaw => {\n return new Promise((resolve, reject) => {\n const json = JSON.parse(jsonRaw);\n const baseURL = THREE.LoaderUtils.extractUrlBase(url);\n\n // Reset\n viewer.scene.reset();\n viewer.camera.reset();\n viewer.animator.reset();\n\n const modelOptions = json.model;\n const cameraOptions = json.camera;\n const environmentOptions = json.env;\n\n viewer.camera.setDefaultPose({\n yaw: cameraOptions.yaw,\n pitch: cameraOptions.pitch,\n });\n viewer.camera.minDistance = cameraOptions.distanceRange[0];\n viewer.camera.maxDistance = cameraOptions.distanceRange[1];\n\n if (environmentOptions.background) {\n viewer.scene.setBackground(new THREE.Color(environmentOptions.background));\n }\n\n const shadowPlane = new ShadowPlane();\n shadowPlane.opacity = environmentOptions.shadow.opacity;\n viewer.scene.addEnv(shadowPlane);\n\n const ambientOptions = environmentOptions.ambient;\n const ambient = new THREE.AmbientLight(new THREE.Color(ambientOptions.color), ambientOptions.intensity);\n viewer.scene.addEnv(ambient);\n\n const lightOptions = [environmentOptions.light1, environmentOptions.light2, environmentOptions.light3];\n lightOptions.forEach(lightOption => {\n const lightDirection = new THREE.Vector3(lightOption.x, lightOption.y, lightOption.z).negate();\n const directional = new AutoDirectionalLight(new THREE.Color(lightOption.color), lightOption.intensity, {\n direction: lightDirection,\n });\n directional.light.castShadow = lightOption.castShadow;\n directional.light.updateMatrixWorld();\n viewer.scene.addEnv(directional);\n });\n\n let isFirstLoad = true;\n const loadFlags = json.LOD.map(() => false) as boolean[];\n json.LOD.forEach((fileName: string, lodIndex: number) => {\n const glbURL = this._resolveURL(`${baseURL}${fileName}`, options.path || \"\");\n\n loader.load(glbURL, gltf => {\n loadFlags[lodIndex] = true;\n const higherLODLoaded = loadFlags.slice(lodIndex + 1).some(loaded => loaded);\n if (higherLODLoaded) return;\n\n const model = this._parseToModel(gltf);\n\n viewer.display(model, {\n size: modelOptions.size,\n resetView: isFirstLoad,\n });\n isFirstLoad = false;\n\n model.castShadow = modelOptions.castShadow;\n model.receiveShadow = modelOptions.receiveShadow;\n\n if (options.onLoad) {\n options.onLoad(model, lodIndex);\n }\n if (lodIndex === json.LOD.length - 1) {\n resolve(model);\n }\n }, undefined, err => {\n reject(err);\n });\n });\n });\n });\n }\n\n /**\n * Load new GLTF model from the given files\n * @param files Files that has glTF/glb and all its associated resources like textures and .bin data files\n * @param options Options for a loaded model\n * @returns Promise that resolves {@link Model}\n */\n public loadFromFiles(files: File[], options: Partial<ModelLoadOption> = {}): Promise<Model> {\n const objectURLs: string[] = [];\n const revokeURLs = () => {\n objectURLs.forEach(url => {\n URL.revokeObjectURL(url);\n });\n };\n\n return new Promise((resolve, reject) => {\n if (files.length <= 0) {\n reject(new Error(\"No files found\"));\n return;\n }\n\n const gltfFile = files.find(file => /\\.(gltf|glb)$/i.test(file.name));\n if (!gltfFile) {\n reject(new Error(\"No glTF file found\"));\n return;\n }\n\n const filesMap = new Map<string, File>();\n files.forEach(file => {\n filesMap.set(file.name, file);\n });\n\n const gltfURL = URL.createObjectURL(gltfFile);\n\n objectURLs.push(gltfURL);\n\n const manager = new THREE.LoadingManager();\n manager.setURLModifier(fileURL => {\n const fileNameResult = /[^\\/|\\\\]+$/.exec(fileURL);\n const fileName = (fileNameResult && fileNameResult[0]) || \"\";\n\n if (filesMap.has(fileName)) {\n const blob = filesMap.get(fileName);\n const blobURL = URL.createObjectURL(blob);\n objectURLs.push(blobURL);\n\n return blobURL;\n }\n\n return fileURL;\n });\n\n const loader = this._loader;\n loader.manager = manager;\n loader.load(gltfURL, gltf => {\n const model = this._parseToModel(gltf, options);\n resolve(model);\n revokeURLs();\n }, undefined, err => {\n reject(err);\n revokeURLs();\n });\n });\n }\n\n /**\n * Parse from array buffer\n * @param data glTF asset to parse, as an ArrayBuffer or JSON string.\n * @param path The base path from which to find subsequent glTF resources such as textures and .bin data files.\n * @param options Options for a loaded model\n * @returns Promise that resolves {@link Model}\n */\n public parse(data: ArrayBuffer, path: string, options: Partial<ModelLoadOption> = {}): Promise<Model> {\n const loader = this._loader;\n loader.manager = new THREE.LoadingManager();\n\n return new Promise((resolve, reject) => {\n loader.parse(data, path, gltf => {\n const model = this._parseToModel(gltf, options);\n resolve(model);\n }, err => {\n reject(err);\n });\n });\n }\n\n private _parseToModel(gltf: GLTF, {\n fixSkinnedBbox = false,\n }: Partial<ModelLoadOption> = {}): Model {\n const model = new Model({\n scenes: gltf.scenes,\n animations: gltf.animations,\n fixSkinnedBbox,\n });\n\n model.meshes.forEach(mesh => {\n const materials = Array.isArray(mesh.material)\n ? mesh.material\n : [mesh.material];\n\n materials.forEach((mat: THREE.MeshStandardMaterial) => {\n if (mat.map) {\n mat.map.encoding = THREE.sRGBEncoding;\n }\n });\n });\n\n return model;\n }\n\n // Grabbed from three.js/GLTFLoader\n // Original code: https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/GLTFLoader.js#L1221\n // License: MIT\n private _resolveURL(url: string, path: string): string {\n // Invalid URL\n if ( typeof url !== \"string\" || url === \"\" ) return \"\";\n\n // Host Relative URL\n if ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n path = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, \"$1\" );\n\n }\n\n // Absolute URL http://,https://,//\n if ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n // Data URI\n if ( /^data:.*,.*$/i.test( url ) ) return url;\n\n // Blob URL\n if ( /^blob:.*$/i.test( url ) ) return url;\n\n // Relative URL\n return path + url;\n }\n}\n\nexport default GLTFLoader;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport { RGBELoader } from \"three/examples/jsm/loaders/RGBELoader\";\nimport Renderer from \"~/core/Renderer\";\n\n/**\n * Texture loader\n * @category Loaders\n */\nclass TextureLoader {\n private _renderer: Renderer;\n\n /**\n * Create new TextureLoader instance\n * @param renderer {@link Renderer} instance of View3D\n */\n constructor(renderer: Renderer) {\n this._renderer = renderer;\n }\n\n /**\n * Create new {@link https://threejs.org/docs/index.html#api/en/textures/Texture Texture} with given url\n * Texture's {@link https://threejs.org/docs/index.html#api/en/textures/Texture.flipY flipY} property is `true` by Three.js's policy, so be careful when using it as a map texture.\n * @param url url to fetch image\n */\n public load(url: string): Promise<THREE.Texture> {\n return new Promise((resolve, reject) => {\n const loader = new THREE.TextureLoader();\n loader.load(url, resolve, undefined, reject);\n });\n }\n\n /**\n * Create new {@link https://threejs.org/docs/#api/en/renderers/WebGLCubeRenderTarget WebGLCubeRenderTarget} with given equirectangular image url\n * Be sure that equirectangular image has height of power of 2, as it will be resized if it isn't\n * @param url url to fetch equirectangular image\n * @returns WebGLCubeRenderTarget created\n */\n public loadEquirectagularTexture(url: string): Promise<THREE.WebGLCubeRenderTarget> {\n return new Promise((resolve, reject) => {\n const loader = new THREE.TextureLoader();\n loader.load(url, skyboxTexture => {\n resolve(this._equirectToCubemap(skyboxTexture));\n }, undefined, reject);\n });\n }\n\n /**\n * Create new {@link https://threejs.org/docs/#api/en/textures/CubeTexture CubeTexture} with given cubemap image urls\n * Image order should be: px, nx, py, ny, pz, nz\n * @param urls cubemap image urls\n * @returns CubeTexture created\n */\n public loadCubeTexture(urls: string[]): Promise<THREE.CubeTexture> {\n return new Promise((resolve, reject) => {\n const loader = new THREE.CubeTextureLoader();\n loader.load(urls, resolve, undefined, reject);\n });\n }\n\n public loadHDRTexture(url: string, isEquirectangular: false): Promise<THREE.DataTexture>;\n\n public loadHDRTexture(url: string, isEquirectangular: true): Promise<THREE.WebGLCubeRenderTarget>;\n\n /**\n * Create new texture with given HDR(RGBE) image url\n * @param url image url\n * @param isEquirectangular Whether to read this image as a equirectangular texture\n */\n public loadHDRTexture(url: string, isEquirectangular: boolean = true): Promise<THREE.DataTexture | THREE.WebGLCubeRenderTarget> {\n return new Promise((resolve, reject) => {\n const loader = new RGBELoader();\n loader.load(url, texture => {\n if (isEquirectangular) {\n resolve(this._equirectToCubemap(texture));\n } else {\n resolve(texture);\n }\n }, undefined, reject);\n });\n }\n\n private _equirectToCubemap(texture: THREE.Texture): THREE.WebGLCubeRenderTarget {\n return new THREE.WebGLCubeRenderTarget(texture.image.height)\n .fromEquirectangularTexture(this._renderer.threeRenderer, texture);\n }\n}\n\nexport default TextureLoader;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\ndeclare global {\n interface Window {\n XRSession: any;\n XRDOMOverlayState: any;\n }\n}\n\nexport const QUICKLOOK_SUPPORTED = (() => {\n const anchorEl = document.createElement(\"a\");\n return anchorEl.relList && anchorEl.relList.supports && anchorEl.relList.supports(\"ar\");\n})();\nexport const WEBXR_SUPPORTED = navigator.xr && navigator.xr.isSessionSupported;\nexport const HIT_TEST_SUPPORTED = window.XRSession && window.XRSession.prototype.requestHitTestSource;\nexport const DOM_OVERLAY_SUPPORTED = window.XRDOMOverlayState != null;\n\nexport const SESSION = {\n AR: \"immersive-ar\",\n VR: \"immersive-ar\",\n};\n\nexport const REFERENCE_SPACE = {\n LOCAL: \"local\",\n LOCAL_FLOOR: \"local-floor\",\n VIEWER: \"viewer\",\n};\n\nexport const EVENTS = {\n SELECT_START: \"selectstart\",\n SELECT: \"select\",\n SELECT_END: \"selectend\",\n};\n\nexport const INPUT_PROFILE = {\n TOUCH: \"generic-touchscreen\",\n};\n\nexport const FEATURES = {\n HIT_TEST: { requiredFeatures: [\"hit-test\"] },\n DOM_OVERLAY: (root: HTMLElement) => ({\n optionalFeatures: [\"dom-overlay\"],\n domOverlay: { root },\n }),\n};\n\n// For type definition\nexport const EMPTY_FEATURES: {\n requiredFeatures?: any[],\n optionalFeatures?: any[],\n [key: string]: any,\n} = {};\n\nexport const SCENE_VIEWER = {\n INTENT_AR_CORE: (params: string, fallback?: string) => `intent://arvr.google.com/scene-viewer/1.1?${params}#Intent;scheme=https;package=com.google.ar.core;action=android.intent.action.VIEW;${fallback ? `S.browser_fallback_url=${fallback};` : \"\"}end;`,\n INTENT_SEARCHBOX: (params: string, fallback: string) => `intent://arvr.google.com/scene-viewer/1.1?${params}#Intent;scheme=https;package=com.google.android.googlequicksearchbox;action=android.intent.action.VIEW;${fallback ? `S.browser_fallback_url=${fallback};` : \"\"}end;`,\n FALLBACK_DEFAULT: (params: string) => `https://arvr.google.com/scene-viewer?${params}`,\n};\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as XR from \"~/consts/xr\";\n\n/**\n * Manager for WebXR dom-overlay feature\n * @category XR\n */\nclass DOMOverlay {\n private _root: HTMLElement;\n private _loadingEl: HTMLElement | null;\n\n /**\n * Overlay root element\n */\n public get root() { return this._root; }\n /**\n * Loading indicator element, if there's any\n */\n public get loadingElement() { return this._loadingEl; }\n /**\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit} object for dom-overlay feature\n */\n public get features() { return XR.FEATURES.DOM_OVERLAY(this._root); }\n\n /**\n * Create new DOMOverlay instance\n * @param {object} [options] Options\n * @param {HTMLElement} [options.root] Overlay root element\n * @param {HTMLElement | null} [options.loadingEl] Model loading indicator element which will be invisible after placing model on the floor.\n */\n constructor(options: {\n root: HTMLElement,\n loadingEl: HTMLElement | null,\n }) {\n this._root = options.root;\n this._loadingEl = options.loadingEl;\n }\n\n /**\n * Return whether dom-overlay feature is available\n */\n public isAvailable() {\n return XR.DOM_OVERLAY_SUPPORTED;\n }\n\n /**\n * Show loading indicator, if there's any\n */\n public showLoading() {\n if (!this._loadingEl) return;\n\n this._loadingEl.style.visibility = \"visible\";\n }\n\n /**\n * Hide loading indicator, if there's any\n */\n public hideLoading() {\n if (!this._loadingEl) return;\n\n this._loadingEl.style.visibility = \"hidden\";\n }\n}\n\nexport default DOMOverlay;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport View3D from \"~/View3D\";\nimport XRSession from \"./XRSession\";\nimport DOMOverlay from \"./features/DOMOverlay\";\nimport EventEmitter from \"~/core/EventEmitter\";\nimport { getElement, merge } from \"~/utils\";\nimport * as DEFAULT from \"~/consts/default\";\nimport * as XR from \"~/consts/xr\";\nimport { XRContext, XRRenderContext } from \"~/types/internal\";\n\ndeclare global {\n interface Navigator { xr: any; }\n}\n\n/**\n * Options for WebARSession\n * @category XR\n * @interface\n * @property {object} [features={}] You can set additional features(see {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit}) with this option.\n * @property {number} [maxModelSize=Infinity] If model's size is too big to show on AR, you can restrict it's size with this option. Model with size bigger than this value will clamped to this value.\n * @property {HTMLElement|string|null} [overlayRoot=null] If this value is set, dom-overlay feature will be automatically added for this session. And this value will be used as dom-overlay's root element. You can set either HTMLElement or query selector for that element.\n * @property {HTMLElement|string|null} [loadingEl=null] This will be used for loading indicator element, which will automatically invisible after placing 3D model by setting `visibility: hidden`. This element must be placed under `overlayRoot`. You can set either HTMLElement or query selector for that element.\n * @property {boolean} [forceOverlay=false] Whether to apply `dom-overlay` feature as required. If set to false, `dom-overlay` will be optional feature.\n */\nexport interface WebARSessionOption {\n features: typeof XR.EMPTY_FEATURES;\n maxModelSize: number;\n overlayRoot: HTMLElement | string | null;\n loadingEl: HTMLElement | string | null;\n forceOverlay: boolean;\n}\n\n/**\n * WebXR based abstract AR session class\n * @category XR\n * @fires WebARSession#start\n * @fires WebARSession#end\n * @fires WebARSession#canPlace\n * @fires WebARSession#modelPlaced\n */\nabstract class WebARSession extends EventEmitter<{\n start: void;\n end: void;\n canPlace: void;\n modelPlaced: void;\n}> implements XRSession {\n /**\n * Whether it's webxr-based session or not\n * @type true\n */\n public readonly isWebXRSession = true;\n\n protected _session: any = null;\n protected _domOverlay: DOMOverlay | null = null;\n // As \"dom-overlay\" is an optional feature by default,\n // user can choose whether to show XR only when this feature is available\n protected _forceOverlay: boolean;\n protected _features: typeof XR.EMPTY_FEATURES;\n protected _maxModelSize: number;\n\n /**\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSession XRSession} of this session\n * This value is only available after calling enter\n */\n public get session() { return this._session; }\n /**\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit} object for this session.\n */\n public get features() { return this._features; }\n\n /**\n * Emitted when session is started.\n * @event start\n * @category XR\n * @memberof WebARSession\n * @type void\n */\n /**\n * Emitted when session is ended.\n * @event end\n * @category XR\n * @memberof WebARSession\n * @type void\n */\n /**\n * Emitted when model can be placed on the space.\n * @event canPlace\n * @category XR\n * @memberof WebARSession\n * @type void\n */\n /**\n * Emitted when model is placed.\n * @event modelPlaced\n * @category XR\n * @memberof WebARSession\n * @type void\n */\n\n /**\n * Create new instance of WebARSession\n * @param {object} [options={}] Options\n * @param {object} [options.features={}] You can set additional features(see {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit}) with this option.\n * @param {number} [options.maxModelSize=Infinity] If model's size is too big to show on AR, you can restrict it's size with this option. Model with size bigger than this value will clamped to this value.\n * @param {HTMLElement|string|null} [options.overlayRoot=null] If this value is set, dom-overlay feature will be automatically added for this session. And this value will be used as dom-overlay's root element. You can set either HTMLElement or query selector for that element.\n * @param {HTMLElement|string|null} [options.loadingEl=null] This will be used for loading indicator element, which will automatically invisible after placing 3D model by setting `visibility: hidden`. This element must be placed under `overlayRoot`. You can set either HTMLElement or query selector for that element.\n * @param {boolean} [options.forceOverlay=false] Whether to apply `dom-overlay` feature as required. If set to false, `dom-overlay` will be optional feature.\n */\n constructor({\n features: userFeatures = XR.EMPTY_FEATURES, // https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit\n maxModelSize = Infinity,\n overlayRoot = DEFAULT.NULL_ELEMENT,\n loadingEl = DEFAULT.NULL_ELEMENT,\n forceOverlay = false,\n }: Partial<WebARSessionOption> = {}) {\n super();\n const overlayEl = getElement(overlayRoot);\n\n const features: (typeof XR.EMPTY_FEATURES)[] = [];\n if (overlayEl) {\n this._domOverlay = new DOMOverlay({\n root: overlayEl,\n loadingEl: getElement(loadingEl, overlayEl),\n });\n features.push(this._domOverlay.features);\n }\n\n this._features = merge({}, ...features, userFeatures);\n this._maxModelSize = maxModelSize;\n this._forceOverlay = forceOverlay;\n }\n\n /**\n * Return availability of this session\n * @returns {Promise} A Promise that resolves availability of this session(boolean).\n */\n public isAvailable() {\n const domOverlay = this._domOverlay;\n\n if (!XR.WEBXR_SUPPORTED || !XR.HIT_TEST_SUPPORTED) return Promise.resolve(false);\n if (this._forceOverlay) {\n if (domOverlay && !domOverlay.isAvailable()) return Promise.resolve(false);\n }\n\n return navigator.xr.isSessionSupported(XR.SESSION.AR);\n }\n\n /**\n * Enter session\n * @param view3d Instance of the View3D\n * @returns {Promise}\n */\n public enter(view3d: View3D) {\n // Model not loaded yet\n if (!view3d.model) return Promise.reject(\"3D Model is not loaded\");\n\n const model = view3d.model;\n\n return navigator.xr.requestSession(XR.SESSION.AR, this._features)\n .then(session => {\n const renderer = view3d.renderer;\n const threeRenderer = renderer.threeRenderer;\n const xrContext = {\n view3d,\n model,\n session,\n };\n\n // Cache original values\n const originalMatrix = model.scene.matrix.clone();\n const originalModelSize = model.size;\n const originalBackground = view3d.scene.root.background;\n\n const arModelSize = Math.min(model.originalSize, this._maxModelSize);\n model.size = arModelSize;\n model.moveToOrigin();\n view3d.scene.setBackground(null);\n\n // Cache original model rotation\n threeRenderer.xr.setReferenceSpaceType(XR.REFERENCE_SPACE.LOCAL);\n threeRenderer.xr.setSession(session);\n threeRenderer.setPixelRatio(1);\n\n this.onStart(xrContext);\n session.addEventListener(\"end\", () => {\n this.onEnd(xrContext);\n\n // Restore original values\n model.scene.matrix.copy(originalMatrix);\n model.scene.matrix.decompose(model.scene.position, model.scene.quaternion, model.scene.scale);\n model.size = originalModelSize;\n model.moveToOrigin();\n\n view3d.scene.update(model);\n view3d.scene.setBackground(originalBackground);\n\n // Restore renderer values\n threeRenderer.xr.setSession(null);\n threeRenderer.setPixelRatio(window.devicePixelRatio);\n\n // Restore render loop\n renderer.stopAnimationLoop();\n renderer.setAnimationLoop(view3d.renderLoop);\n }, { once: true });\n\n // Set XR session render loop\n renderer.stopAnimationLoop();\n renderer.setAnimationLoop((delta, frame) => {\n const xrCam = threeRenderer.xr.getCamera(new THREE.PerspectiveCamera()) as THREE.PerspectiveCamera;\n const referenceSpace = threeRenderer.xr.getReferenceSpace();\n const glLayer = session.renderState.baseLayer;\n const size = {\n width: glLayer.framebufferWidth,\n height: glLayer.framebufferHeight,\n };\n const renderContext: XRRenderContext = {\n ...xrContext,\n delta,\n frame,\n referenceSpace,\n xrCam,\n size,\n };\n\n this._beforeRender(renderContext);\n view3d.renderLoop(delta);\n });\n });\n }\n\n /**\n * Exit this session\n * @param view3d Instance of the View3D\n */\n public exit(view3d: View3D) {\n const session = view3d.renderer.threeRenderer.xr.getSession();\n session.end();\n }\n\n public onStart(ctx: XRContext) {\n this._session = ctx.session;\n this._domOverlay?.showLoading();\n this.emit(\"start\");\n }\n\n public onEnd(ctx: XRContext) {\n this._session = null;\n this._domOverlay?.hideLoading();\n this.emit(\"end\");\n }\n\n protected abstract _beforeRender(ctx: XRRenderContext): void;\n}\n\nexport default WebARSession;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as XR from \"~/consts/xr\";\n\n/**\n * Manager for WebXR hit-test feature\n * @category XR\n */\nclass HitTest {\n private _source: any = null;\n\n /**\n * Return whether hit-test is ready\n */\n public get ready() { return this._source != null; }\n /**\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit} object for hit-test feature\n */\n public get features() { return XR.FEATURES.HIT_TEST; }\n\n /**\n * Destroy instance\n */\n public destroy() {\n if (this._source) {\n this._source.cancel();\n this._source = null;\n }\n }\n\n /**\n * Initialize hit-test feature\n * @param {XRSession} session XRSession instance\n */\n public init(session: any) {\n session.requestReferenceSpace(XR.REFERENCE_SPACE.VIEWER).then(referenceSpace => {\n session.requestHitTestSource({ space: referenceSpace }).then(source => {\n this._source = source;\n });\n });\n }\n\n /**\n * Return whether hit-test feature is available\n */\n public isAvailable() {\n return XR.HIT_TEST_SUPPORTED;\n }\n\n /**\n * Get hit-test results\n * @param {XRFrame} frame XRFrame instance\n */\n public getResults(frame: any) {\n return frame.getHitTestResults(this._source);\n }\n}\n\nexport default HitTest;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport EventEmitter from \"./EventEmitter\";\nimport * as DEFAULT from \"~/consts/default\";\nimport * as EASING from \"~/consts/easing\";\nimport { circulate } from \"~/utils\";\n\n/**\n * Fires for every animation frame when animation is active.\n * @type object\n * @property {object} event Event object.\n * @property {number} [event.progress] Current animation progress value.\n * Value is ranged from 0(start) to 1(end).\n * @property {number} [event.easedProgress] Eased progress value.\n * @event Animation#progress\n */\n\n/**\n * Fires for every animation loop except for the last loop\n * This will be triggered only when repeat > 0\n * @type object\n * @property {object} event Event object.\n * @property {number} [event.progress] Current animation progress value.\n * Value is ranged from 0(start) to 1(end).\n * @property {number} [event.easedProgress] Eased progress value.\n * @property {number} [event.loopIndex] Index of the current loop.\n * @event Animation#loop\n */\n\n/**\n * Fires when animation ends.\n * @type void\n * @event Animation#finish\n */\n\n/**\n * Self-running animation\n * @category Core\n */\nclass Animation extends EventEmitter<{\n progress: (event: { progress: number, easedProgress: number }) => any,\n loop: (event: { progress: number, easedProgress: number, loopIndex: number }) => any,\n finish: void,\n}> {\n // Options\n private _ctx: any; // Window or XRSession\n private _repeat: number;\n private _duration: number;\n private _easing: (x: number) => number;\n\n // Internal state\n private _rafId: number;\n private _loopCount: number;\n private _time: number;\n private _clock: number;\n\n /**\n * Create new instance of the Animation\n * @param {object} [options={}] Options\n */\n constructor({\n context = window,\n repeat = 0,\n duration = DEFAULT.ANIMATION_DURATION,\n easing = EASING.EASE_OUT_CUBIC,\n }: Partial<{\n context: any,\n repeat: number,\n duration: number,\n easing: (x: number) => number;\n }> = {}) {\n super();\n\n // Options\n this._repeat = repeat;\n this._duration = duration;\n this._easing = easing;\n\n // Internal States\n this._ctx = context;\n this._rafId = -1;\n this._time = 0;\n this._clock = 0;\n this._loopCount = 0;\n }\n\n public start() {\n if (this._rafId >= 0) return;\n\n // This guarantees \"progress\" event with progress = 0 on first start\n this._updateClock();\n this._loop();\n }\n\n public stop() {\n if (this._rafId < 0) return;\n\n this._time = 0;\n this._loopCount = 0;\n this._stopLoop();\n }\n\n public pause() {\n if (this._rafId < 0) return;\n\n this._stopLoop();\n }\n\n private _loop = () => {\n const delta = this._getDeltaTime();\n const duration = this._duration;\n this._time += delta;\n\n const loopIncrease = Math.floor(this._time / duration);\n this._time = circulate(this._time, 0, duration);\n\n const progress = this._time / duration;\n const progressEvent = {\n progress,\n easedProgress: this._easing(progress),\n };\n this.emit(\"progress\", progressEvent);\n\n for (let loopIdx = 0; loopIdx < loopIncrease; loopIdx++) {\n this._loopCount++;\n if (this._loopCount > this._repeat) {\n this.emit(\"finish\");\n this.stop();\n return;\n } else {\n this.emit(\"loop\", {\n ...progressEvent,\n loopIndex: this._loopCount,\n });\n }\n }\n\n this._rafId = this._ctx.requestAnimationFrame(this._loop);\n }\n\n private _stopLoop() {\n this._ctx.cancelAnimationFrame(this._rafId);\n this._rafId = -1;\n }\n\n private _getDeltaTime() {\n const lastTime = this._clock;\n this._updateClock();\n return this._clock - lastTime;\n }\n\n private _updateClock() {\n this._clock = Date.now();\n }\n}\n\nexport default Animation;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\n\n/**\n * Options for {@link RotationIndicator}\n * @category Controls-AR\n * @interface\n * @property {string | number | THREE.Color} [ringColor=0xffffff] Ring color\n * @property {string | number | THREE.Color} [axisColor=0xffffff] Axis color\n */\nexport interface RotationIndicatorOption {\n ringColor: string | number | THREE.Color;\n axisColor: string | number | THREE.Color;\n}\n\n/**\n * Rotation indicator for ARHoverSession\n * @category Controls-AR\n */\nclass RotationIndicator {\n private _ring: THREE.Mesh;\n private _axis: THREE.Line;\n private _obj: THREE.Group;\n\n /**\n * {@link https://threejs.org/docs/index.html#api/en/objects/Group THREE.Group} object that contains ring & axis.\n */\n public get object() { return this._obj; }\n\n /**\n * Create new RotationIndicator\n * @param {RotationIndicatorOption} [options={}] Options\n */\n constructor({\n ringColor = 0xffffff,\n axisColor = 0xffffff,\n }: Partial<RotationIndicatorOption> = {}) {\n const ringGeometry = new THREE.RingGeometry(0.99, 1, 150, 1, 0, Math.PI * 2);\n const ringMaterial = new THREE.MeshBasicMaterial({ color: ringColor, side: THREE.DoubleSide });\n\n this._ring = new THREE.Mesh(ringGeometry, ringMaterial);\n\n const axisVertices = [\n new THREE.Vector3(0, 0, -1000),\n new THREE.Vector3(0, 0, +1000),\n ];\n const axisGeometry = new THREE.BufferGeometry().setFromPoints(axisVertices);\n const axisMaterial = new THREE.LineBasicMaterial({ color: axisColor });\n\n this._axis = new THREE.Line(axisGeometry, axisMaterial);\n\n this._obj = new THREE.Group();\n this._obj.add(this._ring);\n this._obj.add(this._axis);\n\n this.hide();\n }\n\n /**\n * Show indicator\n */\n public show() {\n this._obj.visible = true;\n }\n\n /**\n * Hide indicator\n */\n public hide() {\n this._obj.visible = false;\n }\n\n /**\n * Change the position of the indicator\n * @param position New position\n */\n public updatePosition(position: THREE.Vector3) {\n this._obj.position.copy(position);\n }\n\n /**\n * Update scale of the ring\n * @param scale New scale\n */\n public updateScale(scale: number) {\n this._ring.scale.setScalar(scale);\n }\n\n /**\n * Update indicator's rotation\n * @param rotation Quaternion value set as new rotation.\n */\n public updateRotation(rotation: THREE.Quaternion) {\n this._obj.quaternion.copy(rotation);\n }\n}\n\nexport default RotationIndicator;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Motion from \"~/controls/Motion\";\nimport RotationIndicator from \"../ui/RotationIndicator\";\nimport * as DEFAULT from \"~/consts/default\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\nimport { getRotationAngle } from \"~/utils\";\nimport ARControl from \"./ARControl\";\n\n/**\n * Options for {@link ARSwirlControl}\n * @category Controls-AR\n * @interface\n * @property {number} [scale=1] Scale(speed) factor of the rotation\n * @property {boolean} [showIndicator=true] Whether to show rotation indicator or not.\n */\nexport interface ARSwirlControlOption {\n scale: number;\n showIndicator: boolean;\n}\n\n/**\n * One finger swirl control on single axis\n * @category Controls-AR\n */\nclass ARSwirlControl implements ARControl {\n /**\n * Current rotation value\n */\n public readonly rotation = new THREE.Quaternion();\n\n // Options\n private _userScale: number;\n\n // Internal States\n private _axis = new THREE.Vector3(0, 1, 0);\n private _enabled = true;\n private _active = false;\n\n private _prevPos = new THREE.Vector2();\n private _fromQuat = new THREE.Quaternion();\n private _toQuat = new THREE.Quaternion();\n\n private _motion: Motion;\n private _rotationIndicator: RotationIndicator | null;\n\n /**\n * Whether this control is enabled or not.\n * @readonly\n */\n public get enabled() { return this._enabled; }\n /**\n * Scale(speed) factor of this control.\n */\n public get scale() { return this._userScale; }\n\n public set scale(val: number) { this._userScale = val; }\n\n /**\n * Create new ARSwirlControl\n * @param {ARSwirlControlOption} [options={}] Options\n */\n constructor({\n scale = 1,\n showIndicator = true,\n }: Partial<ARSwirlControlOption> = {}) {\n this._motion = new Motion({ range: DEFAULT.INFINITE_RANGE });\n this._userScale = scale;\n\n if (showIndicator) {\n this._rotationIndicator = new RotationIndicator();\n }\n }\n\n public init({ view3d }: XRRenderContext) {\n const initialRotation = view3d.model!.scene.quaternion;\n this.updateRotation(initialRotation);\n\n if (this._rotationIndicator) {\n view3d.scene.add(this._rotationIndicator.object);\n }\n }\n\n public destroy({ view3d }: XRContext) {\n if (this._rotationIndicator) {\n view3d.scene.remove(this._rotationIndicator.object);\n }\n }\n\n public updateRotation(rotation: THREE.Quaternion) {\n this.rotation.copy(rotation);\n this._fromQuat.copy(rotation);\n this._toQuat.copy(rotation);\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n }\n\n public activate({ view3d }: XRRenderContext, gesture: TOUCH.GESTURE) {\n if (!this._enabled) return;\n\n this._active = true;\n\n const model = view3d.model!;\n const rotationIndicator = this._rotationIndicator;\n\n if (rotationIndicator) {\n rotationIndicator.show();\n rotationIndicator.updatePosition(model.bbox.getCenter(new THREE.Vector3()));\n rotationIndicator.updateScale(model.size / 2);\n rotationIndicator.updateRotation(model.scene.quaternion);\n }\n }\n\n public deactivate() {\n this._active = false;\n\n if (this._rotationIndicator) {\n this._rotationIndicator.hide();\n }\n }\n\n public updateAxis(axis: THREE.Vector3) {\n this._axis.copy(axis);\n }\n\n public setInitialPos(coords: THREE.Vector2[]) {\n this._prevPos.copy(coords[0]);\n }\n\n public process({ view3d, xrCam }: XRRenderContext, { coords }: XRInputs) {\n if (!this._active || coords.length !== 1) return;\n\n const prevPos = this._prevPos;\n const motion = this._motion;\n\n const model = view3d.model!;\n const coord = coords[0];\n\n const modelPos = model.scene.position.clone();\n const ndcModelPos = new THREE.Vector2().fromArray(modelPos.project(xrCam).toArray());\n\n // Get the rotation angle with the model's NDC coordinates as the center.\n const rotationAngle = getRotationAngle(ndcModelPos, prevPos, coord) * this._userScale;\n const rotation = new THREE.Quaternion().setFromAxisAngle(this._axis, rotationAngle);\n const interpolated = this._getInterpolatedQuaternion();\n\n this._fromQuat.copy(interpolated);\n this._toQuat.premultiply(rotation);\n\n motion.reset(0);\n motion.setEndDelta(1);\n\n prevPos.copy(coord);\n }\n\n public update({ model }: XRRenderContext, deltaTime: number) {\n if (!this._active) return;\n\n const motion = this._motion;\n motion.update(deltaTime);\n\n const interpolated = this._getInterpolatedQuaternion();\n\n this.rotation.copy(interpolated);\n model.scene.quaternion.copy(interpolated);\n }\n\n private _getInterpolatedQuaternion(): THREE.Quaternion {\n const motion = this._motion;\n const toEuler = this._toQuat;\n const fromEuler = this._fromQuat;\n\n const progress = motion.val;\n\n return new THREE.Quaternion().copy(fromEuler).slerp(toEuler, progress);\n }\n}\n\nexport default ARSwirlControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Motion from \"../../Motion\";\nimport * as DEFAULT from \"~/consts/default\";\nimport * as EASING from \"~/consts/easing\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\nimport ARControl from \"../common/ARControl\";\n\nenum STATE {\n WAITING,\n TRANSLATING,\n BOUNCING,\n}\n\n/**\n * Options for {@link ARFloorTranslateControl}\n * @category Controls-AR\n * @interface\n * @property {number} [threshold=0.05] Threshold until translation works, this value is relative to screen size.\n * @property {number} [hoverAmplitude=0.01] How much model will hover up and down, in meter. Default value is 0.01(1cm).\n * @property {number} [hoverHeight=0.1] How much model will float from the floor, in meter. Default value is 0.1(10cm).\n * @property {number} [hoverPeriod=1000] Hover cycle's period, in milisecond.\n * @property {function} [hoverEasing=EASING.SINE_WAVE] Hover animation's easing function.\n * @property {number} [bounceDuration=1000] Bounce-to-floor animation's duration, in milisecond.\n * @property {number} [bounceEasing=EASING.EASE_OUT_BOUNCE] Bounce-to-floor animation's easing function.\n */\nexport interface ARFloorTranslateControlOption {\n threshold: number;\n hoverAmplitude: number;\n hoverHeight: number;\n hoverPeriod: number;\n hoverEasing: (x: number) => number;\n bounceDuration: number;\n bounceEasing: (x: number) => number;\n}\n\n/**\n * Model's translation(position) control for {@link ARFloorControl}\n * @category Controls-AR\n */\nclass ARFloorTranslateControl implements ARControl {\n // Options\n private _hoverAmplitude: number;\n private _hoverHeight: number;\n\n // Internal states\n private _modelPosition = new THREE.Vector3();\n private _hoverPosition = new THREE.Vector3();\n private _floorPosition = new THREE.Vector3();\n private _dragPlane = new THREE.Plane();\n private _enabled = true;\n private _state = STATE.WAITING;\n private _initialPos = new THREE.Vector2();\n private _hoverMotion: Motion;\n private _bounceMotion: Motion;\n\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n /**\n * Position including hover/bounce animation offset from the floor.\n * @readonly\n */\n public get modelPosition() { return this._modelPosition.clone(); }\n /**\n * Last detected floor position\n * @readonly\n */\n public get floorPosition() { return this._floorPosition.clone(); }\n /**\n * How much model will hover up and down, in meter.\n */\n public get hoverAmplitude() { return this._hoverAmplitude; }\n /**\n * How much model will float from the floor, in meter.\n */\n public get hoverHeight() { return this._hoverHeight; }\n\n public set hoverAmplitude(val: number) { this._hoverAmplitude = val; }\n public set hoverHeight(val: number) { this._hoverHeight = val; }\n\n /**\n * Create new instance of ARTranslateControl\n * @param {ARFloorTranslateControlOption} [options={}] Options\n */\n constructor({\n hoverAmplitude = 0.01,\n hoverHeight = 0.1,\n hoverPeriod = 1000,\n hoverEasing = EASING.SINE_WAVE,\n bounceDuration = 1000,\n bounceEasing = EASING.EASE_OUT_BOUNCE,\n }: Partial<ARFloorTranslateControlOption> = {}) {\n this._hoverAmplitude = hoverAmplitude;\n this._hoverHeight = hoverHeight;\n this._hoverMotion = new Motion({\n loop: true,\n duration: hoverPeriod,\n easing: hoverEasing,\n });\n this._bounceMotion = new Motion({\n duration: bounceDuration,\n easing: bounceEasing,\n range: DEFAULT.INFINITE_RANGE,\n });\n }\n\n public initFloorPosition(position: THREE.Vector3) {\n this._modelPosition.copy(position);\n this._floorPosition.copy(position);\n this._hoverPosition.copy(position);\n this._hoverPosition.setY(position.y + this._hoverHeight);\n }\n\n // tslint:disable-next-line no-empty\n public init(ctx: XRRenderContext) {}\n\n // tslint:disable-next-line no-empty\n public destroy(ctx: XRContext) {}\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n this.deactivate();\n }\n\n public activate({ model }: XRRenderContext, gesture: TOUCH.GESTURE) {\n if (!this._enabled) return;\n\n const modelBbox = model.bbox;\n const modelBboxYOffset = modelBbox.getCenter(new THREE.Vector3()).y - modelBbox.min.y;\n this._dragPlane.set(new THREE.Vector3(0, 1, 0), -(this._floorPosition.y + this._hoverHeight + modelBboxYOffset));\n\n this._hoverMotion.reset(0);\n this._hoverMotion.setEndDelta(1);\n this._state = STATE.TRANSLATING;\n }\n\n public deactivate() {\n if (!this._enabled || this._state === STATE.WAITING) {\n this._state = STATE.WAITING;\n return;\n }\n\n this._state = STATE.BOUNCING;\n\n const floorPosition = this._floorPosition;\n const modelPosition = this._modelPosition;\n const hoverPosition = this._hoverPosition;\n const bounceMotion = this._bounceMotion;\n\n const hoveringAmount = modelPosition.y - floorPosition.y;\n bounceMotion.reset(modelPosition.y);\n bounceMotion.setEndDelta(-hoveringAmount);\n\n // Restore hover pos\n hoverPosition.copy(floorPosition);\n hoverPosition.setY(floorPosition.y + this._hoverHeight);\n }\n\n public setInitialPos(coords: THREE.Vector2[]) {\n this._initialPos.copy(coords[0]);\n }\n\n public process({ view3d, model, frame, referenceSpace, xrCam }: XRRenderContext, { hitResults }: XRInputs) {\n const state = this._state;\n const notActive = state === STATE.WAITING || state === STATE.BOUNCING;\n if (!hitResults || hitResults.length !== 1 || notActive) return;\n\n const hitResult = hitResults[0];\n\n const prevFloorPosition = this._floorPosition.clone();\n const floorPosition = this._floorPosition;\n const hoverPosition = this._hoverPosition;\n const hoverHeight = this._hoverHeight;\n const dragPlane = this._dragPlane;\n\n const modelBbox = model.bbox;\n const modelBboxYOffset = modelBbox.getCenter(new THREE.Vector3()).y - modelBbox.min.y;\n\n const hitPose = hitResult.results[0] && hitResult.results[0].getPose(referenceSpace);\n const isFloorHit = hitPose && hitPose.transform.matrix[5] >= 0.75;\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n\n if (!hitPose || !isFloorHit) {\n // Use previous drag plane if no hit plane is found\n const targetRayPose = frame.getPose(hitResult.inputSource.targetRaySpace, view3d.renderer.threeRenderer.xr.getReferenceSpace());\n const fingerDir = new THREE.Vector3().copy(targetRayPose.transform.position).sub(camPos).normalize();\n\n const fingerRay = new THREE.Ray(camPos, fingerDir);\n const intersection = fingerRay.intersectPlane(dragPlane, new THREE.Vector3());\n\n if (intersection) {\n floorPosition.copy(intersection);\n floorPosition.setY(prevFloorPosition.y);\n hoverPosition.copy(intersection);\n hoverPosition.setY(intersection.y - modelBboxYOffset);\n }\n return;\n }\n\n const hitMatrix = new THREE.Matrix4().fromArray(hitPose.transform.matrix);\n const hitPosition = new THREE.Vector3().setFromMatrixPosition(hitMatrix);\n\n // Set new floor level when it's increased at least 10cm\n const currentDragPlaneHeight = -dragPlane.constant;\n const hitDragPlaneHeight = hitPosition.y + hoverHeight + modelBboxYOffset;\n\n if (hitDragPlaneHeight - currentDragPlaneHeight > 0.1) {\n dragPlane.constant = -hitDragPlaneHeight;\n }\n\n const camToHitDir = new THREE.Vector3().subVectors(hitPosition, camPos).normalize();\n const camToHitRay = new THREE.Ray(camPos, camToHitDir);\n const hitOnDragPlane = camToHitRay.intersectPlane(dragPlane, new THREE.Vector3());\n\n if (!hitOnDragPlane) return;\n\n floorPosition.copy(hitOnDragPlane);\n floorPosition.setY(hitPosition.y);\n hoverPosition.copy(hitOnDragPlane);\n hoverPosition.setY(hitOnDragPlane.y - modelBboxYOffset);\n }\n\n public update({ model }: XRRenderContext, delta: number) {\n const state = this._state;\n const modelPosition = this._modelPosition;\n const hoverPosition = this._hoverPosition;\n if (state === STATE.WAITING) return;\n\n if (state !== STATE.BOUNCING) {\n // Hover\n const hoverMotion = this._hoverMotion;\n hoverMotion.update(delta);\n\n // Change only x, y component of position\n const hoverOffset = hoverMotion.val * this._hoverAmplitude;\n modelPosition.copy(hoverPosition);\n modelPosition.setY(hoverPosition.y + hoverOffset);\n } else {\n // Bounce\n const bounceMotion = this._bounceMotion;\n bounceMotion.update(delta);\n\n modelPosition.setY(bounceMotion.val);\n\n if (bounceMotion.progress >= 1) {\n this._state = STATE.WAITING;\n }\n }\n\n const modelBbox = model.bbox;\n const modelYOffset = modelBbox.getCenter(new THREE.Vector3()).y - modelBbox.min.y;\n\n // modelPosition = where model.bbox.min.y should be\n model.scene.position.copy(modelPosition.clone().setY(modelPosition.y + modelYOffset));\n }\n}\n\nexport default ARFloorTranslateControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport { toPowerOfTwo } from \"~/utils\";\n\n/**\n * Options for {@link ScaleUI}\n * @category Controls-AR\n * @interface\n * @property {number} [width=0.1] UI width, in meter.\n * @property {number} [padding=20] UI's padding value, in px.\n * @property {number} [offset=0.05] UI's Y-axis offset from model's bbox max y, in meter.\n * @property {number} [font=\"64px sans-serif\"] UI's font. See {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font CanvasRenderingContext2D#font}\n * @property {number} [color=\"white\"] UI's font color. See {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle CanvasRenderingContext2D#fillStyle}\n */\nexport interface ScaleUIOption {\n width: number;\n padding: number;\n offset: number;\n font: CanvasRenderingContext2D[\"font\"];\n color: CanvasRenderingContext2D[\"fillStyle\"];\n}\n\n/**\n * UI element displaying model's scale percentage info when user chaning model's scale.\n * @category Controls-AR\n */\nclass ScaleUI {\n private _canvas: HTMLCanvasElement;\n private _ctx: CanvasRenderingContext2D;\n private _mesh: THREE.Mesh;\n private _texture: THREE.CanvasTexture;\n private _font: CanvasRenderingContext2D[\"font\"];\n private _color: CanvasRenderingContext2D[\"fillStyle\"];\n private _padding: number;\n private _offset: number;\n private _height: number;\n\n /**\n * Scale UI's plane mesh\n * @readonly\n */\n public get mesh() { return this._mesh; }\n /**\n * Scale UI's height value\n * @readonly\n */\n public get height() { return this._height; }\n /**\n * Whether UI is visible or not.\n * @readonly\n */\n public get visible() { return this._mesh.visible; }\n\n /**\n * Create new instance of ScaleUI\n * @param {ScaleUIOption} [options={}] Options\n */\n constructor({\n width = 0.1,\n padding = 20,\n offset = 0.05,\n font = \"64px sans-serif\",\n color = \"white\",\n }: Partial<ScaleUIOption> = {}) {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\")!;\n\n ctx.font = font;\n\n // Maximum canvas width should be equal to this\n const maxText = ctx.measureText(\"100%\");\n\n // Following APIs won't work on IE, but it's WebXR so I think it's okay\n const maxWidth = maxText.actualBoundingBoxLeft + maxText.actualBoundingBoxRight;\n const maxHeight = maxText.actualBoundingBoxAscent + maxText.actualBoundingBoxDescent;\n const widthPowerOfTwo = toPowerOfTwo(maxWidth);\n\n canvas.width = widthPowerOfTwo;\n canvas.height = widthPowerOfTwo;\n\n // This considers increased amount by making width to power of two\n const planeWidth = width * (widthPowerOfTwo / maxWidth);\n\n this._ctx = ctx;\n this._canvas = canvas;\n this._height = planeWidth * maxHeight / maxWidth; // Text height inside plane\n this._texture = new THREE.CanvasTexture(canvas);\n\n // Plane is square\n const uiGeometry = new THREE.PlaneGeometry(planeWidth, planeWidth);\n const mesh = new THREE.Mesh(\n uiGeometry,\n new THREE.MeshBasicMaterial({\n map: this._texture,\n transparent: true,\n }),\n );\n mesh.matrixAutoUpdate = false;\n\n this._mesh = mesh;\n this._font = font;\n this._color = color;\n this._padding = padding;\n this._offset = offset;\n }\n\n public updatePosition(position: THREE.Vector3, focus: THREE.Vector3) {\n // Update mesh\n const mesh = this._mesh;\n mesh.lookAt(focus);\n mesh.position.copy(position);\n mesh.position.setY(position.y + this._height / 2 + this._offset);\n mesh.updateMatrix();\n }\n\n public updateScale(scale: number) {\n const ctx = this._ctx;\n const canvas = this._canvas;\n const padding = this._padding;\n const scalePercentage = (scale * 100).toFixed(0);\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n const centerX = canvas.width / 2;\n const centerY = canvas.height / 2;\n\n // Draw round rect\n const textSize = ctx.measureText(`${scalePercentage}%`);\n const halfWidth = (textSize.actualBoundingBoxLeft + textSize.actualBoundingBoxRight) / 2;\n const halfHeight = (textSize.actualBoundingBoxAscent + textSize.actualBoundingBoxDescent) / 2;\n\n ctx.beginPath();\n\n ctx.moveTo(centerX - halfWidth, centerY - halfHeight - padding);\n ctx.lineTo(centerX + halfWidth, centerY - halfHeight - padding);\n ctx.quadraticCurveTo(centerX + halfWidth + padding, centerY - halfHeight - padding, centerX + halfWidth + padding, centerY - halfHeight);\n ctx.lineTo(centerX + halfWidth + padding, centerY + halfHeight);\n ctx.quadraticCurveTo(centerX + halfWidth + padding, centerY + halfHeight + padding, centerX + halfWidth, centerY + halfHeight + padding);\n ctx.lineTo(centerX - halfWidth, centerY + halfHeight + padding);\n ctx.quadraticCurveTo(centerX - halfWidth - padding, centerY + halfHeight + padding, centerX - halfWidth - padding, centerY + halfHeight);\n ctx.lineTo(centerX - halfWidth - padding, centerY - halfHeight);\n ctx.quadraticCurveTo(centerX - halfWidth - padding, centerY - halfHeight - padding, centerX - halfWidth, centerY - halfHeight - padding);\n\n ctx.closePath();\n\n ctx.lineWidth = 5;\n ctx.fillStyle = \"rgba(0, 0, 0, 0.3)\";\n ctx.fill();\n ctx.stroke();\n\n // Draw text\n ctx.font = this._font;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.strokeStyle = this._color;\n ctx.fillStyle = this._color;\n\n ctx.fillText(`${scalePercentage}%`, centerX, centerY);\n\n this._texture.needsUpdate = true;\n }\n\n /**\n * Show UI\n */\n public show() {\n this._mesh.visible = true;\n }\n\n /**\n * Hide UI\n */\n public hide() {\n this._mesh.visible = false;\n }\n}\n\nexport default ScaleUI;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARControl from \"./ARControl\";\nimport Motion from \"~/controls/Motion\";\nimport ScaleUI from \"../ui/ScaleUI\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\n\n/**\n * Options for {@link ARScaleControl}\n * @category Controls-AR\n * @interface\n * @property {number} [min=0.05] Minimum scale, default is 0.05(5%)\n * @property {number} [max=2] Maximum scale, default is 2(200%)\n */\nexport interface ARScaleControlOption {\n min: number;\n max: number;\n}\n\n/**\n * Model's scale controller which works on AR(WebXR) mode.\n * @category Controls-AR\n */\nclass ARScaleControl implements ARControl {\n // TODO: add option for \"user scale\"\n\n // Internal states\n private _motion: Motion;\n private _enabled = true;\n private _active = false;\n private _prevCoordDistance = -1;\n private _scaleMultiplier = 1;\n private _initialScale = new THREE.Vector3();\n private _ui = new ScaleUI();\n\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n public get scale() {\n return this._initialScale.clone().multiplyScalar(this._scaleMultiplier);\n }\n public get scaleMultiplier() { return this._scaleMultiplier; }\n /**\n * Range of the scale\n * @readonly\n */\n public get range() { return this._motion.range; }\n\n /**\n * Create new instance of ARScaleControl\n * @param {ARScaleControlOption} [options={}] Options\n */\n constructor({\n min = 0.05,\n max = 2,\n } = {}) {\n this._motion = new Motion({ duration: 0, range: { min, max } });\n this._motion.reset(1); // default scale is 1(100%)\n this._ui = new ScaleUI();\n }\n\n public init({ view3d }: XRRenderContext) {\n this._initialScale.copy(view3d.model!.scene.scale);\n view3d.scene.add(this._ui.mesh);\n }\n\n public destroy({ view3d }: XRContext) {\n view3d.scene.remove(this._ui.mesh);\n }\n\n public setInitialPos(coords: THREE.Vector2[]) {\n this._prevCoordDistance = new THREE.Vector2().subVectors(coords[0], coords[1]).length();\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n this.deactivate();\n }\n\n public activate(ctx: XRRenderContext, gesture: TOUCH.GESTURE) {\n this._active = true;\n this._ui.show();\n this._updateUIPosition(ctx);\n }\n\n public deactivate() {\n this._active = false;\n this._ui.hide();\n this._prevCoordDistance = -1;\n }\n\n /**\n * Update scale range\n * @param min Minimum scale\n * @param max Maximum scale\n */\n public setRange(min: number, max: number) {\n this._motion.range = { min, max };\n }\n\n public process(ctx: XRRenderContext, { coords }: XRInputs) {\n if (coords.length !== 2 || !this._enabled || !this._active) return;\n\n const motion = this._motion;\n const distance = new THREE.Vector2().subVectors(coords[0], coords[1]).length();\n const delta = (distance - this._prevCoordDistance);\n\n motion.setEndDelta(delta);\n this._prevCoordDistance = distance;\n\n this._updateUIPosition(ctx);\n }\n\n public update({ model }: XRRenderContext, deltaTime: number) {\n if (!this._enabled || !this._active) return;\n\n const motion = this._motion;\n motion.update(deltaTime);\n\n this._scaleMultiplier = motion.val;\n this._ui.updateScale(this._scaleMultiplier);\n\n model.scene.scale.copy(this.scale);\n }\n\n private _updateUIPosition({ view3d, xrCam }: XRRenderContext) {\n // Update UI\n const model = view3d.model!;\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n const uiPos = model.scene.position.clone().setY(model.bbox.max.y);\n\n this._ui.updatePosition(uiPos, camPos);\n }\n}\n\nexport default ARScaleControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Motion from \"../../Motion\";\nimport { Range } from \"~/types/internal\";\n\n/**\n * Options for {@link FloorIndicator}\n * @category Controls-AR\n * @interface\n * @property {number} [ringOpacity=0.3] Ring's opacity.\n * @property {number} [dirIndicatorOpacity=1] Direction indicator's opacity.\n * @property {number} [fadeoutDuration=1000] Fadeout animation's duration.\n */\nexport interface FloorIndicatorOption {\n opacityMin: number;\n opacityMax: number;\n fadeoutDuration: number;\n}\n\n/**\n * Ring type indicator for showing where the model's at.\n * @category Controls-AR\n */\nclass FloorIndicator {\n private _mesh: THREE.Mesh;\n private _animator: Motion;\n private _opacityRange: Range;\n\n /**\n * Ring mesh\n */\n public get mesh() { return this._mesh; }\n\n /**\n * Create new instance of FloorIndicator\n * @param {FloorIndicatorOption} [options={}] Options\n */\n constructor({\n ringOpacity = 0.3,\n dirIndicatorOpacity = 1,\n fadeoutDuration = 1000,\n } = {}) {\n const deg10 = Math.PI / 18;\n\n const dimmedRingGeomtry = new THREE.RingGeometry(0.975, 1, 150, 1, -6 * deg10, 30 * deg10);\n const reticle = new THREE.CircleGeometry(0.1, 30, 0, Math.PI * 2);\n dimmedRingGeomtry.merge(reticle);\n\n const highlightedRingGeometry = new THREE.RingGeometry(0.96, 1.015, 30, 1, 25 * deg10, 4 * deg10);\n\n // Create little triangle in ring\n const ringVertices = highlightedRingGeometry.vertices;\n const trianglePart = ringVertices.slice(Math.floor(11 * ringVertices.length / 16), Math.floor(13 * ringVertices.length / 16));\n const firstY = trianglePart[0].y;\n const midIndex = Math.floor(trianglePart.length / 2);\n trianglePart.forEach((vec, vecIdx) => {\n const offsetAmount = 0.025 * (midIndex - Math.abs(vecIdx - midIndex));\n vec.setY(firstY - offsetAmount);\n });\n\n const indicatorMat = new THREE.Matrix4().makeRotationX(-Math.PI / 2);\n const mergedGeometry = new THREE.Geometry();\n\n mergedGeometry.merge(dimmedRingGeomtry, indicatorMat, 0);\n mergedGeometry.merge(highlightedRingGeometry, indicatorMat, 1);\n\n const dimmedMaterial = new THREE.MeshBasicMaterial({\n transparent: true,\n opacity: ringOpacity,\n color: 0xffffff,\n });\n const highlightMaterial = new THREE.MeshBasicMaterial({\n transparent: true,\n opacity: dirIndicatorOpacity,\n color: 0xffffff,\n });\n const materials = [dimmedMaterial, highlightMaterial];\n\n this._mesh = new THREE.Mesh(mergedGeometry, materials);\n this._mesh.matrixAutoUpdate = false;\n this._animator = new Motion({ duration: fadeoutDuration });\n this._opacityRange = {\n min: ringOpacity,\n max: dirIndicatorOpacity,\n };\n }\n\n public update({\n delta,\n scale,\n position,\n rotation,\n }: {\n delta: number,\n scale: number,\n position: THREE.Vector3,\n rotation: THREE.Quaternion,\n }) {\n const mesh = this._mesh;\n const animator = this._animator;\n\n if (!this._mesh.visible) return;\n\n animator.update(delta);\n\n const materials = this._mesh.material as THREE.Material[];\n const minOpacityMat = materials[0];\n const maxOpacityMat = materials[1];\n const opacityRange = this._opacityRange;\n\n minOpacityMat.opacity = animator.val * opacityRange.min;\n maxOpacityMat.opacity = animator.val * opacityRange.max;\n\n if (animator.val <= 0) {\n mesh.visible = false;\n }\n\n // Update mesh\n mesh.scale.setScalar(scale);\n mesh.position.copy(position);\n mesh.quaternion.copy(rotation);\n mesh.updateMatrix();\n }\n\n public show() {\n this._mesh.visible = true;\n this._animator.reset(1);\n }\n\n public fadeout() {\n this._animator.setEndDelta(-1);\n }\n}\n\nexport default FloorIndicator;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nexport enum GESTURE {\n NONE = 0,\n ONE_FINGER_HORIZONTAL = 1,\n ONE_FINGER_VERTICAL = 2,\n ONE_FINGER = 1 | 2,\n TWO_FINGER_HORIZONTAL = 4,\n TWO_FINGER_VERTICAL = 8,\n TWO_FINGER = 4 | 8,\n PINCH = 16,\n}\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport * as TOUCH from \"~/consts/touch\";\n\nenum STATE {\n WAITING,\n IN_DEADZONE,\n OUT_OF_DEADZONE,\n}\n\n/**\n * Options for {@link DeadzoneChecker}\n * @category Controls-AR\n * @interface\n * @property {number} size Size of the deadzone circle.\n */\nexport interface DeadzoneCheckerOption {\n size: number;\n}\n\n/**\n * Deadzone checker for deadzone-based controls\n * @category Controls-AR\n */\nclass DeadzoneChecker {\n // Options\n private _size: number;\n\n // Internal States\n private _state = STATE.WAITING;\n private _detectedGesture = TOUCH.GESTURE.NONE;\n private _testingGestures = TOUCH.GESTURE.NONE;\n private _lastFingerCount = 0;\n private _aspect: number = 1;\n\n // Store two prev positions, as it should be maintained separately\n private _prevOneFingerPos = new THREE.Vector2();\n private _prevTwoFingerPos = new THREE.Vector2();\n private _initialTwoFingerDistance = 0;\n private _prevOneFingerPosInitialized = false;\n private _prevTwoFingerPosInitialized = false;\n\n /**\n * Size of the deadzone.\n * @type number\n */\n public get size() { return this._size; }\n public get inDeadzone() { return this._state === STATE.IN_DEADZONE; }\n\n public set size(val: number) { this._size = val; }\n\n /**\n * Create new DeadzoneChecker\n * @param {DeadzoneCheckerOption} [options={}] Options\n */\n constructor({\n size = 0.1,\n }: Partial<DeadzoneCheckerOption> = {}) {\n this._size = size;\n }\n\n /**\n * Set screen aspect(height / width)\n * @param aspect Screen aspect value\n */\n public setAspect(aspect: number) {\n this._aspect = aspect;\n }\n\n public setFirstInput(inputs: THREE.Vector2[]) {\n const fingerCount = inputs.length;\n\n if (fingerCount === 1 && !this._prevOneFingerPosInitialized) {\n this._prevOneFingerPos.copy(inputs[0]);\n this._prevOneFingerPosInitialized = true;\n } else if (fingerCount === 2 && !this._prevTwoFingerPosInitialized) {\n this._prevTwoFingerPos.copy(new THREE.Vector2().addVectors(inputs[0], inputs[1]).multiplyScalar(0.5));\n this._initialTwoFingerDistance = new THREE.Vector2().subVectors(inputs[0], inputs[1]).length();\n this._prevTwoFingerPosInitialized = true;\n }\n\n this._lastFingerCount = fingerCount;\n this._state = STATE.IN_DEADZONE;\n }\n\n public addTestingGestures(...gestures: TOUCH.GESTURE[]) {\n this._testingGestures = this._testingGestures | gestures.reduce((gesture, accumulated) => gesture | accumulated, TOUCH.GESTURE.NONE);\n }\n\n public cleanup() {\n this._testingGestures = TOUCH.GESTURE.NONE;\n this._lastFingerCount = 0;\n this._prevOneFingerPosInitialized = false;\n this._prevTwoFingerPosInitialized = false;\n this._initialTwoFingerDistance = 0;\n this._detectedGesture = TOUCH.GESTURE.NONE;\n this._state = STATE.WAITING;\n }\n\n public applyScreenAspect(inputs: THREE.Vector2[]) {\n const aspect = this._aspect;\n\n inputs.forEach(input => {\n if (aspect > 1) {\n input.setY(input.y * aspect);\n } else {\n input.setX(input.x / aspect);\n }\n });\n }\n\n public check(inputs: THREE.Vector2[]): TOUCH.GESTURE {\n const state = this._state;\n const deadzone = this._size;\n const testingGestures = this._testingGestures;\n const lastFingerCount = this._lastFingerCount;\n const fingerCount = inputs.length;\n\n if (state === STATE.OUT_OF_DEADZONE) {\n return this._detectedGesture;\n }\n\n this._lastFingerCount = fingerCount;\n this.applyScreenAspect(inputs);\n\n if (fingerCount !== lastFingerCount) {\n this.setFirstInput(inputs);\n return TOUCH.GESTURE.NONE;\n }\n\n if (fingerCount === 1) {\n const input = inputs[0];\n const prevPos = this._prevOneFingerPos.clone();\n\n const diff = new THREE.Vector2().subVectors(input, prevPos);\n if (diff.length() > deadzone) {\n if (Math.abs(diff.x) > Math.abs(diff.y)) {\n if (TOUCH.GESTURE.ONE_FINGER_HORIZONTAL & testingGestures) {\n this._detectedGesture = TOUCH.GESTURE.ONE_FINGER_HORIZONTAL;\n }\n } else {\n if (TOUCH.GESTURE.ONE_FINGER_VERTICAL & testingGestures) {\n this._detectedGesture = TOUCH.GESTURE.ONE_FINGER_VERTICAL;\n }\n }\n }\n } else if (fingerCount === 2) {\n const middle = new THREE.Vector2().addVectors(inputs[1], inputs[0]).multiplyScalar(0.5);\n const prevPos = this._prevTwoFingerPos.clone();\n\n const diff = new THREE.Vector2().subVectors(middle, prevPos);\n if (diff.length() > deadzone) {\n if (Math.abs(diff.x) > Math.abs(diff.y)) {\n if (TOUCH.GESTURE.TWO_FINGER_HORIZONTAL & testingGestures) {\n this._detectedGesture = TOUCH.GESTURE.TWO_FINGER_HORIZONTAL;\n }\n } else {\n if (TOUCH.GESTURE.TWO_FINGER_VERTICAL & testingGestures) {\n this._detectedGesture = TOUCH.GESTURE.TWO_FINGER_VERTICAL;\n }\n }\n }\n\n const distance = new THREE.Vector2().subVectors(inputs[1], inputs[0]).length();\n\n if (Math.abs(distance - this._initialTwoFingerDistance) > deadzone) {\n if (TOUCH.GESTURE.PINCH & testingGestures) {\n this._detectedGesture = TOUCH.GESTURE.PINCH;\n }\n }\n }\n\n if (this._detectedGesture !== TOUCH.GESTURE.NONE) {\n this._state = STATE.OUT_OF_DEADZONE;\n }\n\n return this._detectedGesture;\n }\n}\n\nexport default DeadzoneChecker;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARSwirlControl, { ARSwirlControlOption } from \"../common/ARSwirlControl\";\nimport ARFloorTranslateControl, { ARFloorTranslateControlOption } from \"./ARFloorTranslateControl\";\nimport ARScaleControl, { ARScaleControlOption } from \"../common/ARScaleControl\";\nimport FloorIndicator, { FloorIndicatorOption } from \"../ui/FloorIndicator\";\nimport * as XR from \"~/consts/xr\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\nimport DeadzoneChecker, { DeadzoneCheckerOption } from \"../common/DeadzoneChecker\";\n\n/**\n * Options for the {@link ARFloorControl}\n * @category Controls-AR\n * @interface\n * @property {ARSwirlControlOptions} rotate Options for {@link ARSwirlControl}\n * @property {ARFloorTranslateControlOption} translate Options for {@link ARFloorTranslateControl}\n * @property {ARScaleControlOption} scale Options for {@link ARScaleControl}\n * @property {FloorIndicatorOption} floorIndicator Options for {@link FloorIndicator}\n * @property {DeadzoneCheckerOption} deadzone Options for {@link DeadzoneChecker}\n */\nexport interface ARFloorControlOption {\n rotate: Partial<ARSwirlControlOption>;\n translate: Partial<ARFloorTranslateControlOption>;\n scale: Partial<ARScaleControlOption>;\n floorIndicator: Partial<FloorIndicatorOption>;\n deadzone: Partial<DeadzoneCheckerOption>;\n}\n\n/**\n * AR control for {@link FloorARSession}\n * @category Controls-AR\n */\nclass ARFloorControl {\n private _enabled = true;\n private _initialized = false;\n private _modelHit = false;\n private _hitTestSource: any = null;\n private _deadzoneChecker: DeadzoneChecker;\n private _rotateControl: ARSwirlControl;\n private _translateControl: ARFloorTranslateControl;\n private _scaleControl: ARScaleControl;\n private _floorIndicator: FloorIndicator;\n\n /**\n * Return whether this control is enabled or not\n */\n public get enabled() { return this._enabled; }\n /**\n * {@link ARSwirlControl} in this control\n */\n public get rotate() { return this._rotateControl; }\n /**\n * {@link ARFloorTranslateControl} in this control\n */\n public get translate() { return this._translateControl; }\n /**\n * {@link ARScaleControl} in this control\n */\n public get scale() { return this._scaleControl; }\n public get controls() {\n return [this._rotateControl, this._translateControl, this._scaleControl];\n }\n\n /**\n * Create new instance of ARFloorControl\n * @param {ARFloorControlOption} options Options\n */\n constructor(options: Partial<ARFloorControlOption> = {}) {\n this._rotateControl = new ARSwirlControl({\n showIndicator: false,\n ...options.rotate,\n });\n this._translateControl = new ARFloorTranslateControl(options.translate);\n this._scaleControl = new ARScaleControl(options.scale);\n this._floorIndicator = new FloorIndicator(options.floorIndicator);\n this._deadzoneChecker = new DeadzoneChecker(options.deadzone);\n }\n\n public init(ctx: XRRenderContext, initialFloorPos: THREE.Vector3) {\n const { session, view3d, size } = ctx;\n\n this.controls.forEach(control => control.init(ctx));\n this._translateControl.initFloorPosition(initialFloorPos);\n this._deadzoneChecker.setAspect(size.height / size.width);\n\n view3d.scene.add(this._floorIndicator.mesh);\n\n this._initialized = true;\n\n session.requestHitTestSourceForTransientInput({ profile: XR.INPUT_PROFILE.TOUCH })\n .then((transientHitTestSource: any) => {\n this._hitTestSource = transientHitTestSource;\n });\n }\n\n /**\n * Destroy this control and deactivate it\n * @param view3d Instance of the {@link View3D}\n */\n public destroy(ctx: XRContext) {\n if (!this._initialized) return;\n\n if (this._hitTestSource) {\n this._hitTestSource.cancel();\n this._hitTestSource = null;\n }\n\n ctx.view3d.scene.remove(this._floorIndicator.mesh);\n\n this.deactivate();\n this.controls.forEach(control => control.destroy(ctx));\n\n this._initialized = false;\n }\n\n public deactivate() {\n this._modelHit = false;\n this._deadzoneChecker.cleanup();\n this.controls.forEach(control => control.deactivate());\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n this.deactivate();\n }\n\n public update(ctx: XRRenderContext) {\n const { view3d, session, frame } = ctx;\n const hitTestSource = this._hitTestSource;\n\n if (!hitTestSource || !view3d.model) return;\n\n const deadzoneChecker = this._deadzoneChecker;\n const inputSources = session.inputSources;\n const hitResults = frame.getHitTestResultsForTransientInput(hitTestSource);\n const coords = this._hitResultToVector(hitResults);\n const xrInputs = {\n coords,\n inputSources,\n hitResults,\n };\n\n if (deadzoneChecker.inDeadzone) {\n this._checkDeadzone(ctx, xrInputs);\n } else {\n this._processInput(ctx, xrInputs);\n }\n this._updateControls(ctx);\n }\n\n public onSelectStart = (ctx: XRRenderContext) => {\n const { view3d, frame, xrCam, referenceSpace } = ctx;\n const hitTestSource = this._hitTestSource;\n\n if (!hitTestSource || !this._enabled) return;\n\n const deadzoneChecker = this._deadzoneChecker;\n const rotateControl = this._rotateControl;\n const translateControl = this._translateControl;\n const scaleControl = this._scaleControl;\n\n // Update deadzone testing gestures\n if (rotateControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.ONE_FINGER);\n }\n if (translateControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.ONE_FINGER);\n }\n if (scaleControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.PINCH);\n }\n\n const hitResults = frame.getHitTestResultsForTransientInput(hitTestSource);\n const coords = this._hitResultToVector(hitResults);\n deadzoneChecker.applyScreenAspect(coords);\n deadzoneChecker.setFirstInput(coords);\n\n if (coords.length === 1) {\n // Check finger is on the model\n const modelBbox = view3d.model!.bbox;\n\n const targetRayPose = frame.getPose(hitResults[0].inputSource.targetRaySpace, referenceSpace);\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n\n const fingerDir = new THREE.Vector3().copy(targetRayPose.transform.position).sub(camPos).normalize();\n const fingerRay = new THREE.Ray(camPos, fingerDir);\n const intersection = fingerRay.intersectBox(modelBbox, new THREE.Vector3());\n\n if (intersection) {\n // Touch point intersected with model\n this._modelHit = true;\n }\n }\n\n this._floorIndicator.show();\n }\n\n public onSelectEnd = () => {\n this.deactivate();\n this._floorIndicator.fadeout();\n }\n\n private _checkDeadzone(ctx: XRRenderContext, { coords }: XRInputs) {\n const gesture = this._deadzoneChecker.check(coords.map(coord => coord.clone()));\n const rotateControl = this._rotateControl;\n const translateControl = this._translateControl;\n const scaleControl = this._scaleControl;\n\n if (gesture === TOUCH.GESTURE.NONE) return;\n\n switch (gesture) {\n case TOUCH.GESTURE.ONE_FINGER_HORIZONTAL:\n case TOUCH.GESTURE.ONE_FINGER_VERTICAL:\n if (this._modelHit) {\n translateControl.activate(ctx, gesture);\n translateControl.setInitialPos(coords);\n } else {\n rotateControl.activate(ctx, gesture);\n rotateControl.setInitialPos(coords);\n }\n break;\n case TOUCH.GESTURE.PINCH:\n scaleControl.activate(ctx, gesture);\n scaleControl.setInitialPos(coords);\n break;\n }\n }\n\n private _processInput(ctx: XRRenderContext, inputs: XRInputs) {\n this.controls.forEach(control => control.process(ctx, inputs));\n }\n\n private _updateControls(ctx: XRRenderContext) {\n const { view3d, model, delta } = ctx;\n const deltaMilisec = delta * 1000;\n\n this.controls.forEach(control => control.update(ctx, deltaMilisec));\n\n model.scene.updateMatrix();\n\n const modelRotation = this._rotateControl.rotation;\n const floorPosition = this._translateControl.floorPosition;\n view3d.scene.update(model, {\n floorPosition,\n });\n\n // Get a scaled bbox, which only has scale applied on it.\n const scaleControl = this._scaleControl;\n const scaledBbox = model.initialBbox;\n scaledBbox.min.multiply(scaleControl.scale);\n scaledBbox.max.multiply(scaleControl.scale);\n\n const floorIndicator = this._floorIndicator;\n const boundingSphere = scaledBbox.getBoundingSphere(new THREE.Sphere());\n\n floorIndicator.update({\n delta: deltaMilisec,\n scale: boundingSphere.radius,\n position: floorPosition,\n rotation: modelRotation,\n });\n }\n\n private _hitResultToVector(hitResults: any[]) {\n return hitResults.map(input => {\n return new THREE.Vector2().set(\n input.inputSource.gamepad.axes[0],\n -input.inputSource.gamepad.axes[1],\n );\n });\n }\n}\n\nexport default ARFloorControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport WebARSession, { WebARSessionOption } from \"./WebARSession\";\nimport HitTest from \"./features/HitTest\";\nimport Animation from \"~/core/Animation\";\nimport ARFloorControl, { ARFloorControlOption } from \"~/controls/ar/floor/ARFloorControl\";\nimport { merge } from \"~/utils\";\nimport * as XR from \"~/consts/xr\";\nimport { XRRenderContext, XRContext } from \"~/types/internal\";\n\n/**\n * Options for {@link FloorARSession}.\n * This type is intersection of {@link WebARSessionOption} and {@link ARControlOption}\n * @interface\n * @extends WebARSessionOption\n * @extends ARFloorControlOption\n */\ninterface FloorARSessionOption extends WebARSessionOption, ARFloorControlOption {}\n\n/**\n * WebXR based AR session which puts model on the detected floor.\n * @category XR\n * @fires WebARSession#start\n * @fires WebARSession#end\n * @fires WebARSession#canPlace\n * @fires WebARSession#modelPlaced\n */\nclass FloorARSession extends WebARSession {\n private _options: Partial<FloorARSessionOption>;\n private _control: ARFloorControl | null;\n private _renderContext: XRRenderContext | null;\n private _modelPlaced: boolean;\n private _hitTest: HitTest;\n\n /**\n * {@link ARControl} instance of this session\n * @type ARFloorControl | null\n */\n public get control() { return this._control; }\n\n /**\n * Create new instance of FloorARSession\n * @param {FloorARSessionOption} options Options\n */\n constructor(options: Partial<FloorARSessionOption> = {}) {\n super(options);\n\n this._control = null;\n this._renderContext = null;\n this._modelPlaced = false;\n\n this._hitTest = new HitTest();\n\n this._features = merge(this._features, this._hitTest.features);\n this._options = options;\n }\n\n public onStart = (ctx: XRContext) => {\n const { view3d, session } = ctx;\n\n super.onStart(ctx);\n\n this._control = new ARFloorControl(this._options);\n\n view3d.scene.hide();\n this._hitTest.init(session);\n }\n\n public onEnd = (ctx: XRContext) => {\n const { view3d, session } = ctx;\n\n super.onEnd(ctx);\n\n this._renderContext = null;\n this._modelPlaced = false;\n\n session.removeEventListener(XR.EVENTS.SELECT_START, this._onSelectStart);\n session.removeEventListener(XR.EVENTS.SELECT_END, this._onSelectEnd);\n\n this._hitTest.destroy();\n this._control!.destroy(ctx);\n this._control = null;\n\n view3d.scene.show();\n }\n\n protected _beforeRender = (ctx: XRRenderContext) => {\n this._renderContext = ctx;\n if (!this._modelPlaced) {\n this._initModelPosition(ctx);\n } else {\n this._control!.update(ctx);\n }\n }\n\n private _initModelPosition(ctx: XRRenderContext) {\n const {view3d, frame, session} = ctx;\n const model = view3d.model;\n const hitTest = this._hitTest;\n\n // Make sure the model is loaded\n if (!hitTest.ready || !model) return;\n\n const control = this._control!;\n const referenceSpace = view3d.renderer.threeRenderer.xr.getReferenceSpace();\n const hitTestResults = hitTest.getResults(frame);\n\n if (hitTestResults.length <= 0) return;\n\n const hit = hitTestResults[0];\n const hitMatrix = new THREE.Matrix4().fromArray(hit.getPose(referenceSpace).transform.matrix);\n\n // If transformed coords space's y axis is not facing up, don't use it.\n if (hitMatrix.elements[5] < 0.75) return;\n\n const modelRoot = model.scene;\n const hitPosition = new THREE.Vector3().setFromMatrixPosition(hitMatrix);\n\n // Reset rotation & update position\n modelRoot.quaternion.set(0, 0, 0, 1);\n modelRoot.position.copy(hitPosition);\n\n modelRoot.position.setY(modelRoot.position.y - model.bbox.min.y);\n modelRoot.updateMatrix();\n\n view3d.scene.update(model);\n view3d.scene.show();\n this.emit(\"canPlace\");\n\n // Don't need it\n hitTest.destroy();\n\n session.addEventListener(XR.EVENTS.SELECT_START, this._onSelectStart);\n session.addEventListener(XR.EVENTS.SELECT_END, this._onSelectEnd);\n\n this._domOverlay?.hideLoading();\n this._modelPlaced = true;\n this.emit(\"modelPlaced\");\n\n // Show scale up animation\n const originalModelScale = modelRoot.scale.clone();\n const scaleUpAnimation = new Animation({ context: session });\n\n scaleUpAnimation.on(\"progress\", evt => {\n const newScale = originalModelScale.clone().multiplyScalar(evt.easedProgress);\n modelRoot.scale.copy(newScale);\n });\n scaleUpAnimation.on(\"finish\", () => {\n modelRoot.scale.copy(originalModelScale);\n control.init(ctx, hitPosition);\n });\n scaleUpAnimation.start();\n }\n\n private _onSelectStart = (e) => {\n this._control!.onSelectStart({\n ...this._renderContext!,\n frame: e.frame,\n });\n }\n\n private _onSelectEnd = () => {\n this._control!.onSelectEnd();\n }\n}\n\nexport default FloorARSession;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport { range } from \"~/utils\";\n\n/**\n * Options for {@link ArrowIndicator}\n * @category Controls-AR\n * @interface\n * @property {string | number | THREE.Color} [color=0xffffff] Arrow color\n */\nexport interface ArrowIndicatorOption {\n color: string | number | THREE.Color;\n}\n\n/**\n * Arrow indicator for AR model translatioon.\n * @category Controls-AR\n */\nclass ArrowIndicator {\n private _arrows: THREE.Group[];\n private _obj: THREE.Group;\n\n /**\n * {@link https://threejs.org/docs/index.html#api/en/objects/Group THREE.Group} object that contains arrows.\n */\n public get object() { return this._obj; }\n\n /**\n * Create new ArrowIndicator\n * @param {ArrowIndicatorOption} [options={}] Options\n */\n constructor({\n color = 0xffffff,\n }: Partial<ArrowIndicatorOption> = {}) {\n const bodyGeometry = new THREE.CylinderBufferGeometry(0.1, 0.1, 1);\n const coneGeometry = new THREE.CylinderBufferGeometry(0, 0.5, 1, 30, 1);\n\n bodyGeometry.translate(0, 0.5, 0);\n coneGeometry.translate(0, 1.5, 0);\n\n const body = new THREE.Mesh(bodyGeometry, new THREE.MeshBasicMaterial({ color }));\n const cone = new THREE.Mesh(coneGeometry, new THREE.MeshBasicMaterial({ color }));\n const arrow = new THREE.Group();\n\n arrow.add(body);\n arrow.add(cone);\n\n this._arrows = [arrow];\n\n this._obj = new THREE.Group();\n this._obj.add(arrow);\n\n range(3).forEach(idx => {\n const copied = arrow.clone(true);\n copied.rotateZ(Math.PI / 2 * (idx + 1));\n this._obj.add(copied);\n this._arrows.push(copied);\n });\n\n this.hide();\n }\n\n /**\n * Show indicator\n */\n public show() {\n this._obj.visible = true;\n }\n\n /**\n * Hide indicator\n */\n public hide() {\n this._obj.visible = false;\n }\n\n /**\n * Change the center of the arrows to a given position\n * @param position Position to set as center of the arrows\n */\n public updatePosition(position: THREE.Vector3) {\n this._obj.position.copy(position);\n }\n\n /**\n * Update the arrow's offset from the center\n * @param offset Offset vector.\n */\n public updateOffset(offset: THREE.Vector3) {\n this._arrows.forEach((arrow, idx) => {\n const facingDirection = new THREE.Vector3(0, 1, 0).applyQuaternion(arrow.quaternion);\n const facingOffset = facingDirection.multiply(offset);\n\n arrow.position.copy(facingOffset);\n });\n }\n\n /**\n * Update arrow's scale\n * @param scale Scale vector\n */\n public updateScale(scale: number) {\n this._arrows.forEach(arrow => arrow.scale.setScalar(scale));\n }\n\n /**\n * Update arrow's rotation.\n * @param rotation Quaternion value to rotate arrows.\n */\n public updateRotation(rotation: THREE.Quaternion) {\n this._obj.quaternion.copy(rotation);\n }\n}\n\nexport default ArrowIndicator;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARControl from \"../common/ARControl\";\nimport ArrowIndicator, { ArrowIndicatorOption } from \"../ui/ArrowIndicator\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\n/**\n * Options for {@link ARTranslateControl}\n * @category Controls-AR\n * @interface\n * @property {ArrowIndicatorOption} arrow Options for {@link ArrowIndicator}\n */\nexport interface ARWallTranslateControlOption {\n arrow: Partial<ArrowIndicatorOption>;\n}\n\n/**\n * Model's translation(position) control for {@link ARWallControl}\n * @category Controls-AR\n */\nclass ARWallTranslateControl implements ARControl {\n public readonly position = new THREE.Vector3();\n public readonly wallPosition = new THREE.Vector3();\n public readonly hitRotation = new THREE.Quaternion();\n // Global Y guaranteed rotation matrix\n public readonly wallRotation = new THREE.Quaternion();\n private _arrowIndicator: ArrowIndicator;\n\n // Options\n\n // Internal states\n private _dragPlane = new THREE.Plane();\n private _enabled = true;\n private _active = false;\n private _initialPos = new THREE.Vector2();\n\n /**\n * Whether this control is enabled or not\n * @readonly\n */\n public get enabled() { return this._enabled; }\n\n /**\n * Create new instance of ARTranslateControl\n * @param {ARWallTranslateControlOption} [options={}] Options\n */\n constructor(options: Partial<ARWallTranslateControlOption> = {}) {\n this._arrowIndicator = new ArrowIndicator(options.arrow);\n }\n\n public initWallTransform({ hitPosition, hitRotation, modelPosition, wallRotation }: {\n hitPosition: THREE.Vector3,\n hitRotation: THREE.Quaternion,\n modelPosition: THREE.Vector3,\n wallRotation: THREE.Quaternion,\n }) {\n this.position.copy(modelPosition);\n this.hitRotation.copy(hitRotation);\n this.wallPosition.copy(hitPosition);\n this.wallRotation.copy(wallRotation);\n\n const wallNormal = new THREE.Vector3(0, 1, 0).applyQuaternion(wallRotation);\n\n this._dragPlane.set(wallNormal, -wallNormal.dot(modelPosition));\n }\n\n public init({ view3d }: XRRenderContext) {\n view3d.scene.add(this._arrowIndicator.object);\n }\n\n public destroy({ view3d }: XRContext) {\n view3d.scene.remove(this._arrowIndicator.object);\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n this.deactivate();\n }\n\n public activate({ model }: XRRenderContext, gesture: TOUCH.GESTURE) {\n if (!this._enabled) return;\n\n this._active = true;\n\n // Update arrows\n const arrowIndicator = this._arrowIndicator;\n const modelBbox = model.initialBbox;\n modelBbox.min.multiply(model.scene.scale);\n modelBbox.max.multiply(model.scene.scale);\n modelBbox.translate(model.scene.position);\n\n arrowIndicator.show();\n arrowIndicator.updatePosition(modelBbox.getCenter(new THREE.Vector3()));\n arrowIndicator.updateScale(model.size / 16);\n\n const arrowPlaneRotation = model.scene.quaternion.clone();\n\n arrowIndicator.updateRotation(arrowPlaneRotation);\n arrowIndicator.updateOffset(new THREE.Vector3().subVectors(modelBbox.max, modelBbox.min).multiplyScalar(0.5));\n }\n\n public deactivate() {\n this._active = false;\n this._arrowIndicator.hide();\n }\n\n public setInitialPos(coords: THREE.Vector2[]) {\n this._initialPos.copy(coords[0]);\n }\n\n public process({ view3d, model, frame, referenceSpace, xrCam }: XRRenderContext, { hitResults }: XRInputs) {\n if (!hitResults || hitResults.length !== 1 || !this._active) return;\n\n const dragPlane = this._dragPlane;\n\n const modelRoot = model.scene;\n const modelZOffset = -model.initialBbox.min.z * modelRoot.scale.z;\n\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n const hitResult = hitResults[0];\n const hitPose = hitResult.results[0] && hitResult.results[0].getPose(referenceSpace);\n\n const isWallHit = hitPose && hitPose.transform.matrix[5] < 0.25;\n\n if (!hitPose || !isWallHit) {\n // Use previous drag plane if no hit plane is found\n const targetRayPose = frame.getPose(hitResult.inputSource.targetRaySpace, view3d.renderer.threeRenderer.xr.getReferenceSpace());\n const fingerDir = new THREE.Vector3().copy(targetRayPose.transform.position).sub(camPos).normalize();\n\n const fingerRay = new THREE.Ray(camPos, fingerDir);\n const intersection = fingerRay.intersectPlane(dragPlane, new THREE.Vector3());\n\n if (intersection) {\n this.wallPosition.copy(intersection.clone().sub(dragPlane.normal.clone().multiplyScalar(modelZOffset)));\n this.position.copy(intersection);\n }\n return;\n }\n\n const hitMatrix = new THREE.Matrix4().fromArray(hitPose.transform.matrix);\n const hitOrientation = new THREE.Quaternion().copy(hitPose.transform.orientation);\n const hitPosition = new THREE.Vector3().setFromMatrixPosition(hitMatrix);\n const worldYAxis = new THREE.Vector3(0, 1, 0);\n /*\n * ^ wallU\n * |\n * ⨀---> wallV\n * wallNormal\n */\n const wallNormal = new THREE.Vector3(0, 1, 0).applyQuaternion(hitOrientation).normalize();\n const wallU = new THREE.Vector3().crossVectors(worldYAxis, wallNormal);\n const wallV = wallNormal.clone().applyAxisAngle(wallU, -Math.PI / 2);\n\n // Reconstruct wall matrix with prev Y(normal) direction as Z axis\n const wallMatrix = new THREE.Matrix4().makeBasis(wallU, wallV, wallNormal);\n const modelPosition = hitPosition.clone().add(wallNormal.clone().multiplyScalar(modelZOffset));\n\n // Update position\n this.position.copy(modelPosition);\n this.wallPosition.copy(hitPosition);\n\n // Update rotation if it differs more than 10deg\n const prevWallNormal = new THREE.Vector3(0, 1, 0).applyQuaternion(this.hitRotation).normalize();\n if (Math.acos(Math.abs(prevWallNormal.dot(wallNormal))) >= Math.PI / 18) {\n const prevWallRotation = this.wallRotation.clone();\n const wallRotation = new THREE.Quaternion().setFromRotationMatrix(wallMatrix);\n const rotationDiff = prevWallRotation.inverse().premultiply(wallRotation);\n\n modelRoot.quaternion.premultiply(rotationDiff);\n this.wallRotation.copy(wallRotation);\n this.hitRotation.copy(hitOrientation);\n\n this._arrowIndicator.updateRotation(modelRoot.quaternion);\n\n // Update drag plane\n dragPlane.set(wallNormal, -modelPosition.dot(wallNormal));\n }\n }\n\n public update({ model }: XRRenderContext, delta: number) {\n model.scene.position.copy(this.position);\n this._arrowIndicator.updatePosition(this.position);\n model.scene.updateMatrix();\n }\n}\n\nexport default ARWallTranslateControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARWallTranslateControl, { ARWallTranslateControlOption } from \"./ARWallTranslateControl\";\nimport ARScaleControl, { ARScaleControlOption } from \"../common/ARScaleControl\";\nimport DeadzoneChecker, { DeadzoneCheckerOption } from \"../common/DeadzoneChecker\";\nimport ARSwirlControl, { ARSwirlControlOption } from \"../common/ARSwirlControl\";\nimport FloorIndicator, { FloorIndicatorOption } from \"../ui/FloorIndicator\";\nimport * as XR from \"~/consts/xr\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\n\n/**\n * Options for the {@link ARWallControl}\n * @category Controls-AR\n * @interface\n * @property {ARSwirlControlOptions} rotate Options for {@link ARSwirlControl}\n * @property {ARTranslateControlOption} translate Options for {@link ARWallTranslateControl}\n * @property {ARScaleControlOption} scale Options for {@link ARScaleControl}\n * @property {FloorIndicatorOption} floorIndicator Options for {@link FloorIndicator}\n * @property {DeadzoneCheckerOption} deadzone Options for {@link DeadzoneChecker}\n */\nexport interface ARWallControlOption {\n rotate: Partial<ARSwirlControlOption>;\n translate: Partial<ARWallTranslateControlOption>;\n scale: Partial<ARScaleControlOption>;\n floorIndicator: Partial<FloorIndicatorOption>;\n deadzone: Partial<DeadzoneCheckerOption>;\n}\n\n/**\n * AR control for {@link WallARSession}.\n * @category Controls-AR\n */\nclass ARWallControl {\n private _enabled = true;\n private _initialized = false;\n private _modelHit = false;\n private _hitTestSource: any = null;\n private _deadzoneChecker: DeadzoneChecker;\n private _rotateControl: ARSwirlControl;\n private _translateControl: ARWallTranslateControl;\n private _scaleControl: ARScaleControl;\n private _floorIndicator: FloorIndicator;\n\n /**\n * Return whether this control is enabled or not\n */\n public get enabled() { return this._enabled; }\n /**\n * {@link ARSwirlControlOptions} in this control\n */\n public get rotate() { return this._rotateControl; }\n /**\n * {@link ARTranslateControl} in this control\n */\n public get translate() { return this._translateControl; }\n /**\n * {@link ARScaleControl} in this control\n */\n public get scale() { return this._scaleControl; }\n public get controls() {\n return [this._rotateControl, this._translateControl, this._scaleControl];\n }\n\n /**\n * Create new instance of ARControl\n * @param {ARWallControlOption} options Options\n */\n constructor(options: Partial<ARWallControlOption> = {}) {\n // TODO: bind options\n this._rotateControl = new ARSwirlControl({\n ...options.rotate,\n showIndicator: false,\n });\n this._translateControl = new ARWallTranslateControl(options.translate);\n this._scaleControl = new ARScaleControl(options.scale);\n this._floorIndicator = new FloorIndicator(options.floorIndicator);\n this._deadzoneChecker = new DeadzoneChecker(options.deadzone);\n }\n\n public init(ctx: XRRenderContext, initialTransform: {\n hitPosition: THREE.Vector3,\n hitRotation: THREE.Quaternion,\n wallRotation: THREE.Quaternion,\n modelPosition: THREE.Vector3,\n }) {\n const { session, view3d, size } = ctx;\n\n this.controls.forEach(control => control.init(ctx));\n this._translateControl.initWallTransform(initialTransform);\n this._deadzoneChecker.setAspect(size.height / size.width);\n\n view3d.scene.add(this._floorIndicator.mesh);\n\n this._initialized = true;\n\n session.requestHitTestSourceForTransientInput({ profile: XR.INPUT_PROFILE.TOUCH })\n .then((transientHitTestSource: any) => {\n this._hitTestSource = transientHitTestSource;\n });\n }\n\n /**\n * Destroy this control and deactivate it\n * @param view3d Instance of the {@link View3D}\n */\n public destroy(ctx: XRContext) {\n if (!this._initialized) return;\n\n if (this._hitTestSource) {\n this._hitTestSource.cancel();\n this._hitTestSource = null;\n }\n\n ctx.view3d.scene.remove(this._floorIndicator.mesh);\n\n this.deactivate();\n this.controls.forEach(control => control.destroy(ctx));\n\n this._initialized = false;\n }\n\n public deactivate() {\n this._modelHit = false;\n this._deadzoneChecker.cleanup();\n this.controls.forEach(control => control.deactivate());\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n this.deactivate();\n }\n\n public update(ctx: XRRenderContext) {\n const { view3d, session, frame } = ctx;\n const hitTestSource = this._hitTestSource;\n\n if (!hitTestSource || !view3d.model) return;\n\n const deadzoneChecker = this._deadzoneChecker;\n const inputSources = session.inputSources;\n const hitResults = frame.getHitTestResultsForTransientInput(hitTestSource);\n const coords = this._hitResultToVector(hitResults);\n const xrInputs = {\n coords,\n inputSources,\n hitResults,\n };\n\n if (deadzoneChecker.inDeadzone) {\n this._checkDeadzone(ctx, xrInputs);\n } else {\n this._processInput(ctx, xrInputs);\n }\n this._updateControls(ctx);\n }\n\n public onSelectStart = (ctx: XRRenderContext) => {\n const { view3d, session, frame, referenceSpace, xrCam } = ctx;\n const hitTestSource = this._hitTestSource;\n\n if (!hitTestSource || !this._enabled) return;\n\n const deadzoneChecker = this._deadzoneChecker;\n const rotateControl = this._rotateControl;\n const translateControl = this._translateControl;\n const scaleControl = this._scaleControl;\n\n // Update deadzone testing gestures\n if (rotateControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.ONE_FINGER);\n }\n if (translateControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.ONE_FINGER);\n }\n if (scaleControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.PINCH);\n }\n\n const hitResults = frame.getHitTestResultsForTransientInput(hitTestSource);\n const coords = this._hitResultToVector(hitResults);\n deadzoneChecker.applyScreenAspect(coords);\n deadzoneChecker.setFirstInput(coords);\n\n if (coords.length === 1) {\n // Check finger is on the model\n const modelBbox = view3d.model!.bbox;\n\n const targetRayPose = frame.getPose(session.inputSources[0].targetRaySpace, referenceSpace);\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n\n const fingerDir = new THREE.Vector3().copy(targetRayPose.transform.position).sub(camPos).normalize();\n const fingerRay = new THREE.Ray(camPos, fingerDir);\n const intersection = fingerRay.intersectBox(modelBbox, new THREE.Vector3());\n\n if (intersection) {\n // Touch point intersected with model\n this._modelHit = true;\n }\n }\n\n this._floorIndicator.show();\n }\n\n public onSelectEnd = () => {\n this.deactivate();\n this._floorIndicator.fadeout();\n }\n\n private _checkDeadzone(ctx: XRRenderContext, { coords }: XRInputs) {\n const { model } = ctx;\n const gesture = this._deadzoneChecker.check(coords.map(coord => coord.clone()));\n const rotateControl = this._rotateControl;\n const translateControl = this._translateControl;\n const scaleControl = this._scaleControl;\n\n if (gesture === TOUCH.GESTURE.NONE) return;\n\n switch (gesture) {\n case TOUCH.GESTURE.ONE_FINGER_HORIZONTAL:\n case TOUCH.GESTURE.ONE_FINGER_VERTICAL:\n if (this._modelHit) {\n translateControl.activate(ctx, gesture);\n translateControl.setInitialPos(coords);\n } else {\n rotateControl.activate(ctx, gesture);\n rotateControl.updateAxis(new THREE.Vector3(0, 1, 0).applyQuaternion(translateControl.hitRotation));\n rotateControl.updateRotation(model.scene.quaternion);\n rotateControl.setInitialPos(coords);\n }\n break;\n case TOUCH.GESTURE.PINCH:\n scaleControl.activate(ctx, gesture);\n scaleControl.setInitialPos(coords);\n break;\n }\n }\n\n private _processInput(ctx: XRRenderContext, inputs: XRInputs) {\n this.controls.forEach(control => control.process(ctx, inputs));\n }\n\n private _updateControls(ctx: XRRenderContext) {\n const { view3d, model, delta } = ctx;\n const deltaMilisec = delta * 1000;\n\n this.controls.forEach(control => control.update(ctx, deltaMilisec));\n model.scene.updateMatrix();\n\n const translateControl = this._translateControl;\n const floorPosition = translateControl.wallPosition;\n view3d.scene.update(model, {\n floorPosition,\n floorRotation: translateControl.hitRotation,\n });\n\n // Get a scaled bbox, which only has scale applied on it.\n const scaleControl = this._scaleControl;\n const scaledBbox = model.initialBbox;\n scaledBbox.min.multiply(scaleControl.scale);\n scaledBbox.max.multiply(scaleControl.scale);\n\n const floorIndicator = this._floorIndicator;\n const boundingSphere = scaledBbox.getBoundingSphere(new THREE.Sphere());\n const rotX90 = new THREE.Quaternion().setFromEuler(new THREE.Euler(Math.PI / 2, 0, 0));\n const floorRotation = model.scene.quaternion.clone().multiply(rotX90);\n\n floorIndicator.update({\n delta: deltaMilisec,\n scale: boundingSphere.radius,\n position: floorPosition,\n rotation: floorRotation,\n });\n }\n\n private _hitResultToVector(hitResults: any[]) {\n return hitResults.map(input => {\n return new THREE.Vector2().set(\n input.inputSource.gamepad.axes[0],\n -input.inputSource.gamepad.axes[1],\n );\n });\n }\n}\n\nexport default ARWallControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport WebARSession, { WebARSessionOption } from \"./WebARSession\";\nimport HitTest from \"./features/HitTest\";\nimport ARWallControl, { ARWallControlOption } from \"~/controls/ar/wall/ARWallControl\";\nimport Animation from \"~/core/Animation\";\nimport { merge } from \"~/utils\";\nimport * as XR from \"~/consts/xr\";\nimport { XRRenderContext, XRContext } from \"~/types/internal\";\n\n/**\n * Options for {@link WallARSession}.\n * This type is intersection of {@link WebARSessionOption} and {@link ARWallControlOption}\n * @category XR\n * @interface\n * @extends WebARSessionOption\n * @extends ARWallControlOption\n */\ninterface WallARSessionOption extends WebARSessionOption, ARWallControlOption {}\n\n/**\n * AR session which places model on the wall\n * @category XR\n * @fires WebARSession#start\n * @fires WebARSession#end\n * @fires WebARSession#canPlace\n * @fires WebARSession#modelPlaced\n */\nclass WallARSession extends WebARSession {\n private _options: Partial<WallARSessionOption>;\n private _control: ARWallControl | null;\n private _renderContext: XRRenderContext | null;\n private _modelPlaced: boolean;\n private _hitTest: HitTest;\n\n /**\n * {@link ARWallControl} instance of this session\n * @type ARWallControl | null\n */\n public get control() { return this._control; }\n\n /**\n * Create new instance of WallARSession\n * @param {WallARSessionOption} [options={}] Options\n */\n constructor(options: Partial<WallARSessionOption> = {}) {\n super(options);\n\n this._control = null;\n this._renderContext = null;\n this._modelPlaced = false;\n\n this._hitTest = new HitTest();\n\n this._features = merge(this._features, this._hitTest.features);\n this._options = options;\n }\n\n public onStart = (ctx: XRContext) => {\n const { view3d, session } = ctx;\n\n super.onStart(ctx);\n\n this._control = new ARWallControl(this._options);\n\n view3d.scene.hide();\n this._hitTest.init(session);\n }\n\n public onEnd = (ctx: XRContext) => {\n const { view3d, session } = ctx;\n\n super.onEnd(ctx);\n\n this._renderContext = null;\n this._modelPlaced = false;\n\n session.removeEventListener(XR.EVENTS.SELECT_START, this._onSelectStart);\n session.removeEventListener(XR.EVENTS.SELECT_END, this._onSelectEnd);\n\n this._hitTest.destroy();\n this._control!.destroy(ctx);\n this._control = null;\n\n view3d.scene.show();\n }\n\n protected _beforeRender = (ctx: XRRenderContext) => {\n this._renderContext = ctx;\n if (!this._modelPlaced) {\n this._initModelPosition(ctx);\n } else {\n this._control!.update(ctx);\n }\n }\n\n private _initModelPosition(ctx: XRRenderContext) {\n const {view3d, frame, session} = ctx;\n const model = view3d.model;\n const hitTest = this._hitTest;\n\n // Make sure the model is loaded\n if (!hitTest.ready || !model) return;\n\n const control = this._control!;\n const referenceSpace = view3d.renderer.threeRenderer.xr.getReferenceSpace();\n const hitTestResults = hitTest.getResults(frame);\n\n if (hitTestResults.length <= 0) return;\n\n const hit = hitTestResults[0];\n const hitPose = hit.getPose(referenceSpace);\n const hitMatrix = new THREE.Matrix4().fromArray(hitPose.transform.matrix);\n\n // If transformed coord space's y axis is facing up or down, don't use it.\n if (hitMatrix.elements[5] >= 0.25 || hitMatrix.elements[5] <= -0.25) return;\n\n const modelRoot = model.scene;\n const hitRotation = new THREE.Quaternion().copy(hitPose.transform.orientation);\n const hitPosition = new THREE.Vector3().setFromMatrixPosition(hitMatrix);\n const modelZOffset = -model.initialBbox.min.z * modelRoot.scale.z;\n const modelPosition = hitPosition.clone().setZ(hitPosition.z + modelZOffset);\n\n const worldYAxis = new THREE.Vector3(0, 1, 0);\n /*\n * ^ wallU\n * |\n * ⨀---> wallV\n * wallNormal\n */\n const wallNormal = new THREE.Vector3(0, 1, 0).applyQuaternion(hitRotation).normalize();\n const wallU = new THREE.Vector3().crossVectors(worldYAxis, wallNormal);\n const wallV = wallNormal.clone().applyAxisAngle(wallU, -Math.PI / 2);\n\n // Reconstruct wall matrix with prev Y(normal) direction as Z axis\n const wallMatrix = new THREE.Matrix4().makeBasis(wallU, wallV, wallNormal);\n const wallRotation = new THREE.Quaternion().setFromRotationMatrix(wallMatrix);\n const modelRotation = model.scene.quaternion.clone()\n .premultiply(wallRotation);\n\n // Update rotation & position\n modelRoot.quaternion.copy(modelRotation);\n modelRoot.position.copy(modelPosition);\n modelRoot.updateMatrix();\n\n view3d.scene.update(model);\n view3d.scene.show();\n\n // Don't need it\n hitTest.destroy();\n\n session.addEventListener(XR.EVENTS.SELECT_START, this._onSelectStart);\n session.addEventListener(XR.EVENTS.SELECT_END, this._onSelectEnd);\n\n this._domOverlay?.hideLoading();\n this._modelPlaced = true;\n\n // Show scale up animation\n const originalModelScale = model.scene.scale.clone();\n const scaleUpAnimation = new Animation({ context: session });\n\n scaleUpAnimation.on(\"progress\", evt => {\n const newScale = originalModelScale.clone().multiplyScalar(evt.easedProgress);\n model.scene.scale.copy(newScale);\n });\n scaleUpAnimation.on(\"finish\", () => {\n model.scene.scale.copy(originalModelScale);\n control.init(ctx, {\n hitPosition,\n hitRotation,\n wallRotation,\n modelPosition,\n });\n });\n scaleUpAnimation.start();\n }\n\n private _onSelectStart = (e) => {\n this._control!.onSelectStart({\n ...this._renderContext!,\n frame: e.frame,\n });\n }\n\n private _onSelectEnd = () => {\n this._control!.onSelectEnd();\n }\n}\n\nexport default WallARSession;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARControl from \"./ARControl\";\nimport Motion from \"~/controls/Motion\";\nimport RotationIndicator from \"../ui/RotationIndicator\";\nimport * as DEFAULT from \"~/consts/default\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\nimport * as TOUCH from \"~/consts/touch\";\n\nenum STATE {\n WAITING,\n ROTATE_HORIZONTAL,\n ROTATE_VERTICAL,\n}\n\n/**\n * Options for {@link ARSwipeControl}\n * @category Controls-AR\n * @interface\n * @property {number} [scale=1] Scale(speed) factor of the rotation\n */\nexport interface ARSwipeControlOption {\n scale: number;\n}\n\n/**\n * Two finger swipe control\n * @category Controls-AR\n */\nclass ARSwipeControl implements ARControl {\n /**\n * Current rotation value\n */\n public readonly rotation = new THREE.Quaternion();\n\n // Options\n private _userScale: number;\n\n // Internal States\n private _state = STATE.WAITING;\n private _enabled = true;\n private _active = false;\n\n private _prevPos = new THREE.Vector2();\n private _fromQuat = new THREE.Quaternion();\n private _toQuat = new THREE.Quaternion();\n\n private _horizontalAxis = new THREE.Vector3();\n private _verticalAxis = new THREE.Vector3();\n\n private _motion: Motion;\n private _rotationIndicator: RotationIndicator;\n\n /**\n * Whether this control is enabled or not.\n * @readonly\n */\n public get enabled() { return this._enabled; }\n /**\n * Scale(speed) factor of this control.\n */\n public get scale() { return this._userScale; }\n public get horizontalAxis() { return this._horizontalAxis; }\n public get verticalAxis() { return this._verticalAxis; }\n\n public set scale(val: number) { this._userScale = val; }\n\n /**\n * Create new ARSwipeControl\n * @param {ARSwipeControlOption} [options={}] Options\n */\n constructor({\n scale = 1,\n }: Partial<{\n scale: number,\n }> = {}) {\n this._motion = new Motion({ range: DEFAULT.INFINITE_RANGE });\n this._rotationIndicator = new RotationIndicator();\n this._userScale = scale;\n }\n\n public init({ view3d }: XRRenderContext) {\n const initialRotation = view3d.model!.scene.quaternion;\n this.updateRotation(initialRotation);\n view3d.scene.add(this._rotationIndicator.object);\n }\n\n public destroy({ view3d }: XRContext) {\n view3d.scene.remove(this._rotationIndicator.object);\n }\n\n public updateRotation(rotation: THREE.Quaternion) {\n this.rotation.copy(rotation);\n this._fromQuat.copy(rotation);\n this._toQuat.copy(rotation);\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n }\n\n public updateAxis(horizontal: THREE.Vector3, vertical: THREE.Vector3) {\n this._horizontalAxis.copy(horizontal);\n this._verticalAxis.copy(vertical);\n }\n\n public activate({ view3d }: XRRenderContext, gesture: TOUCH.GESTURE) {\n if (!this._enabled) return;\n\n const model = view3d.model!;\n const rotationIndicator = this._rotationIndicator;\n\n this._active = true;\n rotationIndicator.show();\n rotationIndicator.updatePosition(model.bbox.getCenter(new THREE.Vector3()));\n rotationIndicator.updateScale(model.size / 2);\n\n if (gesture === TOUCH.GESTURE.TWO_FINGER_HORIZONTAL) {\n rotationIndicator.updateRotation(\n model.scene.quaternion.clone()\n .multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(-Math.PI / 2, 0, 0))),\n );\n this._state = STATE.ROTATE_HORIZONTAL;\n } else if (gesture === TOUCH.GESTURE.TWO_FINGER_VERTICAL) {\n rotationIndicator.updateRotation(\n model.scene.quaternion.clone()\n .multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(0, Math.PI / 2, 0))),\n );\n this._state = STATE.ROTATE_VERTICAL;\n }\n }\n\n public deactivate() {\n this._active = false;\n this._rotationIndicator.hide();\n this._state = STATE.WAITING;\n }\n\n public setInitialPos(coords: THREE.Vector2[]) {\n if (coords.length < 2) return;\n this._prevPos.set(\n (coords[0].x + coords[1].x) / 2,\n (coords[0].y + coords[1].y) / 2,\n );\n }\n\n public process(ctx: XRRenderContext, { coords }: XRInputs) {\n if (!this._active || coords.length !== 2) return;\n\n const state = this._state;\n const prevPos = this._prevPos;\n const motion = this._motion;\n const scale = this._userScale;\n\n const middlePos = new THREE.Vector2(\n (coords[0].x + coords[1].x) / 2,\n (coords[0].y + coords[1].y) / 2,\n );\n const posDiff = new THREE.Vector2().subVectors(prevPos, middlePos);\n\n const rotationAxis = state === STATE.ROTATE_HORIZONTAL\n ? this._horizontalAxis\n : this._verticalAxis;\n const rotationAngle = state === STATE.ROTATE_HORIZONTAL\n ? posDiff.x * scale\n : -posDiff.y * scale;\n\n const rotation = new THREE.Quaternion().setFromAxisAngle(rotationAxis, rotationAngle);\n const interpolated = this._getInterpolatedQuaternion();\n\n this._fromQuat.copy(interpolated);\n this._toQuat.premultiply(rotation);\n\n motion.reset(0);\n motion.setEndDelta(1);\n\n prevPos.copy(middlePos);\n }\n\n public update({ model }: XRRenderContext, deltaTime: number) {\n const motion = this._motion;\n motion.update(deltaTime);\n\n const interpolated = this._getInterpolatedQuaternion();\n\n this.rotation.copy(interpolated);\n model.scene.quaternion.copy(this.rotation);\n }\n\n private _getInterpolatedQuaternion(): THREE.Quaternion {\n const motion = this._motion;\n const toEuler = this._toQuat;\n const fromEuler = this._fromQuat;\n\n const progress = motion.val;\n\n return new THREE.Quaternion().copy(fromEuler).slerp(toEuler, progress);\n }\n}\n\nexport default ARSwipeControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARSwirlControl, { ARSwirlControlOption } from \"../common/ARSwirlControl\";\nimport ARSwipeControl, { ARSwipeControlOption } from \"../common/ARSwipeControl\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\nimport * as TOUCH from \"~/consts/touch\";\nimport ARControl from \"../common/ARControl\";\n\n/**\n * Options for {@link ARHoverRotateControl}\n * @category Controls-AR\n * @interface\n * @property {ARSwirlControlOption} swirl Options for {@link ARSwirlControl}\n * @property {ARSwipeControlOption} swipe Options for {@link ARSwipeControl}\n */\nexport interface ARHoverRotateControlOption {\n swirl: Partial<ARSwirlControlOption>;\n swipe: Partial<ARSwipeControlOption>;\n}\n\n/**\n * Model's yaw(local y-axis rotation) controller which works on AR(WebXR) mode.\n * @category Controls-AR\n */\nclass ARHoverRotateControl implements ARControl {\n /**\n * Current rotation value\n */\n public readonly rotation = new THREE.Quaternion();\n\n // Internal States\n private _zRotationControl: ARSwirlControl;\n private _xyRotationControl: ARSwipeControl;\n private _activatedControl: ARSwirlControl | ARSwipeControl | null;\n\n /**\n * Whether this control is enabled or not.\n * This returns true when either one finger control or two finger control is enabled.\n * @readonly\n */\n public get enabled() { return this._zRotationControl.enabled || this._xyRotationControl.enabled; }\n\n /**\n * {@link ARSwirlControl} of this control.\n */\n public get swirl() { return this._zRotationControl; }\n /**\n * {@link ARSwipeControl} of this control.\n */\n public get swipe() { return this._xyRotationControl; }\n\n /**\n * Create new instance of ARRotateControl\n * @param {ARHoverRotateControlOption} options Options\n */\n constructor(options: Partial<ARHoverRotateControlOption> = {}) {\n this._zRotationControl = new ARSwirlControl(options.swirl);\n this._xyRotationControl = new ARSwipeControl(options.swipe);\n this._activatedControl = null;\n }\n\n public init(ctx: XRRenderContext) {\n const initialRotation = ctx.view3d.model!.scene.quaternion;\n\n this.rotation.copy(initialRotation);\n this._zRotationControl.init(ctx);\n this._xyRotationControl.init(ctx);\n }\n\n public destroy(ctx: XRContext) {\n this._zRotationControl.destroy(ctx);\n this._xyRotationControl.destroy(ctx);\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._zRotationControl.enable();\n this._xyRotationControl.enable();\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._zRotationControl.disable();\n this._xyRotationControl.disable();\n }\n\n public activate(ctx: XRRenderContext, gesture: TOUCH.GESTURE) {\n const zRotationControl = this._zRotationControl;\n const xyRotationControl = this._xyRotationControl;\n\n if (gesture & TOUCH.GESTURE.ONE_FINGER) {\n zRotationControl.activate(ctx, gesture);\n zRotationControl.updateRotation(this.rotation);\n this._activatedControl = zRotationControl;\n } else if (gesture & TOUCH.GESTURE.TWO_FINGER) {\n xyRotationControl.activate(ctx, gesture);\n xyRotationControl.updateRotation(this.rotation);\n this._activatedControl = xyRotationControl;\n }\n }\n\n public deactivate() {\n this._zRotationControl.deactivate();\n this._xyRotationControl.deactivate();\n }\n\n public process(ctx: XRRenderContext, inputs: XRInputs) {\n this._zRotationControl.process(ctx, inputs);\n this._xyRotationControl.process(ctx, inputs);\n }\n\n public setInitialPos(coords: THREE.Vector2[]) {\n this._zRotationControl.setInitialPos(coords);\n this._xyRotationControl.setInitialPos(coords);\n }\n\n public update(ctx: XRRenderContext, deltaTime: number) {\n if (this._activatedControl) {\n this._activatedControl.update(ctx, deltaTime);\n this.rotation.copy(this._activatedControl.rotation);\n }\n }\n\n public updateRotateAxis({ view3d, xrCam }: XRRenderContext) {\n const model = view3d.model!;\n const zRotateAxis = new THREE.Vector3();\n const horizontalRotateAxis = new THREE.Vector3();\n const verticalRotateAxis = new THREE.Vector3();\n\n const cameraRotation = new THREE.Quaternion().setFromRotationMatrix(xrCam.matrixWorld);\n\n const cameraBasis = [\n new THREE.Vector3(1, 0, 0),\n new THREE.Vector3(0, 1, 0),\n new THREE.Vector3(0, 0, 1),\n ].map(axis => axis.applyQuaternion(cameraRotation).normalize());\n\n const modelBasis = [\n new THREE.Vector3(1, 0, 0),\n new THREE.Vector3(0, 1, 0),\n new THREE.Vector3(0, 0, 1),\n ].map(axis => axis.applyQuaternion(model.scene.quaternion));\n\n // Always use z-rotation\n zRotateAxis.copy(modelBasis[2]);\n // Use more appropriate one between x/y axis\n horizontalRotateAxis.copy(modelBasis[1]);\n verticalRotateAxis.copy(modelBasis[0]);\n\n // If it's facing other direction, negate it to face correct direction\n if (zRotateAxis.dot(cameraBasis[2]) < 0) {\n zRotateAxis.negate();\n }\n if (horizontalRotateAxis.dot(cameraBasis[1]) > 0) {\n horizontalRotateAxis.negate();\n }\n if (verticalRotateAxis.dot(cameraBasis[0]) > 0) {\n verticalRotateAxis.negate();\n }\n\n this._zRotationControl.updateAxis(zRotateAxis);\n this._xyRotationControl.updateAxis(horizontalRotateAxis, verticalRotateAxis);\n }\n}\n\nexport default ARHoverRotateControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARControl from \"../common/ARControl\";\nimport ArrowIndicator, { ArrowIndicatorOption } from \"../ui/ArrowIndicator\";\nimport { getPrimaryAxisIndex } from \"~/utils\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext, XRInputs } from \"~/types/internal\";\n\n/**\n * Options for {@link ARHoverTranslateControl}\n * @category Controls-AR\n * @interface\n * @property {ArrowIndicatorOption} arrow Options for {@link ArrowIndicator}\n */\nexport interface ARHoverTranslateControlOption {\n arrow: ArrowIndicatorOption;\n}\n\n/**\n * Model's translation(position) control for {@link ARHoverControl}\n * @category Controls-AR\n */\nclass ARHoverTranslateControl implements ARControl {\n // Internal states\n private _position = new THREE.Vector3();\n private _dragPlane = new THREE.Plane();\n private _enabled = true;\n private _active = false;\n private _initialPos = new THREE.Vector2();\n private _arrowIndicator: ArrowIndicator;\n\n public get enabled() { return this._enabled; }\n public get position() { return this._position.clone(); }\n\n /**\n * Create new instance of ARTranslateControl\n * @param {ARHoverTranslateControlOption} [options={}] Options\n */\n constructor(options: Partial<ARHoverTranslateControlOption> = {}) {\n this._arrowIndicator = new ArrowIndicator(options.arrow);\n }\n\n public init({ view3d }: XRRenderContext) {\n this._position.copy(view3d.model!.scene.position);\n view3d.scene.add(this._arrowIndicator.object);\n }\n\n public destroy({ view3d }: XRContext) {\n view3d.scene.remove(this._arrowIndicator.object);\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n this.deactivate();\n }\n\n public activate({ model, xrCam }: XRRenderContext, gesture: TOUCH.GESTURE) {\n if (!this._enabled) return;\n\n const modelPos = model.scene.position;\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n\n const modelBasis = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()];\n model.scene.matrixWorld.extractBasis(modelBasis[0], modelBasis[1], modelBasis[2]);\n modelBasis.forEach(axes => axes.normalize());\n\n const camToModelDir = new THREE.Vector3().subVectors(modelPos, camPos).clone().normalize();\n const primaryAxisIdx = getPrimaryAxisIndex(modelBasis, camToModelDir);\n const primaryAxis = modelBasis[primaryAxisIdx];\n\n // If axes is facing the opposite of camera, negate it\n if (primaryAxis.dot(camToModelDir) < 0) {\n primaryAxis.negate();\n }\n\n const originToDragPlane = new THREE.Plane(primaryAxis, 0).distanceToPoint(modelPos);\n this._dragPlane.set(primaryAxis, -originToDragPlane);\n\n this._active = true;\n\n // Update arrows\n const arrowIndicator = this._arrowIndicator;\n const modelBbox = model.initialBbox;\n modelBbox.min.multiply(model.scene.scale);\n modelBbox.max.multiply(model.scene.scale);\n modelBbox.translate(modelPos);\n\n arrowIndicator.show();\n arrowIndicator.updatePosition(modelBbox.getCenter(new THREE.Vector3()));\n arrowIndicator.updateScale(model.size / 16);\n\n const arrowPlaneRotation = model.scene.quaternion.clone();\n if (primaryAxisIdx === 0) {\n arrowPlaneRotation.multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(0, Math.PI / 2, 0)));\n } else if (primaryAxisIdx === 1) {\n arrowPlaneRotation.multiply(new THREE.Quaternion().setFromEuler(new THREE.Euler(Math.PI / 2, 0, 0)));\n }\n\n arrowIndicator.updateRotation(arrowPlaneRotation);\n arrowIndicator.updateOffset(new THREE.Vector3().subVectors(modelBbox.max, modelBbox.min).multiplyScalar(0.5));\n }\n\n public deactivate() {\n this._active = false;\n this._arrowIndicator.hide();\n }\n\n public setInitialPos(coords: THREE.Vector2[]) {\n this._initialPos.copy(coords[0]);\n }\n\n public process({ view3d, frame, referenceSpace, xrCam }: XRRenderContext, { inputSources }: XRInputs) {\n if (inputSources.length !== 1 || !this._active) return;\n\n const inputSource = inputSources[0];\n const dragPlane = this._dragPlane;\n\n const targetRayPose = frame.getPose(inputSource.targetRaySpace, referenceSpace);\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n\n const fingerDir = new THREE.Vector3().copy(targetRayPose.transform.position).sub(camPos).normalize();\n const fingerRay = new THREE.Ray(camPos, fingerDir);\n const intersection = fingerRay.intersectPlane(dragPlane, new THREE.Vector3());\n\n if (intersection) {\n this._position.copy(intersection);\n\n // Update arrow position. As position is not a center of model, we should apply offset from it\n const model = view3d.model!;\n const centerYOffset = model.initialBbox.getCenter(new THREE.Vector3()).multiply(model.scene.scale).y;\n const modelLocalYDir = new THREE.Vector3().applyQuaternion(model.scene.quaternion);\n const newCenter = intersection.add(modelLocalYDir.multiplyScalar(centerYOffset));\n\n this._arrowIndicator.updatePosition(newCenter);\n }\n }\n\n public update({ model }: XRRenderContext, delta: number) {\n model.scene.position.copy(this._position);\n }\n}\n\nexport default ARHoverTranslateControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport ARHoverRotateControl, { ARHoverRotateControlOption } from \"./ARHoverRotateControl\";\nimport ARHoverTranslateControl, { ARHoverTranslateControlOption } from \"./ARHoverTranslateControl\";\nimport ARScaleControl, { ARScaleControlOption } from \"../common/ARScaleControl\";\nimport DeadzoneChecker from \"../common/DeadzoneChecker\";\nimport * as TOUCH from \"~/consts/touch\";\nimport { XRRenderContext, XRContext } from \"~/types/internal\";\n\n/**\n * Options for the {@link ARHoverControl}\n * @category Controls-AR\n * @interface\n * @property {ARHoverRotateControlOption} rotate Options for {@link ARHoverRotateControl}\n * @property {ARHoverTranslateControlOption} translate Options for {@link ARHoverTranslateControl}\n * @property {ARScaleControlOption} scale Options for {@link ARScaleControl}\n * @property {DeadzoneCheckerOption} deadzone Options for {@link DeadzoneChecker}\n */\nexport interface ARHoverControlOption {\n rotate: Partial<ARHoverRotateControlOption>;\n translate: Partial<ARHoverTranslateControlOption>;\n scale: Partial<ARScaleControlOption>;\n}\n\n/**\n * AR control for {@link HoverARSession}\n * @category Controls-AR\n */\nclass ARHoverControl {\n private _enabled = true;\n private _initialized = false;\n private _modelHit = false;\n private _deadzoneChecker: DeadzoneChecker;\n private _rotateControl: ARHoverRotateControl;\n private _translateControl: ARHoverTranslateControl;\n private _scaleControl: ARScaleControl;\n\n /**\n * Return whether this control is enabled or not\n */\n public get enabled() { return this._enabled; }\n /**\n * {@link ARHoverRotateControlOption} in this control\n */\n public get rotate() { return this._rotateControl; }\n /**\n * {@link ARHoverTranslateControlOption} in this control\n */\n public get translate() { return this._translateControl; }\n /**\n * {@link ARScaleControl} in this control\n */\n public get scale() { return this._scaleControl; }\n public get controls() {\n return [this._rotateControl, this._translateControl, this._scaleControl];\n }\n\n /**\n * Create new instance of ARHoverControl\n * @param {ARHoverControlOption} options Options\n */\n constructor(options: Partial<ARHoverControlOption> = {}) {\n this._rotateControl = new ARHoverRotateControl(options.rotate);\n this._translateControl = new ARHoverTranslateControl(options.translate);\n this._scaleControl = new ARScaleControl(options.scale);\n this._deadzoneChecker = new DeadzoneChecker();\n }\n\n public init(ctx: XRRenderContext) {\n const { size } = ctx;\n\n this.controls.forEach(control => control.init(ctx));\n this._deadzoneChecker.setAspect(size.height / size.width);\n\n this._initialized = true;\n }\n\n /**\n * Destroy this control and deactivate it\n * @param view3d Instance of the {@link View3D}\n */\n public destroy(ctx: XRContext) {\n if (!this._initialized) return;\n\n this.deactivate();\n this.controls.forEach(control => control.destroy(ctx));\n\n this._initialized = false;\n }\n\n public deactivate() {\n this._modelHit = false;\n this._deadzoneChecker.cleanup();\n this.controls.forEach(control => control.deactivate());\n }\n\n /**\n * Enable this control\n */\n public enable() {\n this._enabled = true;\n }\n\n /**\n * Disable this control\n */\n public disable() {\n this._enabled = false;\n this.deactivate();\n }\n\n public update(ctx: XRRenderContext) {\n const { session } = ctx;\n\n if (!this._initialized) return;\n\n const deadzoneChecker = this._deadzoneChecker;\n const inputSources = session.inputSources;\n\n if (deadzoneChecker.inDeadzone) {\n this._checkDeadzone(ctx, inputSources);\n } else {\n this._processInput(ctx, inputSources);\n }\n this._updateControls(ctx);\n }\n\n public onSelectStart = (ctx: XRRenderContext) => {\n const { view3d, session, frame, referenceSpace, xrCam } = ctx;\n if (!this._enabled) return;\n\n const deadzoneChecker = this._deadzoneChecker;\n const rotateControl = this._rotateControl;\n const translateControl = this._translateControl;\n const scaleControl = this._scaleControl;\n\n // Update rotation axis\n if (rotateControl.enabled) {\n rotateControl.updateRotateAxis(ctx);\n }\n\n // Update deadzone testing gestures\n if (rotateControl.swirl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.ONE_FINGER);\n }\n if (rotateControl.swipe.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.TWO_FINGER);\n }\n if (translateControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.ONE_FINGER);\n }\n if (scaleControl.enabled) {\n deadzoneChecker.addTestingGestures(TOUCH.GESTURE.PINCH);\n }\n\n const coords = this._inputSourceToVector(session.inputSources);\n deadzoneChecker.applyScreenAspect(coords);\n deadzoneChecker.setFirstInput(coords);\n\n if (coords.length === 1) {\n // Check finger is on the model\n const modelBbox = view3d.model!.bbox;\n\n const targetRayPose = frame.getPose(session.inputSources[0].targetRaySpace, referenceSpace);\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n\n const fingerDir = new THREE.Vector3().copy(targetRayPose.transform.position).sub(camPos).normalize();\n const fingerRay = new THREE.Ray(camPos, fingerDir);\n const intersection = fingerRay.intersectBox(modelBbox, new THREE.Vector3());\n\n if (intersection) {\n // Touch point intersected with model\n this._modelHit = true;\n }\n }\n }\n\n public onSelectEnd = () => {\n this.deactivate();\n }\n\n private _checkDeadzone(ctx: XRRenderContext, inputSources: any[]) {\n const coords = this._inputSourceToVector(inputSources);\n const gesture = this._deadzoneChecker.check(coords.map(coord => coord.clone()));\n const rotateControl = this._rotateControl;\n const translateControl = this._translateControl;\n const scaleControl = this._scaleControl;\n\n if (gesture === TOUCH.GESTURE.NONE) return;\n\n switch (gesture) {\n case TOUCH.GESTURE.ONE_FINGER_HORIZONTAL:\n case TOUCH.GESTURE.ONE_FINGER_VERTICAL:\n if (this._modelHit) {\n translateControl.activate(ctx, gesture);\n translateControl.setInitialPos(coords);\n } else {\n rotateControl.activate(ctx, gesture);\n rotateControl.setInitialPos(coords);\n }\n break;\n case TOUCH.GESTURE.TWO_FINGER_HORIZONTAL:\n case TOUCH.GESTURE.TWO_FINGER_VERTICAL:\n rotateControl.activate(ctx, gesture);\n rotateControl.setInitialPos(coords);\n break;\n case TOUCH.GESTURE.PINCH:\n scaleControl.activate(ctx, gesture);\n scaleControl.setInitialPos(coords);\n break;\n }\n }\n\n private _processInput(ctx: XRRenderContext, inputSources: any[]) {\n const coords = this._inputSourceToVector(inputSources);\n\n this.controls.forEach(control => control.process(ctx, { coords, inputSources }));\n }\n\n private _updateControls(ctx: XRRenderContext) {\n const { view3d, model, delta } = ctx;\n const deltaMilisec = delta * 1000;\n\n this.controls.forEach(control => control.update(ctx, deltaMilisec));\n\n model.scene.updateMatrix();\n view3d.scene.update(model);\n }\n\n private _inputSourceToVector(inputSources: any[]) {\n return Array.from(inputSources).map(inputSource => {\n const axes = inputSource.gamepad.axes;\n return new THREE.Vector2(axes[0], -axes[1]);\n });\n }\n}\n\nexport default ARHoverControl;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport WebARSession, { WebARSessionOption } from \"./WebARSession\";\nimport ARHoverControl, { ARHoverControlOption } from \"~/controls/ar/hover/ARHoverControl\";\nimport Animation from \"~/core/Animation\";\nimport * as XR from \"~/consts/xr\";\nimport { XRRenderContext, XRContext } from \"~/types/internal\";\nimport { clamp } from \"~/utils\";\n\n/**\n * Options for {@link HoverARSession}.\n * This type is intersection of {@link WebARSessionOption} and {@link ARHoverControlOption}\n * @category XR\n * @interface\n * @extends WebARSessionOption\n * @extends ARHoverControlOption\n */\ninterface HoverARSessionOption extends WebARSessionOption, ARHoverControlOption {\n initialDistance: number;\n}\n\n/**\n * WebXR based AR session which puts model at the space front of camera.\n * @category XR\n * @fires WebARSession#start\n * @fires WebARSession#end\n * @fires WebARSession#canPlace\n * @fires WebARSession#modelPlaced\n */\nclass HoverARSession extends WebARSession {\n private _options: Partial<HoverARSessionOption>;\n private _control: ARHoverControl | null;\n private _renderContext: XRRenderContext | null;\n private _modelPlaced: boolean;\n\n /**\n * {@link ARControl} instance of this session\n * @type ARHoverControl | null\n */\n public get control() { return this._control; }\n\n /**\n * Create new instance of HoverARSession\n * @param {HoverARSessionOption} options Options\n */\n constructor(options: Partial<HoverARSessionOption> = {}) {\n super(options);\n\n this._control = null;\n this._renderContext = null;\n this._modelPlaced = false;\n this._options = options;\n }\n\n /**\n * Place model on the current position\n */\n public placeModel() {\n const ctx = this._renderContext;\n\n // Not ready to place model yet\n if (!ctx || !ctx.view3d.scene.visible || this._modelPlaced) return;\n\n const { session, view3d } = ctx;\n const modelRoot = view3d.model!.scene;\n const control = this._control!;\n\n session.addEventListener(XR.EVENTS.SELECT_START, this._onSelectStart);\n session.addEventListener(XR.EVENTS.SELECT_END, this._onSelectEnd);\n\n this._modelPlaced = true;\n this.emit(\"modelPlaced\");\n\n // Show scale up animation\n const originalModelScale = modelRoot.scale.clone();\n const scaleUpAnimation = new Animation({ context: session });\n\n scaleUpAnimation.on(\"progress\", evt => {\n const newScale = originalModelScale.clone().multiplyScalar(evt.easedProgress);\n modelRoot.scale.copy(newScale);\n });\n scaleUpAnimation.on(\"finish\", () => {\n modelRoot.scale.copy(originalModelScale);\n control.init(ctx);\n });\n scaleUpAnimation.start();\n }\n\n public onStart = (ctx: XRContext) => {\n const { view3d } = ctx;\n\n super.onStart(ctx);\n\n this._control = new ARHoverControl(this._options);\n\n view3d.scene.hide();\n }\n\n public onEnd = (ctx: XRContext) => {\n const { view3d, session } = ctx;\n\n super.onEnd(ctx);\n\n this._renderContext = null;\n this._modelPlaced = false;\n\n session.removeEventListener(XR.EVENTS.SELECT_START, this._onSelectStart);\n session.removeEventListener(XR.EVENTS.SELECT_END, this._onSelectEnd);\n\n this._control!.destroy(ctx);\n this._control = null;\n\n view3d.scene.show();\n }\n\n protected _beforeRender = (ctx: XRRenderContext) => {\n this._renderContext = ctx;\n\n if (!this._modelPlaced) {\n this._initModelPosition(ctx);\n } else {\n this._control!.update(ctx);\n }\n }\n\n private _initModelPosition(ctx: XRRenderContext) {\n const {view3d, xrCam} = ctx;\n const model = view3d.model;\n\n // Make sure the model exist\n if (!model) return;\n\n const modelRoot = model.scene;\n const camPos = new THREE.Vector3().setFromMatrixPosition(xrCam.matrixWorld);\n const camQuat = new THREE.Quaternion().setFromRotationMatrix(xrCam.matrixWorld);\n const viewDir = new THREE.Vector3(0, 0, -1).applyQuaternion(camQuat);\n\n const modelBbox = model.bbox;\n const bboxDiff = new THREE.Vector3().subVectors(modelBbox.max, modelBbox.min);\n const maxComponent = Math.max(bboxDiff.x, bboxDiff.y, bboxDiff.z);\n\n // Reset rotation & update position\n modelRoot.position.copy(camPos);\n modelRoot.position.add(viewDir.multiplyScalar(clamp(maxComponent, 0.5, 3))); // Place at 1m from camera\n modelRoot.lookAt(camPos.setY(modelRoot.position.y));\n modelRoot.updateMatrix();\n\n view3d.scene.update(model);\n\n if (!view3d.scene.visible) {\n view3d.scene.show();\n this.emit(\"canPlace\");\n }\n }\n\n private _onSelectStart = (e) => {\n this._control!.onSelectStart({\n ...this._renderContext!,\n frame: e.frame,\n });\n }\n\n private _onSelectEnd = () => {\n this._control!.onSelectEnd();\n }\n}\n\nexport default HoverARSession;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\n// Browser related constants\n\nexport const IS_IOS = /iPad|iPhone|iPod/.test(navigator.userAgent)\n || (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1);\n\nexport const IS_ANDROID = /android/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = /safari/i.test(navigator.userAgent);\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport XRSession from \"./XRSession\";\nimport { IS_ANDROID } from \"~/consts/browser\";\nimport * as XR from \"~/consts/xr\";\n\n/**\n * AR session using Google's scene-viewer\n * @category XR\n * @see https://developers.google.com/ar/develop/java/scene-viewer\n */\nclass SceneViewerSession implements XRSession {\n public readonly isWebXRSession = false;\n\n /**\n * Create new instance of SceneViewerSession\n * @see https://developers.google.com/ar/develop/java/scene-viewer\n * @param params Session params\n * @param {string} [params.file] This URL specifies the glTF or glb file that should be loaded into Scene Viewer. This should be URL-escaped.\n * @param {string} [params.browser_fallback_url] This is a Google Chrome feature supported only for web-based implementations. When the Google app com.google.android.googlequicksearchbox is not present on the device, this is the URL that Google Chrome navigates to.\n * @param {string} [params.mode=\"ar_only\"] See {@link https://developers.google.com/ar/develop/java/scene-viewer} for available modes.\n * @param {string} [params.title] A name for the model. If present, it will be displayed in the UI. The name will be truncated with ellipses after 60 characters.\n * @param {string} [params.link] A URL for an external webpage. If present, a button will be surfaced in the UI that intents to this URL when clicked.\n * @param {string} [params.sound] A URL to a looping audio track that is synchronized with the first animation embedded in a glTF file. It should be provided alongside a glTF with an animation of matching length. If present, the sound is looped after the model is loaded. This should be URL-escaped.\n * @param {string} [params.resizable=true] When set to false, users will not be able to scale the model in the AR experience. Scaling works normally in the 3D experience.\n */\n constructor(public params: {\n file: string,\n browser_fallback_url?: string,\n mode?: \"3d_preferred\" | \"3d_only\" | \"ar_preferred\" | \"ar_only\" | string,\n title?: string,\n link?: string,\n sound?: string,\n resizable?: \"true\" | \"false\" | boolean,\n [key: string]: any,\n }) {\n if (!this.params.mode) {\n // Default mode is \"ar_only\", which should use com.google.ar.core package\n this.params.mode = \"ar_only\";\n }\n }\n\n /**\n * Return the availability of SceneViewerSession.\n * Scene-viewer is available on all android devices with google ARCore installed.\n * @returns {Promise} A Promise that resolves availability of this session(boolean).\n */\n public isAvailable() {\n return Promise.resolve(IS_ANDROID);\n }\n\n /**\n * Enter Scene-viewer AR session\n */\n public enter() {\n const params = Object.assign({}, this.params);\n const fallback = params.browser_fallback_url;\n delete params.browser_fallback_url;\n\n const resizable = params.resizable;\n delete params.resizable;\n if (resizable === true) {\n params.resizable = \"true\";\n } else if (resizable === false) {\n params.resizable = \"false\";\n } else if (resizable) {\n params.resizable = resizable;\n }\n\n const queryString = Object.keys(params)\n .filter(key => params[key] != null)\n .map(key => `${key}=${params[key]}`).join(\"&\");\n\n const intentURL = params.mode === \"ar_only\"\n ? XR.SCENE_VIEWER.INTENT_AR_CORE(queryString, fallback)\n : XR.SCENE_VIEWER.INTENT_SEARCHBOX(queryString, fallback || XR.SCENE_VIEWER.FALLBACK_DEFAULT(queryString));\n\n const anchor = document.createElement(\"a\") as HTMLAnchorElement;\n anchor.href = intentURL;\n anchor.click();\n\n return Promise.resolve();\n }\n\n public exit() {\n // DO NOTHING\n }\n}\n\nexport default SceneViewerSession;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport XRSession from \"./XRSession\";\nimport { IS_IOS, IS_SAFARI } from \"~/consts/browser\";\nimport { QUICKLOOK_SUPPORTED } from \"~/consts/xr\";\n\n/**\n * AR Session using Apple AR Quick Look Viewer\n * @category XR\n * @see https://developer.apple.com/augmented-reality/quick-look/\n */\nclass QuickLookSession implements XRSession {\n /**\n * Whether it's webxr-based session or not\n * @type false\n */\n public readonly isWebXRSession = false;\n\n private _file: string;\n private _allowsContentScaling: boolean;\n\n /**\n * Create new instance of QuickLookSession\n * @param {object} [options] Quick Look options\n * @param {string} [options.file] USDZ file's location URL.\n * @param {boolean} [options.allowsContentScaling=true] Whether to allow content scaling.\n */\n constructor({\n file,\n allowsContentScaling = true,\n }: {\n file: string,\n allowsContentScaling?: boolean,\n }) {\n this._file = file;\n this._allowsContentScaling = allowsContentScaling;\n }\n\n /**\n * Return the availability of QuickLookSession.\n * QuickLook AR is available on iOS12+ on Safari & Chrome browser\n * Note that iOS Chrome won't show up QuickLook AR when it's local dev environment\n * @returns {Promise} A Promise that resolves availability of this session(boolean).\n */\n public isAvailable() {\n // This can handle all WebKit based browsers including iOS Safari & iOS Chrome\n return Promise.resolve(QUICKLOOK_SUPPORTED && IS_IOS && IS_SAFARI);\n }\n\n /**\n * Enter QuickLook AR Session\n */\n public enter() {\n const anchor = document.createElement(\"a\") as HTMLAnchorElement;\n anchor.setAttribute(\"rel\", \"ar\");\n anchor.appendChild(document.createElement(\"img\"));\n\n const usdzURL = new URL(this._file, window.location.toString());\n if (!this._allowsContentScaling) {\n usdzURL.hash = \"allowsContentScaling=0\";\n }\n\n anchor.setAttribute(\"href\", usdzURL.toString());\n anchor.click();\n\n return Promise.resolve();\n }\n\n public exit() {\n // DO NOTHING\n }\n}\n\nexport default QuickLookSession;\n","/*\n * Copyright (c) 2020 NAVER Corp.\n * egjs projects are licensed under the MIT license\n */\n\nimport * as THREE from \"three\";\nimport Model from \"~/core/Model\";\nimport View3DError from \"~/View3DError\";\nimport * as ERR from \"~/consts/error\";\n\n/**\n * Texture(image) model\n * @category Extra\n */\nclass TextureModel extends Model {\n private _texture: THREE.Texture;\n private _mesh: THREE.Mesh;\n\n /**\n * Texture that used for this model\n * @see https://threejs.org/docs/index.html#api/en/textures/Texture\n * @type THREE.Texture\n */\n public get texture() { return this._texture; }\n /**\n * Model's mesh object\n * @see https://threejs.org/docs/index.html#api/en/objects/Mesh\n * @type THREE.Mesh\n */\n public get mesh() { return this._mesh; }\n\n /**\n * Create new TextureModel\n * @param {object} options Options\n * @param {number} [options.width] Width of the model.\n * @param {number} [options.height] Height of the model.\n * @param {boolean} [options.billboard=false] When set to true, model will keep rotate to show its front face to camera. Only Y-axis rotation is considered.\n * @throws {View3DError} `CODES.PROVIDE_WIDTH_OR_HEIGHT` When both width and height are not given.\n */\n constructor({\n image,\n width,\n height,\n billboard = false,\n }: {\n image: THREE.Texture | HTMLImageElement | HTMLCanvasElement | HTMLVideoElement;\n width?: number;\n height?: number;\n billboard?: boolean;\n }) {\n const texture = (image as THREE.Texture).isTexture\n ? image as THREE.Texture\n : new THREE.Texture(image as HTMLImageElement);\n const aspect = texture.image.width / texture.image.height;\n if (width == null && height == null) {\n throw new View3DError(ERR.MESSAGES.PROVIDE_WIDTH_OR_HEIGHT, ERR.CODES.PROVIDE_WIDTH_OR_HEIGHT);\n }\n if (width == null) {\n width = height! * aspect;\n } else if (height == null) {\n height = width! / aspect;\n }\n texture.encoding = THREE.sRGBEncoding;\n const geometry = new THREE.PlaneGeometry(width, height);\n const material = new THREE.MeshBasicMaterial({ map: texture, side: THREE.DoubleSide });\n const mesh = new THREE.Mesh(geometry, material);\n\n super({ scenes: [mesh] });\n\n this._texture = texture;\n this._mesh = mesh;\n\n if (billboard) {\n const root = mesh;\n root.onBeforeRender = (renderer, scene, camera) => {\n const pos = root.getWorldPosition(new THREE.Vector3());\n const camPos = new THREE.Vector3().setFromMatrixPosition(camera.matrixWorld);\n\n root.lookAt(camPos.setY(pos.y));\n mesh.updateMatrix();\n };\n }\n }\n}\n\nexport default TextureModel;\n"],"names":["_listenerMap","eventName","callback","listenerMap","listeners","indexOf","push","callbackIdx","splice","_i","event","forEach","canvas","_canvas","_renderer","THREE","alpha","antialias","preserveDrawingBuffer","xr","enabled","outputEncoding","_clock","enableShadow","Object","context","getSize","val","setSize","x","y","renderer","isPresenting","setPixelRatio","window","devicePixelRatio","offsetWidth","offsetHeight","scene","camera","render","root","threeCamera","start","setAnimationLoop","timestamp","frame","delta","_this","getDelta","stop","threeRenderer","shadowMap","type","STANDARD_MAPS","__extends","message","code","_super","setPrototypeOf","View3DError","prototype","name","Error","CODES","WRONG_TYPE","ELEMENT_NOT_FOUND","ELEMENT_NOT_CANVAS","WEBGL_NOT_SUPPORTED","ADD_CONTROL_FIRST","PROVIDE_WIDTH_OR_HEIGHT","MESSAGES","types","map","join","query","el","tagName","getElement","parent","targetEl","parentEl","document","queryResult","querySelector","ERROR","nodeType","Node","ELEMENT_NODE","getCanvas","test","range","end","Array","apply","undef","idx","toRadian","Math","PI","clamp","min","max","findIndex","target","list","index","_b","__values","length","itemIndex","mix","a","b","t","circulate","size","abs","offset","merge","srcs","source","keys","key","value","isArray","getBoxPoints","box","clone","z","toPowerOfTwo","result","getPrimaryAxisIndex","basis","viewDir","primaryIdx","maxDot","axes","axesIdx","dotProduct","dot","getRotationAngle","center","v1","v2","centerToV1","subVectors","normalize","centerToV2","deg","angle","compDeg","sign","rotationAngle","_root","_userObjects","_envObjects","_envs","userObjects","envObjects","add","visible","model","override","env","fit","resetModel","resetEnv","_removeChildsOf","background","environment","object","_a","envs","isObject3D","objects","remove","envIndex","envmap","texture","obj","traverse","child","isMesh","mesh","geometry","dispose","materials","material","mat","children","_camera","_controls","control","destroy","element","setElement","sync","enable","controls","controlIndex","removedControl","disable","syncToCamera","resize","deltaMiliSec","update","updatePosition","yaw","pitch","distance","pivot","Pose","SINE_WAVE","sin","EASE_OUT_CUBIC","pow","EASE_OUT_BOUNCE","n1","d1","MODEL_SIZE","EASING","ANIMATION_DURATION","ANIMATION_LOOP","ANIMATION_RANGE","CAMERA_POSE","INFINITE_RANGE","Infinity","PITCH_RANGE","DISTANCE_RANGE","MINIMUM_DISTANCE","MAXIMUM_DISTANCE","NULL_ELEMENT","DRACO_DECODER_URL","_c","duration","DEFAULT","_d","loop","_e","_f","easing","_duration","_loop","_range","_easing","_activated","reset","_val","_start","_end","_progress","deltaTime","prev","nextProgress","easedProgress","defaultVal","from","to","_motion","Motion","_from","_to","_enabled","motion","progress","lerp","_finishCallbacks","setEndDelta","_defaultPose","_threeCamera","_controller","Controller","_currentPose","_minDistance","_maxDistance","fov","updateProjectionMatrix","renderHeight","aspect","tan","controller","currentPose","defaultPose","Promise","resolve","resetControl_1","AnimationControl","onFinished","cam","newDefaultPose","_clampCurrentPose","pose","newCamPos","cos","position","copy","lookAt","_mixer","_clips","_actions","clips","mixer","clip","clipAction","action","play","timeScale","uncacheRoot","getRoot","view3d","_view3d","_sessions","_currentSession","all","session","isAvailable","results","some","xrSession","_enterSession","exit","sessionIdx","errors","sessions","reject","isSessionAvailable","enter","then","isWebXRSession","addEventListener","catch","e","EVENTS","MOUSE_DOWN","MOUSE_MOVE","MOUSE_UP","TOUCH_START","TOUCH_MOVE","TOUCH_END","WHEEL","RESIZE","CONTEXT_MENU","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_BUTTON","newSize","emit","_scene","animator","_animator","Renderer","Camera","Scene","ModelAnimator","_xr","XRManager","_model","clear","removeEventListener","applySize","resetView","setClips","animations","stopAnimationLoop","renderLoop","View3D","EventEmitter","scenes","fixSkinnedBbox","castShadow","receiveShadow","_animations","_fixSkinnedBbox","_cachedLights","_cachedMeshes","_setInitialBbox","bboxCenter","_initialBbox","getCenter","negate","_moveInitialBboxToCenter","_originalSize","_getAllLights","_getAllMeshes","_getTransformedBbox","initialBbox","bboxSize","scale","setScalar","updateMatrix","meshes","multiply","updateMatrixWorld","_hasSkinnedMesh","_getSkeletonBbox","setFromObject","bbox","isSkinnedMesh","expandByObject","positions","attributes","skinIndicies","skinIndex","skinWeights","skinWeight","skeleton","boneMatricies","boneMatrices","finalMatrix","posIdx","identity","skinned","set","skinVertex","getX","getY","getZ","applyMatrix4","bindMatrix","weights","getW","indicies","weight","boneMatrix","fromArray","multiplyScalar","transformed","bindMatrixInverse","toArray","matrixWorld","expandByPoint","count","translate","lights","isLight","matrix","delay","delayOnMouseLeave","speed","_g","pauseOnHover","_h","canInterrupt","_j","disableOnInterrupt","evt","_canInterrupt","button","LEFT","RIGHT","_interrupted","_clearTimeout","_onMouseUp","_setUninterruptedAfterDelay","_delay","_pauseOnHover","_hovering","_delayOnMouseLeave","_speed","_disableOnInterrupt","_targetEl","_onMouseDown","_onTouchStart","_onTouchEnd","_onMouseEnter","_onMouseLeave","_onWheel","_interruptionTimer","setTimeout","clearTimeout","CURSOR","GRAB","GRABBING","useGrabCursor","scaleToElement","preventDefault","focus","_prevPos","clientX","clientY","_onMouseMove","_setCursor","prevPos","rotateDelta","sub","_userScale","_scaleToElement","_screenScale","_xMotion","_yMotion","touch","touches","cancelable","stopPropagation","_useGrabCursor","xMotion","yMotion","_onTouchMove","style","cursor","_getTouchesMiddle","_touchInitialized","middlePoint","screenSize","_screenSize","viewXDir","applyQuaternion","quaternion","viewYDir","screenScale","renderWidth","divide","_onContextMenu","deltaY","animation","_scale","_scaleModifier","prevTouchDistance","_prevTouchDistance","touchPoint1","pageX","pageY","touchPoint2","touchDiff","touchDistance","minDistance","maxDistance","rotate","_rotateControl","RotateControl","_translateControl","TranslateControl","_distanceControl","DistanceControl","url","options","loader","DRACOLoader","setCrossOrigin","setDecoderPath","manager","load","_parseToModel","undefined","err","color","point","pointOptions","computeVertexNormals","Model","intensity","direction","_light","light","shadow","mapSize","width","height","matrixAutoUpdate","_direction","boxSize","boxCenter","newPos","addVectors","shadowCam","near","far","left","right","top","bottom","bboxPoints","projectedPoints","project","screenBbox","setFromPoints","opacity","rotateX","floorPosition","floorRotation","modelPosition","localYAxis","modelBbox","modelBboxYOffset","modelFloor","rotX90","setFromEuler","shadowRotation","multiplyQuaternions","_loader","ThreeGLTFLoader","_dracoLoader","dracoLoader","setDRACOLoader","gltf","viewer","fileLoader","loadAsync","jsonRaw","json","JSON","parse","baseURL","extractUrlBase","modelOptions","cameraOptions","environmentOptions","setDefaultPose","distanceRange","setBackground","shadowPlane","ShadowPlane","addEnv","ambientOptions","ambient","lightOptions","light1","light2","light3","lightOption","lightDirection","directional","AutoDirectionalLight","isFirstLoad","loadFlags","LOD","fileName","lodIndex","glbURL","_resolveURL","path","higherLODLoaded","slice","loaded","display","onLoad","files","objectURLs","revokeURLs","URL","revokeObjectURL","gltfFile","find","file","filesMap","Map","gltfURL","createObjectURL","setURLModifier","fileURL","fileNameResult","exec","has","blob","get","blobURL","data","encoding","replace","skyboxTexture","_equirectToCubemap","urls","isEquirectangular","RGBELoader","image","fromEquirectangularTexture","QUICKLOOK_SUPPORTED","anchorEl","createElement","relList","supports","WEBXR_SUPPORTED","navigator","isSessionSupported","HIT_TEST_SUPPORTED","XRSession","requestHitTestSource","DOM_OVERLAY_SUPPORTED","XRDOMOverlayState","SESSION","AR","VR","REFERENCE_SPACE","LOCAL","LOCAL_FLOOR","VIEWER","SELECT_START","SELECT","SELECT_END","INPUT_PROFILE","TOUCH","FEATURES","HIT_TEST","requiredFeatures","DOM_OVERLAY","optionalFeatures","domOverlay","EMPTY_FEATURES","SCENE_VIEWER","INTENT_AR_CORE","params","fallback","INTENT_SEARCHBOX","FALLBACK_DEFAULT","_loadingEl","loadingEl","XR","visibility","userFeatures","maxModelSize","overlayRoot","forceOverlay","overlayEl","features","_domOverlay","DOMOverlay","_features","_maxModelSize","_forceOverlay","_session","requestSession","xrContext","originalMatrix","originalModelSize","originalBackground","arModelSize","originalSize","moveToOrigin","setReferenceSpaceType","setSession","onStart","onEnd","decompose","once","xrCam","getCamera","referenceSpace","getReferenceSpace","glLayer","renderState","baseLayer","framebufferWidth","framebufferHeight","renderContext","_beforeRender","getSession","ctx","showLoading","hideLoading","_source","cancel","requestReferenceSpace","space","getHitTestResults","repeat","_getDeltaTime","_time","loopIncrease","floor","progressEvent","loopIdx","_loopCount","_repeat","loopIndex","_rafId","_ctx","requestAnimationFrame","_updateClock","_stopLoop","cancelAnimationFrame","lastTime","Date","now","ringColor","axisColor","ringGeometry","ringMaterial","side","_ring","axisVertices","axisGeometry","axisMaterial","_axis","_obj","hide","rotation","showIndicator","_rotationIndicator","RotationIndicator","initialRotation","updateRotation","_fromQuat","_toQuat","gesture","_active","rotationIndicator","show","updateScale","axis","coords","coord","modelPos","ndcModelPos","setFromAxisAngle","interpolated","_getInterpolatedQuaternion","premultiply","toEuler","fromEuler","slerp","STATE","hoverAmplitude","hoverHeight","hoverPeriod","hoverEasing","bounceDuration","bounceEasing","WAITING","_hoverAmplitude","_hoverHeight","_hoverMotion","_bounceMotion","_modelPosition","_floorPosition","_hoverPosition","setY","deactivate","_dragPlane","_state","TRANSLATING","BOUNCING","hoverPosition","bounceMotion","hoveringAmount","_initialPos","hitResults","state","notActive","hitResult","prevFloorPosition","dragPlane","hitPose","getPose","isFloorHit","transform","camPos","setFromMatrixPosition","targetRayPose","inputSource","targetRaySpace","fingerDir","fingerRay","intersection","intersectPlane","hitMatrix","hitPosition","currentDragPlaneHeight","constant","hitDragPlaneHeight","camToHitDir","camToHitRay","hitOnDragPlane","hoverMotion","hoverOffset","modelYOffset","padding","font","getContext","maxText","measureText","maxWidth","actualBoundingBoxLeft","actualBoundingBoxRight","maxHeight","actualBoundingBoxAscent","actualBoundingBoxDescent","widthPowerOfTwo","planeWidth","_height","_texture","uiGeometry","transparent","_mesh","_font","_color","_padding","_offset","scalePercentage","toFixed","clearRect","centerX","centerY","textSize","halfWidth","halfHeight","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","lineWidth","fillStyle","fill","stroke","textAlign","textBaseline","strokeStyle","fillText","needsUpdate","ScaleUI","_ui","_initialScale","_scaleMultiplier","_prevCoordDistance","_updateUIPosition","uiPos","ringOpacity","dirIndicatorOpacity","fadeoutDuration","deg10","dimmedRingGeomtry","reticle","highlightedRingGeometry","ringVertices","vertices","trianglePart","firstY","midIndex","vec","vecIdx","offsetAmount","indicatorMat","makeRotationX","mergedGeometry","dimmedMaterial","highlightMaterial","_opacityRange","minOpacityMat","maxOpacityMat","opacityRange","GESTURE","NONE","_size","IN_DEADZONE","_aspect","inputs","fingerCount","_prevOneFingerPosInitialized","_prevOneFingerPos","_prevTwoFingerPosInitialized","_prevTwoFingerPos","_initialTwoFingerDistance","_lastFingerCount","gestures","_testingGestures","reduce","accumulated","_detectedGesture","input","setX","deadzone","testingGestures","lastFingerCount","OUT_OF_DEADZONE","applyScreenAspect","setFirstInput","diff","ONE_FINGER_HORIZONTAL","ONE_FINGER_VERTICAL","middle","TWO_FINGER_HORIZONTAL","TWO_FINGER_VERTICAL","PINCH","hitTestSource","_hitTestSource","deadzoneChecker","_deadzoneChecker","rotateControl","translateControl","scaleControl","_scaleControl","addTestingGestures","ONE_FINGER","getHitTestResultsForTransientInput","_hitResultToVector","intersectBox","_modelHit","_floorIndicator","fadeout","ARSwirlControl","ARFloorTranslateControl","ARScaleControl","FloorIndicator","floorIndicator","DeadzoneChecker","initialFloorPos","init","initFloorPosition","setAspect","_initialized","requestHitTestSourceForTransientInput","profile","transientHitTestSource","cleanup","inputSources","xrInputs","inDeadzone","_checkDeadzone","_processInput","_updateControls","check","activate","setInitialPos","process","deltaMilisec","modelRotation","scaledBbox","boundingSphere","getBoundingSphere","radius","gamepad","_control","ARFloorControl","_options","_hitTest","_renderContext","_modelPlaced","_onSelectStart","_onSelectEnd","_initModelPosition","onSelectStart","onSelectEnd","HitTest","hitTest","ready","hitTestResults","getResults","hit","elements","modelRoot","originalModelScale","scaleUpAnimation","Animation","on","newScale","WebARSession","bodyGeometry","coneGeometry","body","cone","arrow","_arrows","copied","rotateZ","facingDirection","facingOffset","_arrowIndicator","ArrowIndicator","hitRotation","wallRotation","wallPosition","wallNormal","arrowIndicator","arrowPlaneRotation","updateOffset","modelZOffset","isWallHit","normal","hitOrientation","orientation","worldYAxis","wallU","crossVectors","wallV","applyAxisAngle","wallMatrix","makeBasis","prevWallNormal","acos","prevWallRotation","setFromRotationMatrix","rotationDiff","inverse","ARWallTranslateControl","initialTransform","initWallTransform","updateAxis","ARWallControl","setZ","_horizontalAxis","_verticalAxis","horizontal","vertical","ROTATE_HORIZONTAL","ROTATE_VERTICAL","middlePos","posDiff","rotationAxis","_zRotationControl","swirl","_xyRotationControl","ARSwipeControl","swipe","_activatedControl","zRotationControl","xyRotationControl","TWO_FINGER","zRotateAxis","horizontalRotateAxis","verticalRotateAxis","cameraRotation","cameraBasis","modelBasis","_position","extractBasis","camToModelDir","primaryAxisIdx","primaryAxis","originToDragPlane","distanceToPoint","centerYOffset","modelLocalYDir","newCenter","updateRotateAxis","_inputSourceToVector","ARHoverRotateControl","ARHoverTranslateControl","ARHoverControl","camQuat","bboxDiff","maxComponent","IS_IOS","userAgent","platform","maxTouchPoints","IS_ANDROID","IS_SAFARI","mode","assign","browser_fallback_url","resizable","queryString","filter","intentURL","anchor","href","click","allowsContentScaling","_file","_allowsContentScaling","setAttribute","appendChild","usdzURL","location","toString","hash","billboard","isTexture","ERR","root_1","onBeforeRender","pos","getWorldPosition"],"mappings":"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"}
\No newline at end of file