@babylonjs/viewer 5.22.0 → 5.22.1
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.
- package/loader/modelLoader.d.ts +1 -0
- package/loader/modelLoader.js +1 -0
- package/loader/modelLoader.js.map +1 -1
- package/managers/sceneManager.d.ts +1 -0
- package/managers/sceneManager.js +1 -0
- package/managers/sceneManager.js.map +1 -1
- package/model/viewerModel.d.ts +1 -0
- package/model/viewerModel.js +1 -0
- package/model/viewerModel.js.map +1 -1
- package/package.json +5 -5
- package/viewer/renderOnlyViewer.d.ts +1 -0
- package/viewer/renderOnlyViewer.js +1 -0
- package/viewer/renderOnlyViewer.js.map +1 -1
- package/viewer/viewer.d.ts +1 -0
- package/viewer/viewer.js +1 -0
- package/viewer/viewer.js.map +1 -1
package/model/viewerModel.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewerModel.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/model/viewerModel.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type { IDisposable } from \"core/scene\";\r\nimport type { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from \"core/Loading/sceneLoader\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport type { Skeleton } from \"core/Bones/skeleton\";\r\nimport { Observable } from \"core/Misc/observable\";\r\n\r\nimport { AnimationGroup } from \"core/Animations/animationGroup\";\r\nimport type { Animatable } from \"core/Animations/index\";\r\nimport {\r\n Animation,\r\n CircleEase,\r\n BackEase,\r\n BounceEase,\r\n CubicEase,\r\n ElasticEase,\r\n ExponentialEase,\r\n PowerEase,\r\n QuadraticEase,\r\n QuarticEase,\r\n QuinticEase,\r\n SineEase,\r\n} from \"core/Animations/index\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Quaternion, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Tags } from \"core/Misc/tags\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport { MultiMaterial } from \"core/Materials/multiMaterial\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { GLTFFileLoader } from \"loaders/glTF/index\";\r\nimport type { IAsset } from \"babylonjs-gltf2interface\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { IModelAnimationConfiguration } from \"../configuration/interfaces/modelAnimationConfiguration\";\r\nimport type { IModelAnimation, ModelAnimationConfiguration } from \"./modelAnimation\";\r\nimport { GroupModelAnimation, AnimationPlayMode, EasingFunction, AnimationState } from \"./modelAnimation\";\r\nimport { deepmerge, extendClassWithConfig } from \"../helper/index\";\r\nimport type { ObservablesManager } from \"../managers/observablesManager\";\r\nimport type { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\n\r\n/**\r\n * The current state of the model\r\n */\r\nexport enum ModelState {\r\n INIT,\r\n LOADING,\r\n LOADED,\r\n ENTRY,\r\n ENTRYDONE,\r\n COMPLETE,\r\n CANCELED,\r\n ERROR,\r\n}\r\n\r\n/**\r\n * The viewer model is a container for all assets representing a sngle loaded model.\r\n */\r\nexport class ViewerModel implements IDisposable {\r\n /**\r\n * The loader used to load this model.\r\n */\r\n public loader: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n\r\n private _animations: Array<IModelAnimation>;\r\n\r\n /**\r\n * the list of meshes that are a part of this model\r\n */\r\n private _meshes: Array<AbstractMesh> = [];\r\n /**\r\n * This model's root mesh (the parent of all other meshes).\r\n * This mesh does not(!) exist in the meshes array.\r\n */\r\n public rootMesh: AbstractMesh;\r\n\r\n private _pivotMesh: AbstractMesh;\r\n /**\r\n * ParticleSystems connected to this model\r\n */\r\n public particleSystems: Array<IParticleSystem> = [];\r\n /**\r\n * Skeletons defined in this model\r\n */\r\n public skeletons: Array<Skeleton> = [];\r\n /**\r\n * The current model animation.\r\n * On init, this will be undefined.\r\n */\r\n public currentAnimation: IModelAnimation;\r\n\r\n /**\r\n * Observers registered here will be executed when the model is done loading\r\n */\r\n public onLoadedObservable: Observable<ViewerModel>;\r\n /**\r\n * Observers registered here will be executed when the loader notified of a progress event\r\n */\r\n public onLoadProgressObservable: Observable<ISceneLoaderProgressEvent>;\r\n /**\r\n * Observers registered here will be executed when the loader notified of an error.\r\n */\r\n public onLoadErrorObservable: Observable<{ message: string; exception: any }>;\r\n\r\n /**\r\n * Will be executed after the model finished loading and complete, including entry animation and lod\r\n */\r\n public onCompleteObservable: Observable<ViewerModel>;\r\n /**\r\n * Observers registered here will be executed every time the model is being configured.\r\n * This can be used to extend the model's configuration without extending the class itself\r\n */\r\n public onAfterConfigure: Observable<ViewerModel>;\r\n\r\n /**\r\n * The current model state (loaded, error, etc)\r\n */\r\n public state: ModelState;\r\n /**\r\n * A loadID provided by the modelLoader, unique to ths (Abstract)Viewer instance.\r\n */\r\n public loadId: number;\r\n\r\n public loadInfo: IAsset;\r\n private _modelConfiguration: IModelConfiguration;\r\n\r\n private _loaderDone: boolean = false;\r\n\r\n private _entryAnimation: ModelAnimationConfiguration;\r\n private _scaleTransition: Animation;\r\n private _animatables: Array<Animatable> = [];\r\n private _frameRate: number = 60;\r\n\r\n private _shadowsRenderedAfterLoad: boolean = false;\r\n\r\n constructor(private _observablesManager: ObservablesManager, modelConfiguration: IModelConfiguration, private _configurationContainer?: ConfigurationContainer) {\r\n this.onLoadedObservable = new Observable();\r\n this.onLoadErrorObservable = new Observable();\r\n this.onLoadProgressObservable = new Observable();\r\n this.onCompleteObservable = new Observable();\r\n this.onAfterConfigure = new Observable();\r\n\r\n this.state = ModelState.INIT;\r\n\r\n const scene = this._configurationContainer && this._configurationContainer.scene;\r\n\r\n this.rootMesh = new AbstractMesh(\"modelRootMesh\", scene);\r\n this._pivotMesh = new AbstractMesh(\"pivotMesh\", scene);\r\n this._pivotMesh.parent = this.rootMesh;\r\n // rotate 180, gltf fun\r\n this._pivotMesh.rotation.y += Math.PI;\r\n\r\n this._scaleTransition = new Animation(\"scaleAnimation\", \"scaling\", this._frameRate, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n this._animations = [];\r\n //create a copy of the configuration to make sure it doesn't change even after it is changed in the viewer\r\n this._modelConfiguration = deepmerge((this._configurationContainer && this._configurationContainer.configuration.model) || {}, modelConfiguration);\r\n\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelAddedObservable.notifyObservers(this);\r\n }\r\n\r\n if (this._modelConfiguration.entryAnimation) {\r\n this.rootMesh.setEnabled(false);\r\n }\r\n\r\n this.onLoadedObservable.add(() => {\r\n this.updateConfiguration(this._modelConfiguration);\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelLoadedObservable.notifyObservers(this);\r\n }\r\n this._initAnimations();\r\n });\r\n\r\n this.onCompleteObservable.add(() => {\r\n this.state = ModelState.COMPLETE;\r\n });\r\n }\r\n\r\n public get shadowsRenderedAfterLoad() {\r\n return this._shadowsRenderedAfterLoad;\r\n }\r\n\r\n public set shadowsRenderedAfterLoad(rendered: boolean) {\r\n if (!rendered) {\r\n throw new Error(\"can only be enabled\");\r\n } else {\r\n this._shadowsRenderedAfterLoad = rendered;\r\n }\r\n }\r\n\r\n public getViewerId() {\r\n return this._configurationContainer && this._configurationContainer.viewerId;\r\n }\r\n\r\n /**\r\n * Is this model enabled?\r\n */\r\n public get enabled() {\r\n return this.rootMesh.isEnabled();\r\n }\r\n\r\n /**\r\n * Set whether this model is enabled or not.\r\n */\r\n public set enabled(enable: boolean) {\r\n this.rootMesh.setEnabled(enable);\r\n }\r\n\r\n public set loaderDone(done: boolean) {\r\n this._loaderDone = done;\r\n this._checkCompleteState();\r\n }\r\n\r\n private _checkCompleteState() {\r\n if (this._loaderDone && this.state === ModelState.ENTRYDONE) {\r\n this._modelComplete();\r\n }\r\n }\r\n\r\n /**\r\n * Add a mesh to this model.\r\n * Any mesh that has no parent will be provided with the root mesh as its new parent.\r\n *\r\n * @param mesh the new mesh to add\r\n * @param triggerLoaded should this mesh trigger the onLoaded observable. Used when adding meshes manually.\r\n */\r\n public addMesh(mesh: AbstractMesh, triggerLoaded?: boolean) {\r\n if (!mesh.parent) {\r\n mesh.parent = this._pivotMesh;\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.receiveShadows = !!this.configuration.receiveShadows;\r\n }\r\n\r\n this._meshes.push(mesh);\r\n if (triggerLoaded) {\r\n return this.onLoadedObservable.notifyObserversWithPromise(this);\r\n }\r\n return Promise.resolve(this);\r\n }\r\n\r\n /**\r\n * get the list of meshes (excluding the root mesh)\r\n */\r\n public get meshes() {\r\n return this._meshes;\r\n }\r\n\r\n /**\r\n * Get the model's configuration\r\n */\r\n public get configuration(): IModelConfiguration {\r\n return this._modelConfiguration;\r\n }\r\n\r\n /**\r\n * (Re-)set the model's entire configuration\r\n * @param newConfiguration the new configuration to replace the new one\r\n */\r\n public set configuration(newConfiguration: IModelConfiguration) {\r\n this._modelConfiguration = newConfiguration;\r\n this._configureModel();\r\n }\r\n\r\n /**\r\n * Update the current configuration with new values.\r\n * Configuration will not be overwritten, but merged with the new configuration.\r\n * Priority is to the new configuration\r\n * @param newConfiguration the configuration to be merged into the current configuration;\r\n */\r\n public updateConfiguration(newConfiguration: Partial<IModelConfiguration>) {\r\n this._modelConfiguration = deepmerge(this._modelConfiguration, newConfiguration);\r\n this._configureModel();\r\n }\r\n\r\n private _initAnimations() {\r\n // check if this is not a gltf loader and init the animations\r\n if (this.skeletons.length) {\r\n this.skeletons.forEach((skeleton, idx) => {\r\n const ag = new AnimationGroup(\"animation-\" + idx, this._configurationContainer && this._configurationContainer.scene);\r\n let add = false;\r\n skeleton.getAnimatables().forEach((a) => {\r\n if (a.animations && a.animations[0]) {\r\n ag.addTargetedAnimation(a.animations[0], a);\r\n add = true;\r\n }\r\n });\r\n if (add) {\r\n this.addAnimationGroup(ag);\r\n }\r\n });\r\n }\r\n\r\n let completeCallback = () => {};\r\n\r\n if (this._modelConfiguration.animation) {\r\n if (this._modelConfiguration.animation.playOnce) {\r\n this._animations.forEach((a) => {\r\n a.playMode = AnimationPlayMode.ONCE;\r\n });\r\n }\r\n if (this._modelConfiguration.animation.autoStart && this._animations.length) {\r\n const animationName = this._modelConfiguration.animation.autoStart === true ? this._animations[0].name : this._modelConfiguration.animation.autoStart;\r\n\r\n completeCallback = () => {\r\n this.playAnimation(animationName);\r\n };\r\n }\r\n }\r\n\r\n this._enterScene(completeCallback);\r\n }\r\n\r\n /**\r\n * Animates the model from the current position to the default position\r\n * @param completeCallback A function to call when the animation has completed\r\n */\r\n private _enterScene(completeCallback?: () => void): void {\r\n const scene = this.rootMesh.getScene();\r\n const previousValue = scene.animationPropertiesOverride!.enableBlending;\r\n const callback = () => {\r\n this.state = ModelState.ENTRYDONE;\r\n scene.animationPropertiesOverride!.enableBlending = previousValue;\r\n this._checkCompleteState();\r\n if (completeCallback) {\r\n completeCallback();\r\n }\r\n };\r\n if (!this._entryAnimation) {\r\n callback();\r\n return;\r\n }\r\n this.rootMesh.setEnabled(true);\r\n // disable blending for the sake of the entry animation;\r\n scene.animationPropertiesOverride!.enableBlending = false;\r\n this._applyAnimation(this._entryAnimation, true, callback);\r\n }\r\n\r\n // /**\r\n // * Animates the model from the current position to the exit-screen position\r\n // * @param completeCallback A function to call when the animation has completed\r\n // */\r\n // private _exitScene(completeCallback: () => void): void {\r\n // if (!this._exitAnimation) {\r\n // completeCallback();\r\n // return;\r\n // }\r\n\r\n // this._applyAnimation(this._exitAnimation, false, completeCallback);\r\n // }\r\n\r\n private _modelComplete() {\r\n //reapply material defines to be sure:\r\n const meshes = this._pivotMesh.getChildMeshes(false);\r\n meshes\r\n .filter((m) => m.material)\r\n .forEach((mesh) => {\r\n this._applyModelMaterialConfiguration(mesh.material!);\r\n });\r\n this.state = ModelState.COMPLETE;\r\n this.onCompleteObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Add a new animation group to this model.\r\n * @param animationGroup the new animation group to be added\r\n */\r\n public addAnimationGroup(animationGroup: AnimationGroup) {\r\n this._animations.push(new GroupModelAnimation(animationGroup));\r\n }\r\n\r\n /**\r\n * Get the ModelAnimation array\r\n */\r\n public getAnimations(): Array<IModelAnimation> {\r\n return this._animations;\r\n }\r\n\r\n /**\r\n * Get the animations' names. Using the names you can play a specific animation.\r\n */\r\n public getAnimationNames(): Array<string> {\r\n return this._animations.map((a) => a.name);\r\n }\r\n\r\n /**\r\n * Get an animation by the provided name. Used mainly when playing n animation.\r\n * @param name the name of the animation to find\r\n */\r\n protected _getAnimationByName(name: string): Nullable<IModelAnimation> {\r\n // can't use .find, noe available on IE\r\n const filtered = this._animations.filter((a) => a.name === name.trim());\r\n // what the next line means - if two animations have the same name, they will not be returned!\r\n if (filtered.length === 1) {\r\n return filtered[0];\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Choose an initialized animation using its name and start playing it\r\n * @param name the name of the animation to play\r\n * @returns The model aniamtion to be played.\r\n */\r\n public playAnimation(name: string): IModelAnimation {\r\n const animation = this.setCurrentAnimationByName(name);\r\n if (animation) {\r\n animation.start();\r\n }\r\n return animation;\r\n }\r\n\r\n public setCurrentAnimationByName(name: string) {\r\n const animation = this._getAnimationByName(name.trim());\r\n if (animation) {\r\n if (this.currentAnimation && this.currentAnimation.state !== AnimationState.STOPPED) {\r\n this.currentAnimation.stop();\r\n }\r\n this.currentAnimation = animation;\r\n return animation;\r\n } else {\r\n throw new Error(\"animation not found - \" + name);\r\n }\r\n }\r\n\r\n private _configureModel() {\r\n // this can be changed to the meshes that have rootMesh a parent without breaking anything.\r\n const meshesWithNoParent: Array<AbstractMesh> = [this.rootMesh]; //this._meshes.filter(m => m.parent === this.rootMesh);\r\n const updateMeshesWithNoParent = (variable: string, value: any, param?: string) => {\r\n meshesWithNoParent.forEach((mesh) => {\r\n if (param) {\r\n mesh[variable as keyof AbstractMesh][param] = value;\r\n } else {\r\n (mesh as any)[variable] = value;\r\n }\r\n });\r\n };\r\n const updateXYZ = (variable: string, configValues: { x: number; y: number; z: number; w?: number }) => {\r\n if (configValues.x !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.x, \"x\");\r\n }\r\n if (configValues.y !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.y, \"y\");\r\n }\r\n if (configValues.z !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.z, \"z\");\r\n }\r\n if (configValues.w !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.w, \"w\");\r\n }\r\n };\r\n\r\n if (this._modelConfiguration.normalize) {\r\n let center = false;\r\n let unitSize = false;\r\n let parentIndex;\r\n if (this._modelConfiguration.normalize === true) {\r\n center = true;\r\n unitSize = true;\r\n } else {\r\n center = !!this._modelConfiguration.normalize.center;\r\n unitSize = !!this._modelConfiguration.normalize.unitSize;\r\n parentIndex = this._modelConfiguration.normalize.parentIndex;\r\n }\r\n\r\n let meshesToNormalize: Array<AbstractMesh> = [];\r\n if (parentIndex !== undefined) {\r\n meshesToNormalize.push(this._meshes[parentIndex]);\r\n } else {\r\n meshesToNormalize = this._pivotMesh.getChildMeshes(true).length === 1 ? [this._pivotMesh] : meshesWithNoParent;\r\n }\r\n\r\n if (unitSize) {\r\n meshesToNormalize.forEach((mesh) => {\r\n mesh.normalizeToUnitCube(true);\r\n mesh.computeWorldMatrix(true);\r\n });\r\n }\r\n if (center) {\r\n meshesToNormalize.forEach((mesh) => {\r\n const boundingInfo = mesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n mesh.position = center.scale(-1);\r\n\r\n mesh.position.y += halfSizeVec.y;\r\n\r\n // Recompute Info.\r\n mesh.computeWorldMatrix(true);\r\n });\r\n }\r\n } else {\r\n // if centered, should be done here\r\n }\r\n\r\n // position?\r\n if (this._modelConfiguration.position) {\r\n updateXYZ(\"position\", this._modelConfiguration.position);\r\n }\r\n if (this._modelConfiguration.rotation) {\r\n //quaternion?\r\n if (this._modelConfiguration.rotation.w) {\r\n meshesWithNoParent.forEach((mesh) => {\r\n if (!mesh.rotationQuaternion) {\r\n mesh.rotationQuaternion = new Quaternion();\r\n }\r\n });\r\n updateXYZ(\"rotationQuaternion\", this._modelConfiguration.rotation);\r\n } else {\r\n updateXYZ(\"rotation\", this._modelConfiguration.rotation);\r\n }\r\n }\r\n\r\n if (this._modelConfiguration.rotationOffsetAxis) {\r\n const rotationAxis = new Vector3(\r\n this._modelConfiguration.rotationOffsetAxis.x,\r\n this._modelConfiguration.rotationOffsetAxis.y,\r\n this._modelConfiguration.rotationOffsetAxis.z\r\n );\r\n\r\n meshesWithNoParent.forEach((m) => {\r\n if (this._modelConfiguration.rotationOffsetAngle) {\r\n m.rotate(rotationAxis, this._modelConfiguration.rotationOffsetAngle);\r\n }\r\n });\r\n }\r\n\r\n if (this._modelConfiguration.scaling) {\r\n updateXYZ(\"scaling\", this._modelConfiguration.scaling);\r\n }\r\n\r\n if (this._modelConfiguration.castShadow) {\r\n this._meshes.forEach((mesh) => {\r\n Tags.AddTagsTo(mesh, \"castShadow\");\r\n });\r\n }\r\n\r\n const meshes = this._pivotMesh.getChildMeshes(false);\r\n meshes\r\n .filter((m) => m.material)\r\n .forEach((mesh) => {\r\n this._applyModelMaterialConfiguration(mesh.material!);\r\n });\r\n\r\n if (this._modelConfiguration.entryAnimation) {\r\n this._entryAnimation = this._modelAnimationConfigurationToObject(this._modelConfiguration.entryAnimation);\r\n }\r\n\r\n // if (this._modelConfiguration.exitAnimation) {\r\n // this._exitAnimation = this._modelAnimationConfigurationToObject(this._modelConfiguration.exitAnimation);\r\n // }\r\n\r\n this.onAfterConfigure.notifyObservers(this);\r\n }\r\n\r\n private _modelAnimationConfigurationToObject(animConfig: IModelAnimationConfiguration): ModelAnimationConfiguration {\r\n const anim: ModelAnimationConfiguration = {\r\n time: 0.5,\r\n };\r\n if (animConfig.scaling) {\r\n anim.scaling = Vector3.Zero();\r\n }\r\n if (animConfig.easingFunction !== undefined) {\r\n anim.easingFunction = animConfig.easingFunction;\r\n }\r\n if (animConfig.easingMode !== undefined) {\r\n anim.easingMode = animConfig.easingMode;\r\n }\r\n extendClassWithConfig(anim, animConfig);\r\n return anim;\r\n }\r\n\r\n /**\r\n * Apply a material configuration to a material\r\n * @param material Material to apply configuration to\r\n * @hidden\r\n */\r\n public _applyModelMaterialConfiguration(material: Material) {\r\n if (!this._modelConfiguration.material) {\r\n return;\r\n }\r\n\r\n extendClassWithConfig(material, this._modelConfiguration.material);\r\n\r\n if (material instanceof PBRMaterial) {\r\n if (this._modelConfiguration.material.directIntensity !== undefined) {\r\n material.directIntensity = this._modelConfiguration.material.directIntensity;\r\n }\r\n\r\n if (this._modelConfiguration.material.emissiveIntensity !== undefined) {\r\n material.emissiveIntensity = this._modelConfiguration.material.emissiveIntensity;\r\n }\r\n\r\n if (this._modelConfiguration.material.environmentIntensity !== undefined) {\r\n material.environmentIntensity = this._modelConfiguration.material.environmentIntensity;\r\n }\r\n\r\n if (this._modelConfiguration.material.directEnabled !== undefined) {\r\n material.disableLighting = !this._modelConfiguration.material.directEnabled;\r\n }\r\n if (this._configurationContainer && this._configurationContainer.reflectionColor) {\r\n material.reflectionColor = this._configurationContainer.reflectionColor.clone();\r\n }\r\n } else if (material instanceof MultiMaterial) {\r\n for (let i = 0; i < material.subMaterials.length; i++) {\r\n const subMaterial = material.subMaterials[i];\r\n if (subMaterial) {\r\n this._applyModelMaterialConfiguration(subMaterial);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Start entry/exit animation given an animation configuration\r\n * @param animationConfiguration Entry/Exit animation configuration\r\n * @param isEntry Pass true if the animation is an entry animation\r\n * @param completeCallback Callback to execute when the animation completes\r\n */\r\n private _applyAnimation(animationConfiguration: ModelAnimationConfiguration, isEntry: boolean, completeCallback?: () => void) {\r\n const animations: Animation[] = [];\r\n\r\n //scale\r\n if (animationConfiguration.scaling) {\r\n const scaleStart: Vector3 = isEntry ? animationConfiguration.scaling : new Vector3(1, 1, 1);\r\n const scaleEnd: Vector3 = isEntry ? new Vector3(1, 1, 1) : animationConfiguration.scaling;\r\n\r\n if (!scaleStart.equals(scaleEnd)) {\r\n this.rootMesh.scaling = scaleStart;\r\n this._setLinearKeys(this._scaleTransition, this.rootMesh.scaling, scaleEnd, animationConfiguration.time);\r\n animations.push(this._scaleTransition);\r\n }\r\n }\r\n\r\n //Start the animation(s)\r\n this.transitionTo(animations, animationConfiguration.time, this._createEasingFunction(animationConfiguration.easingFunction), animationConfiguration.easingMode, () => {\r\n if (completeCallback) {\r\n completeCallback();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Begin @animations with the specified @easingFunction\r\n * @param animations The BABYLON Animations to begin\r\n * @param duration of transition, in seconds\r\n * @param easingFunction An easing function to apply\r\n * @param easingMode A easing mode to apply to the easingFunction\r\n * @param onAnimationEnd Call back trigger at the end of the animation.\r\n */\r\n public transitionTo(\r\n animations: Animation[],\r\n duration: number,\r\n easingFunction: any,\r\n easingMode: number = 2, // BABYLON.EasingFunction.EASINGMODE_EASEINOUT,\r\n onAnimationEnd: () => void\r\n ): void {\r\n if (easingFunction) {\r\n for (const animation of animations) {\r\n easingFunction.setEasingMode(easingMode);\r\n animation.setEasingFunction(easingFunction);\r\n }\r\n }\r\n\r\n //Stop any current animations before starting the new one - merging not yet supported.\r\n this.stopAllAnimations();\r\n\r\n this.rootMesh.animations = animations;\r\n\r\n if (this.rootMesh.getScene().beginAnimation !== undefined) {\r\n const animatable: Animatable = this.rootMesh.getScene().beginAnimation(this.rootMesh, 0, this._frameRate * duration, false, 1, () => {\r\n if (onAnimationEnd) {\r\n onAnimationEnd();\r\n }\r\n });\r\n this._animatables.push(animatable);\r\n }\r\n }\r\n\r\n /**\r\n * Sets key values on an Animation from first to last frame.\r\n * @param animation The Babylon animation object to set keys on\r\n * @param startValue The value of the first key\r\n * @param endValue The value of the last key\r\n * @param duration The duration of the animation, used to determine the end frame\r\n */\r\n private _setLinearKeys(animation: Animation, startValue: any, endValue: any, duration: number) {\r\n animation.setKeys([\r\n {\r\n frame: 0,\r\n value: startValue,\r\n },\r\n {\r\n frame: this._frameRate * duration,\r\n value: endValue,\r\n },\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates and returns a Babylon easing funtion object based on a string representing the Easing function\r\n * @param easingFunctionID The enum of the easing funtion to create\r\n * @return The newly created Babylon easing function object\r\n */\r\n private _createEasingFunction(easingFunctionID?: number): any {\r\n let easingFunction;\r\n\r\n switch (easingFunctionID) {\r\n case EasingFunction.CircleEase:\r\n easingFunction = new CircleEase();\r\n break;\r\n case EasingFunction.BackEase:\r\n easingFunction = new BackEase(0.3);\r\n break;\r\n case EasingFunction.BounceEase:\r\n easingFunction = new BounceEase();\r\n break;\r\n case EasingFunction.CubicEase:\r\n easingFunction = new CubicEase();\r\n break;\r\n case EasingFunction.ElasticEase:\r\n easingFunction = new ElasticEase();\r\n break;\r\n case EasingFunction.ExponentialEase:\r\n easingFunction = new ExponentialEase();\r\n break;\r\n case EasingFunction.PowerEase:\r\n easingFunction = new PowerEase();\r\n break;\r\n case EasingFunction.QuadraticEase:\r\n easingFunction = new QuadraticEase();\r\n break;\r\n case EasingFunction.QuarticEase:\r\n easingFunction = new QuarticEase();\r\n break;\r\n case EasingFunction.QuinticEase:\r\n easingFunction = new QuinticEase();\r\n break;\r\n case EasingFunction.SineEase:\r\n easingFunction = new SineEase();\r\n break;\r\n default:\r\n Tools.Log(\"No ease function found\");\r\n break;\r\n }\r\n\r\n return easingFunction;\r\n }\r\n\r\n /**\r\n * Stops and removes all animations that have been applied to the model\r\n */\r\n public stopAllAnimations(): void {\r\n if (this.rootMesh) {\r\n this.rootMesh.animations = [];\r\n }\r\n if (this.currentAnimation) {\r\n this.currentAnimation.stop();\r\n }\r\n while (this._animatables.length) {\r\n this._animatables[0].onAnimationEnd = null;\r\n this._animatables[0].stop();\r\n this._animatables.shift();\r\n }\r\n }\r\n\r\n /**\r\n * Will remove this model from the viewer (but NOT dispose it).\r\n */\r\n public remove() {\r\n this.stopAllAnimations();\r\n\r\n // hide it\r\n this.rootMesh.isVisible = false;\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelRemovedObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose this model, including all of its associated assets.\r\n */\r\n public dispose() {\r\n this.remove();\r\n this.onAfterConfigure.clear();\r\n this.onLoadedObservable.clear();\r\n this.onLoadErrorObservable.clear();\r\n this.onLoadProgressObservable.clear();\r\n if (this.loader && this.loader.name === \"gltf\") {\r\n (<GLTFFileLoader>this.loader).dispose();\r\n }\r\n this.particleSystems.forEach((ps) => ps.dispose());\r\n this.particleSystems.length = 0;\r\n this.skeletons.forEach((s) => s.dispose());\r\n this.skeletons.length = 0;\r\n this._animations.forEach((ag) => ag.dispose());\r\n this._animations.length = 0;\r\n this.rootMesh.dispose(false, true);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"viewerModel.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/model/viewerModel.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type { IDisposable } from \"core/scene\";\r\nimport type { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from \"core/Loading/sceneLoader\";\r\nimport { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { IParticleSystem } from \"core/Particles/IParticleSystem\";\r\nimport type { Skeleton } from \"core/Bones/skeleton\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport \"core/Misc/observable.extensions\";\r\nimport { AnimationGroup } from \"core/Animations/animationGroup\";\r\nimport type { Animatable } from \"core/Animations/index\";\r\nimport {\r\n Animation,\r\n CircleEase,\r\n BackEase,\r\n BounceEase,\r\n CubicEase,\r\n ElasticEase,\r\n ExponentialEase,\r\n PowerEase,\r\n QuadraticEase,\r\n QuarticEase,\r\n QuinticEase,\r\n SineEase,\r\n} from \"core/Animations/index\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { Quaternion, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Tags } from \"core/Misc/tags\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport { MultiMaterial } from \"core/Materials/multiMaterial\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport type { GLTFFileLoader } from \"loaders/glTF/index\";\r\nimport type { IAsset } from \"babylonjs-gltf2interface\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { IModelAnimationConfiguration } from \"../configuration/interfaces/modelAnimationConfiguration\";\r\nimport type { IModelAnimation, ModelAnimationConfiguration } from \"./modelAnimation\";\r\nimport { GroupModelAnimation, AnimationPlayMode, EasingFunction, AnimationState } from \"./modelAnimation\";\r\nimport { deepmerge, extendClassWithConfig } from \"../helper/index\";\r\nimport type { ObservablesManager } from \"../managers/observablesManager\";\r\nimport type { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\n\r\n/**\r\n * The current state of the model\r\n */\r\nexport enum ModelState {\r\n INIT,\r\n LOADING,\r\n LOADED,\r\n ENTRY,\r\n ENTRYDONE,\r\n COMPLETE,\r\n CANCELED,\r\n ERROR,\r\n}\r\n\r\n/**\r\n * The viewer model is a container for all assets representing a sngle loaded model.\r\n */\r\nexport class ViewerModel implements IDisposable {\r\n /**\r\n * The loader used to load this model.\r\n */\r\n public loader: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n\r\n private _animations: Array<IModelAnimation>;\r\n\r\n /**\r\n * the list of meshes that are a part of this model\r\n */\r\n private _meshes: Array<AbstractMesh> = [];\r\n /**\r\n * This model's root mesh (the parent of all other meshes).\r\n * This mesh does not(!) exist in the meshes array.\r\n */\r\n public rootMesh: AbstractMesh;\r\n\r\n private _pivotMesh: AbstractMesh;\r\n /**\r\n * ParticleSystems connected to this model\r\n */\r\n public particleSystems: Array<IParticleSystem> = [];\r\n /**\r\n * Skeletons defined in this model\r\n */\r\n public skeletons: Array<Skeleton> = [];\r\n /**\r\n * The current model animation.\r\n * On init, this will be undefined.\r\n */\r\n public currentAnimation: IModelAnimation;\r\n\r\n /**\r\n * Observers registered here will be executed when the model is done loading\r\n */\r\n public onLoadedObservable: Observable<ViewerModel>;\r\n /**\r\n * Observers registered here will be executed when the loader notified of a progress event\r\n */\r\n public onLoadProgressObservable: Observable<ISceneLoaderProgressEvent>;\r\n /**\r\n * Observers registered here will be executed when the loader notified of an error.\r\n */\r\n public onLoadErrorObservable: Observable<{ message: string; exception: any }>;\r\n\r\n /**\r\n * Will be executed after the model finished loading and complete, including entry animation and lod\r\n */\r\n public onCompleteObservable: Observable<ViewerModel>;\r\n /**\r\n * Observers registered here will be executed every time the model is being configured.\r\n * This can be used to extend the model's configuration without extending the class itself\r\n */\r\n public onAfterConfigure: Observable<ViewerModel>;\r\n\r\n /**\r\n * The current model state (loaded, error, etc)\r\n */\r\n public state: ModelState;\r\n /**\r\n * A loadID provided by the modelLoader, unique to ths (Abstract)Viewer instance.\r\n */\r\n public loadId: number;\r\n\r\n public loadInfo: IAsset;\r\n private _modelConfiguration: IModelConfiguration;\r\n\r\n private _loaderDone: boolean = false;\r\n\r\n private _entryAnimation: ModelAnimationConfiguration;\r\n private _scaleTransition: Animation;\r\n private _animatables: Array<Animatable> = [];\r\n private _frameRate: number = 60;\r\n\r\n private _shadowsRenderedAfterLoad: boolean = false;\r\n\r\n constructor(private _observablesManager: ObservablesManager, modelConfiguration: IModelConfiguration, private _configurationContainer?: ConfigurationContainer) {\r\n this.onLoadedObservable = new Observable();\r\n this.onLoadErrorObservable = new Observable();\r\n this.onLoadProgressObservable = new Observable();\r\n this.onCompleteObservable = new Observable();\r\n this.onAfterConfigure = new Observable();\r\n\r\n this.state = ModelState.INIT;\r\n\r\n const scene = this._configurationContainer && this._configurationContainer.scene;\r\n\r\n this.rootMesh = new AbstractMesh(\"modelRootMesh\", scene);\r\n this._pivotMesh = new AbstractMesh(\"pivotMesh\", scene);\r\n this._pivotMesh.parent = this.rootMesh;\r\n // rotate 180, gltf fun\r\n this._pivotMesh.rotation.y += Math.PI;\r\n\r\n this._scaleTransition = new Animation(\"scaleAnimation\", \"scaling\", this._frameRate, Animation.ANIMATIONTYPE_VECTOR3, Animation.ANIMATIONLOOPMODE_CONSTANT);\r\n\r\n this._animations = [];\r\n //create a copy of the configuration to make sure it doesn't change even after it is changed in the viewer\r\n this._modelConfiguration = deepmerge((this._configurationContainer && this._configurationContainer.configuration.model) || {}, modelConfiguration);\r\n\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelAddedObservable.notifyObservers(this);\r\n }\r\n\r\n if (this._modelConfiguration.entryAnimation) {\r\n this.rootMesh.setEnabled(false);\r\n }\r\n\r\n this.onLoadedObservable.add(() => {\r\n this.updateConfiguration(this._modelConfiguration);\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelLoadedObservable.notifyObservers(this);\r\n }\r\n this._initAnimations();\r\n });\r\n\r\n this.onCompleteObservable.add(() => {\r\n this.state = ModelState.COMPLETE;\r\n });\r\n }\r\n\r\n public get shadowsRenderedAfterLoad() {\r\n return this._shadowsRenderedAfterLoad;\r\n }\r\n\r\n public set shadowsRenderedAfterLoad(rendered: boolean) {\r\n if (!rendered) {\r\n throw new Error(\"can only be enabled\");\r\n } else {\r\n this._shadowsRenderedAfterLoad = rendered;\r\n }\r\n }\r\n\r\n public getViewerId() {\r\n return this._configurationContainer && this._configurationContainer.viewerId;\r\n }\r\n\r\n /**\r\n * Is this model enabled?\r\n */\r\n public get enabled() {\r\n return this.rootMesh.isEnabled();\r\n }\r\n\r\n /**\r\n * Set whether this model is enabled or not.\r\n */\r\n public set enabled(enable: boolean) {\r\n this.rootMesh.setEnabled(enable);\r\n }\r\n\r\n public set loaderDone(done: boolean) {\r\n this._loaderDone = done;\r\n this._checkCompleteState();\r\n }\r\n\r\n private _checkCompleteState() {\r\n if (this._loaderDone && this.state === ModelState.ENTRYDONE) {\r\n this._modelComplete();\r\n }\r\n }\r\n\r\n /**\r\n * Add a mesh to this model.\r\n * Any mesh that has no parent will be provided with the root mesh as its new parent.\r\n *\r\n * @param mesh the new mesh to add\r\n * @param triggerLoaded should this mesh trigger the onLoaded observable. Used when adding meshes manually.\r\n */\r\n public addMesh(mesh: AbstractMesh, triggerLoaded?: boolean) {\r\n if (!mesh.parent) {\r\n mesh.parent = this._pivotMesh;\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.receiveShadows = !!this.configuration.receiveShadows;\r\n }\r\n\r\n this._meshes.push(mesh);\r\n if (triggerLoaded) {\r\n return this.onLoadedObservable.notifyObserversWithPromise(this);\r\n }\r\n return Promise.resolve(this);\r\n }\r\n\r\n /**\r\n * get the list of meshes (excluding the root mesh)\r\n */\r\n public get meshes() {\r\n return this._meshes;\r\n }\r\n\r\n /**\r\n * Get the model's configuration\r\n */\r\n public get configuration(): IModelConfiguration {\r\n return this._modelConfiguration;\r\n }\r\n\r\n /**\r\n * (Re-)set the model's entire configuration\r\n * @param newConfiguration the new configuration to replace the new one\r\n */\r\n public set configuration(newConfiguration: IModelConfiguration) {\r\n this._modelConfiguration = newConfiguration;\r\n this._configureModel();\r\n }\r\n\r\n /**\r\n * Update the current configuration with new values.\r\n * Configuration will not be overwritten, but merged with the new configuration.\r\n * Priority is to the new configuration\r\n * @param newConfiguration the configuration to be merged into the current configuration;\r\n */\r\n public updateConfiguration(newConfiguration: Partial<IModelConfiguration>) {\r\n this._modelConfiguration = deepmerge(this._modelConfiguration, newConfiguration);\r\n this._configureModel();\r\n }\r\n\r\n private _initAnimations() {\r\n // check if this is not a gltf loader and init the animations\r\n if (this.skeletons.length) {\r\n this.skeletons.forEach((skeleton, idx) => {\r\n const ag = new AnimationGroup(\"animation-\" + idx, this._configurationContainer && this._configurationContainer.scene);\r\n let add = false;\r\n skeleton.getAnimatables().forEach((a) => {\r\n if (a.animations && a.animations[0]) {\r\n ag.addTargetedAnimation(a.animations[0], a);\r\n add = true;\r\n }\r\n });\r\n if (add) {\r\n this.addAnimationGroup(ag);\r\n }\r\n });\r\n }\r\n\r\n let completeCallback = () => {};\r\n\r\n if (this._modelConfiguration.animation) {\r\n if (this._modelConfiguration.animation.playOnce) {\r\n this._animations.forEach((a) => {\r\n a.playMode = AnimationPlayMode.ONCE;\r\n });\r\n }\r\n if (this._modelConfiguration.animation.autoStart && this._animations.length) {\r\n const animationName = this._modelConfiguration.animation.autoStart === true ? this._animations[0].name : this._modelConfiguration.animation.autoStart;\r\n\r\n completeCallback = () => {\r\n this.playAnimation(animationName);\r\n };\r\n }\r\n }\r\n\r\n this._enterScene(completeCallback);\r\n }\r\n\r\n /**\r\n * Animates the model from the current position to the default position\r\n * @param completeCallback A function to call when the animation has completed\r\n */\r\n private _enterScene(completeCallback?: () => void): void {\r\n const scene = this.rootMesh.getScene();\r\n const previousValue = scene.animationPropertiesOverride!.enableBlending;\r\n const callback = () => {\r\n this.state = ModelState.ENTRYDONE;\r\n scene.animationPropertiesOverride!.enableBlending = previousValue;\r\n this._checkCompleteState();\r\n if (completeCallback) {\r\n completeCallback();\r\n }\r\n };\r\n if (!this._entryAnimation) {\r\n callback();\r\n return;\r\n }\r\n this.rootMesh.setEnabled(true);\r\n // disable blending for the sake of the entry animation;\r\n scene.animationPropertiesOverride!.enableBlending = false;\r\n this._applyAnimation(this._entryAnimation, true, callback);\r\n }\r\n\r\n // /**\r\n // * Animates the model from the current position to the exit-screen position\r\n // * @param completeCallback A function to call when the animation has completed\r\n // */\r\n // private _exitScene(completeCallback: () => void): void {\r\n // if (!this._exitAnimation) {\r\n // completeCallback();\r\n // return;\r\n // }\r\n\r\n // this._applyAnimation(this._exitAnimation, false, completeCallback);\r\n // }\r\n\r\n private _modelComplete() {\r\n //reapply material defines to be sure:\r\n const meshes = this._pivotMesh.getChildMeshes(false);\r\n meshes\r\n .filter((m) => m.material)\r\n .forEach((mesh) => {\r\n this._applyModelMaterialConfiguration(mesh.material!);\r\n });\r\n this.state = ModelState.COMPLETE;\r\n this.onCompleteObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Add a new animation group to this model.\r\n * @param animationGroup the new animation group to be added\r\n */\r\n public addAnimationGroup(animationGroup: AnimationGroup) {\r\n this._animations.push(new GroupModelAnimation(animationGroup));\r\n }\r\n\r\n /**\r\n * Get the ModelAnimation array\r\n */\r\n public getAnimations(): Array<IModelAnimation> {\r\n return this._animations;\r\n }\r\n\r\n /**\r\n * Get the animations' names. Using the names you can play a specific animation.\r\n */\r\n public getAnimationNames(): Array<string> {\r\n return this._animations.map((a) => a.name);\r\n }\r\n\r\n /**\r\n * Get an animation by the provided name. Used mainly when playing n animation.\r\n * @param name the name of the animation to find\r\n */\r\n protected _getAnimationByName(name: string): Nullable<IModelAnimation> {\r\n // can't use .find, noe available on IE\r\n const filtered = this._animations.filter((a) => a.name === name.trim());\r\n // what the next line means - if two animations have the same name, they will not be returned!\r\n if (filtered.length === 1) {\r\n return filtered[0];\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Choose an initialized animation using its name and start playing it\r\n * @param name the name of the animation to play\r\n * @returns The model aniamtion to be played.\r\n */\r\n public playAnimation(name: string): IModelAnimation {\r\n const animation = this.setCurrentAnimationByName(name);\r\n if (animation) {\r\n animation.start();\r\n }\r\n return animation;\r\n }\r\n\r\n public setCurrentAnimationByName(name: string) {\r\n const animation = this._getAnimationByName(name.trim());\r\n if (animation) {\r\n if (this.currentAnimation && this.currentAnimation.state !== AnimationState.STOPPED) {\r\n this.currentAnimation.stop();\r\n }\r\n this.currentAnimation = animation;\r\n return animation;\r\n } else {\r\n throw new Error(\"animation not found - \" + name);\r\n }\r\n }\r\n\r\n private _configureModel() {\r\n // this can be changed to the meshes that have rootMesh a parent without breaking anything.\r\n const meshesWithNoParent: Array<AbstractMesh> = [this.rootMesh]; //this._meshes.filter(m => m.parent === this.rootMesh);\r\n const updateMeshesWithNoParent = (variable: string, value: any, param?: string) => {\r\n meshesWithNoParent.forEach((mesh) => {\r\n if (param) {\r\n mesh[variable as keyof AbstractMesh][param] = value;\r\n } else {\r\n (mesh as any)[variable] = value;\r\n }\r\n });\r\n };\r\n const updateXYZ = (variable: string, configValues: { x: number; y: number; z: number; w?: number }) => {\r\n if (configValues.x !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.x, \"x\");\r\n }\r\n if (configValues.y !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.y, \"y\");\r\n }\r\n if (configValues.z !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.z, \"z\");\r\n }\r\n if (configValues.w !== undefined) {\r\n updateMeshesWithNoParent(variable, configValues.w, \"w\");\r\n }\r\n };\r\n\r\n if (this._modelConfiguration.normalize) {\r\n let center = false;\r\n let unitSize = false;\r\n let parentIndex;\r\n if (this._modelConfiguration.normalize === true) {\r\n center = true;\r\n unitSize = true;\r\n } else {\r\n center = !!this._modelConfiguration.normalize.center;\r\n unitSize = !!this._modelConfiguration.normalize.unitSize;\r\n parentIndex = this._modelConfiguration.normalize.parentIndex;\r\n }\r\n\r\n let meshesToNormalize: Array<AbstractMesh> = [];\r\n if (parentIndex !== undefined) {\r\n meshesToNormalize.push(this._meshes[parentIndex]);\r\n } else {\r\n meshesToNormalize = this._pivotMesh.getChildMeshes(true).length === 1 ? [this._pivotMesh] : meshesWithNoParent;\r\n }\r\n\r\n if (unitSize) {\r\n meshesToNormalize.forEach((mesh) => {\r\n mesh.normalizeToUnitCube(true);\r\n mesh.computeWorldMatrix(true);\r\n });\r\n }\r\n if (center) {\r\n meshesToNormalize.forEach((mesh) => {\r\n const boundingInfo = mesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n mesh.position = center.scale(-1);\r\n\r\n mesh.position.y += halfSizeVec.y;\r\n\r\n // Recompute Info.\r\n mesh.computeWorldMatrix(true);\r\n });\r\n }\r\n } else {\r\n // if centered, should be done here\r\n }\r\n\r\n // position?\r\n if (this._modelConfiguration.position) {\r\n updateXYZ(\"position\", this._modelConfiguration.position);\r\n }\r\n if (this._modelConfiguration.rotation) {\r\n //quaternion?\r\n if (this._modelConfiguration.rotation.w) {\r\n meshesWithNoParent.forEach((mesh) => {\r\n if (!mesh.rotationQuaternion) {\r\n mesh.rotationQuaternion = new Quaternion();\r\n }\r\n });\r\n updateXYZ(\"rotationQuaternion\", this._modelConfiguration.rotation);\r\n } else {\r\n updateXYZ(\"rotation\", this._modelConfiguration.rotation);\r\n }\r\n }\r\n\r\n if (this._modelConfiguration.rotationOffsetAxis) {\r\n const rotationAxis = new Vector3(\r\n this._modelConfiguration.rotationOffsetAxis.x,\r\n this._modelConfiguration.rotationOffsetAxis.y,\r\n this._modelConfiguration.rotationOffsetAxis.z\r\n );\r\n\r\n meshesWithNoParent.forEach((m) => {\r\n if (this._modelConfiguration.rotationOffsetAngle) {\r\n m.rotate(rotationAxis, this._modelConfiguration.rotationOffsetAngle);\r\n }\r\n });\r\n }\r\n\r\n if (this._modelConfiguration.scaling) {\r\n updateXYZ(\"scaling\", this._modelConfiguration.scaling);\r\n }\r\n\r\n if (this._modelConfiguration.castShadow) {\r\n this._meshes.forEach((mesh) => {\r\n Tags.AddTagsTo(mesh, \"castShadow\");\r\n });\r\n }\r\n\r\n const meshes = this._pivotMesh.getChildMeshes(false);\r\n meshes\r\n .filter((m) => m.material)\r\n .forEach((mesh) => {\r\n this._applyModelMaterialConfiguration(mesh.material!);\r\n });\r\n\r\n if (this._modelConfiguration.entryAnimation) {\r\n this._entryAnimation = this._modelAnimationConfigurationToObject(this._modelConfiguration.entryAnimation);\r\n }\r\n\r\n // if (this._modelConfiguration.exitAnimation) {\r\n // this._exitAnimation = this._modelAnimationConfigurationToObject(this._modelConfiguration.exitAnimation);\r\n // }\r\n\r\n this.onAfterConfigure.notifyObservers(this);\r\n }\r\n\r\n private _modelAnimationConfigurationToObject(animConfig: IModelAnimationConfiguration): ModelAnimationConfiguration {\r\n const anim: ModelAnimationConfiguration = {\r\n time: 0.5,\r\n };\r\n if (animConfig.scaling) {\r\n anim.scaling = Vector3.Zero();\r\n }\r\n if (animConfig.easingFunction !== undefined) {\r\n anim.easingFunction = animConfig.easingFunction;\r\n }\r\n if (animConfig.easingMode !== undefined) {\r\n anim.easingMode = animConfig.easingMode;\r\n }\r\n extendClassWithConfig(anim, animConfig);\r\n return anim;\r\n }\r\n\r\n /**\r\n * Apply a material configuration to a material\r\n * @param material Material to apply configuration to\r\n * @hidden\r\n */\r\n public _applyModelMaterialConfiguration(material: Material) {\r\n if (!this._modelConfiguration.material) {\r\n return;\r\n }\r\n\r\n extendClassWithConfig(material, this._modelConfiguration.material);\r\n\r\n if (material instanceof PBRMaterial) {\r\n if (this._modelConfiguration.material.directIntensity !== undefined) {\r\n material.directIntensity = this._modelConfiguration.material.directIntensity;\r\n }\r\n\r\n if (this._modelConfiguration.material.emissiveIntensity !== undefined) {\r\n material.emissiveIntensity = this._modelConfiguration.material.emissiveIntensity;\r\n }\r\n\r\n if (this._modelConfiguration.material.environmentIntensity !== undefined) {\r\n material.environmentIntensity = this._modelConfiguration.material.environmentIntensity;\r\n }\r\n\r\n if (this._modelConfiguration.material.directEnabled !== undefined) {\r\n material.disableLighting = !this._modelConfiguration.material.directEnabled;\r\n }\r\n if (this._configurationContainer && this._configurationContainer.reflectionColor) {\r\n material.reflectionColor = this._configurationContainer.reflectionColor.clone();\r\n }\r\n } else if (material instanceof MultiMaterial) {\r\n for (let i = 0; i < material.subMaterials.length; i++) {\r\n const subMaterial = material.subMaterials[i];\r\n if (subMaterial) {\r\n this._applyModelMaterialConfiguration(subMaterial);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Start entry/exit animation given an animation configuration\r\n * @param animationConfiguration Entry/Exit animation configuration\r\n * @param isEntry Pass true if the animation is an entry animation\r\n * @param completeCallback Callback to execute when the animation completes\r\n */\r\n private _applyAnimation(animationConfiguration: ModelAnimationConfiguration, isEntry: boolean, completeCallback?: () => void) {\r\n const animations: Animation[] = [];\r\n\r\n //scale\r\n if (animationConfiguration.scaling) {\r\n const scaleStart: Vector3 = isEntry ? animationConfiguration.scaling : new Vector3(1, 1, 1);\r\n const scaleEnd: Vector3 = isEntry ? new Vector3(1, 1, 1) : animationConfiguration.scaling;\r\n\r\n if (!scaleStart.equals(scaleEnd)) {\r\n this.rootMesh.scaling = scaleStart;\r\n this._setLinearKeys(this._scaleTransition, this.rootMesh.scaling, scaleEnd, animationConfiguration.time);\r\n animations.push(this._scaleTransition);\r\n }\r\n }\r\n\r\n //Start the animation(s)\r\n this.transitionTo(animations, animationConfiguration.time, this._createEasingFunction(animationConfiguration.easingFunction), animationConfiguration.easingMode, () => {\r\n if (completeCallback) {\r\n completeCallback();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Begin @animations with the specified @easingFunction\r\n * @param animations The BABYLON Animations to begin\r\n * @param duration of transition, in seconds\r\n * @param easingFunction An easing function to apply\r\n * @param easingMode A easing mode to apply to the easingFunction\r\n * @param onAnimationEnd Call back trigger at the end of the animation.\r\n */\r\n public transitionTo(\r\n animations: Animation[],\r\n duration: number,\r\n easingFunction: any,\r\n easingMode: number = 2, // BABYLON.EasingFunction.EASINGMODE_EASEINOUT,\r\n onAnimationEnd: () => void\r\n ): void {\r\n if (easingFunction) {\r\n for (const animation of animations) {\r\n easingFunction.setEasingMode(easingMode);\r\n animation.setEasingFunction(easingFunction);\r\n }\r\n }\r\n\r\n //Stop any current animations before starting the new one - merging not yet supported.\r\n this.stopAllAnimations();\r\n\r\n this.rootMesh.animations = animations;\r\n\r\n if (this.rootMesh.getScene().beginAnimation !== undefined) {\r\n const animatable: Animatable = this.rootMesh.getScene().beginAnimation(this.rootMesh, 0, this._frameRate * duration, false, 1, () => {\r\n if (onAnimationEnd) {\r\n onAnimationEnd();\r\n }\r\n });\r\n this._animatables.push(animatable);\r\n }\r\n }\r\n\r\n /**\r\n * Sets key values on an Animation from first to last frame.\r\n * @param animation The Babylon animation object to set keys on\r\n * @param startValue The value of the first key\r\n * @param endValue The value of the last key\r\n * @param duration The duration of the animation, used to determine the end frame\r\n */\r\n private _setLinearKeys(animation: Animation, startValue: any, endValue: any, duration: number) {\r\n animation.setKeys([\r\n {\r\n frame: 0,\r\n value: startValue,\r\n },\r\n {\r\n frame: this._frameRate * duration,\r\n value: endValue,\r\n },\r\n ]);\r\n }\r\n\r\n /**\r\n * Creates and returns a Babylon easing funtion object based on a string representing the Easing function\r\n * @param easingFunctionID The enum of the easing funtion to create\r\n * @return The newly created Babylon easing function object\r\n */\r\n private _createEasingFunction(easingFunctionID?: number): any {\r\n let easingFunction;\r\n\r\n switch (easingFunctionID) {\r\n case EasingFunction.CircleEase:\r\n easingFunction = new CircleEase();\r\n break;\r\n case EasingFunction.BackEase:\r\n easingFunction = new BackEase(0.3);\r\n break;\r\n case EasingFunction.BounceEase:\r\n easingFunction = new BounceEase();\r\n break;\r\n case EasingFunction.CubicEase:\r\n easingFunction = new CubicEase();\r\n break;\r\n case EasingFunction.ElasticEase:\r\n easingFunction = new ElasticEase();\r\n break;\r\n case EasingFunction.ExponentialEase:\r\n easingFunction = new ExponentialEase();\r\n break;\r\n case EasingFunction.PowerEase:\r\n easingFunction = new PowerEase();\r\n break;\r\n case EasingFunction.QuadraticEase:\r\n easingFunction = new QuadraticEase();\r\n break;\r\n case EasingFunction.QuarticEase:\r\n easingFunction = new QuarticEase();\r\n break;\r\n case EasingFunction.QuinticEase:\r\n easingFunction = new QuinticEase();\r\n break;\r\n case EasingFunction.SineEase:\r\n easingFunction = new SineEase();\r\n break;\r\n default:\r\n Tools.Log(\"No ease function found\");\r\n break;\r\n }\r\n\r\n return easingFunction;\r\n }\r\n\r\n /**\r\n * Stops and removes all animations that have been applied to the model\r\n */\r\n public stopAllAnimations(): void {\r\n if (this.rootMesh) {\r\n this.rootMesh.animations = [];\r\n }\r\n if (this.currentAnimation) {\r\n this.currentAnimation.stop();\r\n }\r\n while (this._animatables.length) {\r\n this._animatables[0].onAnimationEnd = null;\r\n this._animatables[0].stop();\r\n this._animatables.shift();\r\n }\r\n }\r\n\r\n /**\r\n * Will remove this model from the viewer (but NOT dispose it).\r\n */\r\n public remove() {\r\n this.stopAllAnimations();\r\n\r\n // hide it\r\n this.rootMesh.isVisible = false;\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelRemovedObservable.notifyObservers(this);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose this model, including all of its associated assets.\r\n */\r\n public dispose() {\r\n this.remove();\r\n this.onAfterConfigure.clear();\r\n this.onLoadedObservable.clear();\r\n this.onLoadErrorObservable.clear();\r\n this.onLoadProgressObservable.clear();\r\n if (this.loader && this.loader.name === \"gltf\") {\r\n (<GLTFFileLoader>this.loader).dispose();\r\n }\r\n this.particleSystems.forEach((ps) => ps.dispose());\r\n this.particleSystems.length = 0;\r\n this.skeletons.forEach((s) => s.dispose());\r\n this.skeletons.length = 0;\r\n this._animations.forEach((ag) => ag.dispose());\r\n this._animations.length = 0;\r\n this.rootMesh.dispose(false, true);\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babylonjs/viewer",
|
|
3
|
-
"version": "5.22.
|
|
3
|
+
"version": "5.22.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"module": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
"prepublishOnly": "build-tools -c prepare-es6-build"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@babylonjs/core": "^5.22.
|
|
23
|
-
"@babylonjs/loaders": "^5.22.
|
|
24
|
-
"babylonjs-gltf2interface": "^5.22.
|
|
25
|
-
"babylonjs-viewer-assets": "^5.22.
|
|
22
|
+
"@babylonjs/core": "^5.22.1",
|
|
23
|
+
"@babylonjs/loaders": "^5.22.1",
|
|
24
|
+
"babylonjs-gltf2interface": "^5.22.1",
|
|
25
|
+
"babylonjs-viewer-assets": "^5.22.1",
|
|
26
26
|
"deepmerge": "~4.2.2",
|
|
27
27
|
"handlebars": "~4.7.7",
|
|
28
28
|
"pepjs": "~0.5.3",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ViewerConfiguration } from "../configuration/configuration";
|
|
2
2
|
import { AbstractViewer } from "./viewer";
|
|
3
|
+
import "@babylonjs/core/Misc/observable.extensions.js";
|
|
3
4
|
export declare class RenderOnlyViewer extends AbstractViewer {
|
|
4
5
|
containerElement: Element;
|
|
5
6
|
constructor(containerElement: Element, initialConfiguration?: ViewerConfiguration);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __extends } from "@babylonjs/core/tslib.es6.js";
|
|
2
2
|
import { AbstractViewer } from "./viewer.js";
|
|
3
|
+
import "@babylonjs/core/Misc/observable.extensions.js";
|
|
3
4
|
var RenderOnlyViewer = /** @class */ (function (_super) {
|
|
4
5
|
__extends(RenderOnlyViewer, _super);
|
|
5
6
|
function RenderOnlyViewer(containerElement, initialConfiguration) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderOnlyViewer.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/viewer/renderOnlyViewer.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"renderOnlyViewer.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/viewer/renderOnlyViewer.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,uDAAyC;AAEzC;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,CAAC;;IACzD,CAAC;IACM,qCAAU,GAAjB;QAAA,iBAyBC;QAxBG,IAAM,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;QAC5H,OAAO,IAAI,CAAC,WAAW,EAAE;aACpB,IAAI,CAAC,UAAC,MAAM;YACT,OAAO,KAAI,CAAC,sBAAsB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC1E,CAAC,CAAC;aACD,IAAI,CAAC;YACF,KAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,QAAQ,EAAE;gBACV,OAAO,KAAI,CAAC,SAAS,CAAC,KAAI,CAAC,aAAa,CAAC,KAAM,CAAC;qBAC3C,KAAK,CAAC,cAAO,CAAC,CAAC;qBACf,IAAI,CAAC;oBACF,OAAO,KAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBACnC,CAAC,CAAC,CAAC;aACV;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;aACD,IAAI,CAAC;YACF,OAAO,KAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,KAAI,CAAC,CAAC;QACtE,CAAC,CAAC;aACD,KAAK,CAAC,UAAC,CAAC;YACL,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1B,OAAO,KAAI,CAAC;QAChB,CAAC,CAAC,CAAC;IACX,CAAC;IACS,mDAAwB,GAAlC,cAAsC,CAAC;IAC3C,uBAAC;AAAD,CAAC,AAhCD,CAAsC,cAAc,GAgCnD","sourcesContent":["import type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport { AbstractViewer } from \"./viewer\";\r\nimport \"core/Misc/observable.extensions\";\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 const autoLoad = typeof this.configuration.model === \"string\" || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine()\r\n .then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n })\r\n .then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!)\r\n .catch(() => {})\r\n .then(() => {\r\n return this.sceneManager.scene;\r\n });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n })\r\n .then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n })\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"]}
|
package/viewer/viewer.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ import type { ViewerModel } from "../model/viewerModel";
|
|
|
11
11
|
import type { ViewerConfiguration } from "../configuration/configuration";
|
|
12
12
|
import type { IObserversConfiguration } from "../configuration/interfaces/observersConfiguration";
|
|
13
13
|
import type { IModelConfiguration } from "../configuration/interfaces/modelConfiguration";
|
|
14
|
+
import "@babylonjs/core/Misc/observable.extensions.js";
|
|
14
15
|
/**
|
|
15
16
|
* The AbstractViewer is the center of Babylon's viewer.
|
|
16
17
|
* 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
|
@@ -14,6 +14,7 @@ import { ObservablesManager } from "../managers/observablesManager.js";
|
|
|
14
14
|
import { SceneManager } from "../managers/sceneManager.js";
|
|
15
15
|
import { telemetryManager } from "../managers/telemetryManager.js";
|
|
16
16
|
import { viewerManager } from "./viewerManager.js";
|
|
17
|
+
import "@babylonjs/core/Misc/observable.extensions.js";
|
|
17
18
|
/**
|
|
18
19
|
* The AbstractViewer is the center of Babylon's viewer.
|
|
19
20
|
* 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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/viewer/viewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"core/Engines/engine\";\r\nimport type { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from \"core/Loading/sceneLoader\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { RenderingManager } from \"core/Rendering/renderingManager\";\r\nimport type { TargetCamera } from \"core/Cameras/targetCamera\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { Effect } from \"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\n// eslint-disable-next-line import/no-internal-modules\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 type { ViewerModel } from \"../model/viewerModel\";\r\nimport { viewerManager } from \"./viewerManager\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { IObserversConfiguration } from \"../configuration/interfaces/observersConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { GLTFFileLoader } from \"loaders/glTF/glTFFileLoader\";\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 necessarily 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 // eslint-disable-next-line @typescript-eslint/naming-convention\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 * 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 render 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 const 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 // 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(\r\n this.configuration.vr.cameraPosition.x,\r\n this.configuration.vr.cameraPosition.y,\r\n this.configuration.vr.cameraPosition.z\r\n );\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 &&\r\n (<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 const boundingVectors = this.sceneManager.models[0].rootMesh.getHierarchyBoundingVectors();\r\n const sizeVec = boundingVectors.max.subtract(boundingVectors.min);\r\n const 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 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 width\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 * @param force\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 * 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(\r\n newConfiguration,\r\n (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,\r\n undefined,\r\n undefined,\r\n (error) => {\r\n console.log(\"Error parsing file \" + newConfiguration, error);\r\n }\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 as any)[observersConfiguration.onEngineInit]);\r\n } else {\r\n if (observersConfiguration.onEngineInit === \"\" && this.configuration.observers && this.configuration.observers!.onEngineInit) {\r\n this.onEngineInitObservable.removeCallback((window as any)[this.configuration.observers!.onEngineInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onSceneInit) {\r\n this.onSceneInitObservable.add((window as any)[observersConfiguration.onSceneInit]);\r\n } else {\r\n if (observersConfiguration.onSceneInit === \"\" && this.configuration.observers && this.configuration.observers!.onSceneInit) {\r\n this.onSceneInitObservable.removeCallback((window as any)[this.configuration.observers!.onSceneInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onModelLoaded) {\r\n this.onModelLoadedObservable.add((window as any)[observersConfiguration.onModelLoaded]);\r\n } else {\r\n if (observersConfiguration.onModelLoaded === \"\" && this.configuration.observers && this.configuration.observers!.onModelLoaded) {\r\n this.onModelLoadedObservable.removeCallback((window as any)[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(): void;\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 const autoLoad = typeof this.configuration.model === \"string\" || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine()\r\n .then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n })\r\n .then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!)\r\n .catch(() => {})\r\n .then(() => {\r\n return this.sceneManager.scene;\r\n });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n })\r\n .then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n })\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. Returns 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 // 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 const 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 if (this.configuration[\"3dCommerceCertified\"]) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.forceSRGBBufferSupportState = true;\r\n const loader = SceneLoader.GetPluginForExtension(\".gltf\");\r\n if (loader) {\r\n (loader as GLTFFileLoader).transparencyAsCoverage = true;\r\n }\r\n SceneLoader.OnPluginActivatedObservable.add((plugin) => {\r\n if (plugin.name === \"gltf\") {\r\n const loader = plugin as GLTFFileLoader;\r\n loader.transparencyAsCoverage = true;\r\n }\r\n });\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 const 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 const 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 const 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 initModel 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)\r\n .then((scene) => {\r\n if (!scene) {\r\n return this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n return scene;\r\n })\r\n .then(() => {\r\n const 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 const 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 const 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}\r\n"]}
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../tools/viewer/src/viewer/viewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"core/Engines/engine\";\r\nimport type { ISceneLoaderPlugin, ISceneLoaderPluginAsync, ISceneLoaderProgressEvent } from \"core/Loading/sceneLoader\";\r\nimport { SceneLoader } from \"core/Loading/sceneLoader\";\r\nimport type { Observable } from \"core/Misc/observable\";\r\nimport type { Scene } from \"core/scene\";\r\nimport { RenderingManager } from \"core/Rendering/renderingManager\";\r\nimport type { TargetCamera } from \"core/Cameras/targetCamera\";\r\nimport { Tools } from \"core/Misc/tools\";\r\nimport { Effect } from \"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\n// eslint-disable-next-line import/no-internal-modules\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 type { ViewerModel } from \"../model/viewerModel\";\r\nimport { viewerManager } from \"./viewerManager\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport type { IObserversConfiguration } from \"../configuration/interfaces/observersConfiguration\";\r\nimport type { IModelConfiguration } from \"../configuration/interfaces/modelConfiguration\";\r\nimport type { GLTFFileLoader } from \"loaders/glTF/glTFFileLoader\";\r\nimport \"core/Misc/observable.extensions\";\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 necessarily 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 // eslint-disable-next-line @typescript-eslint/naming-convention\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 * 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 render 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 const 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 // 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(\r\n this.configuration.vr.cameraPosition.x,\r\n this.configuration.vr.cameraPosition.y,\r\n this.configuration.vr.cameraPosition.z\r\n );\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 &&\r\n (<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 const boundingVectors = this.sceneManager.models[0].rootMesh.getHierarchyBoundingVectors();\r\n const sizeVec = boundingVectors.max.subtract(boundingVectors.min);\r\n const 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 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 width\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 * @param force\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 * 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(\r\n newConfiguration,\r\n (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,\r\n undefined,\r\n undefined,\r\n (error) => {\r\n console.log(\"Error parsing file \" + newConfiguration, error);\r\n }\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 as any)[observersConfiguration.onEngineInit]);\r\n } else {\r\n if (observersConfiguration.onEngineInit === \"\" && this.configuration.observers && this.configuration.observers!.onEngineInit) {\r\n this.onEngineInitObservable.removeCallback((window as any)[this.configuration.observers!.onEngineInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onSceneInit) {\r\n this.onSceneInitObservable.add((window as any)[observersConfiguration.onSceneInit]);\r\n } else {\r\n if (observersConfiguration.onSceneInit === \"\" && this.configuration.observers && this.configuration.observers!.onSceneInit) {\r\n this.onSceneInitObservable.removeCallback((window as any)[this.configuration.observers!.onSceneInit!]);\r\n }\r\n }\r\n if (observersConfiguration.onModelLoaded) {\r\n this.onModelLoadedObservable.add((window as any)[observersConfiguration.onModelLoaded]);\r\n } else {\r\n if (observersConfiguration.onModelLoaded === \"\" && this.configuration.observers && this.configuration.observers!.onModelLoaded) {\r\n this.onModelLoadedObservable.removeCallback((window as any)[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(): void;\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 const autoLoad = typeof this.configuration.model === \"string\" || (this.configuration.model && this.configuration.model.url);\r\n return this._initEngine()\r\n .then((engine) => {\r\n return this.onEngineInitObservable.notifyObserversWithPromise(engine);\r\n })\r\n .then(() => {\r\n this._initTelemetryEvents();\r\n if (autoLoad) {\r\n return this.loadModel(this.configuration.model!)\r\n .catch(() => {})\r\n .then(() => {\r\n return this.sceneManager.scene;\r\n });\r\n } else {\r\n return this.sceneManager.scene || this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n })\r\n .then(() => {\r\n return this.onInitDoneObservable.notifyObserversWithPromise(this);\r\n })\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. Returns 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 // 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 const 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 if (this.configuration[\"3dCommerceCertified\"]) {\r\n config.engineOptions = config.engineOptions || {};\r\n config.engineOptions.forceSRGBBufferSupportState = true;\r\n const loader = SceneLoader.GetPluginForExtension(\".gltf\");\r\n if (loader) {\r\n (loader as GLTFFileLoader).transparencyAsCoverage = true;\r\n }\r\n SceneLoader.OnPluginActivatedObservable.add((plugin) => {\r\n if (plugin.name === \"gltf\") {\r\n const loader = plugin as GLTFFileLoader;\r\n loader.transparencyAsCoverage = true;\r\n }\r\n });\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 const 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 const 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 const 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 initModel 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)\r\n .then((scene) => {\r\n if (!scene) {\r\n return this.sceneManager.initScene(this.configuration.scene);\r\n }\r\n return scene;\r\n })\r\n .then(() => {\r\n const 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 const 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 const 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}\r\n"]}
|