@babylonjs/viewer 5.0.0-beta.3 → 5.0.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"defaultViewer.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/viewer/defaultViewer.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { ViewerConfiguration, IModelConfiguration, ILightConfiguration, ISceneConfiguration } from './../configuration';\r\nimport { Template, EventCallback } from '../templating/templateManager';\r\nimport { FilesInput } from '@babylonjs/core/Misc/filesInput';\r\nimport { SpotLight } from '@babylonjs/core/Lights/spotLight';\r\nimport { Vector3 } from '@babylonjs/core/Maths/math';\r\nimport { TemplateManager } from '../templating/templateManager';\r\nimport { AbstractViewerWithTemplate } from './viewerWithTemplate';\r\nimport { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';\r\nimport { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';\r\nimport { extendClassWithConfig } from '../helper';\r\nimport { ViewerModel } from '../model/viewerModel';\r\nimport { IModelAnimation, AnimationState } from '../model/modelAnimation';\r\nimport { IViewerTemplatePlugin } from '../templating/viewerTemplatePlugin';\r\nimport { HDButtonPlugin } from '../templating/plugins/hdButtonPlugin';\r\nimport { PrintButtonPlugin } from '../templating/plugins/printButton';\r\n\r\n/**\r\n * The Default viewer is the default implementation of the AbstractViewer.\r\n * It uses the templating system to render a new canvas and controls.\r\n */\r\nexport class DefaultViewer extends AbstractViewerWithTemplate {\r\n /**\r\n * The corresponsing template manager of this viewer.\r\n */\r\n public templateManager: TemplateManager;\r\n\r\n public fullscreenElement?: Element;\r\n\r\n /**\r\n * Create a new default viewer\r\n * @param containerElement the element in which the templates will be rendered\r\n * @param initialConfiguration the initial configuration. Defaults to extending the default configuration\r\n */\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = { extends: 'default' }) {\r\n super(containerElement, initialConfiguration);\r\n\r\n this.onModelLoadedObservable.add(this._onModelLoaded);\r\n this.onModelRemovedObservable.add(() => {\r\n this._configureTemplate();\r\n });\r\n\r\n this.onEngineInitObservable.add(() => {\r\n this.sceneManager.onLightsConfiguredObservable.add((data) => {\r\n this._configureLights();\r\n });\r\n });\r\n\r\n this.onInitDoneObservable.add(() => {\r\n this.sceneManager.setDefaultMaterial = function (sceneConfig: ISceneConfiguration) {\r\n let conf = sceneConfig.defaultMaterial;\r\n if (!conf) {\r\n return;\r\n }\r\n if ((conf.materialType === 'standard' && this.scene.defaultMaterial.getClassName() !== 'StandardMaterial') ||\r\n (conf.materialType === 'pbr' && this.scene.defaultMaterial.getClassName() !== 'PBRMaterial')) {\r\n this.scene.defaultMaterial.dispose();\r\n if (conf.materialType === 'standard') {\r\n this.scene.defaultMaterial = new StandardMaterial(\"defaultMaterial\", this.scene);\r\n } else {\r\n this.scene.defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n }\r\n }\r\n extendClassWithConfig(this.scene.defaultMaterial, conf);\r\n }\r\n if (!this.sceneManager.models.length) {\r\n this.hideLoadingScreen();\r\n }\r\n });\r\n }\r\n\r\n private _registeredPlugins: Array<IViewerTemplatePlugin> = [];\r\n\r\n public registerTemplatePlugin(plugin: IViewerTemplatePlugin) {\r\n //validate\r\n if (!plugin.templateName) {\r\n throw new Error(\"No template name provided\");\r\n }\r\n this._registeredPlugins.push(plugin);\r\n let template = this.templateManager.getTemplate(plugin.templateName);\r\n if (!template) {\r\n throw new Error(`Template ${plugin.templateName} not found`);\r\n }\r\n if (plugin.addHTMLTemplate) {\r\n template.onHTMLRendered.add((tmpl) => {\r\n plugin.addHTMLTemplate!(tmpl);\r\n });\r\n template.redraw();\r\n }\r\n\r\n if (plugin.eventsToAttach) {\r\n plugin.eventsToAttach.forEach((eventName) => {\r\n plugin.onEvent && this.templateManager.eventManager.registerCallback(plugin.templateName, (event) => {\r\n if (plugin.onEvent && plugin.interactionPredicate(event)) {\r\n plugin.onEvent(event);\r\n }\r\n }, eventName);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This will be executed when the templates initialize.\r\n */\r\n protected _onTemplatesLoaded() {\r\n this.showLoadingScreen();\r\n\r\n // navbar\r\n this._initNavbar();\r\n\r\n // close overlay button\r\n let template = this.templateManager.getTemplate('overlay');\r\n if (template) {\r\n\r\n let closeButton = template.parent.querySelector('.close-button');\r\n if (closeButton) {\r\n closeButton.addEventListener('pointerdown', () => {\r\n this.hideOverlayScreen();\r\n });\r\n }\r\n }\r\n\r\n if (this.configuration.templates && this.configuration.templates.viewer) {\r\n if (this.configuration.templates.viewer.params && this.configuration.templates.viewer.params.enableDragAndDrop) {\r\n this.onSceneInitObservable.addOnce(() => {\r\n let filesInput = new FilesInput(this.engine, this.sceneManager.scene, () => {\r\n }, () => {\r\n }, () => {\r\n }, () => {\r\n }, function () {\r\n }, (file: File) => {\r\n this.loadModel(file);\r\n }, () => {\r\n });\r\n filesInput.monitorElementForDragNDrop(this.templateManager.getCanvas()!);\r\n });\r\n }\r\n }\r\n\r\n return super._onTemplatesLoaded();\r\n }\r\n\r\n private _initNavbar() {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (navbar) {\r\n this.onFrameRenderedObservable.add(this._updateProgressBar);\r\n this.templateManager.eventManager.registerCallback('navBar', this._handlePointerClick, 'click');\r\n // an example how to trigger the help button. publiclly available\r\n this.templateManager.eventManager.registerCallback(\"navBar\", () => {\r\n // do your thing\r\n }, \"pointerdown\", \".help-button\");\r\n\r\n this.templateManager.eventManager.registerCallback(\"navBar\", (event: EventCallback) => {\r\n const evt = event.event;\r\n const element = <HTMLInputElement>(evt.target);\r\n if (!this._currentAnimation) { return; }\r\n const gotoFrame = +element.value / 100 * this._currentAnimation.frames;\r\n if (isNaN(gotoFrame)) { return; }\r\n this._currentAnimation.goToFrame(gotoFrame);\r\n }, \"input\");\r\n\r\n this.templateManager.eventManager.registerCallback(\"navBar\", () => {\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n this._resumePlay = false;\r\n }, \"pointerup\", \".progress-wrapper\");\r\n\r\n if (window.devicePixelRatio === 1 && navbar.configuration.params && !navbar.configuration.params.hideHdButton) {\r\n navbar.updateParams({\r\n hideHdButton: true\r\n });\r\n }\r\n\r\n this.registerTemplatePlugin(new HDButtonPlugin(this));\r\n this.registerTemplatePlugin(new PrintButtonPlugin(this));\r\n }\r\n }\r\n\r\n private _animationList: string[];\r\n private _currentAnimation: IModelAnimation;\r\n private _isAnimationPaused: boolean;\r\n private _resumePlay: boolean;\r\n\r\n private _handlePointerClick = (event: EventCallback) => {\r\n\r\n let pointerDown = <PointerEvent>event.event;\r\n if (pointerDown.button !== 0) { return; }\r\n var element = (<HTMLElement>event.event.target);\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n let parentClasses = element.parentElement!.classList;\r\n\r\n let elementClasses = element.classList;\r\n\r\n let elementName = \"\";\r\n\r\n for (let i = 0; i < elementClasses.length; ++i) {\r\n let className = elementClasses[i];\r\n if (className.indexOf(\"-button\") !== -1 || className.indexOf(\"-wrapper\") !== -1) {\r\n elementName = className;\r\n break;\r\n }\r\n }\r\n\r\n switch (elementName) {\r\n case \"speed-button\":\r\n case \"types-button\":\r\n if (parentClasses.contains(\"open\")) {\r\n parentClasses.remove(\"open\");\r\n } else {\r\n parentClasses.add(\"open\");\r\n }\r\n break;\r\n case \"play-pause-button\":\r\n this._togglePlayPause();\r\n break;\r\n case \"label-option-button\":\r\n var value = element.dataset[\"value\"];\r\n var label = element.querySelector(\"span.animation-label\");\r\n if (label && value) {\r\n this._updateAnimationType({ value: value.trim(), label: label.innerHTML });\r\n }\r\n break;\r\n case \"speed-option-button\":\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n var speed = element.dataset[\"value\"];\r\n if (speed) {\r\n this._updateAnimationSpeed(speed);\r\n }\r\n break;\r\n case \"progress-wrapper\":\r\n this._resumePlay = !this._isAnimationPaused;\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n break;\r\n case \"fullscreen-button\":\r\n this.toggleFullscreen();\r\n break;\r\n case \"vr-button\":\r\n this.toggleVR();\r\n break;\r\n default:\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Plays or Pauses animation\r\n */\r\n private _togglePlayPause = (noUiUpdate?: boolean) => {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n if (this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n } else {\r\n this._currentAnimation.pause();\r\n }\r\n\r\n this._isAnimationPaused = !this._isAnimationPaused;\r\n\r\n if (noUiUpdate) { return; }\r\n\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n navbar.updateParams({\r\n paused: this._isAnimationPaused,\r\n });\r\n }\r\n\r\n private _oldIdleRotationValue: number;\r\n\r\n /**\r\n * Control progress bar position based on animation current frame\r\n */\r\n private _updateProgressBar = () => {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n var progressSlider = <HTMLInputElement>navbar.parent.querySelector(\"input.progress-wrapper\");\r\n if (progressSlider && this._currentAnimation) {\r\n const progress = this._currentAnimation.currentFrame / this._currentAnimation.frames * 100;\r\n var currentValue = progressSlider.valueAsNumber;\r\n if (Math.abs(currentValue - progress) > 0.5) { // Only move if greater than a 1% change\r\n progressSlider.value = '' + progress;\r\n }\r\n\r\n if (this._currentAnimation.state === AnimationState.PLAYING) {\r\n if (this.sceneManager.camera.autoRotationBehavior && !this._oldIdleRotationValue) {\r\n this._oldIdleRotationValue = this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed;\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.camera.autoRotationBehavior && this._oldIdleRotationValue) {\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = this._oldIdleRotationValue;\r\n this._oldIdleRotationValue = 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update Current Animation Speed\r\n */\r\n private _updateAnimationSpeed = (speed: string, paramsObject?: any) => {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n if (speed && this._currentAnimation) {\r\n this._currentAnimation.speedRatio = parseFloat(speed);\r\n if (!this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedSpeed = speed + \"x\";\r\n } else {\r\n navbar.updateParams({\r\n selectedSpeed: speed + \"x\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update Current Animation Type\r\n */\r\n private _updateAnimationType = (data: { label: string, value: string }, paramsObject?: any) => {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n if (data) {\r\n this._currentAnimation = this.sceneManager.models[0].setCurrentAnimationByName(data.value);\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedAnimation = (this._animationList.indexOf(data.value) + 1);\r\n paramsObject.selectedAnimationName = data.label;\r\n } else {\r\n navbar.updateParams({\r\n selectedAnimation: (this._animationList.indexOf(data.value) + 1),\r\n selectedAnimationName: data.label\r\n });\r\n }\r\n\r\n this._updateAnimationSpeed(\"1.0\", paramsObject);\r\n }\r\n\r\n protected _initVR() {\r\n this.engine.onVRDisplayChangedObservable.add(() => {\r\n let viewerTemplate = this.templateManager.getTemplate('viewer');\r\n let viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n if (this.sceneManager.vrHelper!.isInVRMode) {\r\n viewerElement.classList.add(\"in-vr\");\r\n } else {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n }\r\n });\r\n if (this.sceneManager.vrHelper) {\r\n // due to the way the experience helper is exisintg VR, this must be added.\r\n this.sceneManager.vrHelper.onExitingVR.add(() => {\r\n let viewerTemplate = this.templateManager.getTemplate('viewer');\r\n let viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n });\r\n }\r\n super._initVR();\r\n }\r\n\r\n /**\r\n * Toggle fullscreen of the entire viewer\r\n */\r\n public toggleFullscreen = () => {\r\n let viewerTemplate = this.templateManager.getTemplate('viewer');\r\n let viewerElement = viewerTemplate && viewerTemplate.parent;\r\n let fullscreenElement = this.fullscreenElement || viewerElement;\r\n\r\n if (fullscreenElement) {\r\n let currentElement = (<any>document).fullscreenElement || (<any>document).webkitFullscreenElement || (<any>document).mozFullScreenElement || (<any>document).msFullscreenElement;\r\n if (!currentElement) {\r\n let requestFullScreen = fullscreenElement.requestFullscreen || (<any>fullscreenElement).webkitRequestFullscreen || (<any>fullscreenElement).msRequestFullscreen || (<any>fullscreenElement).mozRequestFullScreen;\r\n requestFullScreen.call(fullscreenElement);\r\n if (viewerElement) {\r\n viewerElement.classList.add(\"in-fullscreen\");\r\n }\r\n } else {\r\n let exitFullscreen = document.exitFullscreen || (<any>document).webkitExitFullscreen || (<any>document).msExitFullscreen || (<any>document).mozCancelFullScreen;\r\n exitFullscreen.call(document);\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-fullscreen\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Preparing the container element to present the viewer\r\n */\r\n protected _prepareContainerElement() {\r\n const htmlElement = this.containerElement as HTMLElement;\r\n if (htmlElement.style) {\r\n htmlElement.style.position = 'relative';\r\n htmlElement.style.height = '100%';\r\n htmlElement.style.display = 'flex';\r\n }\r\n }\r\n\r\n /**\r\n * This function will configure the templates and update them after a model was loaded\r\n * It is mainly responsible to changing the title and subtitle etc'.\r\n * @param model the model to be used to configure the templates by\r\n */\r\n protected _configureTemplate(model?: ViewerModel) {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n let newParams: any = navbar.configuration.params || {};\r\n\r\n if (!model) {\r\n newParams.animations = null;\r\n } else {\r\n\r\n let animationNames = model.getAnimationNames();\r\n newParams.animations = animationNames.map((a) => { return { label: a, value: a }; });\r\n if (animationNames.length) {\r\n this._isAnimationPaused = (model.configuration.animation && !model.configuration.animation.autoStart) || !model.configuration.animation;\r\n this._animationList = animationNames;\r\n newParams.paused = this._isAnimationPaused;\r\n let animationIndex = 0;\r\n if (model.configuration.animation && typeof model.configuration.animation.autoStart === 'string') {\r\n animationIndex = animationNames.indexOf(model.configuration.animation.autoStart);\r\n if (animationIndex === -1) {\r\n animationIndex = 0;\r\n }\r\n }\r\n this._updateAnimationType(newParams.animations[animationIndex], newParams);\r\n } else {\r\n newParams.animations = null;\r\n }\r\n\r\n if (model.configuration.thumbnail) {\r\n newParams.logoImage = model.configuration.thumbnail;\r\n }\r\n }\r\n navbar.updateParams(newParams, false);\r\n }\r\n\r\n /**\r\n * This will load a new model to the default viewer\r\n * overriding the AbstractViewer's loadModel.\r\n * The scene will automatically be cleared of the old models, if exist.\r\n * @param model the configuration object (or URL) to load.\r\n */\r\n public loadModel(model?: string | File | IModelConfiguration): Promise<ViewerModel> {\r\n if (!model) {\r\n model = this.configuration.model;\r\n }\r\n this.showLoadingScreen();\r\n return super.loadModel(model!, true).catch((error) => {\r\n console.log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen('error');\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n private _onModelLoaded = (model: ViewerModel) => {\r\n this._configureTemplate(model);\r\n // with a short timeout, making sure everything is there already.\r\n let hideLoadingDelay = 20;\r\n if (this.configuration.lab && this.configuration.lab.hideLoadingDelay !== undefined) {\r\n hideLoadingDelay = this.configuration.lab.hideLoadingDelay;\r\n }\r\n setTimeout(() => {\r\n this.sceneManager.scene.executeWhenReady(() => {\r\n this.hideLoadingScreen();\r\n });\r\n }, hideLoadingDelay);\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Show the overlay and the defined sub-screen.\r\n * Mainly used for help and errors\r\n * @param subScreen the name of the subScreen. Those can be defined in the configuration object\r\n */\r\n public showOverlayScreen(subScreen: string) {\r\n let template = this.templateManager.getTemplate('overlay');\r\n if (!template) { return Promise.resolve('Overlay template not found'); }\r\n\r\n return template.show(((template) => {\r\n\r\n var canvasRect = this.containerElement.getBoundingClientRect();\r\n\r\n template.parent.style.display = 'flex';\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n\r\n let subTemplate = this.templateManager.getTemplate(subScreen);\r\n if (!subTemplate) {\r\n return Promise.reject(subScreen + ' template not found');\r\n }\r\n return subTemplate.show(((template) => {\r\n template.parent.style.display = 'flex';\r\n return Promise.resolve(template);\r\n }));\r\n }));\r\n }\r\n\r\n /**\r\n * Hide the overlay screen.\r\n */\r\n public hideOverlayScreen() {\r\n let template = this.templateManager.getTemplate('overlay');\r\n if (!template) { return Promise.resolve('Overlay template not found'); }\r\n\r\n return template.hide(((template) => {\r\n template.parent.style.opacity = \"0\";\r\n let onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = 'none';\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n\r\n let overlays = template.parent.querySelectorAll('.overlay');\r\n if (overlays) {\r\n for (let i = 0; i < overlays.length; ++i) {\r\n let htmlElement = <HTMLElement>overlays.item(i);\r\n htmlElement.style.display = 'none';\r\n }\r\n }\r\n return Promise.resolve(template);\r\n }));\r\n }\r\n\r\n /**\r\n * show the viewer (in case it was hidden)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to show the container\r\n */\r\n public show(visibilityFunction?: ((template: Template) => Promise<Template>)): Promise<Template> {\r\n let template = this.templateManager.getTemplate('main');\r\n //not possible, but yet:\r\n if (!template) { return Promise.reject('Main template not found'); }\r\n return template.show(visibilityFunction);\r\n }\r\n\r\n /**\r\n * hide the viewer (in case it is visible)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to hide the container\r\n */\r\n public hide(visibilityFunction?: ((template: Template) => Promise<Template>)) {\r\n let template = this.templateManager.getTemplate('main');\r\n //not possible, but yet:\r\n if (!template) { return Promise.reject('Main template not found'); }\r\n return template.hide(visibilityFunction);\r\n }\r\n\r\n /**\r\n * Show the loading screen.\r\n * The loading screen can be configured using the configuration object\r\n */\r\n public showLoadingScreen() {\r\n let template = this.templateManager.getTemplate('loadingScreen');\r\n if (!template) { return Promise.resolve('Loading Screen template not found'); }\r\n\r\n return template.show(((template) => {\r\n\r\n var canvasRect = this.containerElement.getBoundingClientRect();\r\n // var canvasPositioning = window.getComputedStyle(this.containerElement).position;\r\n\r\n template.parent.style.display = 'flex';\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n // from the configuration!!!\r\n let color = \"black\";\r\n if (this.configuration.templates && this.configuration.templates.loadingScreen) {\r\n color = (this.configuration.templates.loadingScreen.params &&\r\n <string>this.configuration.templates.loadingScreen.params.backgroundColor) || color;\r\n }\r\n template.parent.style.backgroundColor = color;\r\n return Promise.resolve(template);\r\n }));\r\n }\r\n\r\n /**\r\n * Hide the loading screen\r\n */\r\n public hideLoadingScreen() {\r\n let template = this.templateManager.getTemplate('loadingScreen');\r\n if (!template) { return Promise.resolve('Loading Screen template not found'); }\r\n\r\n return template.hide(((template) => {\r\n template.parent.style.opacity = \"0\";\r\n let onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = 'none';\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n return Promise.resolve(template);\r\n }));\r\n }\r\n\r\n public dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n\r\n super._onConfigurationLoaded(configuration);\r\n\r\n this.templateManager = new TemplateManager(this.containerElement);\r\n\r\n // initialize the templates\r\n let templateConfiguration = this.configuration.templates || {};\r\n\r\n this.templateManager.initTemplate(templateConfiguration);\r\n // when done, execute onTemplatesLoaded()\r\n this.templateManager.onAllLoaded.add(() => {\r\n let canvas = this.templateManager.getCanvas();\r\n if (canvas) {\r\n this._canvas = canvas;\r\n }\r\n this._onTemplateLoaded();\r\n });\r\n }\r\n\r\n /**\r\n * An extension of the light configuration of the abstract viewer.\r\n * @param lightsConfiguration the light configuration to use\r\n * @param model the model that will be used to configure the lights (if the lights are model-dependant)\r\n */\r\n private _configureLights() {\r\n // labs feature - flashlight\r\n if (this.configuration.lab && this.configuration.lab.flashlight) {\r\n let lightTarget;\r\n let angle = 0.5;\r\n let exponent = Math.PI / 2;\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n exponent = this.configuration.lab.flashlight.exponent || exponent;\r\n angle = this.configuration.lab.flashlight.angle || angle;\r\n }\r\n var flashlight = new SpotLight(\"flashlight\", Vector3.Zero(),\r\n Vector3.Zero(), exponent, angle, this.sceneManager.scene);\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n flashlight.intensity = this.configuration.lab.flashlight.intensity || flashlight.intensity;\r\n if (this.configuration.lab.flashlight.diffuse) {\r\n flashlight.diffuse.r = this.configuration.lab.flashlight.diffuse.r;\r\n flashlight.diffuse.g = this.configuration.lab.flashlight.diffuse.g;\r\n flashlight.diffuse.b = this.configuration.lab.flashlight.diffuse.b;\r\n }\r\n if (this.configuration.lab.flashlight.specular) {\r\n flashlight.specular.r = this.configuration.lab.flashlight.specular.r;\r\n flashlight.specular.g = this.configuration.lab.flashlight.specular.g;\r\n flashlight.specular.b = this.configuration.lab.flashlight.specular.b;\r\n }\r\n\r\n }\r\n this.sceneManager.scene.constantlyUpdateMeshUnderPointer = true;\r\n this.sceneManager.scene.onPointerObservable.add((eventData) => {\r\n if (eventData.type === 4 && eventData.pickInfo) {\r\n lightTarget = (eventData.pickInfo.pickedPoint);\r\n } else {\r\n lightTarget = undefined;\r\n }\r\n });\r\n let updateFlashlightFunction = () => {\r\n if (this.sceneManager.camera && flashlight) {\r\n flashlight.position.copyFrom(this.sceneManager.camera.position);\r\n if (lightTarget) {\r\n lightTarget.subtractToRef(flashlight.position, flashlight.direction);\r\n }\r\n }\r\n };\r\n this.sceneManager.scene.registerBeforeRender(updateFlashlightFunction);\r\n this._registeredOnBeforeRenderFunctions.push(updateFlashlightFunction);\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"defaultViewer.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/viewer/defaultViewer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAmB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAKtE;;;GAGG;AACH;IAAmC,iCAA0B;IAQzD;;;;OAIG;IACH,uBAAmB,gBAAyB,EAAE,oBAAkE;QAAlE,qCAAA,EAAA,yBAA8C,OAAO,EAAE,SAAS,EAAE;QAAhH,YACI,kBAAM,gBAAgB,EAAE,oBAAoB,CAAC,SAkChD;QAnCkB,sBAAgB,GAAhB,gBAAgB,CAAS;QAqCpC,wBAAkB,GAAiC,EAAE,CAAC;QAiHtD,yBAAmB,GAAG,UAAC,KAAoB;YAE/C,IAAI,WAAW,GAAiB,KAAK,CAAC,KAAK,CAAC;YAC5C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;gBAAE,OAAO;aAAE;YACzC,IAAI,OAAO,GAAiB,KAAK,CAAC,KAAK,CAAC,MAAO,CAAC;YAEhD,IAAI,CAAC,OAAO,EAAE;gBACV,OAAO;aACV;YAED,IAAI,aAAa,GAAG,OAAO,CAAC,aAAc,CAAC,SAAS,CAAC;YAErD,IAAI,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;YAEvC,IAAI,WAAW,GAAG,EAAE,CAAC;YAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAC5C,IAAI,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC7E,WAAW,GAAG,SAAS,CAAC;oBACxB,MAAM;iBACT;aACJ;YAED,QAAQ,WAAW,EAAE;gBACjB,KAAK,cAAc,CAAC;gBACpB,KAAK,cAAc;oBACf,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;wBAChC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;qBAChC;yBAAM;wBACH,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;qBAC7B;oBACD,MAAM;gBACV,KAAK,mBAAmB;oBACpB,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,MAAM;gBACV,KAAK,qBAAqB;oBACtB,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;oBAC1D,IAAI,KAAK,IAAI,KAAK,EAAE;wBAChB,KAAI,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;qBAC9E;oBACD,MAAM;gBACV,KAAK,qBAAqB;oBACtB,IAAI,CAAC,KAAI,CAAC,iBAAiB,EAAE;wBACzB,OAAO;qBACV;oBACD,IAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACrC,IAAI,KAAK,EAAE;wBACP,KAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;qBACrC;oBACD,MAAM;gBACV,KAAK,kBAAkB;oBACnB,KAAI,CAAC,WAAW,GAAG,CAAC,KAAI,CAAC,kBAAkB,CAAC;oBAC5C,IAAI,KAAI,CAAC,WAAW,EAAE;wBAClB,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;qBAC/B;oBACD,MAAM;gBACV,KAAK,mBAAmB;oBACpB,KAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,MAAM;gBACV,KAAK,WAAW;oBACZ,KAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,MAAM;gBACV;oBACI,OAAO;aACd;QACL,CAAC,CAAA;QAED;;WAEG;QACK,sBAAgB,GAAG,UAAC,UAAoB;YAC5C,IAAI,CAAC,KAAI,CAAC,iBAAiB,EAAE;gBACzB,OAAO;aACV;YACD,IAAI,KAAI,CAAC,kBAAkB,EAAE;gBACzB,KAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;aACpC;iBAAM;gBACH,KAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;aAClC;YAED,KAAI,CAAC,kBAAkB,GAAG,CAAC,KAAI,CAAC,kBAAkB,CAAC;YAEnD,IAAI,UAAU,EAAE;gBAAE,OAAO;aAAE;YAE3B,IAAI,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO;aAAE;YAExB,MAAM,CAAC,YAAY,CAAC;gBAChB,MAAM,EAAE,KAAI,CAAC,kBAAkB;aAClC,CAAC,CAAC;QACP,CAAC,CAAA;QAID;;WAEG;QACK,wBAAkB,GAAG;YACzB,IAAI,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO;aAAE;YACxB,IAAI,cAAc,GAAqB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;YAC7F,IAAI,cAAc,IAAI,KAAI,CAAC,iBAAiB,EAAE;gBAC1C,IAAM,QAAQ,GAAG,KAAI,CAAC,iBAAiB,CAAC,YAAY,GAAG,KAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,GAAG,CAAC;gBAC3F,IAAI,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC;gBAChD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,GAAG,EAAE,EAAE,wCAAwC;oBACnF,cAAc,CAAC,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC;iBACxC;gBAED,IAAI,KAAI,CAAC,iBAAiB,CAAC,KAAK,KAAK,cAAc,CAAC,OAAO,EAAE;oBACzD,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,KAAI,CAAC,qBAAqB,EAAE;wBAC9E,KAAI,CAAC,qBAAqB,GAAG,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;wBAC7F,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,CAAC,CAAC;qBACvE;iBACJ;qBAAM;oBACH,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,IAAI,KAAI,CAAC,qBAAqB,EAAE;wBAC7E,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAoB,CAAC,iBAAiB,GAAG,KAAI,CAAC,qBAAqB,CAAC;wBAC7F,KAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC;qBAClC;iBACJ;aACJ;QACL,CAAC,CAAA;QAED;;WAEG;QACK,2BAAqB,GAAG,UAAC,KAAa,EAAE,YAAkB;YAC9D,IAAI,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO;aAAE;YAExB,IAAI,KAAK,IAAI,KAAI,CAAC,iBAAiB,EAAE;gBACjC,KAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;gBACtD,IAAI,CAAC,KAAI,CAAC,kBAAkB,EAAE;oBAC1B,KAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;iBACpC;gBAED,IAAI,YAAY,EAAE;oBACd,YAAY,CAAC,aAAa,GAAG,KAAK,GAAG,GAAG,CAAC;iBAC5C;qBAAM;oBACH,MAAM,CAAC,YAAY,CAAC;wBAChB,aAAa,EAAE,KAAK,GAAG,GAAG;qBAC7B,CAAC,CAAC;iBACN;aACJ;QACL,CAAC,CAAA;QAED;;WAEG;QACK,0BAAoB,GAAG,UAAC,IAAsC,EAAE,YAAkB;YACtF,IAAI,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,CAAC,MAAM,EAAE;gBAAE,OAAO;aAAE;YAExB,IAAI,IAAI,EAAE;gBACN,KAAI,CAAC,iBAAiB,GAAG,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9F;YAED,IAAI,YAAY,EAAE;gBACd,YAAY,CAAC,iBAAiB,GAAG,CAAC,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/E,YAAY,CAAC,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC;aACnD;iBAAM;gBACH,MAAM,CAAC,YAAY,CAAC;oBAChB,iBAAiB,EAAE,CAAC,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAChE,qBAAqB,EAAE,IAAI,CAAC,KAAK;iBACpC,CAAC,CAAC;aACN;YAED,KAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC,CAAA;QA6BD;;WAEG;QACI,sBAAgB,GAAG;YACtB,IAAI,cAAc,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,aAAa,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC;YAC5D,IAAI,iBAAiB,GAAG,KAAI,CAAC,iBAAiB,IAAI,aAAa,CAAC;YAEhE,IAAI,iBAAiB,EAAE;gBACnB,IAAI,cAAc,GAAS,QAAS,CAAC,iBAAiB,IAAU,QAAS,CAAC,uBAAuB,IAAU,QAAS,CAAC,oBAAoB,IAAU,QAAS,CAAC,mBAAmB,CAAC;gBACjL,IAAI,CAAC,cAAc,EAAE;oBACjB,IAAI,iBAAiB,GAAG,iBAAiB,CAAC,iBAAiB,IAAU,iBAAkB,CAAC,uBAAuB,IAAU,iBAAkB,CAAC,mBAAmB,IAAU,iBAAkB,CAAC,oBAAoB,CAAC;oBACjN,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBAC1C,IAAI,aAAa,EAAE;wBACf,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;qBAChD;iBACJ;qBAAM;oBACH,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAU,QAAS,CAAC,oBAAoB,IAAU,QAAS,CAAC,gBAAgB,IAAU,QAAS,CAAC,mBAAmB,CAAC;oBAChK,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9B,IAAI,aAAa,EAAE;wBACf,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;qBACnD;iBACJ;aACJ;QACL,CAAC,CAAA;QAyEO,oBAAc,GAAG,UAAC,KAAkB;YACxC,KAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC/B,iEAAiE;YACjE,IAAI,gBAAgB,GAAG,EAAE,CAAC;YAC1B,IAAI,KAAI,CAAC,aAAa,CAAC,GAAG,IAAI,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,KAAK,SAAS,EAAE;gBACjF,gBAAgB,GAAG,KAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;aAC9D;YACD,UAAU,CAAC;gBACP,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC;oBACrC,KAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,CAAC,CAAC,CAAC;YACP,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAErB,OAAO;QACX,CAAC,CAAA;QAxcG,KAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAI,CAAC,cAAc,CAAC,CAAC;QACtD,KAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC;YAC9B,KAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,KAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;YAC5B,KAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,GAAG,CAAC,UAAC,IAAI;gBACpD,KAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,KAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAC1B,KAAI,CAAC,YAAY,CAAC,kBAAkB,GAAG,UAAU,WAAgC;gBAC7E,IAAI,IAAI,GAAG,WAAW,CAAC,eAAe,CAAC;gBACvC,IAAI,CAAC,IAAI,EAAE;oBACP,OAAO;iBACV;gBACD,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,KAAK,kBAAkB,CAAC;oBACtG,CAAC,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,KAAK,aAAa,CAAC,EAAE;oBAC9F,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;oBACrC,IAAI,IAAI,CAAC,YAAY,KAAK,UAAU,EAAE;wBAClC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;qBACpF;yBAAM;wBACH,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;qBAC/E;iBACJ;gBACD,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;YAC5D,CAAC,CAAA;YACD,IAAI,CAAC,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE;gBAClC,KAAI,CAAC,iBAAiB,EAAE,CAAC;aAC5B;QACL,CAAC,CAAC,CAAC;;IACP,CAAC;IAIM,8CAAsB,GAA7B,UAA8B,MAA6B;QAA3D,iBA0BC;QAzBG,UAAU;QACV,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,mBAAY,MAAM,CAAC,YAAY,eAAY,CAAC,CAAC;SAChE;QACD,IAAI,MAAM,CAAC,eAAe,EAAE;YACxB,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,UAAC,IAAI;gBAC7B,MAAM,CAAC,eAAgB,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,MAAM,EAAE,CAAC;SACrB;QAED,IAAI,MAAM,CAAC,cAAc,EAAE;YACvB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,UAAC,SAAS;gBACpC,MAAM,CAAC,OAAO,IAAI,KAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,EAAE,UAAC,KAAK;oBAC5F,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;wBACtD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;qBACzB;gBACL,CAAC,EAAE,SAAS,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED;;OAEG;IACO,0CAAkB,GAA5B;QAAA,iBAoCC;QAnCG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,SAAS;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,uBAAuB;QACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE;YAEV,IAAI,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;YACjE,IAAI,WAAW,EAAE;gBACb,WAAW,CAAC,gBAAgB,CAAC,aAAa,EAAE;oBACxC,KAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,CAAC,CAAC,CAAC;aACN;SACJ;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE;YACrE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE;gBAC5G,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC;oBAC/B,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC,KAAI,CAAC,MAAM,EAAE,KAAI,CAAC,YAAY,CAAC,KAAK,EAAE;oBACtE,CAAC,EAAE;oBACH,CAAC,EAAE;oBACH,CAAC,EAAE;oBACH,CAAC,EAAE;oBACH,CAAC,EAAE,UAAC,IAAU;wBACV,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC,EAAE;oBACH,CAAC,CAAC,CAAC;oBACH,UAAU,CAAC,0BAA0B,CAAC,KAAI,CAAC,eAAe,CAAC,SAAS,EAAG,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;aACN;SACJ;QAED,OAAO,iBAAM,kBAAkB,WAAE,CAAC;IACtC,CAAC;IAEO,mCAAW,GAAnB;QAAA,iBAmCC;QAlCG,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAChG,iEAAiE;YACjE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE;gBACzD,gBAAgB;YACpB,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;YAElC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAC,KAAoB;gBAC9E,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC;gBACxB,IAAM,OAAO,GAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,CAAC,KAAI,CAAC,iBAAiB,EAAE;oBAAE,OAAO;iBAAE;gBACxC,IAAM,SAAS,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,GAAG,GAAG,KAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;gBACvE,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE;oBAAE,OAAO;iBAAE;gBACjC,KAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAChD,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE;gBACzD,IAAI,KAAI,CAAC,WAAW,EAAE;oBAClB,KAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;iBAC/B;gBACD,KAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC7B,CAAC,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;YAErC,IAAI,MAAM,CAAC,gBAAgB,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,EAAE;gBAC3G,MAAM,CAAC,YAAY,CAAC;oBAChB,YAAY,EAAE,IAAI;iBACrB,CAAC,CAAC;aACN;YAED,IAAI,CAAC,sBAAsB,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,sBAAsB,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;SAC5D;IACL,CAAC;IAkLS,+BAAO,GAAjB;QAAA,iBAyBC;QAxBG,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC;YACzC,IAAI,cAAc,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAChE,IAAI,aAAa,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC;YAE5D,IAAI,aAAa,EAAE;gBACf,IAAI,KAAI,CAAC,YAAY,CAAC,QAAS,CAAC,UAAU,EAAE;oBACxC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;iBACxC;qBAAM;oBACH,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBAC3C;aACJ;QACL,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC5B,2EAA2E;YAC3E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC;gBACvC,IAAI,cAAc,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAChE,IAAI,aAAa,GAAG,cAAc,IAAI,cAAc,CAAC,MAAM,CAAC;gBAE5D,IAAI,aAAa,EAAE;oBACf,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;iBAC3C;YACL,CAAC,CAAC,CAAC;SACN;QACD,iBAAM,OAAO,WAAE,CAAC;IACpB,CAAC;IA4BD;;OAEG;IACO,gDAAwB,GAAlC;QACI,IAAM,WAAW,GAAG,IAAI,CAAC,gBAA+B,CAAC;QACzD,IAAI,WAAW,CAAC,KAAK,EAAE;YACnB,WAAW,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;YACxC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAClC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;SACtC;IACL,CAAC;IAED;;;;OAIG;IACO,0CAAkB,GAA5B,UAA6B,KAAmB;QAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO;SAAE;QAExB,IAAI,SAAS,GAAQ,MAAM,CAAC,aAAa,CAAC,MAAM,IAAI,EAAE,CAAC;QAEvD,IAAI,CAAC,KAAK,EAAE;YACR,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;SAC/B;aAAM;YAEH,IAAI,cAAc,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC/C,SAAS,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,UAAC,CAAC,IAAO,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACrF,IAAI,cAAc,CAAC,MAAM,EAAE;gBACvB,IAAI,CAAC,kBAAkB,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;gBACxI,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;gBACrC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC3C,IAAI,cAAc,GAAG,CAAC,CAAC;gBACvB,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE;oBAC9F,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;oBACjF,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;wBACvB,cAAc,GAAG,CAAC,CAAC;qBACtB;iBACJ;gBACD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC;aAC9E;iBAAM;gBACH,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;aAC/B;YAED,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;gBAC/B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;aACvD;SACJ;QACD,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACI,iCAAS,GAAhB,UAAiB,KAA2C;QAA5D,iBAWC;QAVG,IAAI,CAAC,KAAK,EAAE;YACR,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;SACpC;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,iBAAM,SAAS,YAAC,KAAM,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,UAAC,KAAK;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,KAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,KAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACP,CAAC;IAkBD;;;;OAIG;IACI,yCAAiB,GAAxB,UAAyB,SAAiB;QAA1C,iBAsBC;QArBG,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;SAAE;QAExE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAC,QAAQ;YAE3B,IAAI,UAAU,GAAG,KAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YAE/D,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;YACtD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;YACxD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YAEpC,IAAI,WAAW,GAAG,KAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,qBAAqB,CAAC,CAAC;aAC5D;YACD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,UAAC,QAAQ;gBAC9B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBACvC,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC,CAAC;QACR,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;OAEG;IACI,yCAAiB,GAAxB;QACI,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;SAAE;QAExE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAC,QAAQ;YAC3B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YACpC,IAAI,eAAe,GAAG;gBAClB,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;gBACtE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,CAAC,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAEnE,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,QAAQ,EAAE;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;oBACtC,IAAI,WAAW,GAAgB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChD,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;iBACtC;aACJ;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;;;OAIG;IACI,4BAAI,GAAX,UAAY,kBAAgE;QACxE,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxD,wBAAwB;QACxB,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;SAAE;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IAED;;;;OAIG;IACI,4BAAI,GAAX,UAAY,kBAAgE;QACxE,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACxD,wBAAwB;QACxB,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;SAAE;QACpE,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACI,yCAAiB,GAAxB;QAAA,iBAsBC;QArBG,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;SAAE;QAE/E,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAC,QAAQ;YAE3B,IAAI,UAAU,GAAG,KAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;YAC/D,mFAAmF;YAEnF,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;YACtD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC;YACxD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YACpC,4BAA4B;YAC5B,IAAI,KAAK,GAAG,OAAO,CAAC;YACpB,IAAI,KAAI,CAAC,aAAa,CAAC,SAAS,IAAI,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE;gBAC5E,KAAK,GAAG,CAAC,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM;oBAC9C,KAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC;aAC3F;YACD,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAED;;OAEG;IACI,yCAAiB,GAAxB;QACI,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC;SAAE;QAE/E,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAC,QAAQ;YAC3B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;YACpC,IAAI,eAAe,GAAG;gBAClB,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;gBACtE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,CAAC,CAAC;YACF,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YACnE,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC,CAAC;IACR,CAAC;IAEM,+BAAO,GAAd;QACI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QAC/B,iBAAM,OAAO,WAAE,CAAC;IACpB,CAAC;IAES,8CAAsB,GAAhC,UAAiC,aAAkC;QAAnE,iBAkBC;QAhBG,iBAAM,sBAAsB,YAAC,aAAa,CAAC,CAAC;QAE5C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAElE,2BAA2B;QAC3B,IAAI,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,EAAE,CAAC;QAE/D,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;QACzD,yCAAyC;QACzC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC;YACjC,IAAI,MAAM,GAAG,KAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YAC9C,IAAI,MAAM,EAAE;gBACR,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aACzB;YACD,KAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACK,wCAAgB,GAAxB;QAAA,iBA6CC;QA5CG,4BAA4B;QAC5B,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE;YAC7D,IAAI,aAAW,CAAC;YAChB,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3B,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;gBACvD,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,QAAQ,CAAC;gBAClE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,IAAI,KAAK,CAAC;aAC5D;YACD,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,EACvD,OAAO,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC9D,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE;gBACvD,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;gBAC3F,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE;oBAC3C,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;oBACnE,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;iBACtE;gBACD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE;oBAC5C,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACrE,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACrE,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;iBACxE;aAEJ;YACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,gCAAgC,GAAG,IAAI,CAAC;YAChE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAC,SAAS;gBACtD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;oBAC5C,aAAW,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;iBAClD;qBAAM;oBACH,aAAW,GAAG,SAAS,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YACH,IAAI,wBAAwB,GAAG;gBAC3B,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,IAAI,UAAU,EAAE;oBACxC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAChE,IAAI,aAAW,EAAE;wBACb,aAAW,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;qBACxE;iBACJ;YACL,CAAC,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;YACvE,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAC1E;IACL,CAAC;IACL,oBAAC;AAAD,CAAC,AAnqBD,CAAmC,0BAA0B,GAmqB5D","sourcesContent":["\r\nimport { Template, EventCallback } from '../templating/templateManager';\r\nimport { FilesInput } from '@babylonjs/core/Misc/filesInput';\r\nimport { SpotLight } from '@babylonjs/core/Lights/spotLight';\r\nimport { Vector3 } from '@babylonjs/core/Maths/math';\r\nimport { TemplateManager } from '../templating/templateManager';\r\nimport { AbstractViewerWithTemplate } from './viewerWithTemplate';\r\nimport { StandardMaterial } from '@babylonjs/core/Materials/standardMaterial';\r\nimport { PBRMaterial } from '@babylonjs/core/Materials/PBR/pbrMaterial';\r\nimport { extendClassWithConfig } from '../helper/index';\r\nimport { ViewerModel } from '../model/viewerModel';\r\nimport { IModelAnimation, AnimationState } from '../model/modelAnimation';\r\nimport { IViewerTemplatePlugin } from '../templating/viewerTemplatePlugin';\r\nimport { HDButtonPlugin } from '../templating/plugins/hdButtonPlugin';\r\nimport { PrintButtonPlugin } from '../templating/plugins/printButton';\r\nimport { ViewerConfiguration } from '../configuration/configuration';\r\nimport { ISceneConfiguration } from '../configuration/interfaces/sceneConfiguration';\r\nimport { IModelConfiguration } from '../configuration/interfaces/modelConfiguration';\r\n\r\n/**\r\n * The Default viewer is the default implementation of the AbstractViewer.\r\n * It uses the templating system to render a new canvas and controls.\r\n */\r\nexport class DefaultViewer extends AbstractViewerWithTemplate {\r\n /**\r\n * The corresponsing template manager of this viewer.\r\n */\r\n public templateManager: TemplateManager;\r\n\r\n public fullscreenElement?: Element;\r\n\r\n /**\r\n * Create a new default viewer\r\n * @param containerElement the element in which the templates will be rendered\r\n * @param initialConfiguration the initial configuration. Defaults to extending the default configuration\r\n */\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = { extends: 'default' }) {\r\n super(containerElement, initialConfiguration);\r\n\r\n this.onModelLoadedObservable.add(this._onModelLoaded);\r\n this.onModelRemovedObservable.add(() => {\r\n this._configureTemplate();\r\n });\r\n\r\n this.onEngineInitObservable.add(() => {\r\n this.sceneManager.onLightsConfiguredObservable.add((data) => {\r\n this._configureLights();\r\n });\r\n });\r\n\r\n this.onInitDoneObservable.add(() => {\r\n this.sceneManager.setDefaultMaterial = function (sceneConfig: ISceneConfiguration) {\r\n let conf = sceneConfig.defaultMaterial;\r\n if (!conf) {\r\n return;\r\n }\r\n if ((conf.materialType === 'standard' && this.scene.defaultMaterial.getClassName() !== 'StandardMaterial') ||\r\n (conf.materialType === 'pbr' && this.scene.defaultMaterial.getClassName() !== 'PBRMaterial')) {\r\n this.scene.defaultMaterial.dispose();\r\n if (conf.materialType === 'standard') {\r\n this.scene.defaultMaterial = new StandardMaterial(\"defaultMaterial\", this.scene);\r\n } else {\r\n this.scene.defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n }\r\n }\r\n extendClassWithConfig(this.scene.defaultMaterial, conf);\r\n }\r\n if (!this.sceneManager.models.length) {\r\n this.hideLoadingScreen();\r\n }\r\n });\r\n }\r\n\r\n private _registeredPlugins: Array<IViewerTemplatePlugin> = [];\r\n\r\n public registerTemplatePlugin(plugin: IViewerTemplatePlugin) {\r\n //validate\r\n if (!plugin.templateName) {\r\n throw new Error(\"No template name provided\");\r\n }\r\n this._registeredPlugins.push(plugin);\r\n let template = this.templateManager.getTemplate(plugin.templateName);\r\n if (!template) {\r\n throw new Error(`Template ${plugin.templateName} not found`);\r\n }\r\n if (plugin.addHTMLTemplate) {\r\n template.onHTMLRendered.add((tmpl) => {\r\n plugin.addHTMLTemplate!(tmpl);\r\n });\r\n template.redraw();\r\n }\r\n\r\n if (plugin.eventsToAttach) {\r\n plugin.eventsToAttach.forEach((eventName) => {\r\n plugin.onEvent && this.templateManager.eventManager.registerCallback(plugin.templateName, (event) => {\r\n if (plugin.onEvent && plugin.interactionPredicate(event)) {\r\n plugin.onEvent(event);\r\n }\r\n }, eventName);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This will be executed when the templates initialize.\r\n */\r\n protected _onTemplatesLoaded() {\r\n this.showLoadingScreen();\r\n\r\n // navbar\r\n this._initNavbar();\r\n\r\n // close overlay button\r\n let template = this.templateManager.getTemplate('overlay');\r\n if (template) {\r\n\r\n let closeButton = template.parent.querySelector('.close-button');\r\n if (closeButton) {\r\n closeButton.addEventListener('pointerdown', () => {\r\n this.hideOverlayScreen();\r\n });\r\n }\r\n }\r\n\r\n if (this.configuration.templates && this.configuration.templates.viewer) {\r\n if (this.configuration.templates.viewer.params && this.configuration.templates.viewer.params.enableDragAndDrop) {\r\n this.onSceneInitObservable.addOnce(() => {\r\n let filesInput = new FilesInput(this.engine, this.sceneManager.scene, () => {\r\n }, () => {\r\n }, () => {\r\n }, () => {\r\n }, function () {\r\n }, (file: File) => {\r\n this.loadModel(file);\r\n }, () => {\r\n });\r\n filesInput.monitorElementForDragNDrop(this.templateManager.getCanvas()!);\r\n });\r\n }\r\n }\r\n\r\n return super._onTemplatesLoaded();\r\n }\r\n\r\n private _initNavbar() {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (navbar) {\r\n this.onFrameRenderedObservable.add(this._updateProgressBar);\r\n this.templateManager.eventManager.registerCallback('navBar', this._handlePointerClick, 'click');\r\n // an example how to trigger the help button. publiclly available\r\n this.templateManager.eventManager.registerCallback(\"navBar\", () => {\r\n // do your thing\r\n }, \"pointerdown\", \".help-button\");\r\n\r\n this.templateManager.eventManager.registerCallback(\"navBar\", (event: EventCallback) => {\r\n const evt = event.event;\r\n const element = <HTMLInputElement>(evt.target);\r\n if (!this._currentAnimation) { return; }\r\n const gotoFrame = +element.value / 100 * this._currentAnimation.frames;\r\n if (isNaN(gotoFrame)) { return; }\r\n this._currentAnimation.goToFrame(gotoFrame);\r\n }, \"input\");\r\n\r\n this.templateManager.eventManager.registerCallback(\"navBar\", () => {\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n this._resumePlay = false;\r\n }, \"pointerup\", \".progress-wrapper\");\r\n\r\n if (window.devicePixelRatio === 1 && navbar.configuration.params && !navbar.configuration.params.hideHdButton) {\r\n navbar.updateParams({\r\n hideHdButton: true\r\n });\r\n }\r\n\r\n this.registerTemplatePlugin(new HDButtonPlugin(this));\r\n this.registerTemplatePlugin(new PrintButtonPlugin(this));\r\n }\r\n }\r\n\r\n private _animationList: string[];\r\n private _currentAnimation: IModelAnimation;\r\n private _isAnimationPaused: boolean;\r\n private _resumePlay: boolean;\r\n\r\n private _handlePointerClick = (event: EventCallback) => {\r\n\r\n let pointerDown = <PointerEvent>event.event;\r\n if (pointerDown.button !== 0) { return; }\r\n var element = (<HTMLElement>event.event.target);\r\n\r\n if (!element) {\r\n return;\r\n }\r\n\r\n let parentClasses = element.parentElement!.classList;\r\n\r\n let elementClasses = element.classList;\r\n\r\n let elementName = \"\";\r\n\r\n for (let i = 0; i < elementClasses.length; ++i) {\r\n let className = elementClasses[i];\r\n if (className.indexOf(\"-button\") !== -1 || className.indexOf(\"-wrapper\") !== -1) {\r\n elementName = className;\r\n break;\r\n }\r\n }\r\n\r\n switch (elementName) {\r\n case \"speed-button\":\r\n case \"types-button\":\r\n if (parentClasses.contains(\"open\")) {\r\n parentClasses.remove(\"open\");\r\n } else {\r\n parentClasses.add(\"open\");\r\n }\r\n break;\r\n case \"play-pause-button\":\r\n this._togglePlayPause();\r\n break;\r\n case \"label-option-button\":\r\n var value = element.dataset[\"value\"];\r\n var label = element.querySelector(\"span.animation-label\");\r\n if (label && value) {\r\n this._updateAnimationType({ value: value.trim(), label: label.innerHTML });\r\n }\r\n break;\r\n case \"speed-option-button\":\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n var speed = element.dataset[\"value\"];\r\n if (speed) {\r\n this._updateAnimationSpeed(speed);\r\n }\r\n break;\r\n case \"progress-wrapper\":\r\n this._resumePlay = !this._isAnimationPaused;\r\n if (this._resumePlay) {\r\n this._togglePlayPause(true);\r\n }\r\n break;\r\n case \"fullscreen-button\":\r\n this.toggleFullscreen();\r\n break;\r\n case \"vr-button\":\r\n this.toggleVR();\r\n break;\r\n default:\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Plays or Pauses animation\r\n */\r\n private _togglePlayPause = (noUiUpdate?: boolean) => {\r\n if (!this._currentAnimation) {\r\n return;\r\n }\r\n if (this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n } else {\r\n this._currentAnimation.pause();\r\n }\r\n\r\n this._isAnimationPaused = !this._isAnimationPaused;\r\n\r\n if (noUiUpdate) { return; }\r\n\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n navbar.updateParams({\r\n paused: this._isAnimationPaused,\r\n });\r\n }\r\n\r\n private _oldIdleRotationValue: number;\r\n\r\n /**\r\n * Control progress bar position based on animation current frame\r\n */\r\n private _updateProgressBar = () => {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n var progressSlider = <HTMLInputElement>navbar.parent.querySelector(\"input.progress-wrapper\");\r\n if (progressSlider && this._currentAnimation) {\r\n const progress = this._currentAnimation.currentFrame / this._currentAnimation.frames * 100;\r\n var currentValue = progressSlider.valueAsNumber;\r\n if (Math.abs(currentValue - progress) > 0.5) { // Only move if greater than a 1% change\r\n progressSlider.value = '' + progress;\r\n }\r\n\r\n if (this._currentAnimation.state === AnimationState.PLAYING) {\r\n if (this.sceneManager.camera.autoRotationBehavior && !this._oldIdleRotationValue) {\r\n this._oldIdleRotationValue = this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed;\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.camera.autoRotationBehavior && this._oldIdleRotationValue) {\r\n this.sceneManager.camera.autoRotationBehavior.idleRotationSpeed = this._oldIdleRotationValue;\r\n this._oldIdleRotationValue = 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update Current Animation Speed\r\n */\r\n private _updateAnimationSpeed = (speed: string, paramsObject?: any) => {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n if (speed && this._currentAnimation) {\r\n this._currentAnimation.speedRatio = parseFloat(speed);\r\n if (!this._isAnimationPaused) {\r\n this._currentAnimation.restart();\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedSpeed = speed + \"x\";\r\n } else {\r\n navbar.updateParams({\r\n selectedSpeed: speed + \"x\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Update Current Animation Type\r\n */\r\n private _updateAnimationType = (data: { label: string, value: string }, paramsObject?: any) => {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n if (data) {\r\n this._currentAnimation = this.sceneManager.models[0].setCurrentAnimationByName(data.value);\r\n }\r\n\r\n if (paramsObject) {\r\n paramsObject.selectedAnimation = (this._animationList.indexOf(data.value) + 1);\r\n paramsObject.selectedAnimationName = data.label;\r\n } else {\r\n navbar.updateParams({\r\n selectedAnimation: (this._animationList.indexOf(data.value) + 1),\r\n selectedAnimationName: data.label\r\n });\r\n }\r\n\r\n this._updateAnimationSpeed(\"1.0\", paramsObject);\r\n }\r\n\r\n protected _initVR() {\r\n this.engine.onVRDisplayChangedObservable.add(() => {\r\n let viewerTemplate = this.templateManager.getTemplate('viewer');\r\n let viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n if (this.sceneManager.vrHelper!.isInVRMode) {\r\n viewerElement.classList.add(\"in-vr\");\r\n } else {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n }\r\n });\r\n if (this.sceneManager.vrHelper) {\r\n // due to the way the experience helper is exisintg VR, this must be added.\r\n this.sceneManager.vrHelper.onExitingVR.add(() => {\r\n let viewerTemplate = this.templateManager.getTemplate('viewer');\r\n let viewerElement = viewerTemplate && viewerTemplate.parent;\r\n\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-vr\");\r\n }\r\n });\r\n }\r\n super._initVR();\r\n }\r\n\r\n /**\r\n * Toggle fullscreen of the entire viewer\r\n */\r\n public toggleFullscreen = () => {\r\n let viewerTemplate = this.templateManager.getTemplate('viewer');\r\n let viewerElement = viewerTemplate && viewerTemplate.parent;\r\n let fullscreenElement = this.fullscreenElement || viewerElement;\r\n\r\n if (fullscreenElement) {\r\n let currentElement = (<any>document).fullscreenElement || (<any>document).webkitFullscreenElement || (<any>document).mozFullScreenElement || (<any>document).msFullscreenElement;\r\n if (!currentElement) {\r\n let requestFullScreen = fullscreenElement.requestFullscreen || (<any>fullscreenElement).webkitRequestFullscreen || (<any>fullscreenElement).msRequestFullscreen || (<any>fullscreenElement).mozRequestFullScreen;\r\n requestFullScreen.call(fullscreenElement);\r\n if (viewerElement) {\r\n viewerElement.classList.add(\"in-fullscreen\");\r\n }\r\n } else {\r\n let exitFullscreen = document.exitFullscreen || (<any>document).webkitExitFullscreen || (<any>document).msExitFullscreen || (<any>document).mozCancelFullScreen;\r\n exitFullscreen.call(document);\r\n if (viewerElement) {\r\n viewerElement.classList.remove(\"in-fullscreen\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Preparing the container element to present the viewer\r\n */\r\n protected _prepareContainerElement() {\r\n const htmlElement = this.containerElement as HTMLElement;\r\n if (htmlElement.style) {\r\n htmlElement.style.position = 'relative';\r\n htmlElement.style.height = '100%';\r\n htmlElement.style.display = 'flex';\r\n }\r\n }\r\n\r\n /**\r\n * This function will configure the templates and update them after a model was loaded\r\n * It is mainly responsible to changing the title and subtitle etc'.\r\n * @param model the model to be used to configure the templates by\r\n */\r\n protected _configureTemplate(model?: ViewerModel) {\r\n let navbar = this.templateManager.getTemplate('navBar');\r\n if (!navbar) { return; }\r\n\r\n let newParams: any = navbar.configuration.params || {};\r\n\r\n if (!model) {\r\n newParams.animations = null;\r\n } else {\r\n\r\n let animationNames = model.getAnimationNames();\r\n newParams.animations = animationNames.map((a) => { return { label: a, value: a }; });\r\n if (animationNames.length) {\r\n this._isAnimationPaused = (model.configuration.animation && !model.configuration.animation.autoStart) || !model.configuration.animation;\r\n this._animationList = animationNames;\r\n newParams.paused = this._isAnimationPaused;\r\n let animationIndex = 0;\r\n if (model.configuration.animation && typeof model.configuration.animation.autoStart === 'string') {\r\n animationIndex = animationNames.indexOf(model.configuration.animation.autoStart);\r\n if (animationIndex === -1) {\r\n animationIndex = 0;\r\n }\r\n }\r\n this._updateAnimationType(newParams.animations[animationIndex], newParams);\r\n } else {\r\n newParams.animations = null;\r\n }\r\n\r\n if (model.configuration.thumbnail) {\r\n newParams.logoImage = model.configuration.thumbnail;\r\n }\r\n }\r\n navbar.updateParams(newParams, false);\r\n }\r\n\r\n /**\r\n * This will load a new model to the default viewer\r\n * overriding the AbstractViewer's loadModel.\r\n * The scene will automatically be cleared of the old models, if exist.\r\n * @param model the configuration object (or URL) to load.\r\n */\r\n public loadModel(model?: string | File | IModelConfiguration): Promise<ViewerModel> {\r\n if (!model) {\r\n model = this.configuration.model;\r\n }\r\n this.showLoadingScreen();\r\n return super.loadModel(model!, true).catch((error) => {\r\n console.log(error);\r\n this.hideLoadingScreen();\r\n this.showOverlayScreen('error');\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n private _onModelLoaded = (model: ViewerModel) => {\r\n this._configureTemplate(model);\r\n // with a short timeout, making sure everything is there already.\r\n let hideLoadingDelay = 20;\r\n if (this.configuration.lab && this.configuration.lab.hideLoadingDelay !== undefined) {\r\n hideLoadingDelay = this.configuration.lab.hideLoadingDelay;\r\n }\r\n setTimeout(() => {\r\n this.sceneManager.scene.executeWhenReady(() => {\r\n this.hideLoadingScreen();\r\n });\r\n }, hideLoadingDelay);\r\n\r\n return;\r\n }\r\n\r\n /**\r\n * Show the overlay and the defined sub-screen.\r\n * Mainly used for help and errors\r\n * @param subScreen the name of the subScreen. Those can be defined in the configuration object\r\n */\r\n public showOverlayScreen(subScreen: string) {\r\n let template = this.templateManager.getTemplate('overlay');\r\n if (!template) { return Promise.resolve('Overlay template not found'); }\r\n\r\n return template.show(((template) => {\r\n\r\n var canvasRect = this.containerElement.getBoundingClientRect();\r\n\r\n template.parent.style.display = 'flex';\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n\r\n let subTemplate = this.templateManager.getTemplate(subScreen);\r\n if (!subTemplate) {\r\n return Promise.reject(subScreen + ' template not found');\r\n }\r\n return subTemplate.show(((template) => {\r\n template.parent.style.display = 'flex';\r\n return Promise.resolve(template);\r\n }));\r\n }));\r\n }\r\n\r\n /**\r\n * Hide the overlay screen.\r\n */\r\n public hideOverlayScreen() {\r\n let template = this.templateManager.getTemplate('overlay');\r\n if (!template) { return Promise.resolve('Overlay template not found'); }\r\n\r\n return template.hide(((template) => {\r\n template.parent.style.opacity = \"0\";\r\n let onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = 'none';\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n\r\n let overlays = template.parent.querySelectorAll('.overlay');\r\n if (overlays) {\r\n for (let i = 0; i < overlays.length; ++i) {\r\n let htmlElement = <HTMLElement>overlays.item(i);\r\n htmlElement.style.display = 'none';\r\n }\r\n }\r\n return Promise.resolve(template);\r\n }));\r\n }\r\n\r\n /**\r\n * show the viewer (in case it was hidden)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to show the container\r\n */\r\n public show(visibilityFunction?: ((template: Template) => Promise<Template>)): Promise<Template> {\r\n let template = this.templateManager.getTemplate('main');\r\n //not possible, but yet:\r\n if (!template) { return Promise.reject('Main template not found'); }\r\n return template.show(visibilityFunction);\r\n }\r\n\r\n /**\r\n * hide the viewer (in case it is visible)\r\n *\r\n * @param visibilityFunction an optional function to execute in order to hide the container\r\n */\r\n public hide(visibilityFunction?: ((template: Template) => Promise<Template>)) {\r\n let template = this.templateManager.getTemplate('main');\r\n //not possible, but yet:\r\n if (!template) { return Promise.reject('Main template not found'); }\r\n return template.hide(visibilityFunction);\r\n }\r\n\r\n /**\r\n * Show the loading screen.\r\n * The loading screen can be configured using the configuration object\r\n */\r\n public showLoadingScreen() {\r\n let template = this.templateManager.getTemplate('loadingScreen');\r\n if (!template) { return Promise.resolve('Loading Screen template not found'); }\r\n\r\n return template.show(((template) => {\r\n\r\n var canvasRect = this.containerElement.getBoundingClientRect();\r\n // var canvasPositioning = window.getComputedStyle(this.containerElement).position;\r\n\r\n template.parent.style.display = 'flex';\r\n template.parent.style.width = canvasRect.width + \"px\";\r\n template.parent.style.height = canvasRect.height + \"px\";\r\n template.parent.style.opacity = \"1\";\r\n // from the configuration!!!\r\n let color = \"black\";\r\n if (this.configuration.templates && this.configuration.templates.loadingScreen) {\r\n color = (this.configuration.templates.loadingScreen.params &&\r\n <string>this.configuration.templates.loadingScreen.params.backgroundColor) || color;\r\n }\r\n template.parent.style.backgroundColor = color;\r\n return Promise.resolve(template);\r\n }));\r\n }\r\n\r\n /**\r\n * Hide the loading screen\r\n */\r\n public hideLoadingScreen() {\r\n let template = this.templateManager.getTemplate('loadingScreen');\r\n if (!template) { return Promise.resolve('Loading Screen template not found'); }\r\n\r\n return template.hide(((template) => {\r\n template.parent.style.opacity = \"0\";\r\n let onTransitionEnd = () => {\r\n template.parent.removeEventListener(\"transitionend\", onTransitionEnd);\r\n template.parent.style.display = 'none';\r\n };\r\n template.parent.addEventListener(\"transitionend\", onTransitionEnd);\r\n return Promise.resolve(template);\r\n }));\r\n }\r\n\r\n public dispose() {\r\n this.templateManager.dispose();\r\n super.dispose();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n\r\n super._onConfigurationLoaded(configuration);\r\n\r\n this.templateManager = new TemplateManager(this.containerElement);\r\n\r\n // initialize the templates\r\n let templateConfiguration = this.configuration.templates || {};\r\n\r\n this.templateManager.initTemplate(templateConfiguration);\r\n // when done, execute onTemplatesLoaded()\r\n this.templateManager.onAllLoaded.add(() => {\r\n let canvas = this.templateManager.getCanvas();\r\n if (canvas) {\r\n this._canvas = canvas;\r\n }\r\n this._onTemplateLoaded();\r\n });\r\n }\r\n\r\n /**\r\n * An extension of the light configuration of the abstract viewer.\r\n * @param lightsConfiguration the light configuration to use\r\n * @param model the model that will be used to configure the lights (if the lights are model-dependant)\r\n */\r\n private _configureLights() {\r\n // labs feature - flashlight\r\n if (this.configuration.lab && this.configuration.lab.flashlight) {\r\n let lightTarget;\r\n let angle = 0.5;\r\n let exponent = Math.PI / 2;\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n exponent = this.configuration.lab.flashlight.exponent || exponent;\r\n angle = this.configuration.lab.flashlight.angle || angle;\r\n }\r\n var flashlight = new SpotLight(\"flashlight\", Vector3.Zero(),\r\n Vector3.Zero(), exponent, angle, this.sceneManager.scene);\r\n if (typeof this.configuration.lab.flashlight === \"object\") {\r\n flashlight.intensity = this.configuration.lab.flashlight.intensity || flashlight.intensity;\r\n if (this.configuration.lab.flashlight.diffuse) {\r\n flashlight.diffuse.r = this.configuration.lab.flashlight.diffuse.r;\r\n flashlight.diffuse.g = this.configuration.lab.flashlight.diffuse.g;\r\n flashlight.diffuse.b = this.configuration.lab.flashlight.diffuse.b;\r\n }\r\n if (this.configuration.lab.flashlight.specular) {\r\n flashlight.specular.r = this.configuration.lab.flashlight.specular.r;\r\n flashlight.specular.g = this.configuration.lab.flashlight.specular.g;\r\n flashlight.specular.b = this.configuration.lab.flashlight.specular.b;\r\n }\r\n\r\n }\r\n this.sceneManager.scene.constantlyUpdateMeshUnderPointer = true;\r\n this.sceneManager.scene.onPointerObservable.add((eventData) => {\r\n if (eventData.type === 4 && eventData.pickInfo) {\r\n lightTarget = (eventData.pickInfo.pickedPoint);\r\n } else {\r\n lightTarget = undefined;\r\n }\r\n });\r\n let updateFlashlightFunction = () => {\r\n if (this.sceneManager.camera && flashlight) {\r\n flashlight.position.copyFrom(this.sceneManager.camera.position);\r\n if (lightTarget) {\r\n lightTarget.subtractToRef(flashlight.position, flashlight.direction);\r\n }\r\n }\r\n };\r\n this.sceneManager.scene.registerBeforeRender(updateFlashlightFunction);\r\n this._registeredOnBeforeRenderFunctions.push(updateFlashlightFunction);\r\n }\r\n }\r\n}"]}
@@ -1,4 +1,4 @@
1
- import { ViewerConfiguration } from '../configuration';
1
+ import { ViewerConfiguration } from '../configuration/configuration';
2
2
  import { AbstractViewer } from './viewer';
3
3
  export declare class RenderOnlyViewer extends AbstractViewer {
4
4
  containerElement: Element;
@@ -1 +1 @@
1
- {"version":3,"file":"renderOnlyViewer.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/viewer/renderOnlyViewer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;IAAsC,oCAAc;IAChD,0BAAmB,gBAAyB,EAAE,oBAA8C;QAA9C,qCAAA,EAAA,yBAA8C;QAA5F,YACI,kBAAM,gBAAgB,EAAE,oBAAoB,CAAC,SAEhD;QAHkB,sBAAgB,GAAhB,gBAAgB,CAAS;QAExC,KAAI,CAAC,OAAO,GAAG,gBAAqC,CAAA;;IACxD,CAAC;IACM,qCAAU,GAAjB;QAAA,iBAiBC;QAhBG,IAAI,QAAQ,GAAG,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1H,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAC,MAAM;YAClC,OAAO,KAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC,IAAI,CAAC;YACJ,KAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,QAAQ,EAAE;gBACV,OAAO,KAAI,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAM,CAAC,CAAC,KAAK,CAAC,cAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAQ,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACrH;iBAAM;gBACH,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,IAAI,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAC3F;QACL,CAAC,CAAC,CAAC,IAAI,CAAC;YACJ,OAAO,KAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,KAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1B,OAAO,KAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IACS,mDAAwB,GAAlC;IACA,CAAC;IACL,uBAAC;AAAD,CAAC,AAzBD,CAAsC,cAAc,GAyBnD","sourcesContent":["\r\nimport { ViewerConfiguration } from '../configuration';\r\nimport { AbstractViewer } from './viewer';\r\n\r\nexport class RenderOnlyViewer extends AbstractViewer {\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = {}) {\r\n super(containerElement, initialConfiguration);\r\n this._canvas = containerElement as HTMLCanvasElement\r\n }\r\n public initialize() {\r\n let autoLoad = typeof this.configuration.model === 'string' || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine().then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n }).then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!).catch(() => { }).then(() => { return this.sceneManager.scene; });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n }).then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n }).catch((e) => {\r\n console.log(e.toString());\r\n return this;\r\n });\r\n }\r\n protected _prepareContainerElement() {\r\n }\r\n}"]}
1
+ {"version":3,"file":"renderOnlyViewer.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/viewer/renderOnlyViewer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;IAAsC,oCAAc;IAChD,0BAAmB,gBAAyB,EAAE,oBAA8C;QAA9C,qCAAA,EAAA,yBAA8C;QAA5F,YACI,kBAAM,gBAAgB,EAAE,oBAAoB,CAAC,SAEhD;QAHkB,sBAAgB,GAAhB,gBAAgB,CAAS;QAExC,KAAI,CAAC,OAAO,GAAG,gBAAqC,CAAA;;IACxD,CAAC;IACM,qCAAU,GAAjB;QAAA,iBAiBC;QAhBG,IAAI,QAAQ,GAAG,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1H,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,UAAC,MAAM;YAClC,OAAO,KAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC,IAAI,CAAC;YACJ,KAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,QAAQ,EAAE;gBACV,OAAO,KAAI,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAM,CAAC,CAAC,KAAK,CAAC,cAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAQ,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACrH;iBAAM;gBACH,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,IAAI,KAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aAC3F;QACL,CAAC,CAAC,CAAC,IAAI,CAAC;YACJ,OAAO,KAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,KAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1B,OAAO,KAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACP,CAAC;IACS,mDAAwB,GAAlC;IACA,CAAC;IACL,uBAAC;AAAD,CAAC,AAzBD,CAAsC,cAAc,GAyBnD","sourcesContent":["\r\nimport { ViewerConfiguration } from '../configuration/configuration';\r\nimport { AbstractViewer } from './viewer';\r\n\r\nexport class RenderOnlyViewer extends AbstractViewer {\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = {}) {\r\n super(containerElement, initialConfiguration);\r\n this._canvas = containerElement as HTMLCanvasElement\r\n }\r\n public initialize() {\r\n let autoLoad = typeof this.configuration.model === 'string' || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine().then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n }).then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!).catch(() => { }).then(() => { return this.sceneManager.scene; });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n }).then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n }).catch((e) => {\r\n console.log(e.toString());\r\n return this;\r\n });\r\n }\r\n protected _prepareContainerElement() {\r\n }\r\n}"]}
@@ -2,13 +2,15 @@ import { Engine } from '@babylonjs/core/Engines/engine';
2
2
  import { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from '@babylonjs/core/Loading/sceneLoader';
3
3
  import { Observable } from '@babylonjs/core/Misc/observable';
4
4
  import { Scene } from '@babylonjs/core/scene';
5
- import { IModelConfiguration, IObserversConfiguration, ViewerConfiguration } from '../configuration/';
6
5
  import { ConfigurationContainer } from '../configuration/configurationContainer';
7
6
  import { RenderOnlyConfigurationLoader } from '../configuration/renderOnlyLoader';
8
7
  import { ModelLoader } from '../loader/modelLoader';
9
8
  import { ObservablesManager } from '../managers/observablesManager';
10
9
  import { SceneManager } from '../managers/sceneManager';
11
10
  import { ViewerModel } from '../model/viewerModel';
11
+ import { ViewerConfiguration } from '../configuration/configuration';
12
+ import { IObserversConfiguration } from '../configuration/interfaces/observersConfiguration';
13
+ import { IModelConfiguration } from '../configuration/interfaces/modelConfiguration';
12
14
  /**
13
15
  * The AbstractViewer is the center of Babylon's viewer.
14
16
  * It is the basic implementation of the default viewer and is responsible of loading and showing the model and the templates
package/viewer/viewer.js CHANGED
@@ -6,7 +6,7 @@ import { processConfigurationCompatibility } from '../configuration/configuratio
6
6
  import { ConfigurationContainer } from '../configuration/configurationContainer.js';
7
7
  import { viewerGlobals } from '../configuration/globals.js';
8
8
  import { RenderOnlyConfigurationLoader } from '../configuration/renderOnlyLoader.js';
9
- import { deepmerge } from '../helper/.js';
9
+ import { deepmerge } from '../helper/index.js';
10
10
  import { ModelLoader } from '../loader/modelLoader.js';
11
11
  import { ObservablesManager } from '../managers/observablesManager.js';
12
12
  import { SceneManager } from '../managers/sceneManager.js';
@@ -1 +1 @@
1
- {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/viewer/viewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from '@babylonjs/core/Engines/engine';\r\nimport { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from '@babylonjs/core/Loading/sceneLoader';\r\nimport { Observable } from '@babylonjs/core/Misc/observable';\r\nimport { Scene } from '@babylonjs/core/scene';\r\nimport { RenderingManager } from '@babylonjs/core/Rendering/renderingManager';\r\nimport { Vector3 } from '@babylonjs/core/Maths/math';\r\nimport { TargetCamera } from '@babylonjs/core/Cameras/targetCamera';\r\nimport { Tools } from '@babylonjs/core/Misc/tools';\r\nimport { Effect } from '@babylonjs/core/Materials/effect';\r\nimport { ConfigurationLoader } from '../configuration/loader';\r\nimport { IModelConfiguration, IObserversConfiguration, ViewerConfiguration } from '../configuration/';\r\nimport { processConfigurationCompatibility } from '../configuration/configurationCompatibility';\r\nimport { ConfigurationContainer } from '../configuration/configurationContainer';\r\nimport { viewerGlobals } from '../configuration/globals';\r\nimport { RenderOnlyConfigurationLoader } from '../configuration/renderOnlyLoader';\r\nimport { deepmerge } from '../helper/';\r\nimport { ModelLoader } from '../loader/modelLoader';\r\nimport { ObservablesManager } from '../managers/observablesManager';\r\nimport { SceneManager } from '../managers/sceneManager';\r\nimport { telemetryManager } from '../managers/telemetryManager';\r\nimport { ViewerModel } from '../model/viewerModel';\r\nimport { viewerManager } from './viewerManager';\r\n\r\n/**\r\n * The AbstractViewer is the center of Babylon's viewer.\r\n * It is the basic implementation of the default viewer and is responsible of loading and showing the model and the templates\r\n */\r\nexport abstract class AbstractViewer {\r\n /**\r\n * Babylon Engine corresponding with this viewer\r\n */\r\n public engine: Engine;\r\n /**\r\n * The ID of this viewer. it will be generated randomly or use the HTML Element's ID.\r\n */\r\n public readonly baseId: string;\r\n\r\n /**\r\n * The last loader used to load a model.\r\n * @deprecated\r\n */\r\n public lastUsedLoader: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n /**\r\n * The ModelLoader instance connected with this viewer.\r\n */\r\n public modelLoader: ModelLoader;\r\n\r\n /**\r\n * A flag that controls whether or not the render loop should be executed\r\n */\r\n public runRenderLoop: boolean = true;\r\n\r\n /**\r\n * The scene manager connected with this viewer instance\r\n */\r\n public sceneManager: SceneManager;\r\n\r\n // observables\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n public get onSceneInitObservable(): Observable<Scene> {\r\n return this.observablesManager.onSceneInitObservable;\r\n }\r\n /**\r\n * will notify when the engine was initialized\r\n */\r\n public get onEngineInitObservable(): Observable<Engine> {\r\n return this.observablesManager.onEngineInitObservable;\r\n }\r\n\r\n /**\r\n * Will notify when a new model was added to the scene.\r\n * Note that added does not neccessarily mean loaded!\r\n */\r\n public get onModelAddedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelAddedObservable;\r\n }\r\n /**\r\n * will notify after every model load\r\n */\r\n public get onModelLoadedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelLoadedObservable;\r\n }\r\n /**\r\n * will notify when any model notify of progress\r\n */\r\n public get onModelLoadProgressObservable(): Observable<ISceneLoaderProgressEvent> {\r\n return this.observablesManager.onModelLoadProgressObservable;\r\n }\r\n /**\r\n * will notify when any model load failed.\r\n */\r\n public get onModelLoadErrorObservable(): Observable<{ message: string; exception: any }> {\r\n return this.observablesManager.onModelLoadErrorObservable;\r\n }\r\n /**\r\n * Will notify when a model was removed from the scene;\r\n */\r\n public get onModelRemovedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelRemovedObservable;\r\n }\r\n /**\r\n * will notify when a new loader was initialized.\r\n * Used mainly to know when a model starts loading.\r\n */\r\n public get onLoaderInitObservable(): Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n return this.observablesManager.onLoaderInitObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when the entire load process has finished.\r\n */\r\n public get onInitDoneObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onViewerInitDoneObservable;\r\n }\r\n\r\n /**\r\n * Functions added to this observable will be executed on each frame rendered.\r\n */\r\n public get onFrameRenderedObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onFrameRenderedObservable;\r\n }\r\n\r\n /**\r\n * Observers registered here will be executed when VR more is entered.\r\n */\r\n public get onEnteringVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onEnteringVRObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when VR mode is exited.\r\n */\r\n public get onExitingVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onExitingVRObservable;\r\n }\r\n\r\n public observablesManager: ObservablesManager;\r\n\r\n /**\r\n * The canvas associated with this viewer\r\n */\r\n protected _canvas: HTMLCanvasElement;\r\n\r\n /**\r\n * The (single) canvas of this viewer\r\n */\r\n public get canvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n\r\n /**\r\n * is this viewer disposed?\r\n */\r\n protected _isDisposed: boolean = false;\r\n\r\n /**\r\n * registered onBeforeRender functions.\r\n * This functions are also registered at the native scene. The reference can be used to unregister them.\r\n */\r\n protected _registeredOnBeforeRenderFunctions: Array<() => void>;\r\n /**\r\n * The configuration loader of this viewer\r\n */\r\n protected _configurationLoader: RenderOnlyConfigurationLoader;\r\n\r\n /**\r\n * Is the viewer already initialized. for internal use.\r\n */\r\n protected _isInit: boolean;\r\n\r\n protected _configurationContainer: ConfigurationContainer;\r\n\r\n public get configurationContainer() {\r\n return this._configurationContainer;\r\n }\r\n\r\n protected getConfigurationLoader() {\r\n return new RenderOnlyConfigurationLoader();\r\n }\r\n\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = {}) {\r\n // if exists, use the container id. otherwise, generate a random string.\r\n if (containerElement.id) {\r\n this.baseId = containerElement.id;\r\n } else {\r\n this.baseId = containerElement.id = 'bjs' + Math.random().toString(32).substr(2, 8);\r\n }\r\n\r\n this._registeredOnBeforeRenderFunctions = [];\r\n\r\n this._configurationContainer = new ConfigurationContainer();\r\n\r\n this.observablesManager = new ObservablesManager();\r\n\r\n this.modelLoader = new ModelLoader(this.observablesManager, this._configurationContainer);\r\n\r\n RenderingManager.AUTOCLEAR = false;\r\n\r\n // extend the configuration\r\n this._configurationLoader = this.getConfigurationLoader();\r\n this._configurationLoader.loadConfiguration(initialConfiguration, (configuration) => {\r\n this._onConfigurationLoaded(configuration);\r\n });\r\n\r\n this.onSceneInitObservable.add(() => {\r\n this.updateConfiguration();\r\n });\r\n\r\n this.onInitDoneObservable.add(() => {\r\n this._isInit = true;\r\n this.engine.runRenderLoop(this._render);\r\n });\r\n\r\n this._prepareContainerElement();\r\n\r\n // add this viewer to the viewer manager\r\n viewerManager.addViewer(this);\r\n\r\n }\r\n\r\n /**\r\n * get the baseId of this viewer\r\n */\r\n public getBaseId(): string {\r\n return this.baseId;\r\n }\r\n\r\n /**\r\n * Do we have a canvas to render on, and is it a part of the scene\r\n */\r\n public isCanvasInDOM(): boolean {\r\n return !!this._canvas && !!this._canvas.parentElement;\r\n }\r\n\r\n /**\r\n * Is the engine currently set to rende even when the page is in background\r\n */\r\n public get renderInBackground() {\r\n return this.engine && this.engine.renderEvenInBackground;\r\n }\r\n\r\n /**\r\n * Set the viewer's background rendering flag.\r\n */\r\n public set renderInBackground(value: boolean) {\r\n if (this.engine) {\r\n this.engine.renderEvenInBackground = value;\r\n }\r\n }\r\n\r\n /**\r\n * Get the configuration object. This is a reference only.\r\n * The configuration can ONLY be updated using the updateConfiguration function.\r\n * changing this object will have no direct effect on the scene.\r\n */\r\n public get configuration(): ViewerConfiguration {\r\n return this._configurationContainer.configuration;\r\n }\r\n\r\n /**\r\n * force resizing the engine.\r\n */\r\n public forceResize() {\r\n this._resize();\r\n }\r\n\r\n protected _hdToggled: boolean = false;\r\n\r\n public toggleHD() {\r\n this._hdToggled = !this._hdToggled;\r\n\r\n var scale = this._hdToggled ? Math.max(0.5, 1 / (window.devicePixelRatio || 2)) : 1;\r\n\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n\r\n protected _vrToggled: boolean = false;\r\n private _vrModelRepositioning: number = 0;\r\n protected _vrScale: number = 1;\r\n\r\n protected _vrInit: boolean = false;\r\n\r\n public toggleVR() {\r\n if (!this._vrInit) {\r\n this._initVR();\r\n }\r\n\r\n if (this.sceneManager.vrHelper && !this.sceneManager.vrHelper.isInVRMode) {\r\n\r\n // make sure the floor is set\r\n if (this.sceneManager.environmentHelper && this.sceneManager.environmentHelper.ground) {\r\n this.sceneManager.vrHelper.addFloorMesh(this.sceneManager.environmentHelper.ground);\r\n }\r\n\r\n this._vrToggled = true;\r\n this.sceneManager.vrHelper.enterVR();\r\n\r\n // position the vr camera to be in front of the object or wherever the user has configured it to be\r\n if (this.sceneManager.vrHelper.currentVRCamera && this.sceneManager.vrHelper.currentVRCamera !== this.sceneManager.camera) {\r\n if (this.configuration.vr && this.configuration.vr.cameraPosition !== undefined) {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(this.configuration.vr.cameraPosition.x, this.configuration.vr.cameraPosition.y, this.configuration.vr.cameraPosition.z);\r\n } else {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(0, this.sceneManager.vrHelper.currentVRCamera.position.y, -1);\r\n }\r\n (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion && (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion.copyFromFloats(0, 0, 0, 1);\r\n // set the height of the model to be what the user has configured, or floating by default\r\n if (this.configuration.vr && this.configuration.vr.modelHeightCorrection !== undefined) {\r\n if (typeof this.configuration.vr.modelHeightCorrection === 'number') {\r\n this._vrModelRepositioning = this.configuration.vr.modelHeightCorrection;\r\n } else if (this.configuration.vr.modelHeightCorrection) {\r\n this._vrModelRepositioning = this.sceneManager.vrHelper.currentVRCamera.position.y / 2;\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n }\r\n\r\n // scale the model\r\n if (this.sceneManager.models.length) {\r\n let boundingVectors = this.sceneManager.models[0].rootMesh.getHierarchyBoundingVectors();\r\n let sizeVec = boundingVectors.max.subtract(boundingVectors.min);\r\n let maxDimension = Math.max(sizeVec.x, sizeVec.y, sizeVec.z);\r\n this._vrScale = (1 / maxDimension);\r\n if (this.configuration.vr && this.configuration.vr.objectScaleFactor) {\r\n this._vrScale *= this.configuration.vr.objectScaleFactor;\r\n }\r\n\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(this._vrScale);\r\n\r\n // reposition the object to \"float\" in front of the user\r\n this.sceneManager.models[0].rootMesh.position.y += this._vrModelRepositioning;\r\n this.sceneManager.models[0].rootMesh.rotationQuaternion = null;\r\n }\r\n\r\n // scale the environment to match the model\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = false;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.vrHelper) {\r\n this.sceneManager.vrHelper.exitVR();\r\n }\r\n }\r\n }\r\n\r\n protected _initVR() {\r\n\r\n if (this.sceneManager.vrHelper) {\r\n this.observablesManager.onExitingVRObservable.add(() => {\r\n if (this._vrToggled) {\r\n this._vrToggled = false;\r\n\r\n // undo the scaling of the model\r\n if (this.sceneManager.models.length) {\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.models[0].rootMesh.position.y -= this._vrModelRepositioning;\r\n }\r\n\r\n // undo the scaling of the environment\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(1 / this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = true;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n\r\n // clear set height and eidth\r\n this.canvas.removeAttribute(\"height\");\r\n this.canvas.removeAttribute(\"width\");\r\n this.engine.resize();\r\n }\r\n });\r\n }\r\n\r\n this._vrInit = true;\r\n }\r\n\r\n /**\r\n * The resize function that will be registered with the window object\r\n */\r\n protected _resize = (): void => {\r\n // Only resize if Canvas is in the DOM\r\n if (!this.isCanvasInDOM()) {\r\n return;\r\n }\r\n\r\n if (this.canvas.clientWidth <= 0 || this.canvas.clientHeight <= 0) {\r\n return;\r\n }\r\n\r\n if (this.configuration.engine && this.configuration.engine.disableResize) {\r\n return;\r\n }\r\n\r\n this.engine.resize();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, configuration);\r\n if (this.configuration.observers) {\r\n this._configureObservers(this.configuration.observers);\r\n }\r\n // TODO remove this after testing, as this is done in the updateConfiguration as well.\r\n if (this.configuration.loaderPlugins) {\r\n Object.keys(this.configuration.loaderPlugins).forEach(((name) => {\r\n if (this.configuration.loaderPlugins && this.configuration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n }));\r\n }\r\n\r\n this.observablesManager.onViewerInitStartedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Force a single render loop execution.\r\n */\r\n public forceRender() {\r\n this._render(true);\r\n }\r\n\r\n /**\r\n * render loop that will be executed by the engine\r\n */\r\n protected _render = (force: boolean = false): void => {\r\n if (force || (this.sceneManager.scene && this.sceneManager.scene.activeCamera)) {\r\n if (this.runRenderLoop || force) {\r\n this.engine.performanceMonitor.enable();\r\n this.sceneManager.scene.render();\r\n this.onFrameRenderedObservable.notifyObservers(this);\r\n } else {\r\n this.engine.performanceMonitor.disable();\r\n\r\n // update camera instead of rendering\r\n this.sceneManager.scene.activeCamera && this.sceneManager.scene.activeCamera.update();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Takes a screenshot of the scene and returns it as a base64 encoded png.\r\n * @param callback optional callback that will be triggered when screenshot is done.\r\n * @param width Optional screenshot width (default to 512).\r\n * @param height Optional screenshot height (default to 512).\r\n * @returns a promise with the screenshot data\r\n */\r\n public takeScreenshot(callback?: (data: string) => void, width = 0, height = 0): Promise<string> {\r\n width = width || this.canvas.clientWidth;\r\n height = height || this.canvas.clientHeight;\r\n\r\n // Create the screenshot\r\n return new Promise<string>((resolve, reject) => {\r\n try {\r\n Tools.CreateScreenshot(this.engine, this.sceneManager.camera, { width, height }, (data) => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n resolve(data);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Update the current viewer configuration with new values.\r\n * Only provided information will be updated, old configuration values will be kept.\r\n * If this.configuration was manually changed, you can trigger this function with no parameters,\r\n * and the entire configuration will be updated.\r\n * @param newConfiguration the partial configuration to update or a URL to a JSON holding the updated configuration\r\n *\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration> | string = this.configuration) {\r\n if (typeof newConfiguration === \"string\") {\r\n Tools.LoadFile(newConfiguration, (data) => {\r\n try {\r\n const newData = JSON.parse(data.toString()) as ViewerConfiguration;\r\n return this.updateConfiguration(newData);\r\n } catch (e) {\r\n console.log(\"Error parsing file \" + newConfiguration);\r\n }\r\n\r\n }, undefined, undefined, undefined, (error) => {\r\n console.log(\"Error parsing file \" + newConfiguration, error);\r\n });\r\n } else {\r\n //backcompat\r\n processConfigurationCompatibility(newConfiguration);\r\n // update this.configuration with the new data\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, newConfiguration);\r\n\r\n this.sceneManager.updateConfiguration(newConfiguration);\r\n\r\n // observers in configuration\r\n if (newConfiguration.observers) {\r\n this._configureObservers(newConfiguration.observers);\r\n }\r\n\r\n if (newConfiguration.loaderPlugins) {\r\n Object.keys(newConfiguration.loaderPlugins).forEach(((name) => {\r\n if (newConfiguration.loaderPlugins && newConfiguration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * this is used to register native functions using the configuration object.\r\n * This will configure the observers.\r\n * @param observersConfiguration observers configuration\r\n */\r\n protected _configureObservers(observersConfiguration: IObserversConfiguration) {\r\n if (observersConfiguration.onEngineInit) {\r\n this.onEngineInitObservable.add(window[observersConfiguration.onEngineInit]);\r\n } else {\r\n if (observersConfiguration.onEngineInit === '' && this.configuration.observers && this.configuration.observers!.onEngineInit) {\r\n this.onEngineInitObservable.removeCallback(window[this.configuration.observers!.onEngineInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onSceneInit) {\r\n this.onSceneInitObservable.add(window[observersConfiguration.onSceneInit]);\r\n } else {\r\n if (observersConfiguration.onSceneInit === '' && this.configuration.observers && this.configuration.observers!.onSceneInit) {\r\n this.onSceneInitObservable.removeCallback(window[this.configuration.observers!.onSceneInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onModelLoaded) {\r\n this.onModelLoadedObservable.add(window[observersConfiguration.onModelLoaded]);\r\n } else {\r\n if (observersConfiguration.onModelLoaded === '' && this.configuration.observers && this.configuration.observers!.onModelLoaded) {\r\n this.onModelLoadedObservable.removeCallback(window[this.configuration.observers!.onModelLoaded!]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n window.removeEventListener('resize', this._resize);\r\n\r\n if (this.sceneManager) {\r\n if (this.sceneManager.scene && this.sceneManager.scene.activeCamera) {\r\n this.sceneManager.scene.activeCamera.detachControl();\r\n }\r\n this.sceneManager.dispose();\r\n }\r\n\r\n this._fpsTimeoutInterval && clearInterval(this._fpsTimeoutInterval);\r\n\r\n this.observablesManager.dispose();\r\n\r\n this.modelLoader.dispose();\r\n\r\n if (this.engine) {\r\n this.engine.dispose();\r\n }\r\n\r\n viewerManager.removeViewer(this);\r\n this._isDisposed = true;\r\n }\r\n\r\n /**\r\n * This will prepare the container element for the viewer\r\n */\r\n protected abstract _prepareContainerElement();\r\n\r\n /**\r\n * This function will execute when the HTML templates finished initializing.\r\n * It should initialize the engine and continue execution.\r\n *\r\n * @returns {Promise<AbstractViewer>} The viewer object will be returned after the object was loaded.\r\n */\r\n protected _onTemplatesLoaded(): Promise<AbstractViewer> {\r\n return Promise.resolve(this);\r\n }\r\n\r\n /**\r\n * This will force the creation of an engine and a scene.\r\n * It will also load a model if preconfigured.\r\n * But first - it will load the extendible onTemplateLoaded()!\r\n */\r\n protected _onTemplateLoaded(): Promise<AbstractViewer> {\r\n // check if viewer was disposed right after created\r\n if (this._isDisposed) {\r\n return Promise.reject(\"viewer was disposed\");\r\n }\r\n return this._onTemplatesLoaded().then(() => {\r\n let autoLoad = typeof this.configuration.model === 'string' || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine().then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n }).then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!).catch(() => { }).then(() => { return this.sceneManager.scene; });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n }).then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n }).catch((e) => {\r\n Tools.Warn(e.toString());\r\n return this;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the engine. Retruns a promise in case async calls are needed.\r\n *\r\n * @protected\r\n * @returns {Promise<Engine>}\r\n * @memberof Viewer\r\n */\r\n protected _initEngine(): Promise<Engine> {\r\n\r\n // init custom shaders\r\n this._injectCustomShaders();\r\n\r\n //let canvasElement = this.templateManager.getCanvas();\r\n if (!this.canvas) {\r\n return Promise.reject('Canvas element not found!');\r\n }\r\n let config = this.configuration.engine || {};\r\n // TDO enable further configuration\r\n\r\n // check for webgl2 support, force-disable if needed.\r\n if (viewerGlobals.disableWebGL2Support) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.disableWebGL2Support = true;\r\n }\r\n\r\n this.engine = new Engine(this.canvas, !!config.antialiasing, config.engineOptions);\r\n\r\n if (!config.disableResize) {\r\n window.addEventListener('resize', this._resize);\r\n }\r\n\r\n if (this.configuration.engine) {\r\n if (this.configuration.engine.adaptiveQuality) {\r\n var scale = Math.max(0.5, 1 / (window.devicePixelRatio || 2));\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n if (this.configuration.engine.hdEnabled) {\r\n this.toggleHD();\r\n }\r\n }\r\n\r\n // create a new template manager for this viewer\r\n this.sceneManager = new SceneManager(this.engine, this._configurationContainer, this.observablesManager);\r\n\r\n return Promise.resolve(this.engine);\r\n }\r\n\r\n private _isLoading: boolean;\r\n\r\n /**\r\n * Initialize a model loading. The returned object (a ViewerModel object) will be loaded in the background.\r\n * The difference between this and loadModel is that loadModel will fulfill the promise when the model finished loading.\r\n *\r\n * @param modelConfig model configuration to use when loading the model.\r\n * @param clearScene should the scene be cleared before loading this model\r\n * @returns a ViewerModel object that is not yet fully loaded.\r\n */\r\n public initModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): ViewerModel {\r\n let configuration: IModelConfiguration;\r\n if (typeof modelConfig === 'string') {\r\n configuration = {\r\n url: modelConfig\r\n };\r\n } else if (modelConfig instanceof File) {\r\n configuration = {\r\n file: modelConfig,\r\n root: \"file:\"\r\n };\r\n } else {\r\n configuration = modelConfig;\r\n }\r\n\r\n if (!configuration.url && !configuration.file) {\r\n throw new Error(\"no model provided\");\r\n }\r\n\r\n if (clearScene) {\r\n this.sceneManager.clearScene(true, false);\r\n }\r\n\r\n //merge the configuration for future models:\r\n if (this.configuration.model && typeof this.configuration.model === 'object') {\r\n let globalConfig = deepmerge({}, this.configuration.model);\r\n configuration = deepmerge(globalConfig, configuration);\r\n if (modelConfig instanceof File) {\r\n configuration.file = modelConfig;\r\n }\r\n } else {\r\n this.configuration.model = configuration;\r\n }\r\n\r\n this._isLoading = true;\r\n\r\n let model = this.modelLoader.load(configuration);\r\n\r\n this.lastUsedLoader = model.loader;\r\n model.onLoadErrorObservable.add((errorObject) => {\r\n this.onModelLoadErrorObservable.notifyObserversWithPromise(errorObject);\r\n });\r\n model.onLoadProgressObservable.add((progressEvent) => {\r\n this.onModelLoadProgressObservable.notifyObserversWithPromise(progressEvent);\r\n });\r\n this.onLoaderInitObservable.notifyObserversWithPromise(this.lastUsedLoader);\r\n\r\n model.onLoadedObservable.add(() => {\r\n this._isLoading = false;\r\n });\r\n\r\n return model;\r\n }\r\n\r\n /**\r\n * load a model using the provided configuration.\r\n * This function, as opposed to initModel, will return a promise that resolves when the model is loaded, and rejects with error.\r\n * If you want to attach to the observables of the model, use initModle instead.\r\n *\r\n * @param modelConfig the model configuration or URL to load.\r\n * @param clearScene Should the scene be cleared before loading the model\r\n * @returns a Promise the fulfills when the model finished loading successfully.\r\n */\r\n public loadModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): Promise<ViewerModel> {\r\n if (this._isLoading) {\r\n // We can decide here whether or not to cancel the lst load, but the developer can do that.\r\n return Promise.reject(\"another model is curently being loaded.\");\r\n }\r\n\r\n return Promise.resolve(this.sceneManager.scene).then((scene) => {\r\n if (!scene) { return this.sceneManager.initScene(this.configuration.scene, this.configuration.optimizer); }\r\n return scene;\r\n }).then(() => {\r\n let model = this.initModel(modelConfig, clearScene);\r\n return new Promise<ViewerModel>((resolve, reject) => {\r\n // at this point, configuration.model is an object, not a string\r\n model.onLoadedObservable.add(() => {\r\n resolve(model);\r\n });\r\n model.onLoadErrorObservable.add((error) => {\r\n reject(error);\r\n });\r\n });\r\n });\r\n }\r\n\r\n private _fpsTimeoutInterval: number;\r\n\r\n protected _initTelemetryEvents() {\r\n telemetryManager.broadcast(\"Engine Capabilities\", this.baseId, this.engine.getCaps());\r\n telemetryManager.broadcast(\"Platform Details\", this.baseId, {\r\n userAgent: navigator.userAgent,\r\n platform: navigator.platform\r\n });\r\n\r\n telemetryManager.flushWebGLErrors(this.engine, this.baseId);\r\n\r\n let trackFPS: Function = () => {\r\n telemetryManager.broadcast(\"Current FPS\", this.baseId, { fps: this.engine.getFps() });\r\n };\r\n\r\n trackFPS();\r\n // Track the FPS again after 60 seconds\r\n this._fpsTimeoutInterval = window.setInterval(trackFPS, 60 * 1000);\r\n }\r\n\r\n /**\r\n * Injects all the spectre shader in the babylon shader store\r\n */\r\n protected _injectCustomShaders(): void {\r\n let customShaders = this.configuration.customShaders;\r\n // Inject all the spectre shader in the babylon shader store.\r\n if (!customShaders) {\r\n return;\r\n }\r\n if (customShaders.shaders) {\r\n Object.keys(customShaders.shaders).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.ShadersStore[key] = customShaders!.shaders![key];\r\n });\r\n }\r\n if (customShaders.includes) {\r\n Object.keys(customShaders.includes).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.IncludesShadersStore[key] = customShaders!.includes![key];\r\n });\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../sourceES6/viewer/src/viewer/viewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from '@babylonjs/core/Engines/engine';\r\nimport { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from '@babylonjs/core/Loading/sceneLoader';\r\nimport { Observable } from '@babylonjs/core/Misc/observable';\r\nimport { Scene } from '@babylonjs/core/scene';\r\nimport { RenderingManager } from '@babylonjs/core/Rendering/renderingManager';\r\nimport { TargetCamera } from '@babylonjs/core/Cameras/targetCamera';\r\nimport { Tools } from '@babylonjs/core/Misc/tools';\r\nimport { Effect } from '@babylonjs/core/Materials/effect';\r\nimport { processConfigurationCompatibility } from '../configuration/configurationCompatibility';\r\nimport { ConfigurationContainer } from '../configuration/configurationContainer';\r\nimport { viewerGlobals } from '../configuration/globals';\r\nimport { RenderOnlyConfigurationLoader } from '../configuration/renderOnlyLoader';\r\nimport { deepmerge } from '../helper/index';\r\nimport { ModelLoader } from '../loader/modelLoader';\r\nimport { ObservablesManager } from '../managers/observablesManager';\r\nimport { SceneManager } from '../managers/sceneManager';\r\nimport { telemetryManager } from '../managers/telemetryManager';\r\nimport { ViewerModel } from '../model/viewerModel';\r\nimport { viewerManager } from './viewerManager';\r\nimport { ViewerConfiguration } from '../configuration/configuration';\r\nimport { IObserversConfiguration } from '../configuration/interfaces/observersConfiguration';\r\nimport { IModelConfiguration } from '../configuration/interfaces/modelConfiguration';\r\n\r\n/**\r\n * The AbstractViewer is the center of Babylon's viewer.\r\n * It is the basic implementation of the default viewer and is responsible of loading and showing the model and the templates\r\n */\r\nexport abstract class AbstractViewer {\r\n /**\r\n * Babylon Engine corresponding with this viewer\r\n */\r\n public engine: Engine;\r\n /**\r\n * The ID of this viewer. it will be generated randomly or use the HTML Element's ID.\r\n */\r\n public readonly baseId: string;\r\n\r\n /**\r\n * The last loader used to load a model.\r\n * @deprecated\r\n */\r\n public lastUsedLoader: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n /**\r\n * The ModelLoader instance connected with this viewer.\r\n */\r\n public modelLoader: ModelLoader;\r\n\r\n /**\r\n * A flag that controls whether or not the render loop should be executed\r\n */\r\n public runRenderLoop: boolean = true;\r\n\r\n /**\r\n * The scene manager connected with this viewer instance\r\n */\r\n public sceneManager: SceneManager;\r\n\r\n // observables\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n public get onSceneInitObservable(): Observable<Scene> {\r\n return this.observablesManager.onSceneInitObservable;\r\n }\r\n /**\r\n * will notify when the engine was initialized\r\n */\r\n public get onEngineInitObservable(): Observable<Engine> {\r\n return this.observablesManager.onEngineInitObservable;\r\n }\r\n\r\n /**\r\n * Will notify when a new model was added to the scene.\r\n * Note that added does not neccessarily mean loaded!\r\n */\r\n public get onModelAddedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelAddedObservable;\r\n }\r\n /**\r\n * will notify after every model load\r\n */\r\n public get onModelLoadedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelLoadedObservable;\r\n }\r\n /**\r\n * will notify when any model notify of progress\r\n */\r\n public get onModelLoadProgressObservable(): Observable<ISceneLoaderProgressEvent> {\r\n return this.observablesManager.onModelLoadProgressObservable;\r\n }\r\n /**\r\n * will notify when any model load failed.\r\n */\r\n public get onModelLoadErrorObservable(): Observable<{ message: string; exception: any }> {\r\n return this.observablesManager.onModelLoadErrorObservable;\r\n }\r\n /**\r\n * Will notify when a model was removed from the scene;\r\n */\r\n public get onModelRemovedObservable(): Observable<ViewerModel> {\r\n return this.observablesManager.onModelRemovedObservable;\r\n }\r\n /**\r\n * will notify when a new loader was initialized.\r\n * Used mainly to know when a model starts loading.\r\n */\r\n public get onLoaderInitObservable(): Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n return this.observablesManager.onLoaderInitObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when the entire load process has finished.\r\n */\r\n public get onInitDoneObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onViewerInitDoneObservable;\r\n }\r\n\r\n /**\r\n * Functions added to this observable will be executed on each frame rendered.\r\n */\r\n public get onFrameRenderedObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onFrameRenderedObservable;\r\n }\r\n\r\n /**\r\n * Observers registered here will be executed when VR more is entered.\r\n */\r\n public get onEnteringVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onEnteringVRObservable;\r\n }\r\n /**\r\n * Observers registered here will be executed when VR mode is exited.\r\n */\r\n public get onExitingVRObservable(): Observable<AbstractViewer> {\r\n return this.observablesManager.onExitingVRObservable;\r\n }\r\n\r\n public observablesManager: ObservablesManager;\r\n\r\n /**\r\n * The canvas associated with this viewer\r\n */\r\n protected _canvas: HTMLCanvasElement;\r\n\r\n /**\r\n * The (single) canvas of this viewer\r\n */\r\n public get canvas(): HTMLCanvasElement {\r\n return this._canvas;\r\n }\r\n\r\n /**\r\n * is this viewer disposed?\r\n */\r\n protected _isDisposed: boolean = false;\r\n\r\n /**\r\n * registered onBeforeRender functions.\r\n * This functions are also registered at the native scene. The reference can be used to unregister them.\r\n */\r\n protected _registeredOnBeforeRenderFunctions: Array<() => void>;\r\n /**\r\n * The configuration loader of this viewer\r\n */\r\n protected _configurationLoader: RenderOnlyConfigurationLoader;\r\n\r\n /**\r\n * Is the viewer already initialized. for internal use.\r\n */\r\n protected _isInit: boolean;\r\n\r\n protected _configurationContainer: ConfigurationContainer;\r\n\r\n public get configurationContainer() {\r\n return this._configurationContainer;\r\n }\r\n\r\n protected getConfigurationLoader() {\r\n return new RenderOnlyConfigurationLoader();\r\n }\r\n\r\n constructor(public containerElement: Element, initialConfiguration: ViewerConfiguration = {}) {\r\n // if exists, use the container id. otherwise, generate a random string.\r\n if (containerElement.id) {\r\n this.baseId = containerElement.id;\r\n } else {\r\n this.baseId = containerElement.id = 'bjs' + Math.random().toString(32).substr(2, 8);\r\n }\r\n\r\n this._registeredOnBeforeRenderFunctions = [];\r\n\r\n this._configurationContainer = new ConfigurationContainer();\r\n\r\n this.observablesManager = new ObservablesManager();\r\n\r\n this.modelLoader = new ModelLoader(this.observablesManager, this._configurationContainer);\r\n\r\n RenderingManager.AUTOCLEAR = false;\r\n\r\n // extend the configuration\r\n this._configurationLoader = this.getConfigurationLoader();\r\n this._configurationLoader.loadConfiguration(initialConfiguration, (configuration) => {\r\n this._onConfigurationLoaded(configuration);\r\n });\r\n\r\n this.onSceneInitObservable.add(() => {\r\n this.updateConfiguration();\r\n });\r\n\r\n this.onInitDoneObservable.add(() => {\r\n this._isInit = true;\r\n this.engine.runRenderLoop(this._render);\r\n });\r\n\r\n this._prepareContainerElement();\r\n\r\n // add this viewer to the viewer manager\r\n viewerManager.addViewer(this);\r\n\r\n }\r\n\r\n /**\r\n * get the baseId of this viewer\r\n */\r\n public getBaseId(): string {\r\n return this.baseId;\r\n }\r\n\r\n /**\r\n * Do we have a canvas to render on, and is it a part of the scene\r\n */\r\n public isCanvasInDOM(): boolean {\r\n return !!this._canvas && !!this._canvas.parentElement;\r\n }\r\n\r\n /**\r\n * Is the engine currently set to rende even when the page is in background\r\n */\r\n public get renderInBackground() {\r\n return this.engine && this.engine.renderEvenInBackground;\r\n }\r\n\r\n /**\r\n * Set the viewer's background rendering flag.\r\n */\r\n public set renderInBackground(value: boolean) {\r\n if (this.engine) {\r\n this.engine.renderEvenInBackground = value;\r\n }\r\n }\r\n\r\n /**\r\n * Get the configuration object. This is a reference only.\r\n * The configuration can ONLY be updated using the updateConfiguration function.\r\n * changing this object will have no direct effect on the scene.\r\n */\r\n public get configuration(): ViewerConfiguration {\r\n return this._configurationContainer.configuration;\r\n }\r\n\r\n /**\r\n * force resizing the engine.\r\n */\r\n public forceResize() {\r\n this._resize();\r\n }\r\n\r\n protected _hdToggled: boolean = false;\r\n\r\n public toggleHD() {\r\n this._hdToggled = !this._hdToggled;\r\n\r\n var scale = this._hdToggled ? Math.max(0.5, 1 / (window.devicePixelRatio || 2)) : 1;\r\n\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n\r\n protected _vrToggled: boolean = false;\r\n private _vrModelRepositioning: number = 0;\r\n protected _vrScale: number = 1;\r\n\r\n protected _vrInit: boolean = false;\r\n\r\n public toggleVR() {\r\n if (!this._vrInit) {\r\n this._initVR();\r\n }\r\n\r\n if (this.sceneManager.vrHelper && !this.sceneManager.vrHelper.isInVRMode) {\r\n\r\n // make sure the floor is set\r\n if (this.sceneManager.environmentHelper && this.sceneManager.environmentHelper.ground) {\r\n this.sceneManager.vrHelper.addFloorMesh(this.sceneManager.environmentHelper.ground);\r\n }\r\n\r\n this._vrToggled = true;\r\n this.sceneManager.vrHelper.enterVR();\r\n\r\n // position the vr camera to be in front of the object or wherever the user has configured it to be\r\n if (this.sceneManager.vrHelper.currentVRCamera && this.sceneManager.vrHelper.currentVRCamera !== this.sceneManager.camera) {\r\n if (this.configuration.vr && this.configuration.vr.cameraPosition !== undefined) {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(this.configuration.vr.cameraPosition.x, this.configuration.vr.cameraPosition.y, this.configuration.vr.cameraPosition.z);\r\n } else {\r\n this.sceneManager.vrHelper.currentVRCamera.position.copyFromFloats(0, this.sceneManager.vrHelper.currentVRCamera.position.y, -1);\r\n }\r\n (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion && (<TargetCamera>this.sceneManager.vrHelper.currentVRCamera).rotationQuaternion.copyFromFloats(0, 0, 0, 1);\r\n // set the height of the model to be what the user has configured, or floating by default\r\n if (this.configuration.vr && this.configuration.vr.modelHeightCorrection !== undefined) {\r\n if (typeof this.configuration.vr.modelHeightCorrection === 'number') {\r\n this._vrModelRepositioning = this.configuration.vr.modelHeightCorrection;\r\n } else if (this.configuration.vr.modelHeightCorrection) {\r\n this._vrModelRepositioning = this.sceneManager.vrHelper.currentVRCamera.position.y / 2;\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n }\r\n\r\n // scale the model\r\n if (this.sceneManager.models.length) {\r\n let boundingVectors = this.sceneManager.models[0].rootMesh.getHierarchyBoundingVectors();\r\n let sizeVec = boundingVectors.max.subtract(boundingVectors.min);\r\n let maxDimension = Math.max(sizeVec.x, sizeVec.y, sizeVec.z);\r\n this._vrScale = (1 / maxDimension);\r\n if (this.configuration.vr && this.configuration.vr.objectScaleFactor) {\r\n this._vrScale *= this.configuration.vr.objectScaleFactor;\r\n }\r\n\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(this._vrScale);\r\n\r\n // reposition the object to \"float\" in front of the user\r\n this.sceneManager.models[0].rootMesh.position.y += this._vrModelRepositioning;\r\n this.sceneManager.models[0].rootMesh.rotationQuaternion = null;\r\n }\r\n\r\n // scale the environment to match the model\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = false;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n } else {\r\n this._vrModelRepositioning = 0;\r\n }\r\n } else {\r\n if (this.sceneManager.vrHelper) {\r\n this.sceneManager.vrHelper.exitVR();\r\n }\r\n }\r\n }\r\n\r\n protected _initVR() {\r\n\r\n if (this.sceneManager.vrHelper) {\r\n this.observablesManager.onExitingVRObservable.add(() => {\r\n if (this._vrToggled) {\r\n this._vrToggled = false;\r\n\r\n // undo the scaling of the model\r\n if (this.sceneManager.models.length) {\r\n this.sceneManager.models[0].rootMesh.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.models[0].rootMesh.position.y -= this._vrModelRepositioning;\r\n }\r\n\r\n // undo the scaling of the environment\r\n if (this.sceneManager.environmentHelper) {\r\n this.sceneManager.environmentHelper.ground && this.sceneManager.environmentHelper.ground.scaling.scaleInPlace(1 / this._vrScale);\r\n this.sceneManager.environmentHelper.skybox && this.sceneManager.environmentHelper.skybox.scaling.scaleInPlace(1 / this._vrScale);\r\n }\r\n\r\n // post processing\r\n if (this.sceneManager.defaultRenderingPipelineEnabled && this.sceneManager.defaultRenderingPipeline) {\r\n this.sceneManager.defaultRenderingPipeline.imageProcessingEnabled = true;\r\n this.sceneManager.defaultRenderingPipeline.prepare();\r\n }\r\n\r\n // clear set height and eidth\r\n this.canvas.removeAttribute(\"height\");\r\n this.canvas.removeAttribute(\"width\");\r\n this.engine.resize();\r\n }\r\n });\r\n }\r\n\r\n this._vrInit = true;\r\n }\r\n\r\n /**\r\n * The resize function that will be registered with the window object\r\n */\r\n protected _resize = (): void => {\r\n // Only resize if Canvas is in the DOM\r\n if (!this.isCanvasInDOM()) {\r\n return;\r\n }\r\n\r\n if (this.canvas.clientWidth <= 0 || this.canvas.clientHeight <= 0) {\r\n return;\r\n }\r\n\r\n if (this.configuration.engine && this.configuration.engine.disableResize) {\r\n return;\r\n }\r\n\r\n this.engine.resize();\r\n }\r\n\r\n protected _onConfigurationLoaded(configuration: ViewerConfiguration) {\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, configuration);\r\n if (this.configuration.observers) {\r\n this._configureObservers(this.configuration.observers);\r\n }\r\n // TODO remove this after testing, as this is done in the updateConfiguration as well.\r\n if (this.configuration.loaderPlugins) {\r\n Object.keys(this.configuration.loaderPlugins).forEach(((name) => {\r\n if (this.configuration.loaderPlugins && this.configuration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n }));\r\n }\r\n\r\n this.observablesManager.onViewerInitStartedObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Force a single render loop execution.\r\n */\r\n public forceRender() {\r\n this._render(true);\r\n }\r\n\r\n /**\r\n * render loop that will be executed by the engine\r\n */\r\n protected _render = (force: boolean = false): void => {\r\n if (force || (this.sceneManager.scene && this.sceneManager.scene.activeCamera)) {\r\n if (this.runRenderLoop || force) {\r\n this.engine.performanceMonitor.enable();\r\n this.sceneManager.scene.render();\r\n this.onFrameRenderedObservable.notifyObservers(this);\r\n } else {\r\n this.engine.performanceMonitor.disable();\r\n\r\n // update camera instead of rendering\r\n this.sceneManager.scene.activeCamera && this.sceneManager.scene.activeCamera.update();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Takes a screenshot of the scene and returns it as a base64 encoded png.\r\n * @param callback optional callback that will be triggered when screenshot is done.\r\n * @param width Optional screenshot width (default to 512).\r\n * @param height Optional screenshot height (default to 512).\r\n * @returns a promise with the screenshot data\r\n */\r\n public takeScreenshot(callback?: (data: string) => void, width = 0, height = 0): Promise<string> {\r\n width = width || this.canvas.clientWidth;\r\n height = height || this.canvas.clientHeight;\r\n\r\n // Create the screenshot\r\n return new Promise<string>((resolve, reject) => {\r\n try {\r\n Tools.CreateScreenshot(this.engine, this.sceneManager.camera, { width, height }, (data) => {\r\n if (callback) {\r\n callback(data);\r\n }\r\n resolve(data);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Update the current viewer configuration with new values.\r\n * Only provided information will be updated, old configuration values will be kept.\r\n * If this.configuration was manually changed, you can trigger this function with no parameters,\r\n * and the entire configuration will be updated.\r\n * @param newConfiguration the partial configuration to update or a URL to a JSON holding the updated configuration\r\n *\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration> | string = this.configuration) {\r\n if (typeof newConfiguration === \"string\") {\r\n Tools.LoadFile(newConfiguration, (data) => {\r\n try {\r\n const newData = JSON.parse(data.toString()) as ViewerConfiguration;\r\n return this.updateConfiguration(newData);\r\n } catch (e) {\r\n console.log(\"Error parsing file \" + newConfiguration);\r\n }\r\n\r\n }, undefined, undefined, undefined, (error) => {\r\n console.log(\"Error parsing file \" + newConfiguration, error);\r\n });\r\n } else {\r\n //backcompat\r\n processConfigurationCompatibility(newConfiguration);\r\n // update this.configuration with the new data\r\n this._configurationContainer.configuration = deepmerge(this.configuration || {}, newConfiguration);\r\n\r\n this.sceneManager.updateConfiguration(newConfiguration);\r\n\r\n // observers in configuration\r\n if (newConfiguration.observers) {\r\n this._configureObservers(newConfiguration.observers);\r\n }\r\n\r\n if (newConfiguration.loaderPlugins) {\r\n Object.keys(newConfiguration.loaderPlugins).forEach(((name) => {\r\n if (newConfiguration.loaderPlugins && newConfiguration.loaderPlugins[name]) {\r\n this.modelLoader.addPlugin(name);\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * this is used to register native functions using the configuration object.\r\n * This will configure the observers.\r\n * @param observersConfiguration observers configuration\r\n */\r\n protected _configureObservers(observersConfiguration: IObserversConfiguration) {\r\n if (observersConfiguration.onEngineInit) {\r\n this.onEngineInitObservable.add(window[observersConfiguration.onEngineInit]);\r\n } else {\r\n if (observersConfiguration.onEngineInit === '' && this.configuration.observers && this.configuration.observers!.onEngineInit) {\r\n this.onEngineInitObservable.removeCallback(window[this.configuration.observers!.onEngineInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onSceneInit) {\r\n this.onSceneInitObservable.add(window[observersConfiguration.onSceneInit]);\r\n } else {\r\n if (observersConfiguration.onSceneInit === '' && this.configuration.observers && this.configuration.observers!.onSceneInit) {\r\n this.onSceneInitObservable.removeCallback(window[this.configuration.observers!.onSceneInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onModelLoaded) {\r\n this.onModelLoadedObservable.add(window[observersConfiguration.onModelLoaded]);\r\n } else {\r\n if (observersConfiguration.onModelLoaded === '' && this.configuration.observers && this.configuration.observers!.onModelLoaded) {\r\n this.onModelLoadedObservable.removeCallback(window[this.configuration.observers!.onModelLoaded!]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n if (this._isDisposed) {\r\n return;\r\n }\r\n window.removeEventListener('resize', this._resize);\r\n\r\n if (this.sceneManager) {\r\n if (this.sceneManager.scene && this.sceneManager.scene.activeCamera) {\r\n this.sceneManager.scene.activeCamera.detachControl();\r\n }\r\n this.sceneManager.dispose();\r\n }\r\n\r\n this._fpsTimeoutInterval && clearInterval(this._fpsTimeoutInterval);\r\n\r\n this.observablesManager.dispose();\r\n\r\n this.modelLoader.dispose();\r\n\r\n if (this.engine) {\r\n this.engine.dispose();\r\n }\r\n\r\n viewerManager.removeViewer(this);\r\n this._isDisposed = true;\r\n }\r\n\r\n /**\r\n * This will prepare the container element for the viewer\r\n */\r\n protected abstract _prepareContainerElement();\r\n\r\n /**\r\n * This function will execute when the HTML templates finished initializing.\r\n * It should initialize the engine and continue execution.\r\n *\r\n * @returns {Promise<AbstractViewer>} The viewer object will be returned after the object was loaded.\r\n */\r\n protected _onTemplatesLoaded(): Promise<AbstractViewer> {\r\n return Promise.resolve(this);\r\n }\r\n\r\n /**\r\n * This will force the creation of an engine and a scene.\r\n * It will also load a model if preconfigured.\r\n * But first - it will load the extendible onTemplateLoaded()!\r\n */\r\n protected _onTemplateLoaded(): Promise<AbstractViewer> {\r\n // check if viewer was disposed right after created\r\n if (this._isDisposed) {\r\n return Promise.reject(\"viewer was disposed\");\r\n }\r\n return this._onTemplatesLoaded().then(() => {\r\n let autoLoad = typeof this.configuration.model === 'string' || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine().then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n }).then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!).catch(() => { }).then(() => { return this.sceneManager.scene; });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n }).then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n }).catch((e) => {\r\n Tools.Warn(e.toString());\r\n return this;\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Initialize the engine. Retruns a promise in case async calls are needed.\r\n *\r\n * @protected\r\n * @returns {Promise<Engine>}\r\n * @memberof Viewer\r\n */\r\n protected _initEngine(): Promise<Engine> {\r\n\r\n // init custom shaders\r\n this._injectCustomShaders();\r\n\r\n //let canvasElement = this.templateManager.getCanvas();\r\n if (!this.canvas) {\r\n return Promise.reject('Canvas element not found!');\r\n }\r\n let config = this.configuration.engine || {};\r\n // TDO enable further configuration\r\n\r\n // check for webgl2 support, force-disable if needed.\r\n if (viewerGlobals.disableWebGL2Support) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.disableWebGL2Support = true;\r\n }\r\n\r\n this.engine = new Engine(this.canvas, !!config.antialiasing, config.engineOptions);\r\n\r\n if (!config.disableResize) {\r\n window.addEventListener('resize', this._resize);\r\n }\r\n\r\n if (this.configuration.engine) {\r\n if (this.configuration.engine.adaptiveQuality) {\r\n var scale = Math.max(0.5, 1 / (window.devicePixelRatio || 2));\r\n this.engine.setHardwareScalingLevel(scale);\r\n }\r\n if (this.configuration.engine.hdEnabled) {\r\n this.toggleHD();\r\n }\r\n }\r\n\r\n // create a new template manager for this viewer\r\n this.sceneManager = new SceneManager(this.engine, this._configurationContainer, this.observablesManager);\r\n\r\n return Promise.resolve(this.engine);\r\n }\r\n\r\n private _isLoading: boolean;\r\n\r\n /**\r\n * Initialize a model loading. The returned object (a ViewerModel object) will be loaded in the background.\r\n * The difference between this and loadModel is that loadModel will fulfill the promise when the model finished loading.\r\n *\r\n * @param modelConfig model configuration to use when loading the model.\r\n * @param clearScene should the scene be cleared before loading this model\r\n * @returns a ViewerModel object that is not yet fully loaded.\r\n */\r\n public initModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): ViewerModel {\r\n let configuration: IModelConfiguration;\r\n if (typeof modelConfig === 'string') {\r\n configuration = {\r\n url: modelConfig\r\n };\r\n } else if (modelConfig instanceof File) {\r\n configuration = {\r\n file: modelConfig,\r\n root: \"file:\"\r\n };\r\n } else {\r\n configuration = modelConfig;\r\n }\r\n\r\n if (!configuration.url && !configuration.file) {\r\n throw new Error(\"no model provided\");\r\n }\r\n\r\n if (clearScene) {\r\n this.sceneManager.clearScene(true, false);\r\n }\r\n\r\n //merge the configuration for future models:\r\n if (this.configuration.model && typeof this.configuration.model === 'object') {\r\n let globalConfig = deepmerge({}, this.configuration.model);\r\n configuration = deepmerge(globalConfig, configuration);\r\n if (modelConfig instanceof File) {\r\n configuration.file = modelConfig;\r\n }\r\n } else {\r\n this.configuration.model = configuration;\r\n }\r\n\r\n this._isLoading = true;\r\n\r\n let model = this.modelLoader.load(configuration);\r\n\r\n this.lastUsedLoader = model.loader;\r\n model.onLoadErrorObservable.add((errorObject) => {\r\n this.onModelLoadErrorObservable.notifyObserversWithPromise(errorObject);\r\n });\r\n model.onLoadProgressObservable.add((progressEvent) => {\r\n this.onModelLoadProgressObservable.notifyObserversWithPromise(progressEvent);\r\n });\r\n this.onLoaderInitObservable.notifyObserversWithPromise(this.lastUsedLoader);\r\n\r\n model.onLoadedObservable.add(() => {\r\n this._isLoading = false;\r\n });\r\n\r\n return model;\r\n }\r\n\r\n /**\r\n * load a model using the provided configuration.\r\n * This function, as opposed to initModel, will return a promise that resolves when the model is loaded, and rejects with error.\r\n * If you want to attach to the observables of the model, use initModle instead.\r\n *\r\n * @param modelConfig the model configuration or URL to load.\r\n * @param clearScene Should the scene be cleared before loading the model\r\n * @returns a Promise the fulfills when the model finished loading successfully.\r\n */\r\n public loadModel(modelConfig: string | File | IModelConfiguration, clearScene: boolean = true): Promise<ViewerModel> {\r\n if (this._isLoading) {\r\n // We can decide here whether or not to cancel the lst load, but the developer can do that.\r\n return Promise.reject(\"another model is curently being loaded.\");\r\n }\r\n\r\n return Promise.resolve(this.sceneManager.scene).then((scene) => {\r\n if (!scene) { return this.sceneManager.initScene(this.configuration.scene, this.configuration.optimizer); }\r\n return scene;\r\n }).then(() => {\r\n let model = this.initModel(modelConfig, clearScene);\r\n return new Promise<ViewerModel>((resolve, reject) => {\r\n // at this point, configuration.model is an object, not a string\r\n model.onLoadedObservable.add(() => {\r\n resolve(model);\r\n });\r\n model.onLoadErrorObservable.add((error) => {\r\n reject(error);\r\n });\r\n });\r\n });\r\n }\r\n\r\n private _fpsTimeoutInterval: number;\r\n\r\n protected _initTelemetryEvents() {\r\n telemetryManager.broadcast(\"Engine Capabilities\", this.baseId, this.engine.getCaps());\r\n telemetryManager.broadcast(\"Platform Details\", this.baseId, {\r\n userAgent: navigator.userAgent,\r\n platform: navigator.platform\r\n });\r\n\r\n telemetryManager.flushWebGLErrors(this.engine, this.baseId);\r\n\r\n let trackFPS: Function = () => {\r\n telemetryManager.broadcast(\"Current FPS\", this.baseId, { fps: this.engine.getFps() });\r\n };\r\n\r\n trackFPS();\r\n // Track the FPS again after 60 seconds\r\n this._fpsTimeoutInterval = window.setInterval(trackFPS, 60 * 1000);\r\n }\r\n\r\n /**\r\n * Injects all the spectre shader in the babylon shader store\r\n */\r\n protected _injectCustomShaders(): void {\r\n let customShaders = this.configuration.customShaders;\r\n // Inject all the spectre shader in the babylon shader store.\r\n if (!customShaders) {\r\n return;\r\n }\r\n if (customShaders.shaders) {\r\n Object.keys(customShaders.shaders).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.ShadersStore[key] = customShaders!.shaders![key];\r\n });\r\n }\r\n if (customShaders.includes) {\r\n Object.keys(customShaders.includes).forEach((key) => {\r\n // typescript considers a callback \"unsafe\", so... '!'\r\n Effect.IncludesShadersStore[key] = customShaders!.includes![key];\r\n });\r\n }\r\n }\r\n}"]}