@colijnit/configuratorcore 262.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colijnit-configuratorcore.mjs","sources":["../../projects/configuratorcore/src/lib/utils/object.utils.ts","../../projects/configuratorcore/src/lib/utils/threed.utils.ts","../../projects/configuratorcore/src/lib/utils/image.utils.ts","../../projects/configuratorcore/src/lib/model/material.ts","../../projects/configuratorcore/src/lib/utils/asset.utils.ts","../../projects/configuratorcore/src/lib/model/variation-settings.ts","../../projects/configuratorcore/src/lib/utils/file.utils.ts","../../projects/configuratorcore/src/lib/utils/debug.utils.ts","../../projects/configuratorcore/src/lib/utils/variation-utils.ts","../../projects/configuratorcore/src/lib/model/variation.ts","../../projects/configuratorcore/src/lib/helper/variation-cache.helper.ts","../../projects/configuratorcore/src/lib/helper/variation.helper.ts","../../projects/configuratorcore/src/lib/utils/scene-3d.utils.ts","../../projects/configuratorcore/src/lib/utils/selection.utils.ts","../../projects/configuratorcore/src/lib/builder.ts","../../projects/configuratorcore/src/colijnit-configuratorcore.ts"],"sourcesContent":["import * as THREE from 'three';\r\nimport {\r\n Box3,\r\n BufferGeometry,\r\n Color,\r\n CylinderGeometry,\r\n DataTexture,\r\n EquirectangularReflectionMapping,\r\n Float32BufferAttribute,\r\n Group,\r\n Line,\r\n LineBasicMaterial,\r\n Material,\r\n Mesh,\r\n MeshBasicMaterial,\r\n Object3D,\r\n Scene, Source, Texture,\r\n Vector2,\r\n Vector3\r\n} from 'three';\r\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection.js';\r\nimport {RGBELoader} from 'three/examples/jsm/loaders/RGBELoader.js';\r\nimport {ChangesInterface} from '../interfaces/changes.interface';\r\n\r\nexport class ObjectUtils {\r\n static materialProps: string[] = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];\r\n\r\n public static CreateArrow(\r\n name: string, color: Color | number | string,\r\n length: number,\r\n direction: Vector3,\r\n headLength: number,\r\n headWidth: number,\r\n doubleArrow: boolean = false): Group {\r\n\r\n const arrow: Group = new Group();\r\n\r\n const lineGeometry = new BufferGeometry();\r\n lineGeometry.setAttribute('position', new Float32BufferAttribute([0, 0, 0, 0, 1, 0], 3));\r\n const line = new Line(lineGeometry, new LineBasicMaterial({color: color, toneMapped: false}));\r\n lineGeometry.rotateX(Math.PI / 2 * direction.z);\r\n lineGeometry.rotateY(Math.PI / 2 * direction.y);\r\n lineGeometry.rotateZ(Math.PI / 2 * direction.x);\r\n const translate: Vector3 = new Vector3(\r\n (direction.x) / 2,\r\n direction.y ? -(direction.y) / 2 : 0,\r\n -(direction.z) / 2\r\n );\r\n lineGeometry.translate(translate.x, translate.y, translate.z);\r\n\r\n line.name = 'arrow_line';\r\n line.matrixAutoUpdate = false;\r\n arrow.add(line);\r\n\r\n const coneGeometry = new CylinderGeometry(0, 0.5, 1, 5, 1);\r\n const coneRightGeometry = coneGeometry.clone();\r\n\r\n const cone = new Mesh(coneGeometry, new MeshBasicMaterial({color: color, toneMapped: false}));\r\n coneGeometry.rotateX(Math.PI / 2 * -direction.z);\r\n if (direction.y) {\r\n coneGeometry.rotateZ(Math.PI);\r\n }\r\n coneGeometry.rotateZ(Math.PI / 2 * -direction.x);\r\n // coneGeometry.translate(translate.x * 2, translate.y * 2, translate.z * 2);\r\n cone.name = 'arrow_cone_left';\r\n cone.matrixAutoUpdate = false;\r\n arrow.add(cone);\r\n\r\n if (doubleArrow) {\r\n const coneRight = new Mesh(coneRightGeometry, new MeshBasicMaterial({color: color, toneMapped: false}));\r\n coneRightGeometry.rotateX(Math.PI / 2 * direction.z);\r\n coneRightGeometry.rotateZ(Math.PI / 2 * direction.x);\r\n // coneRightGeometry.translate(-translate.x * 2, -translate.y * 2, -translate.z * 2);\r\n coneRight.name = 'arrow_cone_right';\r\n coneRight.matrixAutoUpdate = false;\r\n arrow.add(coneRight);\r\n }\r\n arrow.name = name;\r\n return ObjectUtils.UpdateArrowLength(arrow, length, direction, headLength, headWidth);\r\n }\r\n\r\n public static UpdateArrowLength(arrow: Group, length: number, direction: Vector3, headLength: number, headWidth: number, doubleArrow: boolean = false): Group {\r\n try {\r\n const arrowLine: Object3D = arrow.getObjectByName('arrow_line');\r\n const scale: Vector3 = new Vector3(\r\n direction.x ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1,\r\n direction.y ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1,\r\n direction.z ? Math.max(0.0001, length - (doubleArrow ? headLength * 2 : headLength)) : 1\r\n );\r\n arrowLine.scale.copy(scale);\r\n arrowLine.updateMatrix();\r\n\r\n const cone: Object3D = arrow.getObjectByName('arrow_cone_left');\r\n if (cone) {\r\n cone.scale.set(headWidth, headLength, headWidth);\r\n cone.position.x = direction.x ? length / 2 - headLength : 0;\r\n cone.position.y = direction.y ? -length / 2 + headLength : 0;\r\n cone.position.z = direction.z ? -length / 2 + headLength : 0;\r\n cone.updateMatrix();\r\n }\r\n\r\n const coneRight: Object3D = arrow.getObjectByName('arrow_cone_right');\r\n if (coneRight) {\r\n coneRight.scale.set(headWidth, headLength, headWidth);\r\n coneRight.position.x = direction.x ? -length / 2 + headLength : 0;\r\n coneRight.position.y = direction.y ? length / 2 - headLength : 0;\r\n coneRight.position.z = direction.z ? length / 2 - headLength : 0;\r\n coneRight.updateMatrix();\r\n }\r\n return arrow;\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n public static ChildOf(obj: Mesh | Object3D, parentName: string): boolean {\r\n if (obj && obj.parent && obj.parent.name === parentName) {\r\n return true;\r\n } else if (obj.parent) {\r\n return ObjectUtils.ChildOf(obj.parent, parentName);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n public static GetParentItem(element: any): Object3D {\r\n if (!element.parent) {\r\n return null;\r\n }\r\n if (element.parent instanceof Object3D) {\r\n return element.parent;\r\n } else {\r\n return ObjectUtils.GetParentItem(element.parent);\r\n }\r\n }\r\n\r\n public static GetDefaultMaterial(object: Object3D): Material {\r\n const children: Mesh[] = <Mesh[]>object.children.filter(c => {\r\n if (c instanceof Mesh) {\r\n return Array.isArray(c.material) ?\r\n c.material.find(m => m.name.toLowerCase().startsWith('default_')) :\r\n c.material.name.toLowerCase().startsWith('default_');\r\n }\r\n });\r\n return <Material>children.map(c => c.material)[0];\r\n }\r\n\r\n public static SameMaterial(first: Material, second: Material): boolean {\r\n if (!first && !second) {\r\n return true;\r\n }\r\n return first.hasOwnProperty('map') && second.hasOwnProperty('map') && (first as any).map && (second as any).map &&\r\n (first as any).map.image.src === (second as any).map.image.src;\r\n }\r\n\r\n public static GetChanges(firstItems: Object3D[], secondItems: Object3D[]): any {\r\n const result: ChangesInterface[] = [];\r\n for (let i = 0; i < secondItems.length; i++) { // check added/changed items\r\n const secondItem = secondItems[i];\r\n let oldPosition;\r\n let oldMaterial;\r\n const newPosition: Vector3 = new Vector3().copy(secondItem.position);\r\n const newMaterial: Material = ObjectUtils.GetDefaultMaterial(secondItem);\r\n const firstItem = firstItems.find(fi => fi.name === secondItems[i].name);\r\n if (firstItem) {\r\n oldPosition = new Vector3().copy(firstItem.position);\r\n oldMaterial = ObjectUtils.GetDefaultMaterial(firstItem);\r\n }\r\n if ((!oldPosition || (newPosition && !oldPosition.equals(newPosition))) || !ObjectUtils.SameMaterial(oldMaterial, newMaterial)) {\r\n result.push({\r\n object: secondItem,\r\n name: secondItem.name,\r\n oldPosition: oldPosition,\r\n newPosition: newPosition,\r\n oldMaterial: oldMaterial,\r\n newMaterial: newMaterial\r\n });\r\n }\r\n }\r\n for (let i = 0; i < firstItems.length; i++) { // check deleted items\r\n const firstItem = firstItems[i];\r\n const oldPosition: Vector3 = new Vector3().copy(firstItem.position);\r\n let newPosition;\r\n const secondItem = secondItems.find(fi => fi.name === firstItems[i].name);\r\n if (secondItem) {\r\n newPosition = new Vector3().copy(secondItem.position);\r\n }\r\n if (!newPosition || (newPosition && !oldPosition.equals(newPosition))) {\r\n result.push({\r\n object: firstItem,\r\n name: firstItem.name,\r\n oldPosition: oldPosition,\r\n newPosition: newPosition\r\n });\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public static GetSelectionFromSelectedObject(object: any): Selection {\r\n if (object) {\r\n if (object.userData && object.userData.selection) {\r\n return object.userData.selection;\r\n } else if (object.parent) {\r\n return this.GetSelectionFromSelectedObject(object.parent);\r\n } else {\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n public static UpdateUvs(geo: BufferGeometry): void {\r\n if (geo) {\r\n const pos: any = geo.attributes.position;\r\n const b3: Box3 = new THREE.Box3().setFromBufferAttribute(pos);\r\n const b3size: Vector3 = new THREE.Vector3();\r\n b3.getSize(b3size);\r\n const uv = [];\r\n for (let i = 0; i < pos.count; i++) {\r\n const x: number = pos.getX(i);\r\n const y: number = pos.getY(i);\r\n const u: number = (x - b3.min.x) / b3size.x;\r\n const v: number = (y - b3.min.y) / b3size.y;\r\n uv.push(u, v);\r\n }\r\n geo.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));\r\n }\r\n }\r\n\r\n public static async LoadHDRI(path: string, scene: Scene): Promise<void> {\r\n const hdri: DataTexture = await new RGBELoader().loadAsync(path);\r\n hdri.mapping = EquirectangularReflectionMapping;\r\n scene.environment = hdri;\r\n }\r\n\r\n public static ProjectToPlane(points: Vector3[]): Vector2[] {\r\n const centroid = new Vector3();\r\n points.forEach(p => centroid.add(p));\r\n centroid.divideScalar(points.length);\r\n\r\n const v1 = points[1].clone().sub(points[0]);\r\n const v2 = points[2].clone().sub(points[0]);\r\n const normal = v1.clone().cross(v2).normalize();\r\n\r\n const arbitrary = Math.abs(normal.dot(new Vector3(1, 0, 0))) > 0.9\r\n ? new Vector3(0, 1, 0)\r\n : new Vector3(1, 0, 0);\r\n\r\n const u = new Vector3().crossVectors(normal, arbitrary).normalize();\r\n const v = new Vector3().crossVectors(normal, u).normalize();\r\n\r\n return points.map(p => {\r\n const rel = p.clone().sub(centroid);\r\n return new Vector2(rel.dot(u), rel.dot(v));\r\n });\r\n }\r\n\r\n public static CloneMaterial(material: Material | Material[], deepClone: boolean = false): Material | Material[] {\r\n if (material instanceof Material) {\r\n const onBeforeCompile = material.onBeforeCompile;\r\n const onBeforeRender = material.onBeforeRender;\r\n const clone: Material = material.clone();\r\n clone.onBeforeCompile = onBeforeCompile;\r\n clone.onBeforeRender = onBeforeRender;\r\n this.materialProps\r\n .filter(mapType => clone[mapType] && clone[mapType] instanceof Texture)\r\n .forEach(mapType => clone[mapType] = ObjectUtils.CloneTexture(clone[mapType], deepClone));\r\n return clone;\r\n }\r\n return material.map((m: Material) => {\r\n const onBeforeCompile = m.onBeforeCompile;\r\n const onBeforeRender = m.onBeforeRender;\r\n const clone: Material = m.clone();\r\n clone.onBeforeCompile = onBeforeCompile;\r\n clone.onBeforeRender = onBeforeRender;\r\n this.materialProps\r\n .filter(mapType => clone[mapType] && clone[mapType] instanceof Texture)\r\n .forEach(mapType => clone[mapType] = ObjectUtils.CloneTexture(clone[mapType], deepClone));\r\n return clone;\r\n });\r\n }\r\n\r\n /**\r\n * ThreeJS does not clone image property, so it stays a reference to the original image.\r\n * When deepClone, this method creates a new image and copies the original image data to it.\r\n * @param texture\r\n * @param deepClone\r\n * @constructor\r\n */\r\n public static CloneTexture(texture: Texture, deepClone: boolean = false): Texture {\r\n const clone: Texture = texture.clone();\r\n if (!deepClone) {\r\n clone.needsUpdate = true;\r\n return clone;\r\n }\r\n if (texture.image) {\r\n if (texture.image instanceof HTMLImageElement && texture.image.src) {\r\n const img: HTMLImageElement = texture.image;\r\n const newImage: HTMLImageElement = new Image();\r\n newImage.src = img.src;\r\n clone.source = new Source(newImage);\r\n } else if (texture.image instanceof HTMLCanvasElement) {\r\n const canvas: HTMLCanvasElement = texture.image;\r\n const newCanvas: HTMLCanvasElement = document.createElement('canvas');\r\n newCanvas.width = canvas.width;\r\n newCanvas.height = canvas.height;\r\n const ctx: CanvasRenderingContext2D = newCanvas.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(canvas, 0, 0);\r\n }\r\n clone.source = new Source(newCanvas);\r\n } else if (texture.image.data && (texture.image.data.slice || texture.image.data instanceof ArrayBuffer)) {\r\n const imgData: any = texture.image;\r\n clone.image = {\r\n ...imgData,\r\n data: imgData.data.slice ? imgData.data.slice(0) : new Uint8Array(imgData.data).slice(0) // Deep copy the TypedArray\r\n };\r\n }\r\n }\r\n clone.needsUpdate = true;\r\n return clone;\r\n }\r\n\r\n public static CloneObject3D(source: Object3D): Object3D {\r\n const newObject = new Object3D();\r\n source.children.forEach((child: any) => {\r\n if (!child.visible) {\r\n return;\r\n }\r\n if (child instanceof Mesh) {\r\n newObject.add(child.clone());\r\n } else if (child instanceof Object3D) {\r\n const clone = ObjectUtils.CloneObject3D(child);\r\n clone.position.copy(child.position);\r\n clone.rotation.copy(child.rotation);\r\n newObject.add(clone);\r\n }\r\n });\r\n return newObject;\r\n }\r\n\r\n public static DeepCloneObject3D(source: Object3D): Object3D {\r\n if (!source) {\r\n return new Object3D();\r\n }\r\n const clone: Object3D = source.clone();\r\n clone.traverse((obj: Object3D) => {\r\n if (obj instanceof Mesh && obj.material) {\r\n obj.material = ObjectUtils.CloneMaterial(obj.material, true);\r\n }\r\n });\r\n return clone;\r\n }\r\n\r\n public static DisposeMaterial(material: Material | Material[]): void {\r\n if (!material) {\r\n return;\r\n }\r\n if (Array.isArray(material)) {\r\n material.forEach(mtrl => ObjectUtils.DisposeMaterial(mtrl));\r\n return;\r\n }\r\n for (const key in material) {\r\n if (material.hasOwnProperty(key)) {\r\n const value = material[key];\r\n if (value && value.isTexture) {\r\n value.dispose();\r\n }\r\n }\r\n }\r\n material.dispose();\r\n }\r\n\r\n public static DisposeObject(object: Object3D | Mesh): void {\r\n if (!object) {\r\n return;\r\n }\r\n if (object.children.length) {\r\n object.children.forEach(child => this.DisposeObject(child));\r\n }\r\n ObjectUtils.DisposeNode(object);\r\n }\r\n\r\n public static GetParentCustomObject(element: any): Object3D {\r\n if (!element.parent) {\r\n return null;\r\n }\r\n if (element.parent instanceof Object3D) {\r\n return element.parent;\r\n } else {\r\n return ObjectUtils.GetParentCustomObject(element.parent);\r\n }\r\n }\r\n\r\n private static DisposeNode(node: Object3D | Mesh): void {\r\n node.traverse((obj: Object3D) => {\r\n if (obj instanceof Mesh) {\r\n if (obj.geometry) {\r\n obj.geometry.dispose();\r\n }\r\n ObjectUtils.DisposeMaterial(obj.material);\r\n }\r\n if (typeof (obj as any).dispose === 'function') {\r\n // @ts-ignore\r\n obj.dispose();\r\n }\r\n });\r\n }\r\n\r\n private static _remapFloat(v: number, min0: number, max0: number, min1: number, max1: number) {\r\n return min1 + (v - min0) / (max0 - min0) * (max1 - min1);\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport {Box3, Camera, Group, Mesh, Object3D, Vector3} from 'three';\r\nimport {GLTFLoader} from 'three/examples/jsm/loaders/GLTFLoader.js';\r\nimport {DRACOLoader} from 'three/examples/jsm/loaders/DRACOLoader.js';\r\nimport {ObjectUtils} from './object.utils';\r\n\r\nexport class ThreedUtils {\r\n public clips: any = [];\r\n private _objectCache: Map<string, THREE.Object3D> = new Map();\r\n\r\n public clearCache(): void {\r\n const objs: THREE.Object3D[] = Array.from(this._objectCache.values());\r\n objs.forEach(o => ObjectUtils.DisposeObject(o));\r\n this._objectCache.clear();\r\n }\r\n\r\n public download3DSource(fileName: string, setVisibleFalse: boolean = true): Promise<THREE.Object3D> {\r\n return new Promise(async (resolve: Function, reject: Function) => {\r\n fileName = fileName.replace('.unity3d', '');\r\n let lookupFileName: string = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');\r\n if (this._objectCache.has(lookupFileName)) {\r\n resolve(this._objectCache.get(lookupFileName));\r\n return;\r\n }\r\n this.loadGlbSource(lookupFileName, setVisibleFalse)\r\n .then((obj: THREE.Object3D) => {\r\n this._objectCache.set(lookupFileName, obj);\r\n resolve(obj);\r\n })\r\n .catch(() => {\r\n reject(`GLB source not found! (${lookupFileName})`);\r\n });\r\n });\r\n }\r\n\r\n public readFileAsText(file: File): Promise<string> {\r\n const fileReader = new FileReader();\r\n return new Promise((resolve, reject) => {\r\n fileReader.onload = (e: any) => resolve(e.target.result);\r\n fileReader.onerror = error => reject(error);\r\n fileReader.readAsText(file);\r\n });\r\n }\r\n\r\n public async loadJsonModel(filePath: string): Promise<any> {\r\n if (this._objectCache.has(filePath)) {\r\n return Promise.resolve(this._objectCache.get(filePath));\r\n }\r\n const json: string = await this._readJsonFile(filePath);\r\n const loader = new THREE.ObjectLoader();\r\n loader.crossOrigin = 'Anonymous';\r\n return new Promise((resolve, reject) => {\r\n try {\r\n const obj = loader.parse(json);\r\n this._objectCache.set(filePath, obj);\r\n resolve(obj);\r\n } catch (e) {\r\n reject(null);\r\n }\r\n });\r\n }\r\n\r\n public async loadJsonObjectModel(filePath: string): Promise<any> {\r\n if (this._objectCache.has(filePath)) {\r\n return Promise.resolve(this._objectCache.get(filePath));\r\n }\r\n const loader = new THREE.ObjectLoader();\r\n loader.setCrossOrigin('Anonymous');\r\n loader.setResourcePath('');\r\n return new Promise((resolve, reject) => {\r\n loader.load(filePath,\r\n (object: any) => {\r\n const obj: THREE.Object3D = (object.type === 'Scene' && object.children[0].type === 'Object3D') ? object.children[0] : object;\r\n this._objectCache.set(filePath, obj);\r\n resolve(obj as THREE.Object3D);\r\n },\r\n xhr => null,\r\n error => reject(error)\r\n );\r\n });\r\n }\r\n\r\n public async loadGlbModel(file: string, cleanUp: boolean = true, dracoPath?: string): Promise<THREE.Object3D> {\r\n if (this._objectCache.has(file)) {\r\n return Promise.resolve(this._objectCache.get(file));\r\n }\r\n if (!window.hasOwnProperty('loadGLTF')) {\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const loader = new GLTFLoader();\r\n loader.setDRACOLoader(new DRACOLoader());\r\n loader.dracoLoader.setDecoderPath(dracoPath);\r\n loader.dracoLoader.setDecoderConfig({type: 'js'});\r\n loader.load(file,\r\n async object => {\r\n this.clips = object.animations || [];\r\n const obj: Object3D = this.cleanedUpObjectsWeb(object.scene, false);\r\n this._objectCache.set(file, obj);\r\n resolve(obj);\r\n },\r\n xhr => this._handleUpdateProgressBar(xhr.loaded / xhr.total * 100),\r\n error => {\r\n console.log('Error! ', error);\r\n reject(error);\r\n }\r\n );\r\n });\r\n } else {\r\n const obj: THREE.Object3D = await (window as any).loadGLTF(file);\r\n if (obj) {\r\n this._cleanedUpObjects(obj, cleanUp);\r\n this._objectCache.set(file, obj);\r\n return obj;\r\n } else {\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n public async loadGlbSource(file: string, setVisibleFalse: boolean = true, dracoPath?: string): Promise<THREE.Object3D> {\r\n const obj = await this.loadGlbModel(file, true, dracoPath);\r\n if (obj) {\r\n obj.children = obj.children.filter(c => !(c instanceof THREE.Camera || (c.constructor.name && c.constructor.name.toLowerCase().indexOf('camera') > -1)));\r\n obj.children.sort((a, b) => a['name'] < b['name'] ? 1 : -1);\r\n obj.children.forEach((c: THREE.Object3D) => {\r\n c.traverse((t: THREE.Object3D) => {\r\n t.visible = !t.name.toLowerCase().startsWith('c_');\r\n });\r\n if (setVisibleFalse) {\r\n c.visible = false;\r\n }\r\n });\r\n if (obj.children.length === 1 && (obj.children[0] instanceof THREE.Group || obj.children[0].constructor.name === 'Group')) { // flatten children\r\n const children: any = obj.children[0].children.slice();\r\n const name: string = obj.children[0].name;\r\n obj.children.length = 0;\r\n const parent: THREE.Object3D = new THREE.Object3D();\r\n parent.name = name;\r\n parent.children = children;\r\n obj.add(parent);\r\n }\r\n }\r\n return obj;\r\n }\r\n\r\n public async textureFromUrl(url: string): Promise<any> {\r\n // url = this._includeBaseUrl(url);\r\n return new Promise((resolve, reject) => {\r\n const textureLoader = new THREE.TextureLoader();\r\n // textureLoader.setBaseU(this._settingsService.settings.assetPath);\r\n textureLoader.load(url,\r\n (texture: THREE.Texture) => {\r\n texture.wrapT = THREE.RepeatWrapping;\r\n texture.wrapS = THREE.RepeatWrapping;\r\n texture.repeat.set(1, 1);\r\n texture.needsUpdate = true;\r\n return resolve(texture);\r\n },\r\n null,\r\n reject\r\n );\r\n });\r\n }\r\n\r\n public cleanedUpObjectsWeb(object: Object3D, cleanUp: boolean = true): Object3D {\r\n let obj: Object3D = new Object3D();\r\n // console.log(this.clips);\r\n object.children.forEach((c: Object3D) => {\r\n if (!(c instanceof Camera)) {\r\n if (cleanUp && c instanceof Group || (c.children.length === 1 && c.children[0] instanceof Group)) {\r\n this._addGroupChildrenToObject(c, obj);\r\n } else if ((cleanUp && !(c instanceof Mesh)) || (!(c instanceof Mesh) && !c.name && c.children.length > 0)) {\r\n c.children.forEach((child) => {\r\n child.translateY(c.position.y);\r\n });\r\n c.translateY(-c.position.y);\r\n if (obj.children.length > 0) {\r\n obj.add(c.clone());\r\n } else {\r\n obj = c.clone();\r\n }\r\n } else {\r\n // if (c.position.y > 0 || c.position.y < 0) {\r\n // c.children.forEach((child) => {\r\n // child.translateY(c.position.y);\r\n // });\r\n // c.translateY(-c.position.y);\r\n // }\r\n obj.add(c.clone());\r\n }\r\n }\r\n });\r\n const boundingBox = new Box3().setFromObject(obj);\r\n const bbCenterPivot = new Vector3();\r\n boundingBox.getCenter(bbCenterPivot);\r\n const delta: Vector3 = new Vector3().add(bbCenterPivot).negate();\r\n obj.children.forEach((cc) => {\r\n cc.position.add(delta);\r\n });\r\n return obj;\r\n }\r\n\r\n private _cleanedUpObjects(object: THREE.Object3D, cleanUp: boolean = true): THREE.Object3D {\r\n let obj: THREE.Object3D = new THREE.Object3D();\r\n object.children.forEach((c: THREE.Object3D) => {\r\n if (!(c instanceof THREE.Camera || (c.constructor.name && c.constructor.name.toLowerCase().indexOf('camera') > -1))) {\r\n if (cleanUp && (c instanceof THREE.Group || c.constructor.name === 'Group') || (c.children.length === 1 && (c.children[0] instanceof THREE.Group || c.children[0].constructor.name === 'Group'))) {\r\n this._addGroupChildrenToObject(c, obj);\r\n } else if ((cleanUp && !(c instanceof THREE.Mesh || c.constructor.name === 'Mesh')) || (!(c instanceof THREE.Mesh || c.constructor.name === 'Mesh') && !c.name && c.children.length > 0)) {\r\n c.children.forEach((child) => {\r\n child.translateY(c.position.y);\r\n });\r\n c.translateY(-c.position.y);\r\n if (obj.children.length > 0) {\r\n obj.add(c.clone());\r\n } else {\r\n obj = c.clone();\r\n }\r\n } else {\r\n if (c.position.y > 0 || c.position.y < 0) {\r\n c.children.forEach((child) => {\r\n child.translateY(c.position.y);\r\n });\r\n c.translateY(-c.position.y);\r\n }\r\n obj.add(c.clone());\r\n }\r\n }\r\n });\r\n const boundingBox = new THREE.Box3().setFromObject(obj);\r\n const bbCenterPivot = new THREE.Vector3();\r\n boundingBox.getCenter(bbCenterPivot);\r\n const delta: THREE.Vector3 = new THREE.Vector3().add(bbCenterPivot).negate();\r\n obj.children.forEach((cc) => {\r\n cc.position.add(delta);\r\n });\r\n return obj;\r\n }\r\n\r\n private _addGroupChildrenToObject(group: THREE.Object3D, obj: THREE.Object3D, cleanUp: boolean = true): void {\r\n group.children.forEach((gc: THREE.Object3D) => {\r\n if (cleanUp && (gc instanceof THREE.Group || gc.constructor.name === 'Group')) {\r\n this._addGroupChildrenToObject(gc, obj);\r\n } else {\r\n // gc.translateX(-group.position.x);\r\n gc.translateY(group.position.y);\r\n // gc.translateZ(-group.position.z);\r\n obj.add(gc.clone());\r\n }\r\n });\r\n }\r\n\r\n private _iterateChildren(children: THREE.Object3D[], callback: (child: THREE.Mesh) => {}): void {\r\n for (let i = 0; i < children.length; i++) {\r\n const child: THREE.Object3D = children[i];\r\n if (child instanceof THREE.Mesh || child.constructor.name === 'Mesh') {\r\n callback(child as THREE.Mesh);\r\n } else {\r\n this._iterateChildren(child.children, callback);\r\n }\r\n }\r\n }\r\n\r\n private async _readJsonFile(filePath: string): Promise<any> {\r\n try {\r\n const response = await fetch(filePath);\r\n if (!response.ok) {\r\n return '';\r\n } else {\r\n let empty = false;\r\n await response.clone().text().then((value) => {\r\n if (value === '') {\r\n empty = true;\r\n }\r\n });\r\n return empty ? {} : response.json();\r\n }\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n\r\n private _handleUpdateProgressBar(loaded: number): void {\r\n // this._progressService.progress = loaded;\r\n }\r\n}\r\n","import * as THREE from 'three';\r\nimport {LinearSRGBColorSpace, Texture} from 'three';\r\nimport {Material} from '../model/material';\r\n\r\n// @dynamic\r\nexport class ImageUtils {\r\n\r\n public static textures: Map<string, THREE.Texture> = new Map();\r\n\r\n public static CreateTextureFromBase64(id: string, base64: string, material: Material, defaultFlip: boolean = false): Promise<THREE.Texture> {\r\n return new Promise<THREE.Texture>((resolve) => {\r\n if (ImageUtils.textures.has(id)) {\r\n resolve(ImageUtils.textures.get(id));\r\n } else {\r\n if (!base64) {\r\n resolve(new Texture());\r\n } else {\r\n const loader: THREE.TextureLoader = new THREE.TextureLoader();\r\n loader.load(base64, (texture: THREE.Texture) => {\r\n texture.anisotropy = 16;\r\n texture.wrapS = THREE.RepeatWrapping;\r\n texture.wrapT = THREE.RepeatWrapping;\r\n texture.repeat = new THREE.Vector2(material ? material.repeatX : 1, material ? material.repeatY : 1);\r\n texture.flipY = defaultFlip; // sabina stoel gaat hierdoor kapot\r\n texture.colorSpace = LinearSRGBColorSpace;\r\n texture.needsUpdate = true;\r\n ImageUtils.textures.set(id, texture);\r\n resolve(texture);\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n public static getFixedImageFilepathUrl(imageFilepathUrl: string): string {\r\n return imageFilepathUrl.replace('/content/', '/content43/');\r\n }\r\n\r\n public static getDocBodyWithMimeTypeDefinition(fileName: string, documentBody: string): string {\r\n if (documentBody === null) {\r\n return documentBody;\r\n }\r\n const fileExtension: string = fileName.substr(fileName.lastIndexOf('.') + 1);\r\n switch (fileExtension.toLowerCase()) {\r\n case 'jpg':\r\n case 'jpeg':\r\n return 'data:image/jpg;base64,' + documentBody;\r\n case 'png':\r\n return 'data:image/png;base64,' + documentBody;\r\n case 'gif':\r\n return 'data:image/gif;base64,' + documentBody;\r\n case 'bmp':\r\n return 'data:image/bmp;base64,' + documentBody;\r\n default:\r\n return 'data:image/png;base64,' + documentBody;\r\n }\r\n }\r\n\r\n public static ClearCache(): void {\r\n ImageUtils.textures.forEach(value => {\r\n value.dispose();\r\n });\r\n ImageUtils.textures.clear();\r\n }\r\n\r\n}\r\n","import * as THREE from 'three';\r\nimport { Side } from 'three';\r\n\r\nexport class Material {\r\n public name: string;\r\n public schema: string;\r\n public specular: THREE.Color = new THREE.Color(0.3, 0.3, 0.3);\r\n public shininess = 0;\r\n // public roughness = 1;\r\n // public metalness = 0.5;\r\n public normal: THREE.Texture;\r\n public texture: THREE.Texture;\r\n public ao: THREE.Texture;\r\n public metalness: THREE.Texture;\r\n public roughness: THREE.Texture;\r\n public repeatX = 4;\r\n public repeatY = 4;\r\n public loaded = false;\r\n public metalnessValue: number;\r\n public roughnessValue: number;\r\n public displacement: THREE.Texture;\r\n public displacementValue: number;\r\n public sheen: number;\r\n public sheenColor: THREE.Color;\r\n public sheenColorMap: THREE.Texture | null;\r\n public sheenRoughness: number;\r\n public sheenRoughnessMap: THREE.Texture | null;\r\n public emissive: THREE.Texture;\r\n public emissiveValue: THREE.Color;\r\n public emissiveIntensityValue: number;\r\n public envMap: THREE.Texture;\r\n public envMapIntensity: number;\r\n public opacity: number;\r\n public transparent: boolean;\r\n public reflectivity: number;\r\n public side: Side;\r\n public ior: number;\r\n public transmission: number;\r\n public thickness: number;\r\n public specularIntensity: number;\r\n public transmissionMap: THREE.Texture | null;\r\n public clearcoatMap: THREE.Texture | null;\r\n public clearcoatRoughnessMap: THREE.Texture | null;\r\n}\r\n","import {ImageUtils} from './image.utils';\r\nimport * as THREE from 'three';\r\nimport {SRGBColorSpace} from 'three';\r\nimport {Material} from '../model/material';\r\nimport {VariationSettings} from '../model/variation-settings';\r\n\r\nexport class FurnitureMaterial extends Material {\r\n\r\n public textureFilename?: string;\r\n public normalFilename?: string;\r\n public aoFilename?: string;\r\n public metalnessFilename?: string;\r\n public roughnessFilename?: string;\r\n public displacementFilename?: string;\r\n public envMapFilename?: string;\r\n public emissiveFileName?: string;\r\n public sheenColorMapFileName?: string;\r\n public sheenRoughnessMapFileName?: string;\r\n public transmissionMapFileName?: string;\r\n\r\n}\r\n\r\nexport class AssetUtils {\r\n\r\n public static async CreateMaterialFromAsset(asset: VariationSettings): Promise<Material> {\r\n const material: FurnitureMaterial = new Material();\r\n if (!asset) {\r\n return material;\r\n }\r\n if (asset.settings) {\r\n AssetUtils.setSettingsOfMaterial(material, asset.settings);\r\n }\r\n if (asset.texture) {\r\n material.texture = await ImageUtils.CreateTextureFromBase64(asset.id + '_texture', asset.texture, material);\r\n material.texture.colorSpace = SRGBColorSpace;\r\n material.textureFilename = asset.textureFilename;\r\n }\r\n if (asset.normal) {\r\n material.normal = await ImageUtils.CreateTextureFromBase64(asset.id + '_normal', asset.normal, material);\r\n material.normalFilename = asset.normalFilename;\r\n }\r\n if (asset.orm) {\r\n material.ao = await ImageUtils.CreateTextureFromBase64(asset.id + '_orm', asset.orm, material);\r\n material.roughness = material.ao;\r\n material.metalness = material.ao;\r\n material.aoFilename = asset.ormFilename;\r\n material.roughnessFilename = asset.ormFilename;\r\n material.metalnessFilename = asset.ormFilename;\r\n } else {\r\n if (asset.ao) {\r\n material.ao = await ImageUtils.CreateTextureFromBase64(asset.id + '_ao', asset.ao, material);\r\n material.aoFilename = asset.aoFilename;\r\n }\r\n if (asset.metalness) {\r\n material.metalness = await ImageUtils.CreateTextureFromBase64(asset.id + '_metalness', asset.metalness, material);\r\n material.metalnessFilename = asset.metalnessFilename;\r\n }\r\n if (asset.roughness) {\r\n material.roughness = await ImageUtils.CreateTextureFromBase64(asset.id + '_roughness', asset.roughness, material);\r\n material.roughnessFilename = asset.roughnessFilename;\r\n }\r\n }\r\n if (asset.displacement) {\r\n material.displacement = await ImageUtils.CreateTextureFromBase64(asset.id + '_displacement', asset.displacement, material);\r\n material.displacementFilename = asset.displacementFilename;\r\n }\r\n if (asset.envMap) {\r\n material.envMap = await ImageUtils.CreateTextureFromBase64(asset.id + '_env', asset.envMap, material, true);\r\n material.envMapFilename = asset.envMapFilename;\r\n }\r\n if (asset.sheenColorMap) {\r\n material.sheenColorMap = await ImageUtils.CreateTextureFromBase64(asset.id + '_sheen_color', asset.sheenColorMap, material);\r\n material.sheenColorMapFileName = asset.sheenColorMapFilename;\r\n }\r\n if (asset.sheenRoughnessMap) {\r\n material.sheenRoughnessMap = await ImageUtils.CreateTextureFromBase64(asset.id + '_sheen_roughness', asset.sheenRoughnessMap, material);\r\n material.sheenRoughnessMapFileName = asset.sheenRoughnessMapFilename;\r\n\r\n }\r\n if (asset.transmissionMap) {\r\n material.transmissionMap = await ImageUtils.CreateTextureFromBase64(asset.id + '_transmission', asset.transmissionMap, material);\r\n material.transmissionMapFileName = asset.transmissionMapFilename;\r\n }\r\n if (asset.emissive) {\r\n material.emissive = await ImageUtils.CreateTextureFromBase64(asset.id + '_emissive', asset.emissive, material);\r\n material.emissiveFileName = asset.emissiveFilename;\r\n }\r\n material.sheen = asset.sheen;\r\n material.emissiveIntensityValue = asset.emissiveIntensity;\r\n material.emissiveValue = asset.emissiveValue;\r\n material.side = asset.side;\r\n material.sheenColor = asset.sheenColor;\r\n material.sheenRoughness = asset.sheenRoughness;\r\n material.opacity = asset.opacity;\r\n material.transparent = asset.transparent;\r\n material.envMapIntensity = asset.envMapIntensity;\r\n material.reflectivity = asset.reflectivity;\r\n material.displacementValue = asset.displacementValue;\r\n material.transmission = asset.transmission;\r\n material.ior = asset.ior;\r\n material.thickness = asset.thickness;\r\n material.specularIntensity = asset.specularIntensity;\r\n return material;\r\n }\r\n\r\n public static setSettingsOfMaterial(material: Material, settings: any): void {\r\n const shininess = parseFloat(settings['power']);\r\n if (!isNaN(shininess)) {\r\n material.shininess = shininess;\r\n // material.roughness = 1 - (shininess / 100);\r\n }\r\n\r\n const level = parseFloat(settings['level']);\r\n if (!isNaN(level)) {\r\n material.specular = new THREE.Color(level, level, level);\r\n }\r\n\r\n const repeatObjectUsed: boolean = settings.hasOwnProperty('repeat');\r\n const repeatx = repeatObjectUsed ? parseFloat(settings['repeat']['repeatx']) : parseFloat(settings['repeatx']);\r\n if (!isNaN(repeatx)) {\r\n material.repeatX = repeatx;\r\n }\r\n\r\n const repeaty = repeatObjectUsed ? parseFloat(settings['repeat']['repeaty']) : parseFloat(settings['repeaty']);\r\n if (!isNaN(repeaty)) {\r\n material.repeatY = repeaty;\r\n }\r\n\r\n const metalness = parseFloat(settings['metalness']);\r\n if (!isNaN(metalness)) {\r\n material.metalnessValue = Math.min(1, metalness);\r\n }\r\n\r\n const roughness = parseFloat(settings['roughness']);\r\n if (!isNaN(roughness)) {\r\n material.roughnessValue = Math.min(1, roughness);\r\n }\r\n }\r\n}\r\n","import {Subject} from 'rxjs';\r\nimport {Color, Side} from 'three';\r\n\r\nexport class VariationSettingsSettings {\r\n repeatx: number;\r\n repeaty: number;\r\n roughness: number;\r\n metalness: number;\r\n}\r\n\r\nexport class VariationSettings {\r\n public id: string;\r\n public settings: VariationSettingsSettings = new VariationSettingsSettings();\r\n public texture: string;\r\n public textureFilename: string;\r\n public normal: string;\r\n public normalFilename: string;\r\n public ao: string;\r\n public aoFilename: string;\r\n public metalness: string;\r\n public metalnessFilename: string;\r\n public roughness: string;\r\n public roughnessFilename: string;\r\n public orm: string;\r\n public ormFilename: string;\r\n public displacement: string;\r\n public displacementValue: number;\r\n public displacementFilename: string;\r\n public sheen: number;\r\n public sheenColor: Color;\r\n public sheenColorMap: string;\r\n public sheenColorMapFilename: string;\r\n public sheenRoughness: number;\r\n public sheenRoughnessMap: string;\r\n public sheenRoughnessMapFilename: string;\r\n public transmissionMap: string;\r\n public transmissionMapFilename: string;\r\n public emissive: string;\r\n public emissiveFilename: string;\r\n public emissiveIntensity: number;\r\n public emissiveValue: Color;\r\n public opacity: number;\r\n public transparent: boolean;\r\n public envMap: string;\r\n public envMapFilename: string;\r\n public envMapIntensity: number;\r\n public reflectivity: number;\r\n public side: Side;\r\n public transmission: number;\r\n public ior: number;\r\n public thickness: number;\r\n public specularIntensity: number;\r\n\r\n public loading: boolean = false;\r\n public loaded: Subject<VariationSettings> = new Subject<VariationSettings>();\r\n\r\n public material: any;\r\n public copyFrom(settings: VariationSettings): void {\r\n this.settings = settings.settings;\r\n this.texture = settings.texture;\r\n this.textureFilename = settings.textureFilename;\r\n this.normal = settings.normal;\r\n this.normalFilename = settings.normalFilename;\r\n this.ao = settings.ao;\r\n this.aoFilename = settings.aoFilename;\r\n this.metalness = settings.metalness;\r\n this.metalnessFilename = settings.metalnessFilename;\r\n this.roughness = settings.roughness;\r\n this.roughnessFilename = settings.roughnessFilename;\r\n this.orm = settings.orm;\r\n this.ormFilename = settings.ormFilename;\r\n this.displacement = settings.displacement;\r\n this.displacementValue = settings.displacementValue;\r\n this.displacementFilename = settings.displacementFilename;\r\n this.sheen = settings.sheen;\r\n this.sheenColor = settings.sheenColor;\r\n this.sheenColorMap = settings.sheenColorMap;\r\n this.sheenColorMapFilename = settings.sheenColorMapFilename;\r\n this.transmissionMap = settings.transmissionMap;\r\n this.transmissionMapFilename = settings.transmissionMapFilename;\r\n this.sheenRoughness = settings.sheenRoughness;\r\n this.sheenRoughnessMap = settings.sheenRoughnessMap;\r\n this.sheenRoughnessMapFilename = settings.sheenRoughnessMapFilename;\r\n this.emissive = settings.emissive;\r\n this.emissiveFilename = settings.emissiveFilename;\r\n this.emissiveIntensity = settings.emissiveIntensity;\r\n this.emissiveValue = settings.emissiveValue;\r\n this.opacity = settings.opacity;\r\n this.transparent = settings.transparent;\r\n this.envMap = settings.envMap;\r\n this.envMapFilename = settings.envMapFilename;\r\n this.envMapIntensity = settings.envMapIntensity;\r\n this.reflectivity = settings.reflectivity;\r\n this.side = settings.side;\r\n this.transmission = settings.transmission;\r\n this.ior = settings.ior;\r\n this.thickness = settings.thickness;\r\n this.specularIntensity = settings.specularIntensity;\r\n this.material = settings.material;\r\n }\r\n}\r\n","import axios from \"axios\";\r\n// Static utility functions holder related to files.\r\n// @dynamic\r\nexport class FileUtils {\r\n\r\n private static _cachedTextureUploads: Map<string, Object> = new Map();\r\n private static _filesDontExist: string[] = [];\r\n private static _filesExist: string[] = [];\r\n\r\n public static async DoesFileExist(url: string): Promise<boolean> {\r\n try {\r\n if (this._filesDontExist.indexOf(url) > -1) { // no need to check again\r\n return false;\r\n }\r\n if (this._filesExist.indexOf(url) > -1) { // no need to check again\r\n return true;\r\n }\r\n const response: Response = await fetch(url, {method: 'HEAD'});\r\n if (response.ok && response.status === 200) {\r\n this._filesExist.push(url);\r\n return true;\r\n }\r\n this._filesDontExist.push(url);\r\n return false;\r\n } catch (error) {\r\n this._filesDontExist.push(url);\r\n return false;\r\n }\r\n }\r\n\r\n // Returns the given dataUri string stripped of the mimetype part.\r\n public static StripMimeStringFromDataUri(dataUri: string): string {\r\n if (!dataUri) {\r\n return '';\r\n }\r\n\r\n const mimeString: string = this.GetMimeStringFromDataUri(dataUri);\r\n return dataUri.substr(mimeString.length + 1);\r\n }\r\n\r\n public static GetMimeStringFromDataUri(dataUri: string): string {\r\n if (!dataUri) {\r\n return '';\r\n }\r\n\r\n return dataUri.split(',')[0];\r\n }\r\n\r\n public static async FileExists(url: string, assetPath: string): Promise<boolean> {\r\n if (!assetPath.endsWith('/')) {\r\n assetPath = assetPath + '/';\r\n }\r\n const result = await axios({\r\n method: 'get',\r\n url: `${assetPath}getFiles.php?assetUrl=${url}`,\r\n responseType: \"json\"\r\n })\r\n return !!result.data;\r\n }\r\n\r\n /**\r\n * There is some discrepancy regarding locations of h3d objects\r\n * Therefor we need to (temporarily?!) fix the content url\r\n * Also we need to change some additionals\r\n */\r\n public static FixUrl(assetUrl: string): string {\r\n if (!assetUrl) {\r\n return '';\r\n }\r\n let fixedUrl: string = assetUrl;\r\n if (!fixedUrl.endsWith('glb') && !fixedUrl.endsWith('obj') && !fixedUrl.endsWith('glb.gz') && !fixedUrl.endsWith('obj.gz')) {\r\n fixedUrl = FileUtils.FixUnityUrl(fixedUrl);\r\n }\r\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\r\n return fixedUrl;\r\n }\r\n\r\n public static FixGlbUrl(assetUrl: string): string {\r\n if (!assetUrl) {\r\n return '';\r\n }\r\n let fixedUrl: string = assetUrl;\r\n if (assetUrl.indexOf('_webplayer') === -1) {\r\n fixedUrl = assetUrl.concat('_webplayer');\r\n }\r\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\r\n if (!fixedUrl.endsWith('.glb')) {\r\n fixedUrl = fixedUrl.concat('.glb');\r\n }\r\n return fixedUrl;\r\n }\r\n\r\n // Return the mimetype of the given filename.\r\n public static MimeTypeFromFilename(fileName: string): string {\r\n const regEx: RegExp = /(?:\\.([^.]+))?$/; // regex to find extension\r\n const extension: any = regEx.exec(fileName)[1];\r\n switch (extension) {\r\n case 'jpg':\r\n case 'jpeg':\r\n return 'image/jpeg';\r\n case 'png':\r\n return 'image/png';\r\n case 'bmp':\r\n return 'image/bmp';\r\n }\r\n }\r\n\r\n /**\r\n * Downloads the given file to the users default download location.\r\n * @param fileName With or without extension\r\n * @param content File content as a string\r\n * @param [mimeType = 'text/plain']\r\n */\r\n public static DownloadFile(\r\n fileName: string,\r\n content: string,\r\n mimeType: string = 'text/plain'\r\n ): void {\r\n const element: HTMLAnchorElement = document.createElement('a');\r\n element.setAttribute('href', 'data:' + mimeType + ';charset=utf-8,' + encodeURIComponent(content));\r\n element.setAttribute('download', fileName);\r\n\r\n element.style.display = 'none';\r\n document.body.appendChild(element);\r\n\r\n element.click();\r\n\r\n document.body.removeChild(element);\r\n }\r\n\r\n // Returns the contents of given file as a text string.\r\n public static ReadAsText(file: File): Promise<string> {\r\n return new Promise<string>((resolve: Function) => {\r\n const reader: FileReader = new FileReader();\r\n reader.readAsText(file);\r\n reader.onloadend = (event: any) => {\r\n if (event.target.readyState === 2) {\r\n resolve(event.target.result);\r\n }\r\n };\r\n });\r\n }\r\n\r\n public static GetExtensionFromDataUri(dataUri: string): string {\r\n return dataUri.replace(/(data:image\\/)(.*?)(;base64.*)/gi, '$2');\r\n }\r\n\r\n public static CreateDownloadFileNameFromBase64(dataUri: string): string {\r\n const ext: string = this.GetExtensionFromDataUri(dataUri);\r\n return 'preview.' + ext;\r\n }\r\n\r\n public static DownloadFromDataUri(dataUri: string, fileName: string): void {\r\n const link: any = document.createElement('a');\r\n link.download = fileName;\r\n link.href = dataUri;\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n }\r\n\r\n // todo remove once Connector deals with mimetypes and this method isn't used anymore\r\n public static DocumentBodyToDataUri(documentBody: string, mimeType: string): string {\r\n if (!!documentBody) {\r\n return 'data:' + mimeType + ';base64,' + documentBody;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n private static FixUnityUrl(url): string {\r\n if (url.indexOf('_webplayer') === -1) {\r\n url = url.concat('_webplayer.ione3d');\r\n } else {\r\n url = url.replace('_webplayer', '_webplayer.ione3d');\r\n }\r\n if (!url.endsWith('.gz')) {\r\n url = url.concat('.gz');\r\n }\r\n return url.replace('.unity3d', '');\r\n }\r\n}\r\n","export class DebugUtils {\r\n public static log(message: string) {\r\n console.log(message);\r\n }\r\n}\r\n","import {VariationSettings} from '../model/variation-settings';\r\n// @ts-ignore\r\nimport JSZip from 'jszip';\r\nimport {Color, Material, MaterialLoader, Mesh, Object3D, SRGBColorSpace} from 'three';\r\nimport { FileUtils } from './file.utils';\r\nimport {DebugUtils} from './debug.utils';\r\n\r\n// @dynamic\r\nexport class VariationUtils {\r\n private static MaterialCache: Map<string, any> = new Map();\r\n\r\n public static ClearCache(): void {\r\n this.MaterialCache.clear();\r\n }\r\n\r\n public static async LoadVariation(\r\n url: string,\r\n fileName: string,\r\n includeVariationFolder: boolean = true\r\n ): Promise<VariationSettings> {\r\n if (!fileName) {\r\n return null;\r\n }\r\n\r\n if (!fileName.includes('ione3d')) {\r\n fileName = fileName.concat('.ione3d');\r\n }\r\n\r\n const id: string = fileName.substr(0, fileName.lastIndexOf('.ione3d'));\r\n const variationUrl: string = `${url + (includeVariationFolder ? '/variation' : '')}/${fileName}`;\r\n\r\n if (this.MaterialCache.has(id)) {\r\n return this.MaterialCache.get(id);\r\n }\r\n\r\n if (!window.hasOwnProperty('downloadVariation')) {\r\n try {\r\n const fileExists: boolean = await FileUtils.DoesFileExist(variationUrl);\r\n if (!fileExists) {\r\n DebugUtils.log(`Failed to find variation file: ${variationUrl}`);\r\n return null;\r\n } else {\r\n const response: Response = await fetch(variationUrl);\r\n if (!response.ok) {\r\n DebugUtils.log(`Failed to fetch variation file: ${variationUrl} - ${response.status}`);\r\n return null;\r\n }\r\n const compressed = await response.blob();\r\n return await VariationUtils.GetVariationSettingsFromFile(id, compressed);\r\n }\r\n } catch (err) {\r\n const mute = err;\r\n return null;\r\n }\r\n } else {\r\n try {\r\n const file = await (window as any).downloadVariation(variationUrl);\r\n const settings: VariationSettings = await VariationUtils.GetVariationSettingsFromFile(id, file);\r\n this.MaterialCache.set(id, settings);\r\n return settings;\r\n } catch (err) {\r\n console.error('Error loading variation:', err);\r\n throw err;\r\n }\r\n }\r\n }\r\n\r\n public static async LoadVariationByUrl(materialCode: string, url: string): Promise<VariationSettings> {\r\n if (!url) {\r\n return null;\r\n }\r\n if (!url.includes('ione3d')) {\r\n url = url.concat('.ione3d');\r\n }\r\n\r\n if (this.MaterialCache.has(materialCode)) {\r\n return this.MaterialCache.get(materialCode);\r\n }\r\n\r\n if (!window.hasOwnProperty('downloadVariation')) {\r\n // Normal download\r\n try {\r\n const fileExists: boolean = await FileUtils.DoesFileExist(url);\r\n if (!fileExists) {\r\n DebugUtils.log(`Failed to find variation file: ${url}`);\r\n return null;\r\n } else {\r\n const response: Response = await fetch(url);\r\n if (!response.ok) {\r\n DebugUtils.log(`Failed to fetch variation file: ${url} - ${response.status}`);\r\n return null;\r\n }\r\n const compressed = await response.blob();\r\n return await VariationUtils.GetVariationSettingsFromFile(materialCode, compressed);\r\n }\r\n } catch (err) {\r\n console.error('Error loading variation:', err);\r\n throw err;\r\n }\r\n // console.error('downloadVariation not defined in window global');\r\n // throw new Error('downloadVariation not defined in window global');\r\n } else {\r\n // Headless\r\n try {\r\n const file = await (window as any).downloadVariation(url);\r\n const settings: VariationSettings = await VariationUtils.GetVariationSettingsFromFile(materialCode, file);\r\n this.MaterialCache.set(materialCode, settings);\r\n return settings;\r\n } catch (err) {\r\n console.error('Error loading variation:', err);\r\n throw err;\r\n }\r\n }\r\n }\r\n\r\n public static GetUrl(assetPath: string, url: string, fileName: string, includeVariationFolder: boolean = true): string {\r\n if (fileName.indexOf('ione3d') < 0) {\r\n fileName = fileName.concat('.ione3d');\r\n }\r\n if (assetPath && !assetPath.endsWith('/')) {\r\n assetPath += '/';\r\n }\r\n return `${assetPath}${url + (includeVariationFolder ? '/variation' : '')}/${fileName}`;\r\n }\r\n\r\n public static GetFloorAssetUrl(assetPath: string, url: string, fileName: string, articleNumber: string): string {\r\n if (fileName.indexOf('ione3d') < 0) {\r\n fileName = fileName.concat('.ione3d');\r\n }\r\n if (assetPath && !assetPath.endsWith('/')) {\r\n assetPath += '/';\r\n }\r\n return `${assetPath}${url + '/' + articleNumber}/${fileName}`;\r\n }\r\n\r\n\r\n // public static GetMaterialFromName(variationFolder: string, material: any): Promise<MeshStandardMaterial> {\r\n // return new Promise((resolve: Function) => {\r\n // if (!material) {\r\n // resolve(null);\r\n // }\r\n // if (this.MaterialCache.has(material.name)) {\r\n // resolve(this.MaterialCache.get(material.name).clone());\r\n // } else {\r\n // VariationUtils.LoadVariation(variationFolder, material.name, false).then((settings: VariationSettings) => {\r\n // if (settings) {\r\n // AssetUtils.CreateMaterialFromAsset(settings).then((materialObj: Material) => {\r\n // const materialParams: MeshStandardMaterialParameters = {};\r\n // materialParams.name = material.name;\r\n // materialParams.map = materialObj.texture;\r\n // materialParams.normalMap = materialObj.normal;\r\n // materialParams.aoMap = materialObj.ao;\r\n // materialParams.roughnessMap = materialObj.roughness;\r\n // materialParams.metalnessMap = materialObj.metalness;\r\n // materialParams.roughness = 1;\r\n // materialParams.metalness = 1;\r\n // const pbrMat: MeshStandardMaterial = new MeshStandardMaterial(materialParams);\r\n // this.MaterialCache.set(material.name, pbrMat);\r\n // resolve(pbrMat.clone());\r\n // });\r\n // } else {\r\n // resolve(material);\r\n // }\r\n // });\r\n // }\r\n // });\r\n // }\r\n\r\n public static async GetVariationSettingsFromFile(id: string, compressedFile: any): Promise<VariationSettings> {\r\n // TODO CHECK with Patrick\r\n if (!compressedFile) {\r\n return null;\r\n }\r\n // const zipContent = await VariationUtils.GetZipContent(compressedFile);\r\n // const variationSettings: VariationSettings = new VariationSettings();\r\n // let index;\r\n // variationSettings.id = id;\r\n //\r\n // if (zipContent) {\r\n // if (zipContent.files['material.glb']) {\r\n // const material: string = await zipContent.files['material.glb'].async('arraybuffer');\r\n // variationSettings.material = await VariationUtils.LoadMaterialFromGlb(material);\r\n // } else {\r\n // if (zipContent.files['index.json']) {\r\n // const indexFile: string = await zipContent.files['index.json'].async('string');\r\n // index = JSON.parse(indexFile);\r\n // }\r\n // if (index) {\r\n // await VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent);\r\n // } else {\r\n // await VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent);\r\n // }\r\n // }\r\n // }\r\n // return variationSettings;\r\n\r\n const zipContent = await VariationUtils.GetZipContent(compressedFile);\r\n const variationSettings: VariationSettings = new VariationSettings();\r\n let index;\r\n variationSettings.id = id;\r\n\r\n if (zipContent.files.hasOwnProperty('index.json')) {\r\n const indexFile: string = await zipContent.files['index.json'].async('string');\r\n index = JSON.parse(indexFile);\r\n }\r\n if (index) {\r\n await VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent);\r\n } else {\r\n await VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent);\r\n }\r\n return variationSettings;\r\n\r\n\r\n }\r\n\r\n private static async CreateSettingsBasedOnIndex(index: any, variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n if (index.normalFile) {\r\n variationSettings.normal = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.normalFile], index.normalFile);\r\n variationSettings.normalFilename = index.normalFile;\r\n }\r\n if (index.diffuseFile) {\r\n variationSettings.texture = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.diffuseFile], index.diffuseFile);\r\n variationSettings.textureFilename = index.diffuseFile;\r\n }\r\n if (index.ormFile) {\r\n variationSettings.orm = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.ormFile], index.ormFile);\r\n variationSettings.ormFilename = index.ormFile;\r\n } else {\r\n if (index.aoFile) {\r\n variationSettings.ao = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.aoFile], index.aoFile);\r\n variationSettings.aoFilename = index.aoFile;\r\n }\r\n if (index.metalnessFile) {\r\n variationSettings.metalness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.metalnessFile], index.metalnessFile);\r\n variationSettings.metalnessFilename = index.metalnessFile;\r\n }\r\n if (index.roughnessFile) {\r\n variationSettings.roughness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.roughnessFile], index.roughnessFile);\r\n variationSettings.roughnessFilename = index.roughnessFile;\r\n }\r\n }\r\n if (index.displacementFile) {\r\n variationSettings.displacement = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.displacementFile], index.displacementFile);\r\n variationSettings.displacementFilename = index.displacementFile;\r\n }\r\n if (index.emissiveFile) {\r\n variationSettings.emissive = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.emissiveFile], index.emissiveFile);\r\n variationSettings.emissiveFilename = index.emissiveFile;\r\n }\r\n if (index.envMapFile) {\r\n variationSettings.envMap = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.envMapFile], index.envMapFile);\r\n variationSettings.envMapFilename = index.envMapFile;\r\n }\r\n if (index.sheenColorMapFile) {\r\n variationSettings.sheenColorMap = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.sheenColorMapFile], index.sheenColorMapFile);\r\n variationSettings.sheenColorMapFilename = index.sheenColorMapFile;\r\n }\r\n if (index.sheenRoughnessMapFile) {\r\n variationSettings.sheenRoughnessMap = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.sheenRoughnessMapFile], index.sheenRoughnessMapFile);\r\n variationSettings.sheenRoughnessMapFilename = index.sheenColorMapFile;\r\n }\r\n if (index.transmissionMapFile) {\r\n variationSettings.transmissionMap = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.transmissionMapFile], index.transmissionMapFile);\r\n variationSettings.transmissionMapFilename = index.transmissionMapFile;\r\n }\r\n if (index.repeat) {\r\n variationSettings.settings.repeatx = index.repeat.repeatx;\r\n variationSettings.settings.repeaty = index.repeat.repeaty;\r\n }\r\n variationSettings.settings.metalness = index.metalness;\r\n variationSettings.settings.roughness = index.roughness;\r\n\r\n variationSettings.sheen = index.sheen;\r\n if (index.sheenColor) {\r\n variationSettings.sheenColor = new Color(index.sheenColor.r, index.sheenColor.g, index.sheenColor.b);\r\n }\r\n\r\n variationSettings.sheenRoughness = index.sheenRoughness;\r\n variationSettings.envMapIntensity = index.envMapIntensity;\r\n variationSettings.transparent = index.transparent;\r\n variationSettings.opacity = index.opacity;\r\n if (index.emissiveValue) {\r\n variationSettings.emissiveValue = new Color(index.emissiveValue.r, index.emissiveValue.g, index.emissiveValue.b);\r\n }\r\n variationSettings.emissiveIntensity = index.emissiveIntensity;\r\n variationSettings.reflectivity = index.reflectivity;\r\n variationSettings.displacementValue = index.displacementValue;\r\n variationSettings.side = index.side;\r\n variationSettings.transmission = index.transmission;\r\n variationSettings.ior = index.ior;\r\n variationSettings.thickness = index.thickness;\r\n variationSettings.specularIntensity = index.specularIntensity;\r\n }\r\n\r\n private static async CreateSettingsBasedOnFileName(variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n const allLoaded: Promise<VariationSettings>[] = [];\r\n for (const fileName in zipContent.files) {\r\n if (zipContent.files.hasOwnProperty(fileName)) {\r\n const file: any = await zipContent.files[fileName];\r\n if (file.name.toLowerCase().indexOf('normal') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((normalFile: any) => {\r\n variationSettings.normal = `data:image/${this.GetBase64FileType(file.name)};base64,${normalFile}`;\r\n variationSettings.normalFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('ao') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((aoFile: any) => {\r\n variationSettings.ao = `data:image/${this.GetBase64FileType(file.name)};base64,${aoFile}`;\r\n variationSettings.aoFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('metalness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((metalnessFile: any) => {\r\n variationSettings.metalness = `data:image/${this.GetBase64FileType(file.name)};base64,${metalnessFile}`;\r\n variationSettings.metalnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('roughness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((roughnessFile: any) => {\r\n variationSettings.roughness = `data:image/${this.GetBase64FileType(file.name)};base64,${roughnessFile}`;\r\n variationSettings.roughnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('diffuse') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((diffuseFile: any) => {\r\n variationSettings.texture = `data:image/${this.GetBase64FileType(file.name)};base64,${diffuseFile}`;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('displacement') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((displacementFile: any) => {\r\n variationSettings.displacement = `data:image/${this.GetBase64FileType(file.name)};base64,${displacementFile}`;\r\n variationSettings.displacementFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('emissive') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((emissiveFile: any) => {\r\n variationSettings.emissive = `data:image/${this.GetBase64FileType(file.name)};base64,${emissiveFile}`;\r\n variationSettings.emissiveFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('envMap') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((envMapFile: any) => {\r\n variationSettings.envMap = `data:image/${this.GetBase64FileType(file.name)};base64,${envMapFile}`;\r\n variationSettings.envMapFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('sheenColorMap') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((sheenColorMapFile: any) => {\r\n variationSettings.sheenColorMap = `data:image/${this.GetBase64FileType(file.name)};base64,${sheenColorMapFile}`;\r\n variationSettings.sheenColorMapFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('sheenRoughnessMap') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((sheenRoughnessMapFile: any) => {\r\n variationSettings.sheenRoughnessMap = `data:image/${this.GetBase64FileType(file.name)};base64,${sheenRoughnessMapFile}`;\r\n variationSettings.sheenRoughnessMapFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('transmissionMap') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((transmissionMapFile: any) => {\r\n variationSettings.transmissionMap = `data:image/${this.GetBase64FileType(file.name)};base64,${transmissionMapFile}`;\r\n variationSettings.transmissionMapFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.jp') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((textureFile: any) => {\r\n variationSettings.texture = 'data:image/jpeg;base64,' + textureFile;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.json') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('string').then((settingsFile: any) => {\r\n const settingsFileObj = JSON.parse(settingsFile);\r\n for (const key in settingsFileObj) {\r\n if (settingsFileObj.hasOwnProperty(key)) {\r\n variationSettings.settings[key] = settingsFileObj[key];\r\n }\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n await Promise.all(allLoaded);\r\n }\r\n\r\n private static LoadMaterialFromJson(material: any): Material {\r\n const loader = new MaterialLoader();\r\n if (material.textures) {\r\n const textures: {} = {};\r\n for (let i = 0; i < material.textures.length; i++) {\r\n textures[material.textures[i].uuid] = material.textures[i];\r\n }\r\n loader.setTextures(textures);\r\n }\r\n return loader.parse(material);\r\n }\r\n\r\n private static LoadMaterialFromGlb(material: any): Promise<Material> {\r\n return new Promise(async (resolve: Function, reject: Function) => {\r\n if (!window.hasOwnProperty('loadGLTF')) {\r\n console.error('loadGLTF not defined in window global');\r\n return reject();\r\n }\r\n const obj: Object3D = await (window as any).loadGLTF(material, false);\r\n if (obj) {\r\n return resolve((obj.children[0] as Mesh).material);\r\n }\r\n });\r\n }\r\n\r\n private static LoadFileContentFromZip(zip: any, fileName: string, base64: boolean = true): Promise<string> {\r\n return new Promise((resolve: Function) => {\r\n if (zip && fileName) {\r\n zip.async(base64 ? 'base64' : 'string').then((fileContent: any) => {\r\n if (base64) {\r\n resolve(`data:image/${this.GetBase64FileType(fileName)};base64,${fileContent}`);\r\n } else {\r\n resolve(fileContent);\r\n }\r\n });\r\n } else {\r\n resolve(undefined);\r\n }\r\n });\r\n }\r\n\r\n private static FileIsImage(fileName: string): boolean {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'bmp':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private static GetBase64FileType(fileName: string): string {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n return 'jpeg';\r\n case 'png':\r\n return 'png';\r\n case 'bmp':\r\n return 'bmp';\r\n default:\r\n return 'jpeg';\r\n }\r\n }\r\n\r\n // Get the content\r\n private static async GetZipContent(file): Promise<any> {\r\n try {\r\n const jszip = new JSZip();\r\n return await jszip.loadAsync(file);\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n}\r\n","import {Material} from './material';\r\n\r\nexport class Variation {\r\n public decoId: number;\r\n public brandId: string;\r\n public gameObjectName: string;\r\n public node: any;\r\n public optionText: string;\r\n public supplierArticleNr: string;\r\n public materialId: string;\r\n public material: Material;\r\n}\r\n","import {VariationUtils} from '../utils/variation-utils';\r\nimport {DecoNode} from '@colijnit/configuratorapi/build/model/deco-node.js';\r\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer.js';\r\nimport {SelectorStructure} from '@colijnit/configuratorapi/build/model/selector-structure.bo.js';\r\nimport {VariationSettings} from '../model/variation-settings';\r\n\r\nexport class VariationCacheHelper {\r\n private _variations: VariationSettings[] = [];\r\n\r\n public assetPath: string = '';\r\n public threeDAssetPath: string = '';\r\n public needsMaterials: boolean = true;\r\n public debug: Function;\r\n\r\n public destroy() {\r\n this._variations.length = 0\r\n }\r\n\r\n public preloadVariations(schema: string, decoNodes: DecoNode[], articleAssetPath: string = ''): void {\r\n if (!articleAssetPath.endsWith('/')) {\r\n articleAssetPath += '/';\r\n }\r\n decoNodes.forEach((decoNode: DecoNode) => {\r\n let fileName: string;\r\n let fileUrl: string;\r\n let includeVariationFolder: boolean = true;\r\n if (decoNode.materialUrl) {\r\n const fileNameFromUrl: string = decoNode.materialUrl ? decoNode.materialUrl.substr(decoNode.materialUrl.lastIndexOf('/') + 1, decoNode.materialUrl.length) : null;\r\n fileName = fileNameFromUrl ? fileNameFromUrl.substr(0, fileNameFromUrl.lastIndexOf('.')) : null; // chop extension\r\n fileUrl = decoNode.materialUrl ? decoNode.materialUrl.substr(0, decoNode.materialUrl.lastIndexOf('/')) : null;\r\n includeVariationFolder = false;\r\n } else if (decoNode.gameObjectName) {\r\n fileName = decoNode.gameObjectName;\r\n fileUrl = (articleAssetPath ? articleAssetPath : this.threeDAssetPath) + schema;\r\n }\r\n if (fileUrl && fileName && this.needsMaterials) {\r\n if (!this._get(fileName)) {\r\n const settings: VariationSettings = this._createSettingsForFileName(fileName);\r\n VariationUtils.LoadVariation(fileUrl, fileName, includeVariationFolder).then((variationSettings: VariationSettings) => {\r\n settings.loading = false;\r\n settings.loaded.next(variationSettings);\r\n if (variationSettings) {\r\n this._set(variationSettings);\r\n }\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n public async preloadVariationsAsync(schema: string, decoNodes: DecoNode[] | Answer[] | SelectorStructure[], articleAssetPath: string = ''): Promise<void> {\r\n const promises: Promise<void>[] = [];\r\n decoNodes.forEach((decoNode: DecoNode | Answer | SelectorStructure, index: number, array: DecoNode[] | Answer[] | SelectorStructure[]) => {\r\n let fileName: string;\r\n let fileUrl: string;\r\n let includeVariationFolder: boolean = true;\r\n if (decoNode.materialUrl) {\r\n const fileNameFromUrl: string = decoNode.materialUrl ? decoNode.materialUrl.substr(decoNode.materialUrl.lastIndexOf('/') + 1, decoNode.materialUrl.length) : null;\r\n fileName = fileNameFromUrl ? fileNameFromUrl.substr(0, fileNameFromUrl.lastIndexOf('.')) : null; // chop extension\r\n fileUrl = decoNode.materialUrl ? decoNode.materialUrl.substr(0, decoNode.materialUrl.lastIndexOf('/')) : null;\r\n includeVariationFolder = false;\r\n } else if (decoNode instanceof DecoNode && decoNode.gameObjectName) {\r\n fileName = decoNode.gameObjectName;\r\n fileUrl = (articleAssetPath ? articleAssetPath : this.threeDAssetPath) + schema;\r\n } else if ((decoNode instanceof Answer || decoNode instanceof SelectorStructure) && decoNode.gameObject) {\r\n fileName = decoNode.gameObject;\r\n fileUrl = (articleAssetPath ? articleAssetPath : this.threeDAssetPath) + schema;\r\n }\r\n if (fileName && !this._get(fileName) && this.needsMaterials) {\r\n const settings: VariationSettings = this._createSettingsForFileName(fileName);\r\n promises.push(\r\n new Promise<void>(resolve => {\r\n VariationUtils.LoadVariation(fileUrl, fileName, includeVariationFolder).then((variationSettings: VariationSettings) => {\r\n settings.loading = false;\r\n settings.loaded.next(variationSettings);\r\n if (variationSettings) {\r\n this._set(variationSettings);\r\n resolve();\r\n }\r\n });\r\n }));\r\n }\r\n });\r\n await Promise.all(promises);\r\n }\r\n\r\n protected log(message: string): void {\r\n if (this.debug) {\r\n this.debug(message);\r\n console.log(new Date(), message);\r\n }\r\n }\r\n\r\n protected async loadCachedVariation(fileName: string): Promise<VariationSettings> {\r\n if (!fileName) {\r\n return null;\r\n }\r\n if (this._get(fileName)) {\r\n const settings = this._get(fileName);\r\n if (settings.loading) {\r\n return await this._waitForVariationToLoad(settings);\r\n }\r\n return settings;\r\n }\r\n }\r\n\r\n private _get(id: string): VariationSettings {\r\n const len: number = this._variations.length;\r\n for (let i = 0; i < len; i++) {\r\n if (this._variations[i].id && this._variations[i].id === id) {\r\n return this._variations[i];\r\n }\r\n }\r\n }\r\n\r\n private _set(variations: VariationSettings): void {\r\n const idx: number = this._variations.findIndex(v => v.id === variations.id);\r\n if (idx > -1) {\r\n this._variations[idx] = variations;\r\n } else {\r\n this._variations.push(variations);\r\n }\r\n }\r\n\r\n private _waitForVariationToLoad(settings: VariationSettings): Promise<VariationSettings> {\r\n return new Promise((resolve: Function) => {\r\n settings.loaded.subscribe((value) => {\r\n resolve(value);\r\n });\r\n });\r\n }\r\n\r\n private _createSettingsForFileName(fileName: string): VariationSettings {\r\n const settings = new VariationSettings();\r\n settings.id = fileName;\r\n settings.loading = true;\r\n this._variations.push(settings);\r\n return settings;\r\n }\r\n\r\n // private _needsMaterials(): boolean {\r\n // // when there is no assetUrl, there is no 3D info OR it's a floorArticle\r\n // if (this._configuratorService.article && !this._configuratorService.article.assetUrl) {\r\n // return itemTypeFromPlacement(this._configuratorService.article.placement) === ItemType.FloorDecoration;\r\n // }\r\n // return true\r\n // }\r\n //\r\n}\r\n","import {DecoNodeType} from '@colijnit/configuratorapi/build/enum/deco-node-type.enum.js';\r\nimport {DecoNode} from '@colijnit/configuratorapi/build/model/deco-node.js';\r\nimport {Color, DoubleSide, EquirectangularReflectionMapping, Mesh, MeshPhongMaterial, MeshPhysicalMaterial, MeshPhysicalMaterialParameters, MeshStandardMaterial, MeshStandardMaterialParameters, NearestFilter, Object3D} from 'three';\r\nimport {AssetUtils} from '../utils/asset.utils';\r\nimport {VariationSettings} from '../model/variation-settings';\r\nimport {VariationUtils} from '../utils/variation-utils';\r\nimport {Material} from '../model/material';\r\nimport {Variation} from '../model/variation';\r\nimport {DebugUtils} from '../utils/debug.utils';\r\nimport {VariationCacheHelper} from './variation-cache.helper';\r\nimport {ObjectUtils} from '../utils/object.utils';\r\n\r\nexport class VariationHelper extends VariationCacheHelper {\r\n\r\n public loadedAsset: string;\r\n\r\n private _lastKnownVariations: Map<string, Variation[]> = new Map();\r\n\r\n public clearCache(): void {\r\n const variationMap: Variation[][] = Array.from(this._lastKnownVariations.values());\r\n variationMap.forEach((variations) => {\r\n variations.forEach((variation) => {\r\n try {\r\n if (variation.material) {\r\n if (variation.material.texture) {\r\n variation.material.texture.dispose();\r\n }\r\n if (variation.material.normal) {\r\n variation.material.normal.dispose();\r\n }\r\n if (variation.material.metalness) {\r\n variation.material.metalness.dispose();\r\n }\r\n if (variation.material.roughness) {\r\n variation.material.roughness.dispose();\r\n }\r\n if (variation.material.ao) {\r\n variation.material.ao.dispose();\r\n }\r\n }\r\n } catch (e) {\r\n DebugUtils.log('Failed to dispose material: ' + e);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public async loadPart(assetPath: string, parts: any[], obj: Object3D, usePbr: boolean = false): Promise<void> {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n if (parts[i].decoNode && parts[i].decoNode.gameObjectName && parts[i].decoNode.type === DecoNodeType.Part) {\r\n let partSettings: VariationSettings;\r\n partSettings = await this.loadCachedVariation(\r\n parts[i].decoNode.materialUrl ? parts[i].decoNode.materialCode : (parts[i].decoNode.gameObjectName || parts[i].decoId));\r\n\r\n if (partSettings) {\r\n const partVariation: Variation = new Variation();\r\n partVariation.decoId = parseFloat(parts[i].decoNode.id);\r\n partVariation.brandId = parts[i].decoNode.brandId;\r\n partVariation.gameObjectName = parts[i].decoNode.gameObjectName;\r\n partVariation.material = await AssetUtils.CreateMaterialFromAsset(partSettings);\r\n this.loadedAsset = VariationUtils.GetUrl(assetPath, parts[i].schema, parts[i].decoNode.gameObjectName || parts[i].decoId);\r\n // parts[i].variation = partVariation;\r\n this._applyMaterialPart(partVariation, parts[i].node, obj, usePbr);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n DebugUtils.log('Failed to load part: ' + e);\r\n // console.error(e);\r\n }\r\n }\r\n\r\n public async loadVariation(assetPath: string, parts: any[], obj: Object3D, usePbr: boolean = false): Promise<void> {\r\n return new Promise(async (resolve, reject) => {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n const variations: DecoNode[] = parts[i].variations;\r\n if (!variations || variations.length === 0) {\r\n if (this._getLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`)) {\r\n parts[i].variations = this._getLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`);\r\n this._applyVariations(parts[i], obj, usePbr);\r\n continue;\r\n } else {\r\n continue;\r\n }\r\n }\r\n const lastKnownVariations: Variation[] = [];\r\n const variationPromise: Promise<any>[] = [];\r\n for (let j = 0; j < variations.length; j++) {\r\n variationPromise.push(\r\n this.loadCachedVariation(\r\n variations[j].materialUrl ? variations[j].materialCode : (variations[j].gameObjectName || parts[i].decoId)).then(async (variationSettings: VariationSettings) => {\r\n const newVariation: Variation = this._createVariationFromNode(variations[j]);\r\n newVariation.material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n this.loadedAsset = variations[j].materialUrl ? variations[j].materialUrl : VariationUtils.GetUrl(assetPath, parts[i].schema, variations[j].gameObjectName || parts[i].decoId);\r\n lastKnownVariations.push(newVariation);\r\n })\r\n );\r\n }\r\n await Promise.all(variationPromise);\r\n this._setLastKnownVariations(`${parts[i].nodeId}_${parts[i].node}`, lastKnownVariations);\r\n parts[i].variations = lastKnownVariations;\r\n this._applyVariations(parts[i], obj, usePbr);\r\n }\r\n resolve();\r\n } catch (e) {\r\n DebugUtils.log('Failed to load variation: ' + e);\r\n // console.error(e);\r\n reject();\r\n }\r\n });\r\n }\r\n\r\n public async loadVariationFromLocalFile(id: string, file: any, obj: Object3D): Promise<void> {\r\n try {\r\n const variationSettings: VariationSettings = await VariationUtils.GetVariationSettingsFromFile(id, file);\r\n const material: Material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n this._applyMaterial(obj, material);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n public async loadVariationForMaterial(gameObject: string): Promise<any> {\r\n const partSettings: VariationSettings = await this.loadCachedVariation(gameObject);\r\n if (partSettings) {\r\n const partVariation: Variation = new Variation();\r\n partVariation.gameObjectName = gameObject;\r\n partVariation.material = await AssetUtils.CreateMaterialFromAsset(partSettings);\r\n return this._setMeshMaterialFromVariation(gameObject, partVariation.material, true);\r\n }\r\n }\r\n\r\n public async loadVariationByAssetUrl(assetUrl: string): Promise<any> {\r\n const fileName: string = assetUrl.substring(assetUrl.lastIndexOf('/') + 1);\r\n const id: string = 'default_' + fileName.substring(0, fileName.lastIndexOf('.'));\r\n const variationSettings: VariationSettings = await VariationUtils.LoadVariationByUrl(id, assetUrl);\r\n if (variationSettings) {\r\n const materialFromAsset: Material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n if (materialFromAsset) {\r\n return this._setMeshMaterialFromVariation(id, materialFromAsset, true);\r\n }\r\n }\r\n }\r\n\r\n public async createVariationForMaterialPreview(compressedZip: Blob): Promise<any> {\r\n const id: string = String(Math.floor(Math.random() * 10) + 1);\r\n const variationSettings: VariationSettings = await VariationUtils.GetVariationSettingsFromFile(id, compressedZip);\r\n if (variationSettings) {\r\n const materialFromAsset: Material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n if (materialFromAsset) {\r\n return this._setMeshMaterialFromVariation(id, materialFromAsset, true);\r\n }\r\n }\r\n }\r\n\r\n private _applyMaterialPart(partMaterial: any, nodeId: any, obj: Object3D, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', nodeId);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh) => {\r\n if (mesh instanceof Mesh && partMaterial) {\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let j = 0, jlen: number = mesh.material.length; j < jlen; j++) {\r\n if (mesh.material[j].name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material[j] = this._setMeshMaterialFromVariation(mesh.material[j].name, partMaterial, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, partMaterial, usePbr);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _applyVariations(part: any, obj: Object3D, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', part.node);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh: any) => {\r\n if (mesh instanceof Mesh && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {\r\n //if ((mesh instanceof Mesh || mesh.constructor.name === 'Mesh') && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {\r\n for (let j = 0; j < part.variations.length; j++) {\r\n const variation: Variation = part.variations[j];\r\n if (variation.material) {\r\n const materialToSearch: string = !!variation.materialId ? variation.materialId.toLowerCase() : 'default';\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let m = 0, mlen: number = mesh.material.length; m < mlen; m++) {\r\n if ((variation.materialId && mesh.material[m].name.toLowerCase() === materialToSearch) ||\r\n (!variation.materialId && mesh.material[m].name.toLowerCase().indexOf(materialToSearch) !== -1)) {\r\n\r\n mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, variation.material, usePbr);\r\n }\r\n }\r\n } else {\r\n if ((variation.materialId && mesh.material.name.toLowerCase() === materialToSearch) ||\r\n (!variation.materialId && mesh.material.name.toLowerCase().indexOf(materialToSearch) !== -1)) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, variation.material, usePbr);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _applyMaterial(obj: Object3D, material: Material): void {\r\n obj.traverse((mesh) => {\r\n if (mesh instanceof Mesh) {\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let m = 0, mlen: number = mesh.material.length; m < mlen; m++) {\r\n if (mesh.material[m].name.toLowerCase().indexOf('default') !== -1) {\r\n ObjectUtils.DisposeMaterial(mesh.material[m]);\r\n mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, material, true);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf('default') !== -1) {\r\n ObjectUtils.DisposeMaterial(mesh.material);\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, material, true);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n private _setMeshMaterialFromVariation(name: string, material: Material, usePbr: boolean = false): any {\r\n if (material.texture) {\r\n material.texture.needsUpdate = true;\r\n material.texture.mapping = EquirectangularReflectionMapping;\r\n }\r\n if (!usePbr) {\r\n const newMaterial: MeshPhongMaterial = new MeshPhongMaterial({\r\n name: name,\r\n shininess: material.shininess,\r\n specular: material.specular,\r\n map: material.texture,\r\n normalMap: material.normal\r\n });\r\n newMaterial.color.setRGB(0.8, 0.8, 0.8);\r\n newMaterial.needsUpdate = true;\r\n return newMaterial;\r\n }\r\n if (material.sheen || material.sheenColor || material.reflectivity || material.transmission) { // TODO: Proper check for all unique physical material properties\r\n const params: MeshPhysicalMaterialParameters = {\r\n // side: material.side ? material.side : FrontSide,\r\n name: name,\r\n roughness: material.roughnessValue !== undefined && material.roughnessValue !== null ? material.roughnessValue : 1,\r\n metalness: material.metalnessValue !== undefined && material.metalnessValue !== null ? material.metalnessValue : 0,\r\n envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01,\r\n clearcoatMap: material.clearcoatMap ? material.clearcoatMap : null,\r\n clearcoatRoughnessMap: material.clearcoatRoughnessMap ? material.clearcoatRoughnessMap : null,\r\n attenuationDistance: Infinity\r\n // wireframe: true,\r\n // opacity: 0.3,\r\n // transparent: true,\r\n };\r\n if (material.displacementValue) {\r\n params.displacementScale = material.displacementValue;\r\n }\r\n if (material.opacity) {\r\n params.opacity = material.opacity;\r\n }\r\n if (material.transparent) {\r\n params.transparent = material.transparent;\r\n }\r\n if (material.emissiveValue) {\r\n params.emissive = material.emissiveValue;\r\n }\r\n if (material.emissiveIntensityValue) {\r\n params.emissiveIntensity = material.emissiveIntensityValue;\r\n }\r\n if (material.texture) {\r\n params.map = material.texture;\r\n params.map.needsUpdate = true;\r\n }\r\n if (material.ao) {\r\n params.aoMap = material.ao;\r\n params.aoMap.needsUpdate = true;\r\n }\r\n if (material.roughness) {\r\n params.roughnessMap = material.roughness;\r\n params.roughnessMap.needsUpdate = true;\r\n // material.roughness.magFilter = NearestFilter;\r\n }\r\n if (material.metalness) {\r\n params.metalnessMap = material.metalness;\r\n params.metalnessMap.needsUpdate = true;\r\n }\r\n if (material.normal) {\r\n params.normalMap = material.normal;\r\n params.normalMap.needsUpdate = true;\r\n }\r\n if (material.displacement) {\r\n params.displacementMap = material.displacement;\r\n params.displacementMap.needsUpdate = true;\r\n }\r\n if (material.emissive) {\r\n params.emissiveMap = material.emissive;\r\n params.emissiveMap.needsUpdate = true;\r\n }\r\n if (material.envMap) {\r\n if (material.envMapIntensity != null || 0) {\r\n params.envMap = material.envMap;\r\n params.envMap.needsUpdate = true;\r\n material.envMap.mapping = EquirectangularReflectionMapping;\r\n material.envMap.minFilter = NearestFilter;\r\n material.envMap.magFilter = NearestFilter;\r\n }\r\n }\r\n if (material.reflectivity) {\r\n params.reflectivity = material.reflectivity;\r\n }\r\n if (material.side) {\r\n params.side = material.side;\r\n } else {\r\n params.side = DoubleSide;\r\n }\r\n\r\n const newMaterial: MeshPhysicalMaterial = new MeshPhysicalMaterial(params);\r\n newMaterial.color.setRGB(1, 1, 1);\r\n if (material.sheen) {\r\n newMaterial.sheen = material.sheen;\r\n }\r\n\r\n if (material.sheenColor) {\r\n newMaterial.sheenColor = material.sheenColor;\r\n } else {\r\n // Add fallback for blender render\r\n newMaterial.sheenColor = new Color(1, 1, 1);\r\n }\r\n\r\n if (material.sheenRoughness) {\r\n newMaterial.sheenRoughness = material.sheenRoughness;\r\n }\r\n if (material.sheenColorMap) {\r\n newMaterial.sheenColorMap = material.sheenColorMap;\r\n newMaterial.sheenColorMap.needsUpdate = true;\r\n }\r\n if (material.sheenRoughnessMap) {\r\n newMaterial.sheenRoughnessMap = material.sheenRoughnessMap;\r\n newMaterial.sheenRoughnessMap.needsUpdate = true;\r\n }\r\n if (material.transmission) {\r\n newMaterial.transmission = material.transmission;\r\n }\r\n if (material.ior !== undefined && material.ior !== null) {\r\n newMaterial.ior = material.ior;\r\n }\r\n if (material.thickness !== undefined && material.thickness !== null) {\r\n newMaterial.thickness = material.thickness;\r\n }\r\n if (material.specularIntensity !== undefined && material.specularIntensity !== null) {\r\n newMaterial.specularIntensity = material.specularIntensity;\r\n }\r\n if (material.transmissionMap) {\r\n newMaterial.transmissionMap = material.transmissionMap;\r\n newMaterial.transmissionMap.needsUpdate = true;\r\n }\r\n\r\n newMaterial.needsUpdate = true;\r\n return newMaterial;\r\n } else {\r\n const params: MeshStandardMaterialParameters = {\r\n // side: material.side ? material.side : FrontSide,\r\n name: name,\r\n roughness: material.roughnessValue !== undefined && material.roughnessValue !== null ? material.roughnessValue : 1,\r\n metalness: material.metalnessValue !== undefined && material.metalnessValue !== null ? material.metalnessValue : 0,\r\n envMapIntensity: material.envMapIntensity ? material.envMapIntensity : 0.01\r\n // wireframe: true,\r\n // opacity: 0.3,\r\n // transparent: true,\r\n };\r\n if (material.displacementValue) {\r\n params.displacementScale = material.displacementValue;\r\n }\r\n if (material.opacity) {\r\n params.opacity = material.opacity;\r\n }\r\n if (material.transparent) {\r\n params.transparent = material.transparent;\r\n }\r\n if (material.emissiveValue) {\r\n params.emissive = material.emissiveValue;\r\n }\r\n if (material.emissiveIntensityValue) {\r\n params.emissiveIntensity = material.emissiveIntensityValue;\r\n }\r\n if (material.texture) {\r\n params.map = material.texture;\r\n params.map.needsUpdate = true;\r\n }\r\n if (material.ao) {\r\n params.aoMap = material.ao;\r\n params.aoMap.needsUpdate = true;\r\n }\r\n if (material.roughness) {\r\n params.roughnessMap = material.roughness;\r\n params.roughnessMap.needsUpdate = true;\r\n // material.roughness.magFilter = NearestFilter;\r\n }\r\n if (material.metalness) {\r\n params.metalnessMap = material.metalness;\r\n params.metalnessMap.needsUpdate = true;\r\n }\r\n if (material.normal) {\r\n params.normalMap = material.normal;\r\n params.normalMap.needsUpdate = true;\r\n }\r\n if (material.displacement) {\r\n params.displacementMap = material.displacement;\r\n params.displacementMap.needsUpdate = true;\r\n }\r\n if (material.emissive) {\r\n params.emissiveMap = material.emissive;\r\n params.emissiveMap.needsUpdate = true;\r\n }\r\n if (material.envMap) {\r\n if (material.envMapIntensity != null || 0) {\r\n params.envMap = material.envMap;\r\n params.envMap.needsUpdate = true;\r\n material.envMap.mapping = EquirectangularReflectionMapping;\r\n material.envMap.minFilter = NearestFilter;\r\n material.envMap.magFilter = NearestFilter;\r\n }\r\n }\r\n if (material.side) {\r\n params.side = material.side;\r\n } else {\r\n params.side = DoubleSide;\r\n }\r\n\r\n const newMaterial: MeshStandardMaterial = new MeshStandardMaterial(params);\r\n newMaterial.color.setRGB(1, 1, 1);\r\n newMaterial.needsUpdate = true;\r\n\r\n return newMaterial;\r\n }\r\n }\r\n\r\n private _setLastKnownVariations(id: string, variation: Variation[]): void {\r\n this._lastKnownVariations.set(id, variation);\r\n }\r\n\r\n private _getLastKnownVariations(id: string): Variation[] {\r\n if (this._lastKnownVariations.has(id)) {\r\n return this._lastKnownVariations.get(id);\r\n }\r\n return null;\r\n }\r\n\r\n private _getChildrenFilterByProp(obj: Object3D, userDataObjectProp: string, prop: string, value: any): Object3D[] {\r\n return obj.children.filter((child) => {\r\n return child.userData &&\r\n child.userData.hasOwnProperty(userDataObjectProp) &&\r\n child.userData[userDataObjectProp].hasOwnProperty(prop) &&\r\n child.userData[userDataObjectProp][prop] === value;\r\n });\r\n }\r\n\r\n private _createVariationFromNode(node: DecoNode): Variation {\r\n const newVariation: Variation = new Variation();\r\n newVariation.decoId = node instanceof Variation ? (node as unknown as Variation).decoId : parseFloat(node.id);\r\n newVariation.node = node instanceof Variation ? (node as unknown as Variation).node : node.nodeId;\r\n newVariation.brandId = node.brandId;\r\n newVariation.optionText = (node as any).optionText;\r\n newVariation.gameObjectName = node.gameObjectName;\r\n newVariation.supplierArticleNr = (node as any).supplierArticleNr;\r\n newVariation.materialId = (node as any).materialId;\r\n return newVariation;\r\n }\r\n\r\n}\r\n","import {Box3, Camera, Euler, Mesh, Object3D, Quaternion, Scene, Vector2, Vector3} from 'three';\r\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection.js';\r\nimport {HdecoPositioning} from '@colijnit/configuratorapi/build/enum/hdeco-positioning.enum.js';\r\n\r\nexport class Scene3DUtil {\r\n\r\n public static updatePivot(obj: Object3D) {\r\n const boundingBox: Box3 = new Box3().setFromObject(obj);\r\n const bbCenterPivot: Vector3 = new Vector3();\r\n boundingBox.getCenter(bbCenterPivot);\r\n const delta: Vector3 = new Vector3().sub(bbCenterPivot).setY(Math.abs(Math.min(boundingBox.min.y, 0)));\r\n\r\n obj.children.forEach((child: any) => {\r\n child.position.add(delta);\r\n });\r\n obj.updateWorldMatrix(false, true);\r\n }\r\n\r\n public static TrySelectorConnection(\r\n scene: Scene,\r\n parent: Object3D,\r\n part1: any,\r\n part2: any,\r\n isFirstElement: boolean,\r\n createAddableFn?: Function\r\n ): boolean {\r\n let addable: any;\r\n if (createAddableFn) {\r\n addable = part2;\r\n part2 = createAddableFn(addable);\r\n }\r\n if (part1 && part2) {\r\n let con1: Object3D;\r\n let con2: Object3D;\r\n // if part2 is an addable and decoConnection is present, then no need to iterate through connectors\r\n if (addable && addable instanceof Selection && addable.decoConnection && addable.hdecoPositioning === HdecoPositioning.Variable) {\r\n con1 = part1.children.find(c => c.name === addable.decoConnection);\r\n if (!con1) {\r\n return false;\r\n }\r\n for (let ii = 0; ii < part2.children.length; ii++) {\r\n con2 = part2.children[ii];\r\n // if these connectors can connect connect them\r\n if (!con1.userData.connected && !con2.userData.connected && this.CanSelectorConnect(part1.children, con1, con2, isFirstElement)) {\r\n // if (!con1['connected'] && !con2['connected'] && this.CanSelectorConnect(part1.children, con1, con2, isFirstElement)) {\r\n // if addable, continue this loop with a new addable\r\n if (addable) {\r\n const newPart2: any = createAddableFn(addable, part2, part1);\r\n // reference of part2 changed, so refresh con2\r\n this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);\r\n } else {\r\n return this.SelectorConnect(scene, parent, con1, con2);\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < part1.children.length; i++) {\r\n for (let ii = 0; ii < part2.children.length; ii++) {\r\n con1 = part1.children[i];\r\n con2 = part2.children[ii];\r\n\r\n let con1Connected: boolean = false;\r\n if (con1 && con1.userData) {\r\n con1Connected = con1.userData.connected;\r\n }\r\n let con2Connected: boolean = false;\r\n if (con2 && con2.userData) {\r\n con2Connected = con2.userData.connected;\r\n }\r\n // if these connectors can connect connect them\r\n if (!con1Connected && !con2Connected && this.CanSelectorConnect(part1.children, con1, con2, isFirstElement)) {\r\n // if addable, continue this loop with a new addable\r\n if (addable) {\r\n const newPart2: any = createAddableFn(addable, part2, part1);\r\n // reference of part2 changed, so refresh con2\r\n this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);\r\n } else {\r\n return this.SelectorConnect(scene, parent, con1, con2);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n // public static TrySelectorConnection(scene: Scene, parent: Object3D,\r\n // part1: any, part2: any, createAddableFn?: Function): boolean {\r\n // let addable: any;\r\n // if (createAddableFn) {\r\n // addable = part2;\r\n // part2 = createAddableFn(addable);\r\n // }\r\n // for (let i = 0; i < part1.children.length; i++) {\r\n // for (let ii = 0; ii < part2.children.length; ii++) {\r\n // const con1: Object3D = part1.children[i];\r\n // const con2: Object3D = part2.children[ii];\r\n // // if these connectors can connect connect them\r\n // if (!con1['connected'] && !con2['connected'] && this.CanSelectorConnect(con1, con2)) {\r\n // // if addable, continue this loop with a new addable\r\n // if (addable) {\r\n // const newPart2: Object3D = createAddableFn(addable, part2, part1);\r\n // // reference of part2 changed, so refresh con2\r\n // this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);\r\n // } else {\r\n // return this.SelectorConnect(scene, parent, con1, con2);\r\n // }\r\n // }\r\n // }\r\n // }\r\n // return false;\r\n // }\r\n\r\n public static Convert3DPointToScreenPoint(point: Vector3, camera: Camera, width: number, height: number): Vector2 {\r\n if (!point) {\r\n return new Vector2();\r\n }\r\n const vector: Vector3 = point.clone().project(camera);\r\n vector.x = (vector.x + 1) / 2 * width;\r\n vector.y = -(vector.y - 1) / 2 * height;\r\n return new Vector2(vector.x, vector.y);\r\n }\r\n\r\n public static CanSelectorConnect(\r\n consPart1: Object3D[],\r\n con1: Object3D | any,\r\n con2: Object3D | any,\r\n startWithMale?: boolean\r\n ): boolean {\r\n const con1Name: string = (con1 instanceof Object3D || con1 instanceof Mesh) ? con1.name : con1.connector;\r\n const con2Name: string = (con2 instanceof Object3D || con2 instanceof Mesh) ? con2.name : con2.connector;\r\n const sameParent: boolean = (con1 instanceof Object3D || con1 instanceof Mesh) &&\r\n (con2 instanceof Object3D || con2 instanceof Mesh) ? con1.parent === con2.parent : false;\r\n\r\n if (!con1Name || !con2Name) {\r\n return false;\r\n }\r\n const parts1: string[] = con1Name.toUpperCase().split('_'),\r\n parts2: string[] = con2Name.toUpperCase().split('_');\r\n\r\n if (parts1.length >= 3 && parts2.length >= 3 && !sameParent) {\r\n const connectable: boolean = parts1[0] === 'C' && parts2[0] === 'C' &&\r\n parts1[1] === parts2[1] && parts1[2] !== parts2[2];\r\n return connectable;\r\n }\r\n return false;\r\n }\r\n\r\n // public static CanSelectorConnect(con1: Object3D | any, con2: Object3D | any): boolean {\r\n // const con1Name: string = con1 instanceof Object3D ? con1.name : con1.connector;\r\n // const con2Name: string = con2 instanceof Object3D ? con2.name : con2.connector;\r\n // const sameParent: boolean = con1 instanceof Object3D && con2 instanceof Object3D ? con1.parent === con2.parent : false;\r\n // const parts1: string[] = con1Name.toUpperCase().split('_'),\r\n // parts2: string[] = con2Name.toUpperCase().split('_');\r\n // if (parts1.length >= 3 && parts2.length >= 3 && !sameParent) {\r\n // const connectable: boolean = parts1[0] === 'C' && parts2[0] === 'C' &&\r\n // parts1[1] === parts2[1] && parts1[2] !== parts2[2];\r\n // return connectable;\r\n // }\r\n // return false;\r\n // }\r\n\r\n private static SelectorConnect(scene: Scene, parent: Object3D, con1: Object3D, con2: Object3D): boolean {\r\n if (!scene || !parent) {\r\n return false;\r\n }\r\n con1['connectedTo'] = con2 && con2.parent ? con2.parent.name : '';\r\n con2['connectedTo'] = con1 && con1.parent ? con1.parent.name : '';\r\n\r\n con1.userData.connectedTo = con2 && con2.parent ? con2.parent.name : '';\r\n con1.userData.connected = false;\r\n con2.userData.connectedTo = con1 && con1.parent ? con1.parent.name : '';\r\n con2.userData.connected = false;\r\n\r\n const motherRotation: Euler = new Euler(0, 0, 0);\r\n const motherPosition: Vector3 = new Vector3(0, 0, 0);\r\n\r\n parent.updateMatrixWorld();\r\n motherRotation.copy(parent.rotation);\r\n parent.getWorldPosition(motherPosition);\r\n\r\n parent.rotation.set(0, 0, 0);\r\n parent.position.set(0, 0, 0);\r\n\r\n scene.updateMatrixWorld(true);\r\n\r\n const con1Quat: Quaternion = new Quaternion();\r\n if (con1) {\r\n con1.getWorldQuaternion(con1Quat);\r\n }\r\n const con2Quat: Quaternion = new Quaternion();\r\n if (con2) {\r\n con2.getWorldQuaternion(con2Quat);\r\n }\r\n const con1QuatParent: Quaternion = new Quaternion();\r\n if (con1 && con1.parent) {\r\n con1.parent.getWorldQuaternion(con1QuatParent);\r\n }\r\n const con2QuatParent: Quaternion = new Quaternion();\r\n if (con2 && con2.parent) {\r\n con2.parent.getWorldQuaternion(con2QuatParent);\r\n }\r\n\r\n const rotation: Quaternion = new Quaternion().multiplyQuaternions(\r\n con1Quat.invert(),\r\n con2Quat\r\n ).multiply(\r\n new Quaternion().multiplyQuaternions(\r\n con1QuatParent,\r\n con1QuatParent\r\n )\r\n );\r\n if (con2 && con2.parent) {\r\n con2.parent.quaternion.copy(rotation);\r\n }\r\n // Update because the matrix has been tempered with\r\n scene.updateMatrixWorld(true);\r\n\r\n // Move the connectors towards eachother\r\n const con1Pos: Vector3 = new Vector3();\r\n if (con1) {\r\n con1.getWorldPosition(con1Pos);\r\n }\r\n const con2Pos: Vector3 = new Vector3();\r\n if (con2) {\r\n con2.getWorldPosition(con2Pos);\r\n }\r\n\r\n const move: Vector3 = con1Pos.sub(con2Pos);\r\n if (con2 && con2.parent) {\r\n con2.parent.position.x += move.x;\r\n con2.parent.position.y += move.y;\r\n con2.parent.position.z += move.z;\r\n }\r\n\r\n // reset parent's objects rotation and position\r\n parent.rotation.copy(motherRotation);\r\n parent.position.copy(motherPosition);\r\n\r\n scene.updateMatrixWorld(true);\r\n\r\n // Set the connected flag\r\n if (con1) {\r\n // con1['connected'] = true;\r\n con1.userData.connected = true;\r\n }\r\n if (con2) {\r\n // con2['connected'] = true;\r\n con2.userData.connected = true;\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n","import {DecoNode} from '@colijnit/configuratorapi/build/model/deco-node.js';\r\nimport {DecoNodeType} from '@colijnit/configuratorapi/build/enum/deco-node-type.enum.js';\r\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection.js';\r\nimport {NodeType} from '@colijnit/configuratorapi/build/enum/node-type.enum.js';\r\nimport {DecoNodeKind} from '@colijnit/configuratorapi/build/enum/deco-node-kind.enum.js';\r\nimport {Object3D, Scene} from 'three';\r\nimport {Scene3DUtil} from './scene-3d.utils';\r\nimport {DebugUtils} from './debug.utils';\r\n\r\nexport class SelectionUtils {\r\n\r\n public static BuildFromAdjustables(scene: Scene, item: Object3D, adjustables: Selection[], placedAdjustables: Selection[], sourceObj: Object3D, activeConnector?: any, baseElementNodeId?: number): string[] {\r\n const result: string[] = [];\r\n if (adjustables && adjustables.length > 0) {\r\n let connected: boolean = false;\r\n for (let i: number = 0, len: number = adjustables.length; i < len; i++) {\r\n const adjustable: Object3D = SelectionUtils.CreateAdjustable(item, adjustables[i], placedAdjustables, sourceObj);\r\n if (adjustable) {\r\n for (let ii = placedAdjustables.length - 1; ii >= 0; ii--) {\r\n if (SelectionUtils.IsMoveableObject(adjustable)) { // vrije verplaatsing mogelijk, connecten aan opgeslagen connector\r\n const selection: Selection = adjustable.userData.selection;\r\n SelectionUtils.AddElementOnConnector(\r\n item,\r\n adjustable,\r\n selection.decoConnection ? selection.decoConnection : activeConnector,\r\n baseElementNodeId\r\n );\r\n adjustable.visible = true;\r\n connected = true;\r\n break;\r\n } else {\r\n if (Scene3DUtil.TrySelectorConnection(\r\n scene,\r\n item, placedAdjustables[ii], adjustable, i === 1)) {\r\n adjustable.visible = true;\r\n connected = true;\r\n break;\r\n }\r\n }\r\n connected = false;\r\n }\r\n }\r\n\r\n if (!connected && placedAdjustables.length > 1) {\r\n DebugUtils.log(`No connection found for: ${adjustable ? adjustable.name : adjustables[i].decoNode.gameObjectName}`);\r\n result.push(`No connection found for: ${adjustable ? adjustable.name : adjustables[i].decoNode.gameObjectName}`);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n public static LinkSelectionsAndDecos(selections: Selection[], decos: DecoNode[], variations: any[]): void {\r\n const len: number = selections.length;\r\n for (let i = 0; i < len; i++) {\r\n // const id: string = this.selections[i].artNodeIdDeco;\r\n let deco: any = decos ? decos.find(d => d.nodeId === selections[i].node) : null;\r\n if (!deco) {\r\n deco = new DecoNode();\r\n }\r\n if (deco.type !== DecoNodeType.Variation) {\r\n const variation: any = variations ? variations.find(v => v.parentId === selections[i].artNodeIdDeco) : null;\r\n if (variation) {\r\n deco.variation = variation;\r\n }\r\n }\r\n selections[i].decoNode = deco;\r\n }\r\n }\r\n\r\n public static PrepareTheSelections(selections: Selection[], adjustables: any[], addables: any[]): void {\r\n const selectionOfArticle: Selection = selections.find(s => s.nodeType === NodeType.Article);\r\n const adjustableSelections: Selection[] = selections.filter(s => s.addAdjust === '2');\r\n const isArticleWithMaterial: boolean =\r\n adjustableSelections.length === 0 &&\r\n selectionOfArticle.gameObject &&\r\n selectionOfArticle.gameObject.length > 0;\r\n // get generic variations\r\n const globalVariations: DecoNode[] = selections\r\n .filter(s => (s.generic || adjustableSelections.length === 1) && (s.decoNode as any).variation && (!s.elementType || s.elementType === 'variation'))\r\n .map((value: Selection, index: number, array: Selection[]) => {\r\n // find selection of variation\r\n const sel: Selection = selections.find(s => s.artNodeIdDeco === (value.decoNode as any).variation.parentId);\r\n if (sel) {\r\n (value.decoNode as any).variation.supplierArticleNr = sel.supplierArticleNr;\r\n }\r\n (value.decoNode as any).variation.materialId = SelectionUtils.GetMaterialIdFromParent(selections, value.node);\r\n return (value.decoNode as any).variation;\r\n });\r\n\r\n let globalVariationsRewrite: boolean = true;\r\n\r\n const len: number = selections.length;\r\n let lastAdded: Selection;\r\n let lastAdjustable: Selection;\r\n let newPart: boolean = false;\r\n let previousPresLevel: number = -1;\r\n let positioning: any;\r\n let optionText: string;\r\n for (let i = 0; i < len; i++) {\r\n const selection: Selection = selections[i];\r\n if (selection.presentationLevel === 1) {\r\n positioning = selection.hdecoPositioning;\r\n optionText = selection.question;\r\n }\r\n if (selection.presentationLevel > previousPresLevel) {\r\n selection.hdecoPositioning = selection.hdecoPositioning || positioning;\r\n }\r\n if (selection.decoNode) {\r\n if (selection.decoNode.type === DecoNodeType.Variation) {\r\n const decoNode = selection.decoNode;\r\n (decoNode as any).optionText = optionText;\r\n // find selection of variation and set materialId in case of multimaterial\r\n if (!(decoNode as any).materialId) {\r\n (decoNode as any).materialId = SelectionUtils.GetMaterialIdFromParent(selections, decoNode.nodeId);\r\n }\r\n if (lastAdded) {\r\n if (newPart) {\r\n if ((decoNode as any).materialId) {\r\n lastAdded.variations.push(decoNode);\r\n } else {\r\n lastAdded.variations = [decoNode];\r\n }\r\n } else {\r\n lastAdded.variations.push(decoNode);\r\n }\r\n newPart = false;\r\n } else {\r\n globalVariations.push(decoNode);\r\n }\r\n // else {\r\n // if (globalVariationsRewrite) {\r\n // globalVariations.length = 0;\r\n // globalVariationsRewrite = false;\r\n // }\r\n // globalVariations.push(decoNode);\r\n // }\r\n // const variation: FurniturePartVariation = new FurniturePartVariation();\r\n // variation.BrandId = selection.decoNode.brandId;\r\n // variation.Description = selection.decoNode.gameObjectName;\r\n // variation.MaterialId = (selection.decoNode as any).materialId;\r\n // variation.SupplierArticleNr = (selection.decoNode as any).supplierArticleNr;\r\n // usedVariations.push(variation);\r\n } else if ((selection.decoNode.type === DecoNodeType.Part &&\r\n typeof selection.decoNode.gameObjectName === 'string' &&\r\n selection.decoNode.gameObjectName.length) || (isArticleWithMaterial)) {\r\n if (selection.decoNode.kind === DecoNodeKind.Adjustable || (isArticleWithMaterial)) {\r\n selection.variations = globalVariations.slice();\r\n adjustables.push(selection);\r\n if (!lastAdded || (lastAdded.nodeId !== selection.nodeId || lastAdded.node !== selection.node)) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n lastAdjustable = selection;\r\n } else if (selection.decoNode.kind === DecoNodeKind.Addable) {\r\n selection.variations = lastAdjustable ? lastAdjustable.variations : globalVariations.slice();\r\n if (lastAdjustable) {\r\n lastAdjustable.addables.push(selection);\r\n }\r\n addables.push(selection);\r\n if (!lastAdded || (lastAdded.nodeId !== selection.nodeId || lastAdded.node !== selection.node)) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n }\r\n }\r\n }\r\n previousPresLevel = selection.presentationLevel;\r\n }\r\n // this._upsertFurniture(this.activeInstance,\r\n // {Variations: usedVariations});\r\n }\r\n\r\n /**\r\n * Returns the materialId of the parent up the tree until presentionlevel 1 is reached\r\n * @param id\r\n * @private\r\n */\r\n public static GetMaterialIdFromParent(selections: Selection[], id: number): string {\r\n if (!selections) {\r\n return undefined;\r\n }\r\n const idx: number = selections.findIndex(s => s.node === id);\r\n let currentLevel: number = 999;\r\n if (idx > -1) {\r\n for (let i = idx; i > 0; i--) {\r\n const selection: Selection = selections[i];\r\n if (selection.presentationLevel >= currentLevel) {\r\n break;\r\n }\r\n currentLevel = selection.presentationLevel;\r\n if (selection.hdecoGameObject) {\r\n return selection.hdecoGameObject;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n public static CreateAdjustable(item: Object3D, adj: Selection, placedAdjustables: Selection[], sourceObj: Object3D): Object3D {\r\n let obj: any = sourceObj ? sourceObj.getObjectByName(adj.decoNode.gameObjectName || adj.gameObject) : null;\r\n if (!obj) {\r\n // in case of glb files, the importer removes dots from names\r\n const name: string = adj.decoNode.gameObjectName.replace(/[.]/g, '');\r\n obj = sourceObj ? sourceObj.getObjectByName(name) : null;\r\n if (!obj) {\r\n DebugUtils.log(`No object with name ${adj.decoNode.gameObjectName} found!`);\r\n return null;\r\n }\r\n }\r\n let adjustable: any = obj.clone();\r\n adjustable.name = SelectionUtils.CreateUniqueName(item, obj);\r\n adjustable.userData.selection = adj;\r\n adjustable.position.set(0, 0, 0);\r\n adjustable.traverse(c => {\r\n c.visible = !c.name.toLowerCase().startsWith('c_');\r\n });\r\n item.add(adjustable);\r\n adjustable = item.getObjectByName(adjustable.name);\r\n placedAdjustables.push(adjustable);\r\n return adjustable;\r\n }\r\n\r\n public static CreateAddable(sourceObj: Object3D, item: Object3D, placedAddables: Object3D[], add: Selection, part2?: any, part1?: any): Object3D {\r\n const obj: any = sourceObj.getObjectByName(add.decoNode.gameObjectName);\r\n if (!obj) {\r\n return null;\r\n }\r\n // const selection: Selection = this._getSelectionFromId(adj.artNodeIdDeco);\r\n const addable: any = obj.clone();\r\n addable.name = SelectionUtils.CreateUniqueName(item, obj);\r\n addable.userData.selection = add;\r\n addable.position.set(0, 0, 0);\r\n addable.visible = true;\r\n if (part1 && part2) {\r\n return SelectionUtils.PlaceAddable(item, placedAddables, addable);\r\n }\r\n return addable;\r\n }\r\n\r\n public static PlaceAddable(item: Object3D, placedAddables: Object3D[], add: any): Object3D {\r\n item.add(add);\r\n const addable: Object3D = item.getObjectByName(add.name) as Object3D;\r\n placedAddables.push(addable);\r\n return addable;\r\n }\r\n\r\n public static PlaceAddables(scene: Scene, sourceObj: Object3D, item: Object3D, placedAdjustables: Object3D[], placedAddables: Object3D[]): void {\r\n const len: number = placedAdjustables.length;\r\n for (let i = 0; i < len; i++) {\r\n if (placedAdjustables[i].userData.hasOwnProperty('selection') && placedAdjustables[i].userData.selection) {\r\n const adjustableSelection: Selection = placedAdjustables[i].userData.selection;\r\n if (adjustableSelection) {\r\n const lena: number = adjustableSelection.addables.length;\r\n let conAddable: any;\r\n for (let ia = 0; ia < lena; ia++) {\r\n Scene3DUtil.TrySelectorConnection(scene,\r\n item, placedAdjustables[i], adjustableSelection.addables[ia], false,\r\n (add, part2?, part1?) => SelectionUtils.CreateAddable(sourceObj, item, placedAddables, add, part2, part1));\r\n if (conAddable) {\r\n Scene3DUtil.TrySelectorConnection(scene,\r\n item, conAddable, adjustableSelection.addables[ia], false,\r\n (add, part2?, part1?) => SelectionUtils.CreateAddable(sourceObj, item, placedAddables, add, part2, part1));\r\n }\r\n conAddable = placedAddables[placedAddables.length - 1];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static CreateUniqueName(item: Object3D, obj: Object3D): string {\r\n let iteration: number = 0;\r\n let name: string = `${item.name}_${obj.name}`;\r\n let existingObj: Object3D = item.getObjectByName(name);\r\n while (existingObj) {\r\n iteration++;\r\n name = `${item.name}_${obj.name}` + (iteration !== 0 ? ('_' + iteration) : '');\r\n existingObj = item.getObjectByName(name);\r\n }\r\n return name;\r\n }\r\n\r\n public static IsMoveableObject(obj: Object3D): boolean {\r\n return obj.userData && obj.userData.selection && obj.userData.selection.hdecoPositioning === \"V\";\r\n }\r\n\r\n public static AddElementOnConnector(currentItem: Object3D, element: Object3D, connector: string, connectedNodeId: number): void {\r\n // TODO this should do something, but not sure what\r\n\r\n // const connectorFromElement = currentItem.connectorFromElement(element.userData.selection);\r\n // const idFromBaseElement: number = connectedNodeId ? connectedNodeId : connectorFromElement.connectedNodeId;\r\n // const baseElement: Object3D[] = currentItem.getObjectsByUserDataProp('selection', 'nodeId', idFromBaseElement);\r\n //\r\n // const item: Item = ObjectUtils.GetParentItem(element);\r\n // if (item) {\r\n // const conn: string =\r\n // await this.elementService.placeElementOnConnector(\r\n // item.metadata.itemId,\r\n // element,\r\n // baseElement.length > 0 ? baseElement[0] : null,\r\n // false,\r\n // connector,\r\n // false\r\n // );\r\n // this.saveElementConnector(element, conn);\r\n // }\r\n }\r\n\r\n}\r\n","import * as THREE from 'three';\r\nimport {Object3D, Scene} from 'three';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {DecoNode} from '@colijnit/configuratorapi/build/model/deco-node.js';\r\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection.js';\r\nimport {Article} from '@colijnit/configuratorapi/build/model/article.js';\r\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer.js';\r\nimport {ThreedUtils} from './utils/threed.utils';\r\nimport {BusinessObjectFactory} from '@colijnit/ioneconnector/build/service/business-object-factory.js';\r\nimport {VariationHelper} from './helper/variation.helper';\r\nimport {DataServiceResponseData} from '@colijnit/ioneconnector/build/model/data-service-response-data.js';\r\nimport {DecoNodeType} from '@colijnit/configuratorapi/build/enum/deco-node-type.enum.js';\r\nimport {SelectionUtils} from './utils/selection.utils';\r\nimport {NodeType} from '@colijnit/configuratorapi/build/enum/node-type.enum.js';\r\nimport {ObjectUtils} from './utils/object.utils';\r\nimport {ImageUtils} from './utils/image.utils';\r\nimport {DecoNodeKind} from '@colijnit/configuratorapi/build/enum/deco-node-kind.enum.js';\r\n\r\nexport class Builder {\r\n public modelLoaded: BehaviorSubject<THREE.Object3D> = new BehaviorSubject<THREE.Object3D>(null);\r\n public set debug(value: Function) {\r\n if (value) {\r\n this._debug = value;\r\n if (this._variationHelper) {\r\n this._variationHelper.debug = this._debug;\r\n }\r\n }\r\n }\r\n public get debug(): Function {\r\n return this._debug;\r\n }\r\n\r\n private _scene: THREE.Scene;\r\n private _instanceId: string;\r\n private _sku: string;\r\n private _goodId: number;\r\n private _assetPath: string;\r\n private _selections: Selection[] = [];\r\n private _answers: Answer[] = [];\r\n private _decos: DecoNode[] = [];\r\n private _placedAdjustables: any[] = [];\r\n private _placedAddables: any[] = [];\r\n private _adjustables: any[] = [];\r\n private _addables: any[] = [];\r\n\r\n private _debug: Function;\r\n\r\n private _imageCache: Map<number, string> = new Map();\r\n\r\n private _boFactory: BusinessObjectFactory;\r\n private _source: THREE.Object3D;\r\n private _threedUtils: ThreedUtils;\r\n private _variationHelper: VariationHelper;\r\n private _articleCache: Map<string, Article> = new Map();\r\n\r\n constructor() {\r\n }\r\n\r\n public init(scene: Scene) {\r\n this._boFactory = new BusinessObjectFactory();\r\n this._threedUtils = new ThreedUtils();\r\n this._variationHelper = new VariationHelper();\r\n this._variationHelper.debug = this._debug;\r\n\r\n if (!scene) {\r\n throw 'No scene object provided!';\r\n }\r\n // this._imageCacheService = new ImageCacheService();\r\n this._scene = scene;\r\n }\r\n\r\n // public async buildModel(sku?: string, instanceId?: string, goodId?: number): Promise<THREE.Object3D> {\r\n // if (!this._scene) {\r\n // return;\r\n // }\r\n // try {\r\n // await this._setInstanceId(sku, instanceId, goodId);\r\n // await this._prepareConfiguration(this._sku, this._goodId);\r\n // if (this._source) {\r\n // await this._configuratorService.setInstanceToConfigure(this._instanceId);\r\n // const promises: Promise<any>[] = [];\r\n // this._reset();\r\n // promises.push(this.getQuestionAndAnswers());\r\n // promises.push(this._getSelections(this._instanceId));\r\n // promises.push(this._getDecos());\r\n // await Promise.all(promises);\r\n // if (this._answers.length > 0) {\r\n // return;\r\n // }\r\n // this._linkSelectionsAndDecos();\r\n // this._prepareTheSelections();\r\n // this._preloadMaterials();\r\n // const build = await this._build();\r\n // return build;\r\n // } else {\r\n // throw 'GLB source not found!';\r\n // }\r\n // } catch (e) {\r\n // throw e;\r\n // }\r\n // }\r\n\r\n public async buildModelFromData(selections: Selection[], decos: DecoNode[], assetUrl: string, cdnUrl: string, schema: string): Promise<THREE.Object3D> {\r\n return new Promise(async (resolve: Function, reject: Function) => {\r\n if (!this._scene) {\r\n reject('no scene provided!');\r\n }\r\n try {\r\n this._log('start build', true);\r\n await this._downloadAsset(assetUrl, cdnUrl, schema, selections && selections.length > 1 && decos && decos.length > 0);\r\n try {\r\n if (this._source) {\r\n try {\r\n if (selections && selections.length > 1 && decos && decos.length > 0) {\r\n this._reset();\r\n this._assetPath = assetUrl;\r\n this._selections = selections;\r\n this._decos = decos;\r\n this._linkSelectionsAndDecos();\r\n this._prepareTheSelections();\r\n this._preloadMaterials(schema, cdnUrl);\r\n const build: Object3D = await this._build();\r\n resolve(build);\r\n } else {\r\n resolve(this._source); // just return the source for simplicity\r\n }\r\n } catch (e) {\r\n reject(e.message);\r\n } {\r\n }\r\n } else {\r\n if (assetUrl) {\r\n reject(`Error downloading source: ${assetUrl}`);\r\n } else {\r\n reject('No 3D source provided!');\r\n }\r\n }\r\n } finally {\r\n this._cleanUp();\r\n this._log('finish build', true);\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n }\r\n\r\n public destroy(): void {\r\n this._threedUtils.clearCache();\r\n this._variationHelper.clearCache();\r\n }\r\n\r\n public _cleanUp(): void {\r\n this._sku = undefined;\r\n this._goodId = undefined;\r\n this._instanceId = undefined;\r\n this._variationHelper.clearCache();\r\n }\r\n\r\n private _handleResponseData(includeMimetype: boolean, thumb: boolean, responseData: DataServiceResponseData): string {\r\n if (responseData && responseData.resultObject) {\r\n if (responseData.resultObject.filePath !== null && responseData.resultObject.filePath !== \"\") {\r\n return ImageUtils.getFixedImageFilepathUrl(responseData.resultObject.filePath);\r\n } else {\r\n if (includeMimetype) {\r\n return ImageUtils.getDocBodyWithMimeTypeDefinition(responseData.resultObject.fileName,\r\n thumb ? responseData.resultObject.thumbnailBody : responseData.resultObject.documentBody);\r\n } else {\r\n return thumb ? responseData.resultObject.thumbnailBody : responseData.resultObject.documentBody;\r\n }\r\n }\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n private _preloadMaterials(schema: string, assetPath: string): void {\r\n if (this._decos && this._decos.length) {\r\n const materials: DecoNode[] = [...new Set(\r\n this._decos\r\n .filter(d => (d.gameObjectName || d.materialUrl) && d.type === DecoNodeType.Variation)\r\n .map(d => d)\r\n )];\r\n this._variationHelper.preloadVariations(schema, materials, assetPath);\r\n }\r\n }\r\n\r\n private async _downloadAsset(assetUrl: string, cdnUrl: string, schema: string, setVisibleFalse: boolean = true): Promise<void> {\r\n this._source = await this._threedUtils.download3DSource(assetUrl, setVisibleFalse)\r\n .catch((error) => {\r\n throw error;\r\n });\r\n if (cdnUrl) {\r\n this._variationHelper.assetPath =\r\n cdnUrl +\r\n (cdnUrl.endsWith('/') ? '' : '/') +\r\n (schema ? schema : 'UP_DBA');\r\n }\r\n }\r\n\r\n private async _build(): Promise<THREE.Object3D> {\r\n const adjustables: Selection[] = this._getAdjustables();\r\n if (adjustables && adjustables.length === 0 && this._selections && this._selections.length > 0) { // check if article has a gameObject\r\n if (this._selections[0].nodeType === NodeType.Article && this._selections[0].gameObject) {\r\n adjustables.push(this._selections[0]);\r\n }\r\n }\r\n const obj: THREE.Object3D = new THREE.Object3D();\r\n obj.visible = false; // no need to render visualy\r\n const adjustableResult: string[] = SelectionUtils.BuildFromAdjustables(this._scene, obj, adjustables, this._placedAdjustables, this._source);\r\n if (adjustableResult.length === 0) {\r\n this._log('place addables');\r\n SelectionUtils.PlaceAddables(this._scene, this._source, obj, this._placedAdjustables, this._placedAddables);\r\n this._log('update pivot');\r\n this._updatePivot(obj);\r\n this._log('load variations');\r\n await this._loadVariations(this._assetPath, obj);\r\n // this._variationHelper.clearCache();\r\n this._log('remove from scene');\r\n this._scene.remove(obj);\r\n ObjectUtils.DisposeObject(this._source);\r\n // this._cleanUp();\r\n this._log('ready!');\r\n this.modelLoaded.next(obj);\r\n return obj;\r\n } else {\r\n throw 'No adjustables found!';\r\n // this._building = false;\r\n // if (this.selections.length < 2) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoSelections});\r\n // } else if (this.decos.size === 0) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoDecoNodes});\r\n // } else {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_ADJUSTABLES', description: 'NO_ADJUSTABLES_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoAdjustables});\r\n // }\r\n }\r\n }\r\n\r\n private _prepareTheSelections(): void {\r\n if (!this._selections || !this._selections.length) {\r\n return;\r\n }\r\n SelectionUtils.PrepareTheSelections(this._selections, this._adjustables, this._addables);\r\n }\r\n\r\n private _linkSelectionsAndDecos(): void {\r\n if (!this._selections || !this._selections.length) {\r\n return;\r\n }\r\n SelectionUtils.LinkSelectionsAndDecos(this._selections, this._decos, this._getVariations());\r\n }\r\n\r\n private _getVariations(): DecoNode[] {\r\n if (this._decos && this._decos.length) {\r\n return this._decos.filter((deco: DecoNode) => {\r\n return deco.type === DecoNodeType.Variation;\r\n });\r\n }\r\n return [];\r\n }\r\n\r\n private async _loadVariations(assetPath: string, obj: THREE.Object3D): Promise<void> {\r\n this._log('load variation for parts');\r\n await this._variationHelper.loadPart(assetPath, this._adjustables, obj, true);\r\n this._log('load variation for adjustables');\r\n await this._variationHelper.loadVariation(assetPath, this._adjustables, obj, true);\r\n this._log('load variation for addables');\r\n await this._variationHelper.loadVariation(assetPath, this._addables, obj, true);\r\n this._log('load variation clear cache');\r\n this._variationHelper.clearCache();\r\n this._log('load variations done');\r\n }\r\n\r\n private _getAdjustables(): Selection[] {\r\n if (!this._selections || !this._selections.length) {\r\n return [];\r\n }\r\n return this._selections.filter(s => {\r\n const node: DecoNode = s.decoNode;\r\n return node && node.gameObjectName && node.type === DecoNodeType.Part && node.kind === DecoNodeKind.Adjustable;\r\n });\r\n }\r\n\r\n private _updatePivot(obj: THREE.Object3D) {\r\n const boundingBox = new THREE.Box3().setFromObject(obj);\r\n const bbCenterPivot = new THREE.Vector3();\r\n boundingBox.getCenter(bbCenterPivot);\r\n const delta: THREE.Vector3 = new THREE.Vector3().sub(bbCenterPivot).setY(Math.abs(Math.min(boundingBox.min.y, 0)));\r\n\r\n obj.children.forEach((child: any) => {\r\n child.position.add(delta);\r\n });\r\n obj.updateWorldMatrix(false, true);\r\n }\r\n\r\n private _reset(): void {\r\n this._placedAddables.length = 0;\r\n this._placedAdjustables.length = 0;\r\n this._adjustables.length = 0;\r\n this._addables.length = 0;\r\n // this._prepareTheSelections();\r\n }\r\n\r\n private _log(message: string, force: boolean = false): void {\r\n if (this.debug) {\r\n this.debug(message);\r\n console.log(new Date(), message);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["Material"],"mappings":"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"}