@colijnit/configurator 1.0.21 → 1.0.22

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.
Files changed (158) hide show
  1. package/app/builder.d.ts +53 -0
  2. package/app/components/answers/answer/answer.component.d.ts +11 -0
  3. package/app/components/answers/answers.component.d.ts +8 -0
  4. package/app/components/answers/answers.module.d.ts +2 -0
  5. package/app/components/selections/selections.component.d.ts +22 -0
  6. package/app/components/selections/selections.module.d.ts +2 -0
  7. package/app/components/shared/loader/loader.component.d.ts +2 -0
  8. package/app/components/shared/shared.module.d.ts +2 -0
  9. package/app/directives/visibility-observer-master.directive.d.ts +9 -0
  10. package/app/directives/visibility-observer.directive.d.ts +13 -0
  11. package/app/services/configurator.service.d.ts +22 -0
  12. package/app/services/image-cache.service.d.ts +10 -0
  13. package/app/services/locator.service.d.ts +4 -0
  14. package/bundles/colijnit-configurator.umd.js +2745 -0
  15. package/bundles/colijnit-configurator.umd.js.map +1 -0
  16. package/bundles/colijnit-configurator.umd.min.js +17 -0
  17. package/bundles/colijnit-configurator.umd.min.js.map +1 -0
  18. package/colijnit-configurator.d.ts +10 -0
  19. package/colijnit-configurator.metadata.json +1 -0
  20. package/esm2015/app/builder.js +477 -0
  21. package/esm2015/app/components/answers/answer/answer.component.js +69 -0
  22. package/esm2015/app/components/answers/answers.component.js +43 -0
  23. package/esm2015/app/components/answers/answers.module.js +29 -0
  24. package/esm2015/app/components/selections/selections.component.js +134 -0
  25. package/esm2015/app/components/selections/selections.module.js +23 -0
  26. package/esm2015/app/components/shared/loader/loader.component.js +24 -0
  27. package/esm2015/app/components/shared/shared.module.js +21 -0
  28. package/esm2015/app/directives/visibility-observer-master.directive.js +51 -0
  29. package/esm2015/app/directives/visibility-observer.directive.js +57 -0
  30. package/esm2015/app/services/configurator.service.js +94 -0
  31. package/esm2015/app/services/image-cache.service.js +66 -0
  32. package/esm2015/app/services/locator.service.js +10 -0
  33. package/esm2015/colijnit-configurator.js +11 -0
  34. package/esm2015/helper/variation-helper.js +216 -0
  35. package/esm2015/model/material.js +11 -0
  36. package/esm2015/model/variation-settings.js +6 -0
  37. package/esm2015/model/variation.js +3 -0
  38. package/esm2015/public_api.js +7 -0
  39. package/esm2015/utils/asset.utils.js +74 -0
  40. package/esm2015/utils/file.utils.js +139 -0
  41. package/esm2015/utils/image.utils.js +52 -0
  42. package/esm2015/utils/object.utils.js +49 -0
  43. package/esm2015/utils/scene-utils.js +94 -0
  44. package/esm2015/utils/threed.utils.js +222 -0
  45. package/esm2015/utils/variation-utils.js +224 -0
  46. package/esm5/app/builder.js +591 -0
  47. package/esm5/app/components/answers/answer/answer.component.js +64 -0
  48. package/esm5/app/components/answers/answers.component.js +27 -0
  49. package/esm5/app/components/answers/answers.module.js +32 -0
  50. package/esm5/app/components/selections/selections.component.js +104 -0
  51. package/esm5/app/components/selections/selections.module.js +26 -0
  52. package/esm5/app/components/shared/loader/loader.component.js +16 -0
  53. package/esm5/app/components/shared/shared.module.js +24 -0
  54. package/esm5/app/directives/visibility-observer-master.directive.js +64 -0
  55. package/esm5/app/directives/visibility-observer.directive.js +59 -0
  56. package/esm5/app/services/configurator.service.js +160 -0
  57. package/esm5/app/services/image-cache.service.js +69 -0
  58. package/esm5/app/services/locator.service.js +13 -0
  59. package/esm5/colijnit-configurator.js +11 -0
  60. package/esm5/helper/variation-helper.js +268 -0
  61. package/esm5/model/material.js +13 -0
  62. package/esm5/model/variation-settings.js +8 -0
  63. package/esm5/model/variation.js +7 -0
  64. package/esm5/public_api.js +7 -0
  65. package/esm5/utils/asset.utils.js +106 -0
  66. package/esm5/utils/file.utils.js +151 -0
  67. package/esm5/utils/image.utils.js +56 -0
  68. package/esm5/utils/object.utils.js +56 -0
  69. package/esm5/utils/scene-utils.js +98 -0
  70. package/esm5/utils/threed.utils.js +279 -0
  71. package/esm5/utils/variation-utils.js +327 -0
  72. package/fesm2015/colijnit-configurator.js +2109 -0
  73. package/fesm2015/colijnit-configurator.js.map +1 -0
  74. package/fesm5/colijnit-configurator.js +2527 -0
  75. package/fesm5/colijnit-configurator.js.map +1 -0
  76. package/helper/variation-helper.d.ts +14 -0
  77. package/model/material.d.ts +17 -0
  78. package/model/variation-settings.d.ts +14 -0
  79. package/model/variation.d.ts +10 -0
  80. package/package.json +12 -45
  81. package/{src/public_api.ts → public_api.d.ts} +6 -6
  82. package/utils/asset.utils.d.ts +13 -0
  83. package/utils/file.utils.d.ts +27 -0
  84. package/utils/image.utils.d.ts +8 -0
  85. package/utils/object.utils.d.ts +7 -0
  86. package/utils/scene-utils.d.ts +7 -0
  87. package/utils/threed.utils.d.ts +16 -0
  88. package/utils/variation-utils.d.ts +12 -0
  89. package/.idea/Configurator.iml +0 -12
  90. package/.idea/codeStyles/Project.xml +0 -21
  91. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  92. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  93. package/.idea/misc.xml +0 -9
  94. package/.idea/modules.xml +0 -8
  95. package/.idea/vcs.xml +0 -6
  96. package/angular.json +0 -193
  97. package/configurator.iml +0 -11
  98. package/dist/configurator/index.html +0 -14
  99. package/dist/configurator/main-es2015.js +0 -3129
  100. package/dist/configurator/main-es2015.js.map +0 -1
  101. package/dist/configurator/main-es5.js +0 -5482
  102. package/dist/configurator/main-es5.js.map +0 -1
  103. package/dist/configurator/polyfills-es2015.js +0 -4520
  104. package/dist/configurator/polyfills-es2015.js.map +0 -1
  105. package/dist/configurator/polyfills-es5.js +0 -18375
  106. package/dist/configurator/polyfills-es5.js.map +0 -1
  107. package/dist/configurator/runtime-es2015.js +0 -155
  108. package/dist/configurator/runtime-es2015.js.map +0 -1
  109. package/dist/configurator/runtime-es5.js +0 -155
  110. package/dist/configurator/runtime-es5.js.map +0 -1
  111. package/dist/configurator/styles-es2015.js +0 -450
  112. package/dist/configurator/styles-es2015.js.map +0 -1
  113. package/dist/configurator/styles-es5.js +0 -432
  114. package/dist/configurator/styles-es5.js.map +0 -1
  115. package/dist/configurator/vendor-es2015.js +0 -155551
  116. package/dist/configurator/vendor-es2015.js.map +0 -1
  117. package/dist/configurator/vendor-es5.js +0 -183588
  118. package/dist/configurator/vendor-es5.js.map +0 -1
  119. package/ng-package.json +0 -9
  120. package/src/app/app.component.ts +0 -222
  121. package/src/app/app.module.ts +0 -34
  122. package/src/app/builder.ts +0 -480
  123. package/src/app/components/answers/answer/answer.component.ts +0 -61
  124. package/src/app/components/answers/answers.component.ts +0 -41
  125. package/src/app/components/answers/answers.module.ts +0 -26
  126. package/src/app/components/selections/selections.component.ts +0 -131
  127. package/src/app/components/selections/selections.module.ts +0 -20
  128. package/src/app/components/shared/loader/loader.component.scss +0 -33
  129. package/src/app/components/shared/loader/loader.component.ts +0 -20
  130. package/src/app/components/shared/shared.module.ts +0 -16
  131. package/src/app/directives/visibility-observer-master.directive.ts +0 -71
  132. package/src/app/directives/visibility-observer.directive.ts +0 -74
  133. package/src/app/services/configurator.service.ts +0 -86
  134. package/src/app/services/image-cache.service.ts +0 -56
  135. package/src/app/services/locator.service.ts +0 -6
  136. package/src/environments/environment.prod.ts +0 -3
  137. package/src/environments/environment.ts +0 -8
  138. package/src/helper/variation-helper.ts +0 -220
  139. package/src/index.html +0 -14
  140. package/src/main.ts +0 -11
  141. package/src/model/material.ts +0 -22
  142. package/src/model/variation-settings.ts +0 -14
  143. package/src/model/variation.ts +0 -11
  144. package/src/polyfills.ts +0 -73
  145. package/src/style/shared.scss +0 -173
  146. package/src/style/styles.scss +0 -45
  147. package/src/tsconfig.app.json +0 -16
  148. package/src/tsconfig.spec.json +0 -19
  149. package/src/utils/asset.utils.ts +0 -88
  150. package/src/utils/file.utils.ts +0 -156
  151. package/src/utils/file.utils.unit.test.ts +0 -8
  152. package/src/utils/image.utils.ts +0 -54
  153. package/src/utils/object.utils.ts +0 -52
  154. package/src/utils/scene-utils.ts +0 -119
  155. package/src/utils/threed.utils.ts +0 -219
  156. package/src/utils/variation-utils.ts +0 -216
  157. package/tsconfig.json +0 -23
  158. package/tslint.json +0 -132
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colijnit-configurator.js","sources":["ng://@colijnit/configurator/utils/object.utils.ts","ng://@colijnit/configurator/utils/file.utils.ts","ng://@colijnit/configurator/utils/threed.utils.ts","ng://@colijnit/configurator/utils/scene-utils.ts","ng://@colijnit/configurator/model/material.ts","ng://@colijnit/configurator/utils/image.utils.ts","ng://@colijnit/configurator/utils/asset.utils.ts","ng://@colijnit/configurator/model/variation.ts","ng://@colijnit/configurator/model/variation-settings.ts","ng://@colijnit/configurator/utils/variation-utils.ts","ng://@colijnit/configurator/helper/variation-helper.ts","ng://@colijnit/configurator/app/services/locator.service.ts","ng://@colijnit/configurator/app/services/configurator.service.ts","ng://@colijnit/configurator/app/builder.ts","ng://@colijnit/configurator/app/components/answers/answers.component.ts","ng://@colijnit/configurator/app/services/image-cache.service.ts","ng://@colijnit/configurator/app/components/answers/answer/answer.component.ts","ng://@colijnit/configurator/app/directives/visibility-observer-master.directive.ts","ng://@colijnit/configurator/app/directives/visibility-observer.directive.ts","ng://@colijnit/configurator/app/components/shared/loader/loader.component.ts","ng://@colijnit/configurator/app/components/shared/shared.module.ts","ng://@colijnit/configurator/app/components/answers/answers.module.ts","ng://@colijnit/configurator/app/components/selections/selections.component.ts","ng://@colijnit/configurator/app/components/selections/selections.module.ts","ng://@colijnit/configurator/colijnit-configurator.ts"],"sourcesContent":["import {Material, Mesh, Object3D} from \"three\";\r\n\r\nexport class ObjectUtils {\r\n static materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];\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 => {\r\n this.materialProps\r\n .filter(mapType => mtrl[mapType])\r\n .forEach(mapType => mtrl[mapType].dispose());\r\n mtrl.dispose();\r\n });\r\n } else {\r\n this.materialProps\r\n .filter(mapType => material[mapType] && material[mapType].dispose)\r\n .forEach(mapType => material[mapType].dispose());\r\n if (material.dispose) {\r\n material.dispose();\r\n }\r\n }\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 this.DisposeNode(object);\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 this.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}\r\n","import axios from \"axios\";\n// Static utility functions holder related to files.\n// @dynamic\nexport class FileUtils {\n\n private static _cachedTextureUploads: Map<string, Object> = new Map();\n\n // Returns the given dataUri string stripped of the mimetype part.\n public static StripMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n const mimeString: string = this.GetMimeStringFromDataUri(dataUri);\n return dataUri.substr(mimeString.length + 1);\n }\n\n public static GetMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n return dataUri.split(',')[0];\n }\n\n public static async FileExists(url: string, assetPath: string): Promise<boolean> {\n const result = await axios({\n method: 'get',\n url: `${assetPath}getFiles.php?assetUrl=${url}`,\n responseType: \"json\"\n })\n return !!result.data;\n }\n\n /**\n * There is some discrepancy regarding locations of h3d objects\n * Therefor we need to (temporarily?!) fix the content url\n * Also we need to change some additionals\n */\n public static FixUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (!fixedUrl.endsWith('glb') && !fixedUrl.endsWith('obj') && !fixedUrl.endsWith('glb.gz') && !fixedUrl.endsWith('obj.gz')) {\n fixedUrl = FileUtils.FixUnityUrl(fixedUrl);\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n return fixedUrl;\n }\n\n public static FixGlbUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (assetUrl.indexOf('_webplayer') === -1) {\n fixedUrl = assetUrl.concat('_webplayer');\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n if (!fixedUrl.endsWith('.glb')) {\n fixedUrl = fixedUrl.concat('.glb');\n }\n return fixedUrl;\n }\n\n // Return the mimetype of the given filename.\n public static MimeTypeFromFilename(fileName: string): string {\n const regEx: RegExp = /(?:\\.([^.]+))?$/; // regex to find extension\n const extension: any = regEx.exec(fileName)[1];\n switch (extension) {\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'bmp':\n return 'image/bmp';\n }\n }\n\n /**\n * Downloads the given file to the users default download location.\n * @param fileName With or without extension\n * @param content File content as a string\n * @param [mimeType = 'text/plain']\n */\n public static DownloadFile(\n fileName: string,\n content: string,\n mimeType: string = 'text/plain'\n ): void {\n const element: HTMLAnchorElement = document.createElement('a');\n element.setAttribute('href', 'data:' + mimeType + ';charset=utf-8,' + encodeURIComponent(content));\n element.setAttribute('download', fileName);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n // Returns the contents of given file as a text string.\n public static ReadAsText(file: File): Promise<string> {\n return new Promise<string>((resolve: Function) => {\n const reader: FileReader = new FileReader();\n reader.readAsText(file);\n reader.onloadend = (event: any) => {\n if (event.target.readyState === 2) {\n resolve(event.target.result);\n }\n };\n });\n }\n\n public static GetExtensionFromDataUri(dataUri: string): string {\n return dataUri.replace(/(data:image\\/)(.*?)(;base64.*)/gi, '$2');\n }\n\n public static CreateDownloadFileNameFromBase64(dataUri: string): string {\n const ext: string = this.GetExtensionFromDataUri(dataUri);\n return 'preview.' + ext;\n }\n\n public static DownloadFromDataUri(dataUri: string, fileName: string): void {\n const link: any = document.createElement('a');\n link.download = fileName;\n link.href = dataUri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n // todo remove once Connector deals with mimetypes and this method isn't used anymore\n public static DocumentBodyToDataUri(documentBody: string, mimeType: string): string {\n if (!!documentBody) {\n return 'data:' + mimeType + ';base64,' + documentBody;\n } else {\n return '';\n }\n }\n\n private static FixUnityUrl(url): string {\n if (url.indexOf('_webplayer') === -1) {\n url = url.concat('_webplayer.ione3d');\n } else {\n url = url.replace('_webplayer', '_webplayer.ione3d');\n }\n if (!url.endsWith('.gz')) {\n url = url.concat('.gz');\n }\n return url.replace('.unity3d', '');\n }\n}\n","import * as THREE from \"three\";\nimport {ObjectUtils} from \"./object.utils\";\nimport {FileUtils} from \"./file.utils\";\n\nexport class ThreedUtils {\n\n private _objectCache: Map<string, THREE.Object3D> = new Map();\n\n public clearCache(): void {\n const objs: THREE.Object3D[] = Array.from(this._objectCache.values());\n objs.forEach(o => ObjectUtils.DisposeObject(o));\n this._objectCache.clear();\n }\n\n public download3DSource(fileName: string): Promise<THREE.Object3D> {\n return new Promise(async (resolve: Function, reject: Function) => {\n fileName = fileName.replace('.unity3d', '');\n let lookupFileName: string = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');\n if (this._objectCache.has(lookupFileName)) {\n resolve(this._objectCache.get(lookupFileName));\n return;\n }\n if (await FileUtils.FileExists(lookupFileName, 'https://cdn1.colijn-it.nl/content43/')) {\n this.loadGlbSource(lookupFileName).then((obj: THREE.Object3D) => {\n this._objectCache.set(lookupFileName, obj);\n resolve(obj);\n });\n } else {\n reject(`GLB source not found! (${lookupFileName})`);\n }\n });\n }\n\n public readFileAsText(file: File): Promise<string> {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onload = (e: any) => resolve(e.target.result);\n fileReader.onerror = error => reject(error);\n fileReader.readAsText(file);\n });\n }\n\n public async loadJsonModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const json: string = await this._readJsonFile(filePath);\n const loader = new THREE.ObjectLoader();\n loader.crossOrigin = 'Anonymous';\n return new Promise((resolve, reject) => {\n try {\n const obj = loader.parse(json);\n this._objectCache.set(filePath, obj);\n resolve(obj);\n } catch (e) {\n reject(null);\n }\n });\n }\n\n public async loadJsonObjectModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const loader = new THREE.ObjectLoader();\n loader.setCrossOrigin('Anonymous');\n loader.setResourcePath('');\n return new Promise((resolve, reject) => {\n loader.load(filePath,\n (object: any) => {\n const obj: THREE.Object3D = (object.type === 'Scene' && object.children[0].type === 'Object3D') ? object.children[0] : object;\n this._objectCache.set(filePath, obj);\n resolve(obj as THREE.Object3D);\n },\n xhr => null,\n error => reject(error)\n );\n });\n }\n\n public async loadGlbModel(file: string, cleanUp: boolean = true): Promise<THREE.Object3D> {\n if (this._objectCache.has(file)) {\n return Promise.resolve(this._objectCache.get(file));\n }\n if (!window.hasOwnProperty('loadGLTF')) {\n console.error('loadGLTF not defined in window global');\n return null;\n }\n // const loader = new GLTFLoader();\n const obj: THREE.Object3D = await (window as any).loadGLTF(file);\n if (obj) {\n this._cleanedUpObjects(obj, cleanUp);\n this._objectCache.set(file, obj);\n return obj;\n } else {\n return null;\n }\n }\n\n public async loadGlbSource(file: string): Promise<THREE.Object3D> {\n const obj = await this.loadGlbModel(file, false);\n if (obj) {\n obj.children = obj.children.filter(c => !(c instanceof THREE.Camera));\n obj.children.sort((a, b) => a['name'] < b['name'] ? 1 : -1);\n obj.children.forEach((c: THREE.Object3D) => {\n c.traverse((t: THREE.Object3D) => {\n t.visible = !t.name.toLowerCase().startsWith('c_');\n });\n c.visible = false;\n });\n if (obj.children.length === 1 && obj.children[0] instanceof THREE.Group) { // flatten children\n const children: any = obj.children[0].children.slice();\n obj.children.length = 0;\n obj.children = children;\n }\n }\n return obj;\n }\n\n public async textureFromUrl(url: string): Promise<any> {\n // url = this._includeBaseUrl(url);\n return new Promise((resolve, reject) => {\n const textureLoader = new THREE.TextureLoader();\n // textureLoader.setBaseU(this._settingsService.settings.assetPath);\n textureLoader.load(url,\n (texture: THREE.Texture) => {\n texture.wrapT = THREE.RepeatWrapping;\n texture.wrapS = THREE.RepeatWrapping;\n texture.repeat.set(1, 1);\n texture.needsUpdate = true;\n return resolve(texture);\n },\n null,\n reject\n );\n });\n }\n\n private _cleanedUpObjects(object: THREE.Object3D, cleanUp: boolean = true): THREE.Object3D {\n let obj: THREE.Object3D = new THREE.Object3D();\n object.children.forEach((c: THREE.Object3D) => {\n if (!(c instanceof THREE.Camera)) {\n if (cleanUp && c instanceof THREE.Group || (c.children.length === 1 && c.children[0] instanceof THREE.Group)) {\n this._addGroupChildrenToObject(c, obj);\n } else if ((cleanUp && !(c instanceof THREE.Mesh)) || (!(c instanceof THREE.Mesh) && !c.name && c.children.length > 0)) {\n c.children.forEach((child) => {\n child.translateY(c.position.y);\n });\n c.translateY(-c.position.y);\n if (obj.children.length > 0) {\n obj.add(c.clone());\n } else {\n obj = c.clone();\n }\n } else {\n // if (c.position.y > 0 || c.position.y < 0) {\n // c.children.forEach((child) => {\n // child.translateY(c.position.y);\n // });\n // c.translateY(-c.position.y);\n // }\n obj.add(c.clone());\n }\n }\n });\n const boundingBox = new THREE.Box3().setFromObject(obj);\n const bbCenterPivot = new THREE.Vector3();\n boundingBox.getCenter(bbCenterPivot);\n const delta: THREE.Vector3 = new THREE.Vector3().add(bbCenterPivot).negate();\n obj.children.forEach((cc) => {\n cc.position.add(delta);\n });\n return obj;\n }\n\n private _addGroupChildrenToObject(group: THREE.Object3D, obj: THREE.Object3D, cleanUp: boolean = true): void {\n group.children.forEach((gc: THREE.Object3D) => {\n if (cleanUp && gc instanceof THREE.Group) {\n this._addGroupChildrenToObject(gc, obj);\n } else {\n // gc.translateX(-group.position.x);\n gc.translateY(group.position.y);\n // gc.translateZ(-group.position.z);\n obj.add(gc.clone());\n }\n });\n }\n\n private _iterateChildren(children: THREE.Object3D[], callback: (child: THREE.Mesh) => {}): void {\n for (let i = 0; i < children.length; i++) {\n const child: THREE.Object3D = children[i];\n if (child instanceof THREE.Mesh) {\n callback(child);\n } else {\n this._iterateChildren(child.children, callback);\n }\n }\n }\n\n private async _readJsonFile(filePath: string): Promise<any> {\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n return '';\n } else {\n let empty = false;\n await response.clone().text().then((value) => {\n if (value === '') {\n empty = true;\n }\n });\n return empty ? {} : response.json();\n }\n } catch (e) {\n return '';\n }\n }\n\n}\n","import * as THREE from 'three';\r\n\r\nexport class SceneUtils {\r\n\r\n public static TrySelectorConnection(scene: THREE.Scene, parent: THREE.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: THREE.Object3D = part1.children[i];\r\n const con2: THREE.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: THREE.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: THREE.Vector3, camera: THREE.Camera, width: number, height: number): THREE.Vector2 {\r\n if (!point) {\r\n return new THREE.Vector2();\r\n }\r\n const vector: THREE.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 THREE.Vector2(vector.x, vector.y);\r\n }\r\n\r\n public static CanSelectorConnect(con1: THREE.Object3D | any, con2: THREE.Object3D | any): boolean {\r\n const con1Name: string = con1 instanceof THREE.Object3D ? con1.name : con1.connector;\r\n const con2Name: string = con2 instanceof THREE.Object3D ? con2.name : con2.connector;\r\n const sameParent: boolean = con1 instanceof THREE.Object3D && con2 instanceof THREE.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: THREE.Scene, parent: THREE.Object3D, con1: THREE.Object3D, con2: THREE.Object3D): boolean {\r\n if (!scene || !parent) {\r\n return false;\r\n }\r\n con1['connectedTo'] = con2.parent.name;\r\n con2['connectedTo'] = con1.parent.name;\r\n\r\n const motherRotation: THREE.Euler = new THREE.Euler(0, 0, 0);\r\n const motherPosition: THREE.Vector3 = new THREE.Vector3(0, 0, 0);\r\n\r\n scene.updateMatrixWorld(true);\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 const con1Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con1.getWorldQuaternion(con1Quat);\r\n const con2Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con2.getWorldQuaternion(con2Quat);\r\n const con1QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con1.parent.getWorldQuaternion(con1QuatParent);\r\n const con2QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con2.parent.getWorldQuaternion(con2QuatParent);\r\n\r\n const rotation: THREE.Quaternion = new THREE.Quaternion().multiplyQuaternions(\r\n con1Quat.invert(),\r\n con2Quat\r\n ).multiply(\r\n new THREE.Quaternion().multiplyQuaternions(\r\n con1QuatParent,\r\n con1QuatParent\r\n )\r\n );\r\n\r\n con2.parent.quaternion.copy(rotation);\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: THREE.Vector3 = new THREE.Vector3();\r\n con1.getWorldPosition(con1Pos);\r\n const con2Pos: THREE.Vector3 = new THREE.Vector3();\r\n con2.getWorldPosition(con2Pos);\r\n\r\n const move: THREE.Vector3 = con1Pos.sub(con2Pos);\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 // 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 con1['connected'] = true;\r\n con2['connected'] = true;\r\n return true;\r\n }\r\n\r\n}\r\n","import * as THREE from 'three';\n\nexport class Material {\n\n public name: string;\n public schema: string;\n public specular: THREE.Color = new THREE.Color(0.3, 0.3, 0.3);\n public shininess = 0;\n // public roughness = 1;\n // public metalness = 0.5;\n public normal: THREE.Texture;\n public texture: THREE.Texture;\n public ao: THREE.Texture;\n public metalness: THREE.Texture;\n public roughness: THREE.Texture;\n public repeatX = 4;\n public repeatY = 4;\n public loaded = false;\n public metalnessValue: number;\n public roughnessValue: number;\n\n}\n","import * as THREE from 'three';\nimport {Material} from '../model/material';\n// @dynamic\nexport class ImageUtils {\n\n public static textures: Map<string, THREE.Texture> = new Map();\n\n public static CreateTextureFromBase64(id: string, base64: string, material: Material): Promise<THREE.Texture> {\n return new Promise<THREE.Texture>((resolve) => {\n if (ImageUtils.textures.has(id)) {\n resolve(ImageUtils.textures.get(id));\n } else {\n if (!base64) {\n resolve(new THREE.Texture());\n } else {\n const loader: THREE.TextureLoader = new THREE.TextureLoader();\n loader.load(base64, (texture: THREE.Texture) => {\n texture.anisotropy = 16;\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n texture.repeat = new THREE.Vector2(material ? material.repeatX : 1, material ? material.repeatY : 1);\n texture.needsUpdate = true;\n ImageUtils.textures.set(id, texture);\n resolve(texture);\n });\n }\n }\n });\n }\n\n public static getDocBodyWithMimeTypeDefinition(fileName: string, documentBody: string): string {\n if (documentBody === null) {\n return documentBody;\n }\n const fileExtension: string = fileName.substr(fileName.lastIndexOf('.') + 1);\n switch (fileExtension.toLowerCase()) {\n case \"jpg\":\n case \"jpeg\":\n return \"data:image/jpg;base64,\" + documentBody;\n case \"png\":\n return \"data:image/png;base64,\" + documentBody;\n case \"gif\":\n return \"data:image/gif;base64,\" + documentBody;\n case \"bmp\":\n return \"data:image/bmp;base64,\" + documentBody;\n default:\n return \"data:image/png;base64,\" + documentBody;\n }\n }\n\n public static getFixedImageFilepathUrl(imageFilepathUrl: string): string {\n return imageFilepathUrl.replace(\"/content/\", \"/content43/\");\n }\n}\n","import {Material} from '../model/material';\nimport {ImageUtils} from './image.utils';\nimport * as THREE from 'three';\nimport {sRGBEncoding} from 'three';\nimport {VariationSettings} from '../model/variation-settings';\n\nexport class FurnitureMaterial extends Material {\n\n public textureFilename?: string;\n public normalFilename?: string;\n public aoFilename?: string;\n public metalnessFilename?: string;\n public roughnessFilename?: string;\n\n}\n\nexport class AssetUtils {\n\n public static async CreateMaterialFromAsset(asset: VariationSettings): Promise<Material> {\n const material: FurnitureMaterial = new Material();\n if (!asset) {\n return material;\n }\n if (asset.settings) {\n AssetUtils.setSettingsOfMaterial(material, asset.settings);\n }\n if (asset.texture) {\n material.texture = await ImageUtils.CreateTextureFromBase64(asset.id + '_texture', asset.texture, material);\n material.texture.encoding = sRGBEncoding;\n\n material.textureFilename = asset.textureFilename;\n }\n if (asset.normal) {\n material.normal = await ImageUtils.CreateTextureFromBase64(asset.id + '_normal', asset.normal, material);\n material.normalFilename = asset.normalFilename;\n // material.normal.anisotropy = 1;\n // material.normal.repeat.set(1, 1);\n // material.normal.flipY = false;\n }\n if (asset.ao) {\n material.ao = await ImageUtils.CreateTextureFromBase64(asset.id + '_ao', asset.ao, material);\n material.aoFilename = asset.aoFilename;\n }\n if (asset.metalness) {\n material.metalness = await ImageUtils.CreateTextureFromBase64(asset.id + '_metalness', asset.metalness, material);\n material.metalnessFilename = asset.metalnessFilename;\n }\n if (asset.roughness) {\n material.roughness = await ImageUtils.CreateTextureFromBase64(asset.id + '_roughness', asset.roughness, material);\n material.roughnessFilename = asset.roughnessFilename;\n }\n return material;\n }\n\n public static setSettingsOfMaterial(material: Material, settings: any): void {\n const shininess = parseFloat(settings['power']);\n if (!isNaN(shininess)) {\n material.shininess = shininess;\n // material.roughness = 1 - (shininess / 100);\n }\n\n const level = parseFloat(settings['level']);\n if (!isNaN(level)) {\n material.specular = new THREE.Color(level, level, level);\n }\n\n const repeatObjectUsed: boolean = settings.hasOwnProperty('repeat');\n const repeatx = repeatObjectUsed ? parseFloat(settings['repeat']['repeatx']) : parseFloat(settings['repeatx']);\n if (!isNaN(repeatx)) {\n material.repeatX = Math.max(1, repeatx);\n }\n\n const repeaty = repeatObjectUsed ? parseFloat(settings['repeat']['repeaty']) : parseFloat(settings['repeaty']);\n if (!isNaN(repeaty)) {\n material.repeatY = Math.max(1, repeaty);\n }\n\n const metalness = parseFloat(settings['metalness']);\n if (!isNaN(metalness)) {\n material.metalnessValue = Math.min(1, metalness);\n }\n\n const roughness = parseFloat(settings['roughness']);\n if (!isNaN(roughness)) {\n material.roughnessValue = Math.min(1, roughness);\n }\n }\n}\n","import {Material} from './material';\n\nexport class Variation {\n public decoId: number;\n public brandId: string;\n public gameObjectName: string;\n public node: any;\n public supplierArticleNr: string;\n public materialId: string;\n public material: Material;\n}\n","export class VariationSettings {\n public id: string;\n public settings: any = {};\n public texture: string;\n public textureFilename: string;\n public normal: string;\n public normalFilename: string;\n public ao: string;\n public aoFilename: string;\n public metalness: string;\n public metalnessFilename: string;\n public roughness: string;\n public roughnessFilename: string;\n}\n","import * as JSZip from 'jszip';\r\nimport * as THREE from 'three';\r\nimport {FileUtils} from \"./file.utils\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport axios from \"axios\";\r\n\r\n// @dynamic\r\nexport class VariationUtils {\r\n private static MaterialCache: Map<string, THREE.MeshStandardMaterial> = new Map();\r\n\r\n public static async LoadVariation(assetPath: string, fileName: string): Promise<VariationSettings> {\r\n if (!fileName) {\r\n return null;\r\n }\r\n if (fileName.indexOf('ione3d') < 0) {\r\n fileName = fileName.concat('.ione3d');\r\n }\r\n const id: string = fileName.substr(0, fileName.lastIndexOf('.ione3d'));\r\n try {\r\n if (!assetPath.endsWith('/')) {\r\n assetPath += '/';\r\n }\r\n if (!window.hasOwnProperty('downloadVariation')) {\r\n console.error('downloadVariation not defined in window global');\r\n return null;\r\n }\r\n const file: any = await (window as any).downloadVariation(`${assetPath.replace('https://cdn1.colijn-it.nl/', '')}variation/${fileName}`);\r\n return await VariationUtils.GetVariationSettingsFromFile(id, file);\r\n } catch (err) {\r\n const mute = err;\r\n return null;\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 private static async GetVariationSettingsFromFile(id: string, compressedFile: any): Promise<VariationSettings> {\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.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 return variationSettings;\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.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 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 variationSettings.settings =\r\n await VariationUtils.LoadFileContentFromZip(zipContent.files['repeat.json'], 'repeat.json', false) || {};\r\n Object.assign(variationSettings.settings, index.repeat);\r\n variationSettings.settings.metalness = index.metalness;\r\n variationSettings.settings.roughness = index.roughness;\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[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.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[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 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 const jszip = new JSZip();\r\n const content = await jszip.loadAsync(file);\r\n return content;\r\n }\r\n}\r\n","import {DecoNodeType} from \"@colijnit/configuratorapi/build/enum/deco-node-type.enum\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport {AssetUtils} from \"../utils/asset.utils\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/model/deco-node\";\r\nimport {Variation} from \"../model/variation\";\r\nimport * as THREE from \"three\";\r\nimport {VariationUtils} from \"../utils/variation-utils\";\r\n\r\nexport class VariationHelper {\r\n\r\n public assetPath: string;\r\n\r\n private _lastKnownVariations: Map<string, Map<string, Variation[]>> = new Map();\r\n\r\n public clearCache(): void {\r\n const valueMap: Map<string, Variation[]>[] = Array.from(this._lastKnownVariations.values());\r\n for (let i = 0; i < valueMap.length; i++) {\r\n const values = Array.from(valueMap[i].values());\r\n values.forEach((variations) => {\r\n variations.forEach((variation) => {\r\n variation.material.texture.dispose();\r\n variation.material.normal.dispose();\r\n variation.material.metalness.dispose();\r\n variation.material.roughness.dispose();\r\n variation.material.ao.dispose();\r\n })\r\n });\r\n }\r\n }\r\n\r\n public async loadPart(obj: THREE.Object3D, parts: any[], 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 const partSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, parts[i].decoNode.gameObjectName || parts[i].decoId);\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 // parts[i].variation = partVariation;\r\n this._applyMaterialPart(obj, partVariation, parts[i].node, usePbr);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n public async loadVariation(instanceId: string, obj: THREE.Object3D, parts: any[], 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 const variations: DecoNode[] = parts[i].variations;\r\n if (!variations || variations.length === 0) {\r\n if (this._getLastKnownVariations(instanceId, parts[i].nodeId)) {\r\n parts[i].variations = this._getLastKnownVariations(instanceId, parts[i].nodeId);\r\n this._applyVariations(obj, parts[i], usePbr);\r\n continue;\r\n } else {\r\n continue;\r\n }\r\n }\r\n const lastKnownVariations: Variation[] = [];\r\n for (let j = 0; j < variations.length; j++) {\r\n const variationSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, variations[j].gameObjectName || parts[i].decoId);\r\n const newVariation: Variation = new Variation();\r\n newVariation.decoId = parseFloat(variations[j].id);\r\n newVariation.brandId = variations[j].brandId;\r\n newVariation.gameObjectName = variations[j].gameObjectName;\r\n newVariation.supplierArticleNr = (variations[j] as any).supplierArticleNr;\r\n newVariation.materialId = (variations[j] as any).materialId;\r\n newVariation.material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n lastKnownVariations.push(newVariation);\r\n }\r\n this._setLastKnownVariations(instanceId, parts[i].nodeId, lastKnownVariations);\r\n parts[i].variations = lastKnownVariations;\r\n this._applyVariations(obj, parts[i], usePbr);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private _getChildrenFilterByProp(obj: THREE.Object3D, userDataObjectProp: string, prop: string, value: any): THREE.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 _applyMaterialPart(obj: THREE.Object3D, partMaterial: any, nodeId: any, 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 THREE.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(obj: THREE.Object3D, part: any, 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) => {\r\n if (mesh instanceof THREE.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 (mesh.material[m].name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, variation, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, variation, usePbr);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _setMeshMaterialFromVariation(name: string, variation: Variation, usePbr: boolean = false): THREE.Material {\r\n if (variation.material.texture) {\r\n variation.material.texture.needsUpdate = true;\r\n }\r\n if (!usePbr) {\r\n const material: THREE.MeshPhongMaterial = new THREE.MeshPhongMaterial({\r\n name: name,\r\n shininess: variation.material.shininess,\r\n specular: variation.material.specular,\r\n map: variation.material.texture,\r\n normalMap: variation.material.normal\r\n });\r\n // material.color.setRGB(0.8, 0.8, 0.8);\r\n material.needsUpdate = true;\r\n return material;\r\n } else {\r\n const params: THREE.MeshStandardMaterialParameters = {\r\n // side: DoubleSide,\r\n name: name,\r\n roughness: variation.material.roughnessValue ? variation.material.roughnessValue : 1,\r\n metalness: variation.material.metalnessValue ? variation.material.metalnessValue : 0,\r\n // wireframe: true\r\n };\r\n if (variation.material.texture) {\r\n params.map = variation.material.texture;\r\n }\r\n if (variation.material.ao) {\r\n params.aoMap = variation.material.ao;\r\n }\r\n if (variation.material.roughness) {\r\n params.roughnessMap = variation.material.roughness;\r\n }\r\n if (variation.material.metalness) {\r\n params.metalnessMap = variation.material.metalness;\r\n }\r\n if (variation.material.normal) {\r\n params.normalMap = variation.material.normal;\r\n }\r\n const material: THREE.MeshStandardMaterial = new THREE.MeshStandardMaterial(params);\r\n material.color.setRGB(1, 1, 1);\r\n material.needsUpdate = true;\r\n return material;\r\n }\r\n }\r\n\r\n private _setLastKnownVariations(instanceId: string, id: string, variation: Variation[]): void {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n variations.set(id, variation);\r\n } else {\r\n const variations: Map<string, Variation[]> = new Map();\r\n this._lastKnownVariations.set(instanceId, variations.set(id, variation));\r\n }\r\n }\r\n\r\n private _getLastKnownVariations(instanceId: string, id: string): Variation[] {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n if (variations.has(id)) {\r\n return variations.get(id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import {Injectable, Injector} from '@angular/core';\n\n@Injectable()\nexport class ServiceLocator {\n static injector: Injector = undefined;\n}\n","import {Injectable, Injector, OnDestroy} from '@angular/core';\nimport {Configurator} from '@colijnit/configuratorapi/build/configurator';\nimport {Subscription} from 'rxjs';\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection';\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\nimport {DataServiceResponseData} from '@colijnit/ioneconnector/build/model/data-service-response-data';\nimport {Options} from \"@colijnit/ioneconnector/build/model/options\";\nimport {QuestionAndAnswers} from \"@colijnit/configuratorapi/build/model/question-and-answers\";\nimport {ServiceLocator} from './locator.service';\nimport {notNill} from '@colijnit/configuratorapi/build/utils/function/not-nill.function';\nimport {NodeType} from '@colijnit/configuratorapi/build/enum/node-type.enum';\nimport {isNill} from '@colijnit/configuratorapi/build/utils/function/is-nill.function';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfiguratorService {\n\n private _configuratorApi: Configurator;\n\n constructor(private _injector: Injector) {\n if (!ServiceLocator.injector) {\n ServiceLocator.injector = _injector;\n }\n }\n\n public initApi(options: Options): void {\n this._configuratorApi = new Configurator(options);\n }\n\n public async initNodeInstance(goodId: number): Promise<DataServiceResponseData> {\n return await this._configuratorApi.initNodeInstance(goodId);\n }\n\n public async setInstanceToConfigure(id: string, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.setInstanceToConfigure(id, showLoader);\n }\n\n public async getGoodIdFromSku(sku: string, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.getGoodIdFromSku(sku, showLoader);\n }\n\n public async getArticleQuickSel(goodId: number, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.getArticleQuickSel(goodId, showLoader);\n }\n\n public async getSelections(showLoader: boolean = false, publicationCode: number = 2): Promise<DataServiceResponseData> {\n const selections: DataServiceResponseData = await this._configuratorApi.getSelections(showLoader);\n selections.resultObjects.filter((s: Selection) => {\n (isNill(s.hierarchicalPublicationCode) || ((s.hierarchicalPublicationCode & publicationCode) > 0)) && (\n (s.nodeType === NodeType.Question && (((s.questionPublicationCode & publicationCode) > 0) || isNill(s.questionPublicationCode))) ||\n (s.nodeType === NodeType.Answer && (((s.answerPublicationCode & publicationCode) > 0) || isNill(s.answerPublicationCode))));\n });\n return selections;\n }\n\n public async getDecos(showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.getDecos(showLoader);\n }\n\n public async getQuestionAndAnswers(showLoader: boolean = false, publicationCode: number = 2): Promise<QuestionAndAnswers> {\n const questionAndAnswers: QuestionAndAnswers = await this._configuratorApi.getQuestionAndAnswers(showLoader);\n questionAndAnswers.answers.filter((answer: Answer) => {\n (notNill(answer.hierarchicalPublicationCode) && (answer.hierarchicalPublicationCode & publicationCode) === 0) ||\n (answer.type === NodeType.Question && (answer.questionPublicationCode & publicationCode) === 0 && notNill(answer.questionPublicationCode)) ||\n (answer.type === NodeType.Answer && (answer.publicationCode & publicationCode) === 0 && notNill(answer.publicationCode));\n });\n return questionAndAnswers;\n }\n\n public async getSingleImage(nodeId: number | string, publication: number, includeMimetype: boolean, thumb: boolean, showLoader: boolean): Promise<DataServiceResponseData> {\n if (!nodeId) {\n return null;\n }\n return await this._configuratorApi.getSingleImage(nodeId, publication, includeMimetype, thumb, showLoader);\n }\n\n public async selectSelection(selection: Selection, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.selectSelection(selection, showLoader);\n }\n\n public async selectAnswer(answer: Answer, showLoader: boolean = false): Promise<DataServiceResponseData> {\n return await this._configuratorApi.selectAnswer(answer, showLoader);\n }\n\n}\n","import * as THREE from \"three\";\r\nimport {Options} from \"@colijnit/ioneconnector/build/model/options\";\r\nimport {DataServiceResponseData} from \"@colijnit/ioneconnector/build/model/data-service-response-data\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/model/deco-node\";\r\nimport {BusinessObjectFactory} from \"@colijnit/ioneconnector/build/service/business-object-factory\";\r\nimport {Selection} from \"@colijnit/configuratorapi/build/model/selection\";\r\nimport {DecoNodeType} from \"@colijnit/configuratorapi/build/enum/deco-node-type.enum\";\r\nimport {ThreedUtils} from \"../utils/threed.utils\";\r\nimport {DecoNodeKind} from \"@colijnit/configuratorapi/build/enum/deco-node-kind.enum\";\r\nimport {SceneUtils} from \"../utils/scene-utils\";\r\nimport {VariationHelper} from \"../helper/variation-helper\";\r\nimport {Article} from \"@colijnit/configuratorapi/build/model/article\";\r\nimport {ConfiguratorService} from './services/configurator.service';\r\nimport {Scene} from 'three';\r\nimport {Injectable} from '@angular/core';\r\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\r\nimport {BehaviorSubject} from 'rxjs';\r\nimport {ServiceLocator} from './services/locator.service';\r\nimport {QuestionAndAnswers} from '@colijnit/configuratorapi/build/model/question-and-answers';\r\n\r\n@Injectable()\r\nexport class Builder {\r\n\r\n public selectionsReceived: BehaviorSubject<Selection[]> = new BehaviorSubject<Selection[]>([]);\r\n public answersReceived: BehaviorSubject<Answer[]> = new BehaviorSubject<Answer[]>([]);\r\n public modelLoaded: BehaviorSubject<THREE.Object3D> = new BehaviorSubject<THREE.Object3D>(null);\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 _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 _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 private _configuratorService: ConfiguratorService;\r\n\r\n constructor(scene: Scene, options: Options, useInAngular: boolean) {\r\n this._boFactory = new BusinessObjectFactory();\r\n this._threedUtils = new ThreedUtils();\r\n this._variationHelper = new VariationHelper();\r\n\r\n if (!scene) {\r\n throw 'No scene object provided!';\r\n }\r\n if (!options) {\r\n throw 'No connection options provided!';\r\n }\r\n if (useInAngular) {\r\n this._configuratorService = ServiceLocator.injector.get(ConfiguratorService);\r\n } else {\r\n this._configuratorService = new ConfiguratorService(undefined);\r\n }\r\n this._configuratorService.initApi(options);\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 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 return this._build(this._instanceId);\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 initNodeInstance(goodId: number): Promise<any> {\r\n return this._configuratorService.initNodeInstance(goodId);\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 async selectSelection(selection: Selection): Promise<void> {\r\n await this._configuratorService.selectSelection(selection, false);\r\n this.getQuestionAndAnswers();\r\n }\r\n\r\n public async getQuestionAndAnswers(publicationCode?: number): Promise<void> {\r\n const questionsAndAnswers: QuestionAndAnswers = await this._configuratorService.getQuestionAndAnswers(false, publicationCode);\r\n this._answers = questionsAndAnswers.answers;\r\n this.answersReceived.next(questionsAndAnswers.answers);\r\n }\r\n\r\n public async selectAnswer(answer: Answer): Promise<void> {\r\n await this._configuratorService.selectAnswer(answer, false);\r\n this.modelLoaded.next(await this.buildModel());\r\n }\r\n\r\n private async _setInstanceId(sku: string, instanceId?: string, goodId?: number): Promise<void> {\r\n if (!instanceId && !this._instanceId) {\r\n if (!goodId) {\r\n goodId = await this._getGoodIdFromSku(sku);\r\n }\r\n this._goodId = goodId;\r\n const result: DataServiceResponseData = await this.initNodeInstance(this._goodId);\r\n if (result && result.resultObject) {\r\n this._instanceId = result.resultObject;\r\n } else {\r\n throw 'Failed to initialize node instance';\r\n }\r\n } else if (!this._instanceId) {\r\n this._instanceId = instanceId;\r\n }\r\n if (!this._sku) {\r\n this._sku = sku;\r\n }\r\n }\r\n\r\n private async _prepareConfiguration(sku: string, goodId?: number): Promise<void> {\r\n const article: Article = await this._getArticle(sku, goodId);\r\n if (article && article.assetUrl) {\r\n this._source = await this._threedUtils.download3DSource(article.assetUrl)\r\n .catch((error) => {\r\n throw error;\r\n });\r\n if (article.contentDeliveryUrl) {\r\n this._variationHelper.assetPath =\r\n article.contentDeliveryUrl +\r\n (article.contentDeliveryUrl.endsWith('/') ? '' : '/') +\r\n (article.distSchema ? article.distSchema : 'UP_DBA');\r\n }\r\n }\r\n }\r\n\r\n private async _build(instanceId: string): Promise<THREE.Object3D> {\r\n this._reset();\r\n const adjustables: Selection[] = this._getAdjustables();\r\n if (adjustables && adjustables.length > 0) {\r\n const obj: THREE.Object3D = new THREE.Object3D();\r\n obj.visible = false; // no need to render visualy\r\n this._scene.add(obj);\r\n let connected = false;\r\n for (let i = 0, len: number = adjustables.length; i < len; i++) {\r\n const adjustable: THREE.Object3D = this._createAdjustable(obj, adjustables[i]);\r\n if (adjustable) {\r\n for (let ii = 0, lenii: number = this._placedAdjustables.length; ii < lenii; ii++) {\r\n if (SceneUtils.TrySelectorConnection(this._scene,\r\n obj, this._placedAdjustables[ii], adjustable)) {\r\n this._placedAdjustables[ii].visible = true;\r\n adjustable.visible = true;\r\n connected = true;\r\n break;\r\n }\r\n connected = false;\r\n }\r\n }\r\n if (!connected && this._placedAdjustables.length > 1) {\r\n console.warn('No connection found for: ', adjustable.name);\r\n }\r\n }\r\n this._placeAddables(obj);\r\n this._updatePivot(obj);\r\n await this._loadVariations(obj, instanceId);\r\n this._scene.remove(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 // get generic variations\r\n const globalVariations: DecoNode[] = this._selections\r\n .filter(s => s.generic && (s.decoNode as any).variation && !s.decoNode.type)\r\n .map((value: Selection, index: number, array: Selection[]) => {\r\n // find selection of variation\r\n const sel: Selection = this._selections.find(s => s.artNodeIdDeco === (value.decoNode as any).variation.id);\r\n if (sel) {\r\n (value.decoNode as any).variation.supplierArticleNr = sel.supplierArticleNr;\r\n }\r\n (value.decoNode as any).variation.materialId = value.hdecoGameObject;\r\n return (value.decoNode as any).variation;\r\n });\r\n\r\n // const usedVariations: FurniturePartVariation[] = [];\r\n let globalVariationsRewrite: boolean = true;\r\n\r\n const len: number = this._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 for (let i = 0; i < len; i++) {\r\n const selection: Selection = this._selections[i];\r\n if (selection.presentationLevel === 1) {\r\n positioning = selection.hdecoPositioning;\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 if (lastAdded) {\r\n if (newPart) {\r\n lastAdded.variations = [selection.decoNode];\r\n } else {\r\n lastAdded.variations.push(selection.decoNode);\r\n }\r\n newPart = false;\r\n } else {\r\n if (globalVariationsRewrite) {\r\n globalVariations.length = 0;\r\n globalVariationsRewrite = false;\r\n }\r\n globalVariations.push(selection.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 // this._upsertFurniture(this.activeInstance, {\r\n // Variation: selection.decoNode.brandId,\r\n // VariationDescription: selection.decoNode.gameObjectName,\r\n // SupplierArticleNr: (selection.decoNode as any).supplierArticleNr\r\n // });\r\n } else if (selection.decoNode.type === DecoNodeType.Part &&\r\n typeof selection.decoNode.gameObjectName === 'string' &&\r\n selection.decoNode.gameObjectName.length) {\r\n if (selection.decoNode.kind === DecoNodeKind.Adjustable) {\r\n selection.variations = globalVariations;\r\n this._adjustables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\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;\r\n if (lastAdjustable) {\r\n lastAdjustable.addables.push(selection);\r\n }\r\n this._addables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\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 private _createAdjustable(parent: THREE.Object3D, adj: Selection): THREE.Object3D {\r\n let obj: any = this._source ? this._source.getObjectByName(adj.decoNode.gameObjectName) : null;\r\n if (!obj) {\r\n // in case of glb files, the importer removes dots from names\r\n const name = adj.decoNode.gameObjectName.replace(/[.]/g, '');\r\n obj = this._source ? this._source.getObjectByName(name) : null;\r\n if (!obj) {\r\n // console.warn(`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 = this._createUniqueName(parent, obj);\r\n adjustable.userData.selection = adj;\r\n adjustable.position.set(0, 0, 0);\r\n adjustable.visible = true;\r\n parent.add(adjustable);\r\n // the object being added to the customFloorGroup is being recreated so we loose the reference\r\n // therefor we need to retrieve the created object again\r\n // adjustable = parent.getObjectByName(adjustable.name);\r\n this._placedAdjustables.push(adjustable);\r\n return adjustable;\r\n }\r\n\r\n private _createAddable(parent: THREE.Object3D, add: Selection, part2?: any, part1?: any): THREE.Object3D {\r\n const obj: any = this._source.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 = this._createUniqueName(parent, 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 parent.add(addable);\r\n this._placedAddables.push(addable);\r\n return addable;\r\n }\r\n return addable;\r\n }\r\n\r\n private _placeAddables(parent: THREE.Object3D): void {\r\n const len: number = this._placedAdjustables.length;\r\n for (let i = 0; i < len; i++) {\r\n if (this._placedAdjustables[i].userData.hasOwnProperty('selection') && this._placedAdjustables[i].userData.selection) {\r\n const adjustableSelection: Selection = this._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 SceneUtils.TrySelectorConnection(this._scene,\r\n parent, this._placedAdjustables[i], adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n if (conAddable) {\r\n SceneUtils.TrySelectorConnection(this._scene,\r\n parent, conAddable, adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n }\r\n conAddable = this._placedAddables[this._placedAddables.length - 1];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _createUniqueName(parent: THREE.Object3D, obj: THREE.Object3D): string {\r\n let iteration = 0;\r\n let name = obj.name;\r\n let existingObj = parent.getObjectByName(name);\r\n while (existingObj) {\r\n iteration++;\r\n name = obj.name + (iteration !== 0 ? ('_' + iteration) : '');\r\n existingObj = parent.getObjectByName(name);\r\n }\r\n return name;\r\n }\r\n\r\n private async _getGoodIdFromSku(sku: string): Promise<number> {\r\n const response: DataServiceResponseData = await this._configuratorService.getGoodIdFromSku(sku, false);\r\n if (response.validationResult.success && response.resultObject) {\r\n return response.resultObject;\r\n }\r\n }\r\n\r\n private async _getArticle(sku: string, goodId: number): Promise<Article> {\r\n if (this._articleCache.has(sku)) {\r\n return this._articleCache.get(sku);\r\n }\r\n if (!goodId) {\r\n goodId = await this._getGoodIdFromSku(sku)\r\n .catch((error) => {\r\n throw `Article with sku ${sku} not found!`;\r\n });\r\n }\r\n let article: Article;\r\n const articleResponse: DataServiceResponseData = await this._configuratorService.getArticleQuickSel(goodId, false);\r\n if (articleResponse.validationResult.success && articleResponse.resultObject) {\r\n if (articleResponse.resultObject.hasOwnProperty('oArticle')) {\r\n const obj = Array.isArray(articleResponse.resultObject['oArticle']) ? articleResponse.resultObject['oArticle'][0] : articleResponse.resultObject['oArticle'];\r\n article = <Article>this._boFactory.makeWithRawBackendData(Article, obj);\r\n } else {\r\n article = <Article>this._boFactory.makeWithRawBackendData(Article, articleResponse.resultObject);\r\n }\r\n }\r\n this._articleCache.set(sku, article);\r\n return article;\r\n }\r\n\r\n private async _getSelections(instanceId: string, publicationCode?: number): Promise<void> {\r\n this._selections = [];\r\n const selectionResponse: DataServiceResponseData = await this._configuratorService.getSelections(false, publicationCode);\r\n if (selectionResponse.resultObjects && selectionResponse.resultObjects.length > 0) {\r\n this._selections = <Selection[]>this._boFactory.makeBOArrayFromRawBackendDataArray(Selection, selectionResponse.resultObjects);\r\n this._selections.forEach(s => s.instanceId = instanceId);\r\n // const filtered: Selection[] = this._selections.filter(s => s.nodeType !== NodeType.Article && s.presentationLevel === 1);\r\n this.selectionsReceived.next(this._selections);\r\n } else {\r\n throw 'No selections found!';\r\n }\r\n }\r\n\r\n private async _getDecos(): Promise<void> {\r\n this._decos = [];\r\n const decosResponse: DataServiceResponseData = await this._configuratorService.getDecos(false);\r\n if (decosResponse.resultObjects && decosResponse.resultObjects.length > 0) {\r\n this._decos = <DecoNode[]>this._boFactory.makeBOArrayFromRawBackendDataArray(DecoNode, decosResponse.resultObjects);\r\n } else {\r\n throw 'No deconodes found!';\r\n }\r\n }\r\n\r\n private _linkSelectionsAndDecos(): void {\r\n const len: number = this._selections.length;\r\n for (let i = 0; i < len; i++) {\r\n let id: string = this._selections[i].artNodeIdDeco;\r\n // if (this._useNodeIdToLink) {\r\n // id = `${this._selections[i].node}_${this._selections[i].artNodeIdDeco}`;\r\n // }\r\n let deco: any = this._decos.find(d => d.id === id);\r\n if (!deco) {\r\n deco = new DecoNode();\r\n }\r\n const variation: any = this._getVariations().find(v => v.parentId === this._selections[i].artNodeIdDeco);\r\n if (variation) {\r\n deco.variation = variation;\r\n }\r\n this._selections[i].decoNode = deco;\r\n }\r\n }\r\n\r\n private _getVariations(): DecoNode[] {\r\n return this._decos.filter((deco: DecoNode) => {\r\n return deco.type === DecoNodeType.Variation;\r\n });\r\n }\r\n\r\n private async _loadVariations(obj: THREE.Object3D, instanceId: string): Promise<void> {\r\n await this._variationHelper.loadPart(obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._addables, true);\r\n }\r\n\r\n private _getAdjustables(): Selection[] {\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","import {Component, EventEmitter, Input, Output} from '@angular/core';\r\nimport {Answer} from \"@colijnit/configuratorapi/build/model/answer\";\r\n\r\n@Component({\r\n selector: \"answers\",\r\n template: `\r\n <div class=\"ione-configurator\">\r\n <div class=\"rp-answers-slideout\">\r\n <h2 class=\"answers-title\" [textContent]=\"selectionTitle\"></h2>\r\n <div class=\"answers-container\" visibilityObserverMaster>\r\n <answer *ngFor=\"let answer of answers\"\r\n (click)=\"answerClick.emit(answer)\"\r\n [answer]=\"answer\"\r\n visibilityObserver\r\n #intersection=\"intersection\"\r\n [observerEnabled]=\"true\"\r\n [showing]=\"intersection.isIntersecting\"\r\n ></answer>\r\n </div>\r\n \r\n </div>\r\n </div>\r\n `,\r\n styleUrls: [\r\n '../../../style/shared.scss'\r\n ]\r\n})\r\n\r\nexport class AnswersComponent {\r\n @Input()\r\n public answers: Answer[] = [];\r\n\r\n @Input()\r\n public selectionTitle: string;\r\n\r\n @Output()\r\n public answerClick: EventEmitter<Answer> = new EventEmitter<Answer>();\r\n\r\n constructor() {}\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\nimport {DataServiceResponseData} from '@colijnit/ioneconnector/build/model/data-service-response-data';\nimport {ImageUtils} from '../../utils/image.utils';\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\nimport {Selection} from '@colijnit/configuratorapi/build/model/selection';\nimport {ConfiguratorService} from './configurator.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageCacheService {\n\n // Map containing the retrieved images, @number = nodeId, @string = base64 string\n private _imageCache: Map<number, string> = new Map();\n\n constructor(private _configuratorService: ConfiguratorService) { }\n\n private static _handleResponseData(includeMimetype: boolean, thumb: boolean, responseData: DataServiceResponseData): string {\n if (responseData && responseData.resultObject) {\n if (responseData.resultObject.filePath !== null && responseData.resultObject.filePath !== \"\") {\n return ImageUtils.getFixedImageFilepathUrl(responseData.resultObject.filePath);\n } else {\n if (includeMimetype) {\n return ImageUtils.getDocBodyWithMimeTypeDefinition(responseData.resultObject.fileName,\n thumb ? responseData.resultObject.thumbnailBody : responseData.resultObject.documentBody);\n } else {\n return thumb ? responseData.resultObject.thumbnailBody : responseData.resultObject.documentBody;\n }\n }\n } else {\n return '';\n }\n }\n\n public getImageForSelectionOrAnswer(object: Selection | Answer): Promise<string> {\n const includeMimeType: boolean = true, thumb: boolean = true;\n return new Promise((resolve: Function, reject: Function) => {\n if (object && object.nodeId) {\n if (!this._imageCache.has(object.nodeId)) {\n return this._configuratorService.getSingleImage(object.nodeId, 4, includeMimeType, thumb, true)\n .then((responseData: DataServiceResponseData) => {\n const base64: string = ImageCacheService._handleResponseData(includeMimeType, thumb, responseData);\n this._imageCache.set(object.nodeId, base64);\n resolve(base64);\n }).catch(() => {\n reject();\n });\n } else {\n resolve(this._imageCache.get(object.nodeId));\n }\n } else {\n reject();\n }\n });\n }\n}\n","import {Component, Input, OnInit} from '@angular/core';\nimport {ImageCacheService} from '../../../services/image-cache.service';\nimport {Answer} from '@colijnit/configuratorapi/build/model/answer';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\n\n@Component({\n selector: 'answer',\n template: `\n <div class=\"ione-configurator\">\n <div class=\"answer-wrapper\">\n <div class=\"answer-content\" @answerAppear>\n <div class=\"answer-thumbnail\">\n <rp-loader *ngIf=\"answer.imageData === ''\"></rp-loader>\n <img *ngIf=\"answer.imageData !== '' && answer.imageData !== null\" class=\"answer-img\" [src]=\"answer.imageData\">\n </div>\n <div class=\"answer-title-wrapper\">\n <span class=\"answer-title\" [textContent]=\"answer.commercialAnswer\"></span>\n </div>\n <div class=\"price\">\n <span class=\"price-value\"></span>\n </div>\n </div>\n </div>\n </div>\n `,\n styleUrls: [\n '../../../../style/shared.scss'\n ],\n animations: [\n trigger('answerAppear', [\n state('void', style({'background': '#dbdbdb'})),\n state('white', style({'background': 'white'})),\n transition('void <=> *', animate(500))\n ])\n ]\n})\nexport class AnswerComponent implements OnInit {\n @Input()\n public answer: Answer;\n\n @Input()\n public set showing(value: boolean) {\n this.answer.imageData = '';\n if (value && this.answer.answer !== 'Skip / Cancel') {\n this._loadThumbnail(this.answer);\n } else {\n this.answer.imageData = null;\n }\n }\n\n constructor(private _imageCacheService: ImageCacheService) { }\n\n public ngOnInit(): void {\n }\n\n private async _loadThumbnail(answer: Answer): Promise<void> {\n await this._imageCacheService.getImageForSelectionOrAnswer(answer).then((imageSrc: string) => {\n answer.imageData = imageSrc === \"\" ? null : imageSrc;\n });\n }\n}\n","// Import the core angular services.\nimport {Directive, OnDestroy} from '@angular/core';\n\n@Directive({\n selector: '[visibilityObserverMaster]'\n})\nexport class VisibilityObserverMasterDirective implements OnDestroy {\n\n private _mapping: Map<Element, Function>;\n private _observer: IntersectionObserver;\n\n // I initialize the intersection observer parent directive.\n constructor() {\n\n // As each observable child attaches itself to the parent observer, we need to\n // map Elements to Callbacks so that when an Element's intersection changes,\n // we'll know which callback to invoke. For this, we'll use an ES6 Map.\n this._mapping = new Map();\n\n this._observer = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n\n for (const entry of entries) {\n\n const callback = this._mapping.get(entry.target);\n if (callback) {\n callback(entry.isIntersecting);\n }\n }\n\n },\n {\n // This classifies the \"intersection\" as being a bit outside the\n // viewport. The intent here is give the elements a little time to react\n // to the change before the element is actually visible to the user.\n rootMargin: '300px 0px 300px 0px'\n }\n );\n\n }\n\n // I get called once when the host element is being destroyed.\n public ngOnDestroy(): void {\n\n this._mapping.clear();\n this._observer.disconnect();\n\n }\n\n // ---\n // PUBLIC METHODS.\n // ---\n\n // I add the given Element for intersection observation. When the intersection status\n // changes, the given callback is invoked with the new status.\n public add(element: HTMLElement, callback: Function): void {\n\n this._mapping.set(element, callback);\n this._observer.observe(element);\n\n }\n\n // I remove the given Element from intersection observation.\n public remove(element: HTMLElement): void {\n\n this._mapping.delete(element);\n this._observer.unobserve(element);\n\n }\n\n}\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output} from '@angular/core';\nimport {VisibilityObserverMasterDirective} from './visibility-observer-master.directive';\n\n@Directive({\n selector: '[visibilityObserver]',\n exportAs: 'intersection'\n})\nexport class VisibilityObserverDirective implements OnDestroy, OnInit {\n\n @Input()\n public observerEnabled: boolean = false;\n\n public isIntersecting: boolean;\n // These are just some human-friendly constants to make the HTML template a bit more\n // readable when being consumed as part of SWTCH/CASE statements.\n public IS_INTERSECTING: boolean = true;\n public IS_NOT_INTERSECTING: boolean = false;\n\n private _elementRef: ElementRef;\n private _parent: VisibilityObserverMasterDirective;\n\n // I initialize the intersection observer directive.\n constructor(\n parent: VisibilityObserverMasterDirective,\n elementRef: ElementRef\n ) {\n\n this._parent = parent;\n this._elementRef = elementRef;\n\n // By default, we're going to assume that the host element is NOT intersecting.\n // Then, we'll use the IntersectionObserver to asynchronously check for changes\n // in viewport visibility.\n this.isIntersecting = false;\n\n }\n\n // ---\n // PUBLIC METHODS.\n // ---\n\n // I get called once when the host element is being destroyed.\n public ngOnDestroy(): void {\n\n this._parent.remove(this._elementRef.nativeElement);\n this._elementRef = undefined;\n\n }\n\n\n // I get called once after the inputs have been bound for the first time.\n public ngOnInit(): void {\n\n // In this demo, instead of using an IntersectionObserver per Element, we're\n // going to use a shared observer in the parent element. However, we're still\n // going to use a CALLBACK style approach so that we're only reducing the number\n // of IntersectionObserver instances, not the number of Function calls.\n if (this.observerEnabled) {\n this._parent.add(\n this._elementRef.nativeElement,\n (isIntersecting: boolean) => {\n\n this.isIntersecting = isIntersecting;\n if (this.isIntersecting) {\n this._parent.remove(this._elementRef.nativeElement);\n }\n\n }\n );\n }\n\n }\n\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'rp-loader',\n template: `\n <div class=\"loader-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" stroke=\"#3760a1\">\n <g fill=\"none\" fill-rule=\"evenodd\" stroke-width=\"3\">\n <circle class=\"ripple1\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n <circle class=\"ripple2\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n </g>\n </svg>\n </div>\n `,\n styleUrls: ['./loader.component.scss']\n})\nexport class LoaderComponent {\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {LoaderComponent} from './loader/loader.component';\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n LoaderComponent\n ],\n exports: [\n LoaderComponent\n ]\n})\nexport class SharedModule { }\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {AnswersComponent} from \"./answers.component\";\r\nimport { AnswerComponent } from './answer/answer.component';\r\nimport {VisibilityObserverDirective} from '../../directives/visibility-observer.directive';\r\nimport {VisibilityObserverMasterDirective} from '../../directives/visibility-observer-master.directive';\r\nimport {SharedModule} from '../shared/shared.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n SharedModule\r\n ],\r\n declarations: [\r\n AnswersComponent,\r\n AnswerComponent,\r\n VisibilityObserverDirective,\r\n VisibilityObserverMasterDirective\r\n ],\r\n exports: [\r\n AnswersComponent\r\n ]\r\n})\r\nexport class AnswersModule {\r\n\r\n}\r\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\r\nimport {Selection} from \"@colijnit/configuratorapi/build/model/selection\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\nimport {ImageCacheService} from '../../services/image-cache.service';\r\n\r\nclass SelectionViewModel {\r\n public selection: Selection;\r\n public children: Selection[] = [];\r\n public expanded: boolean = false;\r\n public thumbnail: string = '';\r\n}\r\n\r\n@Component({\r\n selector: \"selections\",\r\n template: `\r\n <div class=\"ione-configurator\">\r\n <div class=\"rp-selections-summary\">\r\n <header class=\"drawer__header\">\r\n <h2 class=\"mat-title\" [textContent]=\"'Configuratie'\"></h2>\r\n <!--<button>-->\r\n <!---->\r\n <!--</button>-->\r\n </header>\r\n <div class=\"selections-content\">\r\n <ng-container *ngFor=\"let selectionViewModel of selectionViewModels\">\r\n\r\n <div class=\"co-summary-line\" (click)=\"selectSelection(selectionViewModel.selection, $event)\">\r\n <div class=\"selection-thumbnail\">\r\n <rp-loader *ngIf=\"selectionViewModel.thumbnail === ''\"></rp-loader>\r\n <img visibilityObserver *ngIf=\"selectionViewModel.thumbnail !== '' && selectionViewModel.thumbnail !== null\" class=\"selection-img\" [src]=\"selectionViewModel.thumbnail\">\r\n </div>\r\n <div class=\"titles\">\r\n <div class=\"title-wrapper\">\r\n <label class=\"question\" [textContent]=\"selectionViewModel.selection.question\"></label>\r\n <span class=\"answer\" [textContent]=\"selectionViewModel.selection.answer\"></span>\r\n <div *ngIf=\"selectionViewModel.children.length > 0 && selectionViewModel.expanded\" @showHideChildren>\r\n <div class=\"child-selection\" *ngFor=\"let selection of selectionViewModel.children\"\r\n (click)=\"selectSelection(selection, $event)\"\r\n >\r\n <label class=\"question\" [textContent]=\"selection.commercialQuestion\"></label>\r\n <span class=\"answer\" [textContent]=\"selection.answer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div class=\"price-wrapper\">\r\n <span class=\"price-value\"></span>\r\n </div>\r\n\r\n <div class=\"collapse-wrapper\">\r\n <div class=\"collapse-content\">\r\n <div class=\"collapse-handle\" [class.expanded]=\"selectionViewModel.expanded\"\r\n *ngIf=\"selectionViewModel.children.length > 0\" (click)=\"expandClicked(selectionViewModel, $event)\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n `,\r\n styleUrls: [\r\n '../../../style/shared.scss'\r\n ],\r\n animations: [\r\n trigger('showHideChildren', [\r\n state('void', style({'height': '0'})),\r\n state('*', style({'height': '*'})),\r\n transition('void <=> *', animate(200))\r\n ])\r\n ]\r\n})\r\n\r\nexport class SelectionsComponent implements OnInit {\r\n @Input()\r\n public set selections(value: Selection[]) {\r\n this._prepareSelections(value);\r\n this._loadThumbnails();\r\n }\r\n\r\n public selectionViewModels: SelectionViewModel[] = [];\r\n\r\n @Output()\r\n public selectionClick: EventEmitter<Selection> = new EventEmitter<Selection>();\r\n\r\n constructor(private _imageCacheService: ImageCacheService) {}\r\n\r\n public ngOnInit(): void {\r\n\r\n }\r\n\r\n public expandClicked(selectionViewModel: SelectionViewModel, mouseEvent: MouseEvent): void {\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopImmediatePropagation();\r\n selectionViewModel.expanded = !selectionViewModel.expanded;\r\n }\r\n\r\n public selectSelection(selection: Selection, mouseEvent: MouseEvent): void {\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopImmediatePropagation();\r\n this.selectionClick.next(selection);\r\n }\r\n\r\n private async _loadThumbnails(): Promise<void> {\r\n if (this.selectionViewModels.length > 0) {\r\n this.selectionViewModels.forEach(async (viewModel: SelectionViewModel) => {\r\n await this._imageCacheService.getImageForSelectionOrAnswer(viewModel.selection).then((imageSrc: string) => {\r\n viewModel.thumbnail = imageSrc === \"\" ? null : imageSrc;\r\n });\r\n });\r\n }\r\n }\r\n\r\n private _prepareSelections(value: Selection[]): void {\r\n this.selectionViewModels.length = 0;\r\n let selectionViewModel: SelectionViewModel;\r\n value.forEach(s => {\r\n if (s.presentationLevel === 1) {\r\n selectionViewModel = new SelectionViewModel();\r\n selectionViewModel.selection = s;\r\n this.selectionViewModels.push(selectionViewModel);\r\n } else if (s.presentationLevel > 1) {\r\n if (selectionViewModel) {\r\n selectionViewModel.children.push(s);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SelectionsComponent} from \"./selections.component\";\r\nimport {SharedModule} from '../shared/shared.module';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n SharedModule\r\n ],\r\n declarations: [\r\n SelectionsComponent\r\n ],\r\n exports: [\r\n SelectionsComponent\r\n ]\r\n})\r\nexport class SelectionsModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {AnswerComponent as ɵc} from './app/components/answers/answer/answer.component';\nexport {LoaderComponent as ɵb} from './app/components/shared/loader/loader.component';\nexport {SharedModule as ɵa} from './app/components/shared/shared.module';\nexport {VisibilityObserverMasterDirective as ɵf} from './app/directives/visibility-observer-master.directive';\nexport {VisibilityObserverDirective as ɵe} from './app/directives/visibility-observer.directive';\nexport {ImageCacheService as ɵd} from './app/services/image-cache.service';"],"names":["THREE.ObjectLoader","THREE.Camera","THREE.Group","THREE.TextureLoader","THREE.RepeatWrapping","THREE.Object3D","THREE.Mesh","THREE.Box3","THREE.Vector3","THREE.Vector2","THREE.Euler","THREE.Quaternion","THREE.Color","THREE.Texture","THREE.MeshPhongMaterial","THREE.MeshStandardMaterial"],"mappings":"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"}