@inweb/viewer-three 26.6.6 → 26.7.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.
Files changed (75) hide show
  1. package/dist/plugins/components/AxesHelperComponent.js +5 -5
  2. package/dist/plugins/components/AxesHelperComponent.js.map +1 -1
  3. package/dist/plugins/components/AxesHelperComponent.min.js +1 -1
  4. package/dist/plugins/components/AxesHelperComponent.module.js +5 -5
  5. package/dist/plugins/components/AxesHelperComponent.module.js.map +1 -1
  6. package/dist/plugins/components/ExtentsHelperComponent.js +15 -7
  7. package/dist/plugins/components/ExtentsHelperComponent.js.map +1 -1
  8. package/dist/plugins/components/ExtentsHelperComponent.min.js +1 -1
  9. package/dist/plugins/components/ExtentsHelperComponent.module.js +15 -7
  10. package/dist/plugins/components/ExtentsHelperComponent.module.js.map +1 -1
  11. package/dist/plugins/components/LightHelperComponent.js +5 -5
  12. package/dist/plugins/components/LightHelperComponent.js.map +1 -1
  13. package/dist/plugins/components/LightHelperComponent.min.js +1 -1
  14. package/dist/plugins/components/LightHelperComponent.module.js +5 -5
  15. package/dist/plugins/components/LightHelperComponent.module.js.map +1 -1
  16. package/dist/plugins/loaders/GLTFCloudLoader.js +4840 -0
  17. package/dist/plugins/loaders/GLTFCloudLoader.js.map +1 -0
  18. package/dist/plugins/loaders/GLTFCloudLoader.min.js +1 -0
  19. package/dist/plugins/loaders/GLTFCloudLoader.module.js +49 -0
  20. package/dist/plugins/loaders/GLTFCloudLoader.module.js.map +1 -0
  21. package/dist/plugins/loaders/IFCXLoader.js +12 -6
  22. package/dist/plugins/loaders/IFCXLoader.js.map +1 -1
  23. package/dist/plugins/loaders/IFCXLoader.min.js +1 -1
  24. package/dist/plugins/loaders/IFCXLoader.module.js +13 -7
  25. package/dist/plugins/loaders/IFCXLoader.module.js.map +1 -1
  26. package/dist/viewer-three.js +3131 -459
  27. package/dist/viewer-three.js.map +1 -1
  28. package/dist/viewer-three.min.js +2 -2
  29. package/dist/viewer-three.module.js +2326 -264
  30. package/dist/viewer-three.module.js.map +1 -1
  31. package/lib/Viewer/Viewer.d.ts +6 -5
  32. package/lib/Viewer/components/HighlighterComponent.d.ts +4 -3
  33. package/lib/Viewer/components/SelectionComponent.d.ts +8 -5
  34. package/lib/Viewer/draggers/CuttingPlaneDragger.d.ts +1 -1
  35. package/lib/Viewer/loaders/DynamicGltfLoader/DynamicModelImpl.d.ts +20 -0
  36. package/lib/Viewer/loaders/GLTFCloudDynamicLoader.d.ts +15 -0
  37. package/lib/Viewer/model/IModelImpl.d.ts +27 -0
  38. package/lib/Viewer/model/ModelImpl.d.ts +30 -0
  39. package/lib/Viewer/model/index.d.ts +2 -0
  40. package/lib/index.d.ts +1 -0
  41. package/package.json +11 -7
  42. package/plugins/components/AxesHelperComponent.ts +5 -5
  43. package/plugins/components/ExtentsHelperComponent.ts +15 -7
  44. package/plugins/components/LightHelperComponent.ts +5 -5
  45. package/{src/Viewer/loaders/GLTFCloudModelLoader.ts → plugins/loaders/GLTFCloudLoader.ts} +15 -12
  46. package/plugins/loaders/{IFCXCloudFileLoader.ts → IFCXCloudLoader.ts} +8 -4
  47. package/plugins/loaders/IFCXFileLoader.ts +7 -3
  48. package/plugins/loaders/IFCXLoader.ts +2 -2
  49. package/src/Viewer/Viewer.ts +32 -36
  50. package/src/Viewer/commands/ClearSelected.ts +2 -3
  51. package/src/Viewer/commands/Explode.ts +1 -47
  52. package/src/Viewer/commands/GetModels.ts +1 -1
  53. package/src/Viewer/commands/GetSelected.ts +3 -1
  54. package/src/Viewer/commands/HideSelected.ts +3 -4
  55. package/src/Viewer/commands/IsolateSelected.ts +1 -7
  56. package/src/Viewer/commands/SelectModel.ts +9 -1
  57. package/src/Viewer/commands/SetSelected.ts +8 -10
  58. package/src/Viewer/commands/ShowAll.ts +1 -1
  59. package/src/Viewer/components/BackgroundComponent.ts +1 -0
  60. package/src/Viewer/components/ExtentsComponent.ts +5 -3
  61. package/src/Viewer/components/HighlighterComponent.ts +79 -48
  62. package/src/Viewer/components/SelectionComponent.ts +67 -21
  63. package/src/Viewer/draggers/CuttingPlaneDragger.ts +7 -3
  64. package/src/Viewer/draggers/MeasureLineDragger.ts +2 -0
  65. package/src/Viewer/loaders/DynamicGltfLoader/DynamicGltfLoader.js +1628 -0
  66. package/src/Viewer/loaders/DynamicGltfLoader/DynamicModelImpl.ts +102 -0
  67. package/src/Viewer/loaders/DynamicGltfLoader/GltfStructure.js +450 -0
  68. package/src/Viewer/loaders/GLTFCloudDynamicLoader.ts +145 -0
  69. package/src/Viewer/loaders/GLTFFileLoader.ts +7 -2
  70. package/src/Viewer/loaders/index.ts +2 -2
  71. package/src/Viewer/model/IModelImpl.ts +67 -0
  72. package/src/Viewer/model/ModelImpl.ts +215 -0
  73. package/src/Viewer/model/index.ts +25 -0
  74. package/src/index.ts +1 -0
  75. package/lib/Viewer/loaders/GLTFCloudModelLoader.d.ts +0 -8
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("three"),require("@inweb/viewer-three")):"function"==typeof define&&define.amd?define(["three","@inweb/viewer-three"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).THREE,e.ODA.Three)}(this,(function(e,t){"use strict";function s(t,s){if(s===e.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),t;if(s===e.TriangleFanDrawMode||s===e.TriangleStripDrawMode){let n=t.getIndex();if(null===n){const e=[],s=t.getAttribute("position");if(void 0===s)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),t;for(let t=0;t<s.count;t++)e.push(t);t.setIndex(e),n=t.getIndex()}const r=n.count-2,i=[];if(s===e.TriangleFanDrawMode)for(let e=1;e<=r;e++)i.push(n.getX(0)),i.push(n.getX(e)),i.push(n.getX(e+1));else for(let e=0;e<r;e++)e%2==0?(i.push(n.getX(e)),i.push(n.getX(e+1)),i.push(n.getX(e+2))):(i.push(n.getX(e+2)),i.push(n.getX(e+1)),i.push(n.getX(e)));i.length/3!==r&&console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");const o=t.clone();return o.setIndex(i),o.clearGroups(),o}return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",s),t}class n extends e.Loader{constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register((function(e){return new l(e)})),this.register((function(e){return new u(e)})),this.register((function(e){return new x(e)})),this.register((function(e){return new R(e)})),this.register((function(e){return new v(e)})),this.register((function(e){return new d(e)})),this.register((function(e){return new p(e)})),this.register((function(e){return new m(e)})),this.register((function(e){return new f(e)})),this.register((function(e){return new c(e)})),this.register((function(e){return new g(e)})),this.register((function(e){return new h(e)})),this.register((function(e){return new T(e)})),this.register((function(e){return new A(e)})),this.register((function(e){return new o(e)})),this.register((function(e){return new w(e)})),this.register((function(e){return new E(e)}))}load(t,s,n,r){const i=this;let o;if(""!==this.resourcePath)o=this.resourcePath;else if(""!==this.path){const s=e.LoaderUtils.extractUrlBase(t);o=e.LoaderUtils.resolveURL(s,this.path)}else o=e.LoaderUtils.extractUrlBase(t);this.manager.itemStart(t);const a=function(e){r?r(e):console.error(e),i.manager.itemError(t),i.manager.itemEnd(t)},c=new e.FileLoader(this.manager);c.setPath(this.path),c.setResponseType("arraybuffer"),c.setRequestHeader(this.requestHeader),c.setWithCredentials(this.withCredentials),c.load(t,(function(e){try{i.parse(e,o,(function(e){s(e),i.manager.itemEnd(t)}),a)}catch(e){a(e)}}),n,a)}setDRACOLoader(e){return this.dracoLoader=e,this}setKTX2Loader(e){return this.ktx2Loader=e,this}setMeshoptDecoder(e){return this.meshoptDecoder=e,this}register(e){return-1===this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.push(e),this}unregister(e){return-1!==this.pluginCallbacks.indexOf(e)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}parse(e,t,s,n){let r;const o={},c={},l=new TextDecoder;if("string"==typeof e)r=JSON.parse(e);else if(e instanceof ArrayBuffer){if(l.decode(new Uint8Array(e,0,4))===_){try{o[i.KHR_BINARY_GLTF]=new y(e)}catch(e){return void(n&&n(e))}r=JSON.parse(o[i.KHR_BINARY_GLTF].content)}else r=JSON.parse(l.decode(e))}else r=e;if(void 0===r.asset||r.asset.version[0]<2)return void(n&&n(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")));const u=new J(r,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});u.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e<this.pluginCallbacks.length;e++){const t=this.pluginCallbacks[e](u);t.name||console.error("THREE.GLTFLoader: Invalid plugin found: missing name"),c[t.name]=t,o[t.name]=!0}if(r.extensionsUsed)for(let e=0;e<r.extensionsUsed.length;++e){const t=r.extensionsUsed[e],s=r.extensionsRequired||[];switch(t){case i.KHR_MATERIALS_UNLIT:o[t]=new a;break;case i.KHR_DRACO_MESH_COMPRESSION:o[t]=new L(r,this.dracoLoader);break;case i.KHR_TEXTURE_TRANSFORM:o[t]=new I;break;case i.KHR_MESH_QUANTIZATION:o[t]=new b;break;default:s.indexOf(t)>=0&&void 0===c[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}u.setExtensions(o),u.setPlugins(c),u.parse(s,n)}parseAsync(e,t){const s=this;return new Promise((function(n,r){s.parse(e,t,n,r)}))}}function r(){let e={};return{get:function(t){return e[t]},add:function(t,s){e[t]=s},remove:function(t){delete e[t]},removeAll:function(){e={}}}}const i={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class o{constructor(e){this.parser=e,this.name=i.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let s=0,n=t.length;s<n;s++){const n=t[s];n.extensions&&n.extensions[this.name]&&void 0!==n.extensions[this.name].light&&e._addNodeRef(this.cache,n.extensions[this.name].light)}}_loadLight(t){const s=this.parser,n="light:"+t;let r=s.cache.get(n);if(r)return r;const i=s.json,o=((i.extensions&&i.extensions[this.name]||{}).lights||[])[t];let a;const c=new e.Color(16777215);void 0!==o.color&&c.setRGB(o.color[0],o.color[1],o.color[2],e.LinearSRGBColorSpace);const l=void 0!==o.range?o.range:0;switch(o.type){case"directional":a=new e.DirectionalLight(c),a.target.position.set(0,0,-1),a.add(a.target);break;case"point":a=new e.PointLight(c),a.distance=l;break;case"spot":a=new e.SpotLight(c),a.distance=l,o.spot=o.spot||{},o.spot.innerConeAngle=void 0!==o.spot.innerConeAngle?o.spot.innerConeAngle:0,o.spot.outerConeAngle=void 0!==o.spot.outerConeAngle?o.spot.outerConeAngle:Math.PI/4,a.angle=o.spot.outerConeAngle,a.penumbra=1-o.spot.innerConeAngle/o.spot.outerConeAngle,a.target.position.set(0,0,-1),a.add(a.target);break;default:throw new Error("THREE.GLTFLoader: Unexpected light type: "+o.type)}return a.position.set(0,0,0),q(a,o),void 0!==o.intensity&&(a.intensity=o.intensity),a.name=s.createUniqueName(o.name||"light_"+t),r=Promise.resolve(a),s.cache.add(n,r),r}getDependency(e,t){if("light"===e)return this._loadLight(t)}createNodeAttachment(e){const t=this,s=this.parser,n=s.json.nodes[e],r=(n.extensions&&n.extensions[this.name]||{}).light;return void 0===r?null:this._loadLight(r).then((function(e){return s._getNodeRef(t.cache,r,e)}))}}class a{constructor(){this.name=i.KHR_MATERIALS_UNLIT}getMaterialType(){return e.MeshBasicMaterial}extendParams(t,s,n){const r=[];t.color=new e.Color(1,1,1),t.opacity=1;const i=s.pbrMetallicRoughness;if(i){if(Array.isArray(i.baseColorFactor)){const s=i.baseColorFactor;t.color.setRGB(s[0],s[1],s[2],e.LinearSRGBColorSpace),t.opacity=s[3]}void 0!==i.baseColorTexture&&r.push(n.assignTexture(t,"map",i.baseColorTexture,e.SRGBColorSpace))}return Promise.all(r)}}class c{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_EMISSIVE_STRENGTH}extendMaterialParams(e,t){const s=this.parser.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=s.extensions[this.name].emissiveStrength;return void 0!==n&&(t.emissiveIntensity=n),Promise.resolve()}}class l{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_CLEARCOAT}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(t,s){const n=this.parser,r=n.json.materials[t];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];if(void 0!==o.clearcoatFactor&&(s.clearcoat=o.clearcoatFactor),void 0!==o.clearcoatTexture&&i.push(n.assignTexture(s,"clearcoatMap",o.clearcoatTexture)),void 0!==o.clearcoatRoughnessFactor&&(s.clearcoatRoughness=o.clearcoatRoughnessFactor),void 0!==o.clearcoatRoughnessTexture&&i.push(n.assignTexture(s,"clearcoatRoughnessMap",o.clearcoatRoughnessTexture)),void 0!==o.clearcoatNormalTexture&&(i.push(n.assignTexture(s,"clearcoatNormalMap",o.clearcoatNormalTexture)),void 0!==o.clearcoatNormalTexture.scale)){const t=o.clearcoatNormalTexture.scale;s.clearcoatNormalScale=new e.Vector2(t,t)}return Promise.all(i)}}class u{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_DISPERSION}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=s.extensions[this.name];return t.dispersion=void 0!==n.dispersion?n.dispersion:0,Promise.resolve()}}class h{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_IRIDESCENCE}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,n=s.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],i=n.extensions[this.name];return void 0!==i.iridescenceFactor&&(t.iridescence=i.iridescenceFactor),void 0!==i.iridescenceTexture&&r.push(s.assignTexture(t,"iridescenceMap",i.iridescenceTexture)),void 0!==i.iridescenceIor&&(t.iridescenceIOR=i.iridescenceIor),void 0===t.iridescenceThicknessRange&&(t.iridescenceThicknessRange=[100,400]),void 0!==i.iridescenceThicknessMinimum&&(t.iridescenceThicknessRange[0]=i.iridescenceThicknessMinimum),void 0!==i.iridescenceThicknessMaximum&&(t.iridescenceThicknessRange[1]=i.iridescenceThicknessMaximum),void 0!==i.iridescenceThicknessTexture&&r.push(s.assignTexture(t,"iridescenceThicknessMap",i.iridescenceThicknessTexture)),Promise.all(r)}}class d{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_SHEEN}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(t,s){const n=this.parser,r=n.json.materials[t];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[];s.sheenColor=new e.Color(0,0,0),s.sheenRoughness=0,s.sheen=1;const o=r.extensions[this.name];if(void 0!==o.sheenColorFactor){const t=o.sheenColorFactor;s.sheenColor.setRGB(t[0],t[1],t[2],e.LinearSRGBColorSpace)}return void 0!==o.sheenRoughnessFactor&&(s.sheenRoughness=o.sheenRoughnessFactor),void 0!==o.sheenColorTexture&&i.push(n.assignTexture(s,"sheenColorMap",o.sheenColorTexture,e.SRGBColorSpace)),void 0!==o.sheenRoughnessTexture&&i.push(n.assignTexture(s,"sheenRoughnessMap",o.sheenRoughnessTexture)),Promise.all(i)}}class p{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_TRANSMISSION}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,n=s.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],i=n.extensions[this.name];return void 0!==i.transmissionFactor&&(t.transmission=i.transmissionFactor),void 0!==i.transmissionTexture&&r.push(s.assignTexture(t,"transmissionMap",i.transmissionTexture)),Promise.all(r)}}class m{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_VOLUME}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(t,s){const n=this.parser,r=n.json.materials[t];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];s.thickness=void 0!==o.thicknessFactor?o.thicknessFactor:0,void 0!==o.thicknessTexture&&i.push(n.assignTexture(s,"thicknessMap",o.thicknessTexture)),s.attenuationDistance=o.attenuationDistance||1/0;const a=o.attenuationColor||[1,1,1];return s.attenuationColor=(new e.Color).setRGB(a[0],a[1],a[2],e.LinearSRGBColorSpace),Promise.all(i)}}class f{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_IOR}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser.json.materials[e];if(!s.extensions||!s.extensions[this.name])return Promise.resolve();const n=s.extensions[this.name];return t.ior=void 0!==n.ior?n.ior:1.5,Promise.resolve()}}class g{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_SPECULAR}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(t,s){const n=this.parser,r=n.json.materials[t];if(!r.extensions||!r.extensions[this.name])return Promise.resolve();const i=[],o=r.extensions[this.name];s.specularIntensity=void 0!==o.specularFactor?o.specularFactor:1,void 0!==o.specularTexture&&i.push(n.assignTexture(s,"specularIntensityMap",o.specularTexture));const a=o.specularColorFactor||[1,1,1];return s.specularColor=(new e.Color).setRGB(a[0],a[1],a[2],e.LinearSRGBColorSpace),void 0!==o.specularColorTexture&&i.push(n.assignTexture(s,"specularColorMap",o.specularColorTexture,e.SRGBColorSpace)),Promise.all(i)}}class A{constructor(e){this.parser=e,this.name=i.EXT_MATERIALS_BUMP}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,n=s.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],i=n.extensions[this.name];return t.bumpScale=void 0!==i.bumpFactor?i.bumpFactor:1,void 0!==i.bumpTexture&&r.push(s.assignTexture(t,"bumpMap",i.bumpTexture)),Promise.all(r)}}class T{constructor(e){this.parser=e,this.name=i.KHR_MATERIALS_ANISOTROPY}getMaterialType(t){const s=this.parser.json.materials[t];return s.extensions&&s.extensions[this.name]?e.MeshPhysicalMaterial:null}extendMaterialParams(e,t){const s=this.parser,n=s.json.materials[e];if(!n.extensions||!n.extensions[this.name])return Promise.resolve();const r=[],i=n.extensions[this.name];return void 0!==i.anisotropyStrength&&(t.anisotropy=i.anisotropyStrength),void 0!==i.anisotropyRotation&&(t.anisotropyRotation=i.anisotropyRotation),void 0!==i.anisotropyTexture&&r.push(s.assignTexture(t,"anisotropyMap",i.anisotropyTexture)),Promise.all(r)}}class x{constructor(e){this.parser=e,this.name=i.KHR_TEXTURE_BASISU}loadTexture(e){const t=this.parser,s=t.json,n=s.textures[e];if(!n.extensions||!n.extensions[this.name])return null;const r=n.extensions[this.name],i=t.options.ktx2Loader;if(!i){if(s.extensionsRequired&&s.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,r.source,i)}}class R{constructor(e){this.parser=e,this.name=i.EXT_TEXTURE_WEBP,this.isSupported=null}loadTexture(e){const t=this.name,s=this.parser,n=s.json,r=n.textures[e];if(!r.extensions||!r.extensions[t])return null;const i=r.extensions[t],o=n.images[i.source];let a=s.textureLoader;if(o.uri){const e=s.options.manager.getHandler(o.uri);null!==e&&(a=e)}return this.detectSupport().then((function(r){if(r)return s.loadTextureImage(e,i.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return s.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class v{constructor(e){this.parser=e,this.name=i.EXT_TEXTURE_AVIF,this.isSupported=null}loadTexture(e){const t=this.name,s=this.parser,n=s.json,r=n.textures[e];if(!r.extensions||!r.extensions[t])return null;const i=r.extensions[t],o=n.images[i.source];let a=s.textureLoader;if(o.uri){const e=s.options.manager.getHandler(o.uri);null!==e&&(a=e)}return this.detectSupport().then((function(r){if(r)return s.loadTextureImage(e,i.source,a);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return s.loadTexture(e)}))}detectSupport(){return this.isSupported||(this.isSupported=new Promise((function(e){const t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}}))),this.isSupported}}class w{constructor(e){this.name=i.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,s=t.bufferViews[e];if(s.extensions&&s.extensions[this.name]){const e=s.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return n.then((function(t){const s=e.byteOffset||0,n=e.byteLength||0,i=e.count,o=e.byteStride,a=new Uint8Array(t,s,n);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(i,o,a,e.mode,e.filter).then((function(e){return e.buffer})):r.ready.then((function(){const t=new ArrayBuffer(i*o);return r.decodeGltfBuffer(new Uint8Array(t),i,o,a,e.mode,e.filter),t}))}))}return null}}class E{constructor(e){this.name=i.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(t){const s=this.parser.json,n=s.nodes[t];if(!n.extensions||!n.extensions[this.name]||void 0===n.mesh)return null;const r=s.meshes[n.mesh];for(const e of r.primitives)if(e.mode!==P.TRIANGLES&&e.mode!==P.TRIANGLE_STRIP&&e.mode!==P.TRIANGLE_FAN&&void 0!==e.mode)return null;const i=n.extensions[this.name].attributes,o=[],a={};for(const e in i)o.push(this.parser.getDependency("accessor",i[e]).then((t=>(a[e]=t,a[e]))));return o.length<1?null:(o.push(this.parser.createNodeMesh(t)),Promise.all(o).then((t=>{const s=t.pop(),n=s.isGroup?s.children:[s],r=t[0].count,i=[];for(const t of n){const s=new e.Matrix4,n=new e.Vector3,o=new e.Quaternion,c=new e.Vector3(1,1,1),l=new e.InstancedMesh(t.geometry,t.material,r);for(let e=0;e<r;e++)a.TRANSLATION&&n.fromBufferAttribute(a.TRANSLATION,e),a.ROTATION&&o.fromBufferAttribute(a.ROTATION,e),a.SCALE&&c.fromBufferAttribute(a.SCALE,e),l.setMatrixAt(e,s.compose(n,o,c));for(const s in a)if("_COLOR_0"===s){const t=a[s];l.instanceColor=new e.InstancedBufferAttribute(t.array,t.itemSize,t.normalized)}else"TRANSLATION"!==s&&"ROTATION"!==s&&"SCALE"!==s&&t.geometry.setAttribute(s,a[s]);e.Object3D.prototype.copy.call(l,t),this.parser.assignFinalMaterial(l),i.push(l)}return s.isGroup?(s.clear(),s.add(...i),s):i[0]})))}}const _="glTF",M=1313821514,S=5130562;class y{constructor(e){this.name=i.KHR_BINARY_GLTF,this.content=null,this.body=null;const t=new DataView(e,0,12),s=new TextDecoder;if(this.header={magic:s.decode(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==_)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected.");const n=this.header.length-12,r=new DataView(e,12);let o=0;for(;o<n;){const t=r.getUint32(o,!0);o+=4;const n=r.getUint32(o,!0);if(o+=4,n===M){const n=new Uint8Array(e,12+o,t);this.content=s.decode(n)}else if(n===S){const s=12+o;this.body=e.slice(s,s+t)}o+=t}if(null===this.content)throw new Error("THREE.GLTFLoader: JSON content not found.")}}class L{constructor(e,t){if(!t)throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");this.name=i.KHR_DRACO_MESH_COMPRESSION,this.json=e,this.dracoLoader=t,this.dracoLoader.preload()}decodePrimitive(t,s){const n=this.json,r=this.dracoLoader,i=t.extensions[this.name].bufferView,o=t.extensions[this.name].attributes,a={},c={},l={};for(const e in o){const t=D[e]||e.toLowerCase();a[t]=o[e]}for(const e in t.attributes){const s=D[e]||e.toLowerCase();if(void 0!==o[e]){const r=n.accessors[t.attributes[e]],i=H[r.componentType];l[s]=i.name,c[s]=!0===r.normalized}}return s.getDependency("bufferView",i).then((function(t){return new Promise((function(s,n){r.decodeDracoFile(t,(function(e){for(const t in e.attributes){const s=e.attributes[t],n=c[t];void 0!==n&&(s.normalized=n)}s(e)}),a,l,e.LinearSRGBColorSpace,n)}))}))}}class I{constructor(){this.name=i.KHR_TEXTURE_TRANSFORM}extendTexture(e,t){return void 0!==t.texCoord&&t.texCoord!==e.channel||void 0!==t.offset||void 0!==t.rotation||void 0!==t.scale?(e=e.clone(),void 0!==t.texCoord&&(e.channel=t.texCoord),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),e.needsUpdate=!0,e):e}}class b{constructor(){this.name=i.KHR_MESH_QUANTIZATION}}class C extends e.Interpolant{constructor(e,t,s,n){super(e,t,s,n)}copySampleValue_(e){const t=this.resultBuffer,s=this.sampleValues,n=this.valueSize,r=e*n*3+n;for(let e=0;e!==n;e++)t[e]=s[r+e];return t}interpolate_(e,t,s,n){const r=this.resultBuffer,i=this.sampleValues,o=this.valueSize,a=2*o,c=3*o,l=n-t,u=(s-t)/l,h=u*u,d=h*u,p=e*c,m=p-c,f=-2*d+3*h,g=d-h,A=1-f,T=g-h+u;for(let e=0;e!==o;e++){const t=i[m+e+o],s=i[m+e+a]*l,n=i[p+e+o],c=i[p+e]*l;r[e]=A*t+T*s+f*n+g*c}return r}}const N=new e.Quaternion;class O extends C{interpolate_(e,t,s,n){const r=super.interpolate_(e,t,s,n);return N.fromArray(r).normalize().toArray(r),r}}const P={POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6},H={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},k={9728:e.NearestFilter,9729:e.LinearFilter,9984:e.NearestMipmapNearestFilter,9985:e.LinearMipmapNearestFilter,9986:e.NearestMipmapLinearFilter,9987:e.LinearMipmapLinearFilter},B={33071:e.ClampToEdgeWrapping,33648:e.MirroredRepeatWrapping,10497:e.RepeatWrapping},F={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},D={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},G={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},U={CUBICSPLINE:void 0,LINEAR:e.InterpolateLinear,STEP:e.InterpolateDiscrete},j="OPAQUE",K="MASK",V="BLEND";function X(e,t,s){for(const n in s.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=s.extensions[n])}function q(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function z(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let s=0,n=t.weights.length;s<n;s++)e.morphTargetInfluences[s]=t.weights[s];if(t.extras&&Array.isArray(t.extras.targetNames)){const s=t.extras.targetNames;if(e.morphTargetInfluences.length===s.length){e.morphTargetDictionary={};for(let t=0,n=s.length;t<n;t++)e.morphTargetDictionary[s[t]]=t}else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.")}}function W(e){let t;const s=e.extensions&&e.extensions[i.KHR_DRACO_MESH_COMPRESSION];if(t=s?"draco:"+s.bufferView+":"+s.indices+":"+Q(s.attributes):e.indices+":"+Q(e.attributes)+":"+e.mode,void 0!==e.targets)for(let s=0,n=e.targets.length;s<n;s++)t+=":"+Q(e.targets[s]);return t}function Q(e){let t="";const s=Object.keys(e).sort();for(let n=0,r=s.length;n<r;n++)t+=s[n]+":"+e[s[n]]+";";return t}function Y(e){switch(e){case Int8Array:return 1/127;case Uint8Array:return 1/255;case Int16Array:return 1/32767;case Uint16Array:return 1/65535;default:throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.")}}const Z=new e.Matrix4;class J{constructor(t={},s={}){this.json=t,this.extensions={},this.plugins={},this.options=s,this.cache=new r,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let n=!1,i=-1,o=!1,a=-1;if("undefined"!=typeof navigator){const e=navigator.userAgent;n=!0===/^((?!chrome|android).)*safari/i.test(e);const t=e.match(/Version\/(\d+)/);i=n&&t?parseInt(t[1],10):-1,o=e.indexOf("Firefox")>-1,a=o?e.match(/Firefox\/([0-9]+)\./)[1]:-1}"undefined"==typeof createImageBitmap||n&&i<17||o&&a<98?this.textureLoader=new e.TextureLoader(this.options.manager):this.textureLoader=new e.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new e.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const s=this,n=this.json,r=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll((function(e){return e._markDefs&&e._markDefs()})),Promise.all(this._invokeAll((function(e){return e.beforeRoot&&e.beforeRoot()}))).then((function(){return Promise.all([s.getDependencies("scene"),s.getDependencies("animation"),s.getDependencies("camera")])})).then((function(t){const i={scene:t[0][n.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:n.asset,parser:s,userData:{}};return X(r,i,n),q(i,n),Promise.all(s._invokeAll((function(e){return e.afterRoot&&e.afterRoot(i)}))).then((function(){for(const e of i.scenes)e.updateMatrixWorld();e(i)}))})).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],s=this.json.meshes||[];for(let s=0,n=t.length;s<n;s++){const n=t[s].joints;for(let t=0,s=n.length;t<s;t++)e[n[t]].isBone=!0}for(let t=0,n=e.length;t<n;t++){const n=e[t];void 0!==n.mesh&&(this._addNodeRef(this.meshCache,n.mesh),void 0!==n.skin&&(s[n.mesh].isSkinnedMesh=!0)),void 0!==n.camera&&this._addNodeRef(this.cameraCache,n.camera)}}_addNodeRef(e,t){void 0!==t&&(void 0===e.refs[t]&&(e.refs[t]=e.uses[t]=0),e.refs[t]++)}_getNodeRef(e,t,s){if(e.refs[t]<=1)return s;const n=s.clone(),r=(e,t)=>{const s=this.associations.get(e);null!=s&&this.associations.set(t,s);for(const[s,n]of e.children.entries())r(n,t.children[s])};return r(s,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let s=0;s<t.length;s++){const n=e(t[s]);if(n)return n}return null}_invokeAll(e){const t=Object.values(this.plugins);t.unshift(this);const s=[];for(let n=0;n<t.length;n++){const r=e(t[n]);r&&s.push(r)}return s}getDependency(e,t){const s=e+":"+t;let n=this.cache.get(s);if(!n){switch(e){case"scene":n=this.loadScene(t);break;case"node":n=this._invokeOne((function(e){return e.loadNode&&e.loadNode(t)}));break;case"mesh":n=this._invokeOne((function(e){return e.loadMesh&&e.loadMesh(t)}));break;case"accessor":n=this.loadAccessor(t);break;case"bufferView":n=this._invokeOne((function(e){return e.loadBufferView&&e.loadBufferView(t)}));break;case"buffer":n=this.loadBuffer(t);break;case"material":n=this._invokeOne((function(e){return e.loadMaterial&&e.loadMaterial(t)}));break;case"texture":n=this._invokeOne((function(e){return e.loadTexture&&e.loadTexture(t)}));break;case"skin":n=this.loadSkin(t);break;case"animation":n=this._invokeOne((function(e){return e.loadAnimation&&e.loadAnimation(t)}));break;case"camera":n=this.loadCamera(t);break;default:if(n=this._invokeOne((function(s){return s!=this&&s.getDependency&&s.getDependency(e,t)})),!n)throw new Error("Unknown type: "+e)}this.cache.add(s,n)}return n}getDependencies(e){let t=this.cache.get(e);if(!t){const s=this,n=this.json[e+("mesh"===e?"es":"s")]||[];t=Promise.all(n.map((function(t,n){return s.getDependency(e,n)}))),this.cache.add(e,t)}return t}loadBuffer(t){const s=this.json.buffers[t],n=this.fileLoader;if(s.type&&"arraybuffer"!==s.type)throw new Error("THREE.GLTFLoader: "+s.type+" buffer type is not supported.");if(void 0===s.uri&&0===t)return Promise.resolve(this.extensions[i.KHR_BINARY_GLTF].body);const r=this.options;return new Promise((function(t,i){n.load(e.LoaderUtils.resolveURL(s.uri,r.path),t,void 0,(function(){i(new Error('THREE.GLTFLoader: Failed to load buffer "'+s.uri+'".'))}))}))}loadBufferView(e){const t=this.json.bufferViews[e];return this.getDependency("buffer",t.buffer).then((function(e){const s=t.byteLength||0,n=t.byteOffset||0;return e.slice(n,n+s)}))}loadAccessor(t){const s=this,n=this.json,r=this.json.accessors[t];if(void 0===r.bufferView&&void 0===r.sparse){const t=F[r.type],s=H[r.componentType],n=!0===r.normalized,i=new s(r.count*t);return Promise.resolve(new e.BufferAttribute(i,t,n))}const i=[];return void 0!==r.bufferView?i.push(this.getDependency("bufferView",r.bufferView)):i.push(null),void 0!==r.sparse&&(i.push(this.getDependency("bufferView",r.sparse.indices.bufferView)),i.push(this.getDependency("bufferView",r.sparse.values.bufferView))),Promise.all(i).then((function(t){const i=t[0],o=F[r.type],a=H[r.componentType],c=a.BYTES_PER_ELEMENT,l=c*o,u=r.byteOffset||0,h=void 0!==r.bufferView?n.bufferViews[r.bufferView].byteStride:void 0,d=!0===r.normalized;let p,m;if(h&&h!==l){const t=Math.floor(u/h),n="InterleavedBuffer:"+r.bufferView+":"+r.componentType+":"+t+":"+r.count;let l=s.cache.get(n);l||(p=new a(i,t*h,r.count*h/c),l=new e.InterleavedBuffer(p,h/c),s.cache.add(n,l)),m=new e.InterleavedBufferAttribute(l,o,u%h/c,d)}else p=null===i?new a(r.count*o):new a(i,u,r.count*o),m=new e.BufferAttribute(p,o,d);if(void 0!==r.sparse){const s=F.SCALAR,n=H[r.sparse.indices.componentType],c=r.sparse.indices.byteOffset||0,l=r.sparse.values.byteOffset||0,u=new n(t[1],c,r.sparse.count*s),h=new a(t[2],l,r.sparse.count*o);null!==i&&(m=new e.BufferAttribute(m.array.slice(),m.itemSize,m.normalized)),m.normalized=!1;for(let e=0,t=u.length;e<t;e++){const t=u[e];if(m.setX(t,h[e*o]),o>=2&&m.setY(t,h[e*o+1]),o>=3&&m.setZ(t,h[e*o+2]),o>=4&&m.setW(t,h[e*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}m.normalized=d}return m}))}loadTexture(e){const t=this.json,s=this.options,n=t.textures[e].source,r=t.images[n];let i=this.textureLoader;if(r.uri){const e=s.manager.getHandler(r.uri);null!==e&&(i=e)}return this.loadTextureImage(e,n,i)}loadTextureImage(t,s,n){const r=this,i=this.json,o=i.textures[t],a=i.images[s],c=(a.uri||a.bufferView)+":"+o.sampler;if(this.textureCache[c])return this.textureCache[c];const l=this.loadImageSource(s,n).then((function(s){s.flipY=!1,s.name=o.name||a.name||"",""===s.name&&"string"==typeof a.uri&&!1===a.uri.startsWith("data:image/")&&(s.name=a.uri);const n=(i.samplers||{})[o.sampler]||{};return s.magFilter=k[n.magFilter]||e.LinearFilter,s.minFilter=k[n.minFilter]||e.LinearMipmapLinearFilter,s.wrapS=B[n.wrapS]||e.RepeatWrapping,s.wrapT=B[n.wrapT]||e.RepeatWrapping,s.generateMipmaps=!s.isCompressedTexture&&s.minFilter!==e.NearestFilter&&s.minFilter!==e.LinearFilter,r.associations.set(s,{textures:t}),s})).catch((function(){return null}));return this.textureCache[c]=l,l}loadImageSource(t,s){const n=this,r=this.json,i=this.options;if(void 0!==this.sourceCache[t])return this.sourceCache[t].then((e=>e.clone()));const o=r.images[t],a=self.URL||self.webkitURL;let c=o.uri||"",l=!1;if(void 0!==o.bufferView)c=n.getDependency("bufferView",o.bufferView).then((function(e){l=!0;const t=new Blob([e],{type:o.mimeType});return c=a.createObjectURL(t),c}));else if(void 0===o.uri)throw new Error("THREE.GLTFLoader: Image "+t+" is missing URI and bufferView");const u=Promise.resolve(c).then((function(t){return new Promise((function(n,r){let o=n;!0===s.isImageBitmapLoader&&(o=function(t){const s=new e.Texture(t);s.needsUpdate=!0,n(s)}),s.load(e.LoaderUtils.resolveURL(t,i.path),o,void 0,r)}))})).then((function(e){var t;return!0===l&&a.revokeObjectURL(c),q(e,o),e.userData.mimeType=o.mimeType||((t=o.uri).search(/\.jpe?g($|\?)/i)>0||0===t.search(/^data\:image\/jpeg/)?"image/jpeg":t.search(/\.webp($|\?)/i)>0||0===t.search(/^data\:image\/webp/)?"image/webp":t.search(/\.ktx2($|\?)/i)>0||0===t.search(/^data\:image\/ktx2/)?"image/ktx2":"image/png"),e})).catch((function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",c),e}));return this.sourceCache[t]=u,u}assignTexture(e,t,s,n){const r=this;return this.getDependency("texture",s.index).then((function(o){if(!o)return null;if(void 0!==s.texCoord&&s.texCoord>0&&((o=o.clone()).channel=s.texCoord),r.extensions[i.KHR_TEXTURE_TRANSFORM]){const e=void 0!==s.extensions?s.extensions[i.KHR_TEXTURE_TRANSFORM]:void 0;if(e){const t=r.associations.get(o);o=r.extensions[i.KHR_TEXTURE_TRANSFORM].extendTexture(o,e),r.associations.set(o,t)}}return void 0!==n&&(o.colorSpace=n),e[t]=o,o}))}assignFinalMaterial(t){const s=t.geometry;let n=t.material;const r=void 0===s.attributes.tangent,i=void 0!==s.attributes.color,o=void 0===s.attributes.normal;if(t.isPoints){const t="PointsMaterial:"+n.uuid;let s=this.cache.get(t);s||(s=new e.PointsMaterial,e.Material.prototype.copy.call(s,n),s.color.copy(n.color),s.map=n.map,s.sizeAttenuation=!1,this.cache.add(t,s)),n=s}else if(t.isLine){const t="LineBasicMaterial:"+n.uuid;let s=this.cache.get(t);s||(s=new e.LineBasicMaterial,e.Material.prototype.copy.call(s,n),s.color.copy(n.color),s.map=n.map,this.cache.add(t,s)),n=s}if(r||i||o){let e="ClonedMaterial:"+n.uuid+":";r&&(e+="derivative-tangents:"),i&&(e+="vertex-colors:"),o&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=n.clone(),i&&(t.vertexColors=!0),o&&(t.flatShading=!0),r&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(n))),n=t}t.material=n}getMaterialType(){return e.MeshStandardMaterial}loadMaterial(t){const s=this,n=this.json,r=this.extensions,o=n.materials[t];let a;const c={},l=[];if((o.extensions||{})[i.KHR_MATERIALS_UNLIT]){const e=r[i.KHR_MATERIALS_UNLIT];a=e.getMaterialType(),l.push(e.extendParams(c,o,s))}else{const n=o.pbrMetallicRoughness||{};if(c.color=new e.Color(1,1,1),c.opacity=1,Array.isArray(n.baseColorFactor)){const t=n.baseColorFactor;c.color.setRGB(t[0],t[1],t[2],e.LinearSRGBColorSpace),c.opacity=t[3]}void 0!==n.baseColorTexture&&l.push(s.assignTexture(c,"map",n.baseColorTexture,e.SRGBColorSpace)),c.metalness=void 0!==n.metallicFactor?n.metallicFactor:1,c.roughness=void 0!==n.roughnessFactor?n.roughnessFactor:1,void 0!==n.metallicRoughnessTexture&&(l.push(s.assignTexture(c,"metalnessMap",n.metallicRoughnessTexture)),l.push(s.assignTexture(c,"roughnessMap",n.metallicRoughnessTexture))),a=this._invokeOne((function(e){return e.getMaterialType&&e.getMaterialType(t)})),l.push(Promise.all(this._invokeAll((function(e){return e.extendMaterialParams&&e.extendMaterialParams(t,c)}))))}!0===o.doubleSided&&(c.side=e.DoubleSide);const u=o.alphaMode||j;if(u===V?(c.transparent=!0,c.depthWrite=!1):(c.transparent=!1,u===K&&(c.alphaTest=void 0!==o.alphaCutoff?o.alphaCutoff:.5)),void 0!==o.normalTexture&&a!==e.MeshBasicMaterial&&(l.push(s.assignTexture(c,"normalMap",o.normalTexture)),c.normalScale=new e.Vector2(1,1),void 0!==o.normalTexture.scale)){const e=o.normalTexture.scale;c.normalScale.set(e,e)}if(void 0!==o.occlusionTexture&&a!==e.MeshBasicMaterial&&(l.push(s.assignTexture(c,"aoMap",o.occlusionTexture)),void 0!==o.occlusionTexture.strength&&(c.aoMapIntensity=o.occlusionTexture.strength)),void 0!==o.emissiveFactor&&a!==e.MeshBasicMaterial){const t=o.emissiveFactor;c.emissive=(new e.Color).setRGB(t[0],t[1],t[2],e.LinearSRGBColorSpace)}return void 0!==o.emissiveTexture&&a!==e.MeshBasicMaterial&&l.push(s.assignTexture(c,"emissiveMap",o.emissiveTexture,e.SRGBColorSpace)),Promise.all(l).then((function(){const e=new a(c);return o.name&&(e.name=o.name),q(e,o),s.associations.set(e,{materials:t}),o.extensions&&X(r,e,o),e}))}createUniqueName(t){const s=e.PropertyBinding.sanitizeNodeName(t||"");return s in this.nodeNamesUsed?s+"_"+ ++this.nodeNamesUsed[s]:(this.nodeNamesUsed[s]=0,s)}loadGeometries(t){const s=this,n=this.extensions,r=this.primitiveCache;function o(e){return n[i.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(e,s).then((function(t){return $(t,e,s)}))}const a=[];for(let n=0,c=t.length;n<c;n++){const c=t[n],l=W(c),u=r[l];if(u)a.push(u.promise);else{let t;t=c.extensions&&c.extensions[i.KHR_DRACO_MESH_COMPRESSION]?o(c):$(new e.BufferGeometry,c,s),r[l]={primitive:c,promise:t},a.push(t)}}return Promise.all(a)}loadMesh(t){const n=this,r=this.json,i=this.extensions,o=r.meshes[t],a=o.primitives,c=[];for(let t=0,s=a.length;t<s;t++){const s=void 0===a[t].material?(void 0===(l=this.cache).DefaultMaterial&&(l.DefaultMaterial=new e.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:e.FrontSide})),l.DefaultMaterial):this.getDependency("material",a[t].material);c.push(s)}var l;return c.push(n.loadGeometries(a)),Promise.all(c).then((function(r){const c=r.slice(0,r.length-1),l=r[r.length-1],u=[];for(let r=0,h=l.length;r<h;r++){const h=l[r],d=a[r];let p;const m=c[r];if(d.mode===P.TRIANGLES||d.mode===P.TRIANGLE_STRIP||d.mode===P.TRIANGLE_FAN||void 0===d.mode)p=!0===o.isSkinnedMesh?new e.SkinnedMesh(h,m):new e.Mesh(h,m),!0===p.isSkinnedMesh&&p.normalizeSkinWeights(),d.mode===P.TRIANGLE_STRIP?p.geometry=s(p.geometry,e.TriangleStripDrawMode):d.mode===P.TRIANGLE_FAN&&(p.geometry=s(p.geometry,e.TriangleFanDrawMode));else if(d.mode===P.LINES)p=new e.LineSegments(h,m);else if(d.mode===P.LINE_STRIP)p=new e.Line(h,m);else if(d.mode===P.LINE_LOOP)p=new e.LineLoop(h,m);else{if(d.mode!==P.POINTS)throw new Error("THREE.GLTFLoader: Primitive mode unsupported: "+d.mode);p=new e.Points(h,m)}Object.keys(p.geometry.morphAttributes).length>0&&z(p,o),p.name=n.createUniqueName(o.name||"mesh_"+t),q(p,o),d.extensions&&X(i,p,d),n.assignFinalMaterial(p),u.push(p)}for(let e=0,s=u.length;e<s;e++)n.associations.set(u[e],{meshes:t,primitives:e});if(1===u.length)return o.extensions&&X(i,u[0],o),u[0];const h=new e.Group;o.extensions&&X(i,h,o),n.associations.set(h,{meshes:t});for(let e=0,t=u.length;e<t;e++)h.add(u[e]);return h}))}loadCamera(t){let s;const n=this.json.cameras[t],r=n[n.type];if(r)return"perspective"===n.type?s=new e.PerspectiveCamera(e.MathUtils.radToDeg(r.yfov),r.aspectRatio||1,r.znear||1,r.zfar||2e6):"orthographic"===n.type&&(s=new e.OrthographicCamera(-r.xmag,r.xmag,r.ymag,-r.ymag,r.znear,r.zfar)),n.name&&(s.name=this.createUniqueName(n.name)),q(s,n),Promise.resolve(s);console.warn("THREE.GLTFLoader: Missing camera parameters.")}loadSkin(t){const s=this.json.skins[t],n=[];for(let e=0,t=s.joints.length;e<t;e++)n.push(this._loadNodeShallow(s.joints[e]));return void 0!==s.inverseBindMatrices?n.push(this.getDependency("accessor",s.inverseBindMatrices)):n.push(null),Promise.all(n).then((function(t){const n=t.pop(),r=t,i=[],o=[];for(let t=0,a=r.length;t<a;t++){const a=r[t];if(a){i.push(a);const s=new e.Matrix4;null!==n&&s.fromArray(n.array,16*t),o.push(s)}else console.warn('THREE.GLTFLoader: Joint "%s" could not be found.',s.joints[t])}return new e.Skeleton(i,o)}))}loadAnimation(t){const s=this.json,n=this,r=s.animations[t],i=r.name?r.name:"animation_"+t,o=[],a=[],c=[],l=[],u=[];for(let e=0,t=r.channels.length;e<t;e++){const t=r.channels[e],s=r.samplers[t.sampler],n=t.target,i=n.node,h=void 0!==r.parameters?r.parameters[s.input]:s.input,d=void 0!==r.parameters?r.parameters[s.output]:s.output;void 0!==n.node&&(o.push(this.getDependency("node",i)),a.push(this.getDependency("accessor",h)),c.push(this.getDependency("accessor",d)),l.push(s),u.push(n))}return Promise.all([Promise.all(o),Promise.all(a),Promise.all(c),Promise.all(l),Promise.all(u)]).then((function(t){const s=t[0],r=t[1],o=t[2],a=t[3],c=t[4],l=[];for(let e=0,t=s.length;e<t;e++){const t=s[e],i=r[e],u=o[e],h=a[e],d=c[e];if(void 0===t)continue;t.updateMatrix&&t.updateMatrix();const p=n._createAnimationTracks(t,i,u,h,d);if(p)for(let e=0;e<p.length;e++)l.push(p[e])}return new e.AnimationClip(i,void 0,l)}))}createNodeMesh(e){const t=this.json,s=this,n=t.nodes[e];return void 0===n.mesh?null:s.getDependency("mesh",n.mesh).then((function(e){const t=s._getNodeRef(s.meshCache,n.mesh,e);return void 0!==n.weights&&t.traverse((function(e){if(e.isMesh)for(let t=0,s=n.weights.length;t<s;t++)e.morphTargetInfluences[t]=n.weights[t]})),t}))}loadNode(e){const t=this,s=this.json.nodes[e],n=t._loadNodeShallow(e),r=[],i=s.children||[];for(let e=0,s=i.length;e<s;e++)r.push(t.getDependency("node",i[e]));const o=void 0===s.skin?Promise.resolve(null):t.getDependency("skin",s.skin);return Promise.all([n,Promise.all(r),o]).then((function(e){const t=e[0],s=e[1],n=e[2];null!==n&&t.traverse((function(e){e.isSkinnedMesh&&e.bind(n,Z)}));for(let e=0,n=s.length;e<n;e++)t.add(s[e]);return t}))}_loadNodeShallow(t){const s=this.json,n=this.extensions,r=this;if(void 0!==this.nodeCache[t])return this.nodeCache[t];const i=s.nodes[t],o=i.name?r.createUniqueName(i.name):"",a=[],c=r._invokeOne((function(e){return e.createNodeMesh&&e.createNodeMesh(t)}));return c&&a.push(c),void 0!==i.camera&&a.push(r.getDependency("camera",i.camera).then((function(e){return r._getNodeRef(r.cameraCache,i.camera,e)}))),r._invokeAll((function(e){return e.createNodeAttachment&&e.createNodeAttachment(t)})).forEach((function(e){a.push(e)})),this.nodeCache[t]=Promise.all(a).then((function(s){let a;if(a=!0===i.isBone?new e.Bone:s.length>1?new e.Group:1===s.length?s[0]:new e.Object3D,a!==s[0])for(let e=0,t=s.length;e<t;e++)a.add(s[e]);if(i.name&&(a.userData.name=i.name,a.name=o),q(a,i),i.extensions&&X(n,a,i),void 0!==i.matrix){const t=new e.Matrix4;t.fromArray(i.matrix),a.applyMatrix4(t)}else void 0!==i.translation&&a.position.fromArray(i.translation),void 0!==i.rotation&&a.quaternion.fromArray(i.rotation),void 0!==i.scale&&a.scale.fromArray(i.scale);return r.associations.has(a)||r.associations.set(a,{}),r.associations.get(a).nodes=t,a})),this.nodeCache[t]}loadScene(t){const s=this.extensions,n=this.json.scenes[t],r=this,i=new e.Group;n.name&&(i.name=r.createUniqueName(n.name)),q(i,n),n.extensions&&X(s,i,n);const o=n.nodes||[],a=[];for(let e=0,t=o.length;e<t;e++)a.push(r.getDependency("node",o[e]));return Promise.all(a).then((function(t){for(let e=0,s=t.length;e<s;e++)i.add(t[e]);return r.associations=(t=>{const s=new Map;for(const[t,n]of r.associations)(t instanceof e.Material||t instanceof e.Texture)&&s.set(t,n);return t.traverse((e=>{const t=r.associations.get(e);null!=t&&s.set(e,t)})),s})(i),i}))}_createAnimationTracks(t,s,n,r,i){const o=[],a=t.name?t.name:t.uuid,c=[];let l;switch(G[i.path]===G.weights?t.traverse((function(e){e.morphTargetInfluences&&c.push(e.name?e.name:e.uuid)})):c.push(a),G[i.path]){case G.weights:l=e.NumberKeyframeTrack;break;case G.rotation:l=e.QuaternionKeyframeTrack;break;case G.position:case G.scale:l=e.VectorKeyframeTrack;break;default:if(1===n.itemSize)l=e.NumberKeyframeTrack;else l=e.VectorKeyframeTrack}const u=void 0!==r.interpolation?U[r.interpolation]:e.InterpolateLinear,h=this._getArrayFromAccessor(n);for(let e=0,t=c.length;e<t;e++){const t=new l(c[e]+"."+G[i.path],s.array,h,u);"CUBICSPLINE"===r.interpolation&&this._createCubicSplineTrackInterpolant(t),o.push(t)}return o}_getArrayFromAccessor(e){let t=e.array;if(e.normalized){const e=Y(t.constructor),s=new Float32Array(t.length);for(let n=0,r=t.length;n<r;n++)s[n]=t[n]*e;t=s}return t}_createCubicSplineTrackInterpolant(t){t.createInterpolant=function(t){return new(this instanceof e.QuaternionKeyframeTrack?O:C)(this.times,this.values,this.getValueSize()/3,t)},t.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline=!0}}function $(t,s,n){const r=s.attributes,i=[];function o(e,s){return n.getDependency("accessor",e).then((function(e){t.setAttribute(s,e)}))}for(const e in r){const s=D[e]||e.toLowerCase();s in t.attributes||i.push(o(r[e],s))}if(void 0!==s.indices&&!t.index){const e=n.getDependency("accessor",s.indices).then((function(e){t.setIndex(e)}));i.push(e)}return e.ColorManagement.workingColorSpace!==e.LinearSRGBColorSpace&&"COLOR_0"in r&&console.warn(`THREE.GLTFLoader: Converting vertex colors from "srgb-linear" to "${e.ColorManagement.workingColorSpace}" not supported.`),q(t,s),function(t,s,n){const r=s.attributes,i=new e.Box3;if(void 0===r.POSITION)return;{const t=n.json.accessors[r.POSITION],s=t.min,o=t.max;if(void 0===s||void 0===o)return void console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(i.set(new e.Vector3(s[0],s[1],s[2]),new e.Vector3(o[0],o[1],o[2])),t.normalized){const e=Y(H[t.componentType]);i.min.multiplyScalar(e),i.max.multiplyScalar(e)}}const o=s.targets;if(void 0!==o){const t=new e.Vector3,s=new e.Vector3;for(let e=0,r=o.length;e<r;e++){const r=o[e];if(void 0!==r.POSITION){const e=n.json.accessors[r.POSITION],i=e.min,o=e.max;if(void 0!==i&&void 0!==o){if(s.setX(Math.max(Math.abs(i[0]),Math.abs(o[0]))),s.setY(Math.max(Math.abs(i[1]),Math.abs(o[1]))),s.setZ(Math.max(Math.abs(i[2]),Math.abs(o[2]))),e.normalized){const t=Y(H[e.componentType]);s.multiplyScalar(t)}t.max(s)}else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.")}}i.expandByVector(t)}t.boundingBox=i;const a=new e.Sphere;i.getCenter(a.center),a.radius=i.min.distanceTo(i.max)/2,t.boundingSphere=a}(t,s,n),Promise.all(i).then((function(){return void 0!==s.targets?function(e,t,s){let n=!1,r=!1,i=!1;for(let e=0,s=t.length;e<s;e++){const s=t[e];if(void 0!==s.POSITION&&(n=!0),void 0!==s.NORMAL&&(r=!0),void 0!==s.COLOR_0&&(i=!0),n&&r&&i)break}if(!n&&!r&&!i)return Promise.resolve(e);const o=[],a=[],c=[];for(let l=0,u=t.length;l<u;l++){const u=t[l];if(n){const t=void 0!==u.POSITION?s.getDependency("accessor",u.POSITION):e.attributes.position;o.push(t)}if(r){const t=void 0!==u.NORMAL?s.getDependency("accessor",u.NORMAL):e.attributes.normal;a.push(t)}if(i){const t=void 0!==u.COLOR_0?s.getDependency("accessor",u.COLOR_0):e.attributes.color;c.push(t)}}return Promise.all([Promise.all(o),Promise.all(a),Promise.all(c)]).then((function(t){const s=t[0],o=t[1],a=t[2];return n&&(e.morphAttributes.position=s),r&&(e.morphAttributes.normal=o),i&&(e.morphAttributes.color=a),e.morphTargetsRelative=!0,e}))}(t,s.targets,n):t}))}class ee extends t.Loader{constructor(e){super(),this.viewer=e}isSupport(e){return"object"==typeof e&&"string"==typeof e.database&&"function"==typeof e.downloadResource&&/.gltf$/i.test(e.database)}async load(e){const s=`${e.httpClient.serverUrl}${e.path}/${e.database}`,r=new t.GLTFLoadingManager(s),i=new n(r);i.setRequestHeader(e.httpClient.headers);const o=await i.loadAsync(s,(t=>{const{lengthComputable:s,loaded:n,total:r}=t,i=s?n/r:1;this.viewer.emitEvent({type:"geometryprogress",data:i,file:e.file,model:e})}));if(!this.viewer.scene)return this;const a=new t.ModelImpl(o.scene);return a.loader=this,a.viewer=this.viewer,this.viewer.scene.add(a.scene),this.viewer.models.push(a),this.viewer.syncOptions(),this.viewer.syncOverlay(),this.viewer.update(),this.viewer.emitEvent({type:"databasechunk",data:o.scene,file:e.file,model:e}),this}}t.loaders.registerLoader("gltf-cloud",(e=>new ee(e)))}));
@@ -0,0 +1,49 @@
1
+ import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
2
+
3
+ import { loaders, Loader, GLTFLoadingManager, ModelImpl } from "@inweb/viewer-three";
4
+
5
+ class GLTFCloudLoader extends Loader {
6
+ constructor(viewer) {
7
+ super();
8
+ this.viewer = viewer;
9
+ }
10
+ isSupport(file) {
11
+ return typeof file === "object" && typeof file.database === "string" && typeof file.downloadResource === "function" && /.gltf$/i.test(file.database);
12
+ }
13
+ async load(model) {
14
+ const url = `${model.httpClient.serverUrl}${model.path}/${model.database}`;
15
+ const manager = new GLTFLoadingManager(url);
16
+ const loader = new GLTFLoader(manager);
17
+ loader.setRequestHeader(model.httpClient.headers);
18
+ const progress = event => {
19
+ const {lengthComputable: lengthComputable, loaded: loaded, total: total} = event;
20
+ const progress = lengthComputable ? loaded / total : 1;
21
+ this.viewer.emitEvent({
22
+ type: "geometryprogress",
23
+ data: progress,
24
+ file: model.file,
25
+ model: model
26
+ });
27
+ };
28
+ const gltf = await loader.loadAsync(url, progress);
29
+ if (!this.viewer.scene) return this;
30
+ const modelImpl = new ModelImpl(gltf.scene);
31
+ modelImpl.loader = this;
32
+ modelImpl.viewer = this.viewer;
33
+ this.viewer.scene.add(modelImpl.scene);
34
+ this.viewer.models.push(modelImpl);
35
+ this.viewer.syncOptions();
36
+ this.viewer.syncOverlay();
37
+ this.viewer.update();
38
+ this.viewer.emitEvent({
39
+ type: "databasechunk",
40
+ data: gltf.scene,
41
+ file: model.file,
42
+ model: model
43
+ });
44
+ return this;
45
+ }
46
+ }
47
+
48
+ loaders.registerLoader("gltf-cloud", (viewer => new GLTFCloudLoader(viewer)));
49
+ //# sourceMappingURL=GLTFCloudLoader.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GLTFCloudLoader.module.js","sources":["../../../plugins/loaders/GLTFCloudLoader.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GLTFLoader } from \"three/examples/jsm/loaders/GLTFLoader.js\";\nimport { GLTFLoadingManager, Loader, loaders, ModelImpl, Viewer } from \"@inweb/viewer-three\";\n\nclass GLTFCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.database === \"string\" &&\n typeof file.downloadResource === \"function\" &&\n /.gltf$/i.test(file.database)\n );\n }\n\n override async load(model: any): Promise<this> {\n const url = `${model.httpClient.serverUrl}${model.path}/${model.database}`;\n const manager = new GLTFLoadingManager(url);\n\n const loader = new GLTFLoader(manager);\n loader.setRequestHeader(model.httpClient.headers);\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file: model.file, model });\n };\n\n const gltf = await loader.loadAsync(url, progress);\n if (!this.viewer.scene) return this;\n\n const modelImpl = new ModelImpl(gltf.scene);\n modelImpl.loader = this;\n modelImpl.viewer = this.viewer;\n\n this.viewer.scene.add(modelImpl.scene);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: gltf.scene, file: model.file, model });\n\n return this;\n }\n}\n\nloaders.registerLoader(\"gltf-cloud\", (viewer: any) => new GLTFCloudLoader(viewer));\n"],"names":["GLTFCloudLoader","Loader","constructor","viewer","super","this","isSupport","file","database","downloadResource","test","load","model","url","httpClient","serverUrl","path","manager","GLTFLoadingManager","loader","GLTFLoader","setRequestHeader","headers","progress","event","lengthComputable","loaded","total","emitEvent","type","data","gltf","loadAsync","scene","modelImpl","ModelImpl","add","models","push","syncOptions","syncOverlay","update","loaders","registerLoader"],"mappings":";;;;AA0BA,MAAMA,wBAAwBC;IAG5B,WAAAC,CAAYC;QACVC;QACAC,KAAKF,SAASA;;IAGP,SAAAG,CAAUC;QACjB,cACSA,SAAS,mBACTA,KAAKC,aAAa,mBAClBD,KAAKE,qBAAqB,cACjC,UAAUC,KAAKH,KAAKC;;IAIf,UAAMG,CAAKC;QAClB,MAAMC,MAAM,GAAGD,MAAME,WAAWC,YAAYH,MAAMI,QAAQJ,MAAMJ;QAChE,MAAMS,UAAU,IAAIC,mBAAmBL;QAEvC,MAAMM,SAAS,IAAIC,WAAWH;QAC9BE,OAAOE,iBAAiBT,MAAME,WAAWQ;QAEzC,MAAMC,WAAYC;YAChB,OAAMC,kBAAEA,kBAAgBC,QAAEA,QAAMC,OAAEA,SAAUH;YAC5C,MAAMD,WAAWE,mBAAmBC,SAASC,QAAQ;YACrDtB,KAAKF,OAAOyB,UAAU;gBAAEC,MAAM;gBAAoBC,MAAMP;gBAAUhB,MAAMK,MAAML;gBAAMK;;AAAQ;QAG9F,MAAMmB,aAAaZ,OAAOa,UAAUnB,KAAKU;QACzC,KAAKlB,KAAKF,OAAO8B,OAAO,OAAO5B;QAE/B,MAAM6B,YAAY,IAAIC,UAAUJ,KAAKE;QACrCC,UAAUf,SAASd;QACnB6B,UAAU/B,SAASE,KAAKF;QAExBE,KAAKF,OAAO8B,MAAMG,IAAIF,UAAUD;QAChC5B,KAAKF,OAAOkC,OAAOC,KAAKJ;QAExB7B,KAAKF,OAAOoC;QACZlC,KAAKF,OAAOqC;QACZnC,KAAKF,OAAOsC;QAEZpC,KAAKF,OAAOyB,UAAU;YAAEC,MAAM;YAAiBC,MAAMC,KAAKE;YAAO1B,MAAMK,MAAML;YAAMK;;QAEnF,OAAOP;;;;AAIXqC,QAAQC,eAAe,eAAexC,UAAgB,IAAIH,gBAAgBG"}
@@ -783,8 +783,11 @@
783
783
  object.userData = { handle, ...object.userData };
784
784
  handle++;
785
785
  });
786
- this.viewer.scene.add(scene);
787
- this.viewer.models.push(scene);
786
+ const modelImpl = new viewerThree.ModelImpl(scene);
787
+ modelImpl.loader = this;
788
+ modelImpl.viewer = this.viewer;
789
+ this.viewer.scene.add(modelImpl.scene);
790
+ this.viewer.models.push(modelImpl);
788
791
  this.viewer.syncOptions();
789
792
  this.viewer.syncOverlay();
790
793
  this.viewer.update();
@@ -815,7 +818,7 @@
815
818
  // By use of this software, its documentation or related materials, you
816
819
  // acknowledge and accept the above terms.
817
820
  ///////////////////////////////////////////////////////////////////////////////
818
- class IFCXCloudFileLoader extends viewerThree.Loader {
821
+ class IFCXCloudLoader extends viewerThree.Loader {
819
822
  constructor(viewer) {
820
823
  super();
821
824
  this.viewer = viewer;
@@ -842,8 +845,11 @@
842
845
  object.userData = { handle, ...object.userData };
843
846
  handle++;
844
847
  });
845
- this.viewer.scene.add(scene);
846
- this.viewer.models.push(scene);
848
+ const modelImpl = new viewerThree.ModelImpl(scene);
849
+ modelImpl.loader = this;
850
+ modelImpl.viewer = this.viewer;
851
+ this.viewer.scene.add(modelImpl.scene);
852
+ this.viewer.models.push(modelImpl);
847
853
  this.viewer.syncOptions();
848
854
  this.viewer.syncOverlay();
849
855
  this.viewer.update();
@@ -875,7 +881,7 @@
875
881
  // acknowledge and accept the above terms.
876
882
  ///////////////////////////////////////////////////////////////////////////////
877
883
  viewerThree.loaders.registerLoader("ifcx-file", (viewer) => new IFCXFileLoader(viewer));
878
- viewerThree.loaders.registerLoader("ifcx-cloud-file", (viewer) => new IFCXCloudFileLoader(viewer));
884
+ viewerThree.loaders.registerLoader("ifcx-cloud", (viewer) => new IFCXCloudLoader(viewer));
879
885
 
880
886
  }));
881
887
  //# sourceMappingURL=IFCXLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IFCXLoader.js","sources":["../../../plugins/loaders/IFCX/render.js","../../../plugins/loaders/IFCX/IFCXLoader.ts","../../../plugins/loaders/IFCXFileLoader.ts","../../../plugins/loaders/IFCXCloudFileLoader.ts","../../../plugins/loaders/IFCXLoader.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\n// Repository: https://github.com/buildingSMART/IFC5-development\n// Original File: docs/viewer/render.mjs\n// Commit SHA-1: 83a7ae862232c90065d1bd03fcd538315e7d2563\n// Commit Date: 20.05.2025 21:00:52\n\n// (C) buildingSMART International\n// published under MIT license\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable prefer-const */\n/* eslint-disable no-useless-catch */\n\nimport {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n} from \"three\";\n\nconst THREE = {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n};\n\n// composed-object.ts\nfunction getChildByName(root, childName, skip = 0) {\n let fragments = childName.replace(/^<\\/|^\\/|>$/g, \"\").split(\"/\");\n for (let i = 0; i < skip; ++i) {\n fragments.shift();\n }\n let start = root;\n while (fragments.length && start && start.children) {\n // console.log(start, fragments[0]);\n let f = fragments.shift();\n start = start.children.find((i) => i.name.split(\"/\").reverse()[0] === f);\n }\n if (fragments.length == 0) {\n return start;\n }\n}\n\n// compose-alpha.ts\nfunction GetNode(node, path) {\n if (path === \"\") return node;\n let parts = path.split(\"/\");\n let child = node.children.get(parts[0]);\n if (child) {\n if (parts.length === 1) {\n return child;\n }\n return GetNode(child, GetTail(path));\n } else {\n return null;\n }\n}\nfunction GetHead(path) {\n return path.split(\"/\")[0];\n}\nfunction GetTail(path) {\n let parts = path.split(\"/\");\n parts.shift();\n return parts.join(\"/\");\n}\nfunction MakeNode(node) {\n return {\n node,\n children: /* @__PURE__ */ new Map(),\n attributes: /* @__PURE__ */ new Map(),\n };\n}\nfunction ConvertToCompositionNode(path, inputNodes) {\n let compositionNode = {\n path,\n children: {},\n inherits: {},\n attributes: {},\n };\n inputNodes.forEach((node) => {\n Object.keys(node.children).forEach((childName) => {\n compositionNode.children[childName] = node.children[childName];\n });\n Object.keys(node.inherits).forEach((inheritName) => {\n let ih = node.inherits[inheritName];\n if (ih === null) {\n delete compositionNode.inherits[inheritName];\n } else {\n compositionNode.inherits[inheritName] = ih;\n }\n });\n Object.keys(node.attributes).forEach((attrName) => {\n compositionNode.attributes[attrName] = node.attributes[attrName];\n });\n });\n return compositionNode;\n}\nfunction MMSet(map, key, value) {\n if (map.has(key)) {\n map.get(key)?.push(value);\n } else {\n map.set(key, [value]);\n }\n}\nfunction FindRootsOrCycles(nodes) {\n let dependencies = /* @__PURE__ */ new Map();\n let dependents = /* @__PURE__ */ new Map();\n nodes.forEach((node, path) => {\n Object.keys(node.inherits).forEach((inheritName) => {\n MMSet(dependencies, path, node.inherits[inheritName]);\n MMSet(dependents, node.inherits[inheritName], path);\n });\n Object.keys(node.children).forEach((childName) => {\n MMSet(dependencies, path, node.children[childName]);\n MMSet(dependents, node.children[childName], path);\n });\n });\n let paths = [...nodes.keys()];\n let perm = {};\n let temp = {};\n function visit(path) {\n if (perm[path]) return;\n if (temp[path]) throw new Error(`CYCLE!`);\n temp[path] = true;\n let deps = dependencies.get(path);\n if (deps) {\n deps.forEach((dep) => visit(dep));\n }\n perm[path] = true;\n }\n let roots = /* @__PURE__ */ new Set();\n try {\n paths.forEach((path) => {\n if (!dependents.has(path) && path.indexOf(\"/\") === -1) {\n roots.add(path);\n }\n visit(path);\n });\n } catch (e) {\n return null;\n }\n return roots;\n}\nfunction ConvertNodes(input) {\n let compositionNodes = /* @__PURE__ */ new Map();\n for (let [path, inputNodes] of input) {\n compositionNodes.set(path, ConvertToCompositionNode(path, inputNodes));\n }\n return compositionNodes;\n}\nvar CycleError = class extends Error {};\nfunction ExpandFirstRootInInput(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n return ExpandNewNode([...roots.values()][0], nodes);\n}\nfunction CreateArtificialRoot(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n let pseudoRoot = {\n node: \"\",\n attributes: /* @__PURE__ */ new Map(),\n children: /* @__PURE__ */ new Map(),\n };\n roots.forEach((root) => {\n pseudoRoot.children.set(root, ExpandNewNode(root, nodes));\n });\n return pseudoRoot;\n}\nfunction ExpandNewNode(node, nodes) {\n return ExpandNode(node, MakeNode(node), nodes);\n}\nfunction ExpandNode(path, node, nodes) {\n let input = nodes.get(path);\n if (input) {\n AddDataFromInput(input, node, nodes);\n }\n node.children.forEach((child, name) => {\n ExpandNode(`${path}/${name}`, child, nodes);\n });\n return node;\n}\nfunction AddDataFromInput(input, node, nodes) {\n Object.values(input.inherits).forEach((inherit) => {\n let classNode = ExpandNewNode(GetHead(inherit), nodes);\n let subnode = GetNode(classNode, GetTail(inherit));\n if (!subnode) throw new Error(`Unknown node ${inherit}`);\n subnode.children.forEach((child, childName) => {\n node.children.set(childName, child);\n });\n for (let [attrID, attr] of subnode.attributes) {\n node.attributes.set(attrID, attr);\n }\n });\n Object.entries(input.children).forEach(([childName, child]) => {\n if (child !== null) {\n let classNode = ExpandNewNode(GetHead(child), nodes);\n let subnode = GetNode(classNode, GetTail(child));\n if (!subnode) throw new Error(`Unknown node ${child}`);\n node.children.set(childName, subnode);\n } else {\n node.children.delete(childName);\n }\n });\n Object.entries(input.attributes).forEach(([attrID, attr]) => {\n node.attributes.set(attrID, attr);\n });\n}\n\n// workflow-alpha.ts\nfunction MMSet2(map, key, value) {\n if (map.has(key)) {\n map.get(key)?.push(value);\n } else {\n map.set(key, [value]);\n }\n}\nfunction ToInputNodes(data) {\n let inputNodes = /* @__PURE__ */ new Map();\n data.forEach((ifcxNode) => {\n let node = {\n path: ifcxNode.path,\n children: ifcxNode.children ? ifcxNode.children : {},\n inherits: ifcxNode.inherits ? ifcxNode.inherits : {},\n attributes: ifcxNode.attributes ? ifcxNode.attributes : {},\n };\n MMSet2(inputNodes, node.path, node);\n });\n return inputNodes;\n}\nvar SchemaValidationError = class extends Error {};\nfunction ValidateAttributeValue(desc, value, path, schemas) {\n if (desc.inherits) {\n desc.inherits.forEach((inheritedSchemaID) => {\n let inheritedSchema = schemas[inheritedSchemaID];\n if (!inheritedSchema) {\n throw new SchemaValidationError(`Unknown inherited schema id \"${desc.inherits}\"`);\n }\n ValidateAttributeValue(inheritedSchema.value, value, path, schemas);\n });\n }\n if (desc.dataType === \"Boolean\") {\n if (typeof value !== \"boolean\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type boolean`);\n }\n } else if (desc.dataType === \"String\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"DateTime\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type date`);\n }\n } else if (desc.dataType === \"Enum\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n let found = desc.enumRestrictions.options.filter((option) => option === value).length === 1;\n if (!found) {\n throw new SchemaValidationError(`Expected \"${value}\" to be one of [${desc.enumRestrictions.options.join(\",\")}]`);\n }\n } else if (desc.dataType === \"Integer\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type int`);\n }\n } else if (desc.dataType === \"Real\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type real`);\n }\n } else if (desc.dataType === \"Relation\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"Object\") {\n if (typeof value !== \"object\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type object`);\n }\n if (desc.objectRestrictions) {\n Object.keys(desc.objectRestrictions.values).forEach((key) => {\n if (!Object.hasOwn(value, key)) {\n throw new SchemaValidationError(`Expected \"${value}\" to have key ${key}`);\n }\n ValidateAttributeValue(desc.objectRestrictions.values[key], value[key], path + \".\" + key, schemas);\n });\n }\n } else if (desc.dataType === \"Array\") {\n if (!Array.isArray(value)) {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type array`);\n }\n value.forEach((entry) => {\n ValidateAttributeValue(desc.arrayRestrictions.value, entry, path + \".<array>.\", schemas);\n });\n } else {\n throw new SchemaValidationError(`Unexpected datatype ${desc.dataType}`);\n }\n}\nfunction Validate(schemas, inputNodes) {\n inputNodes.forEach((node) => {\n Object.keys(node.attributes).forEach((schemaID) => {\n if (!schemas[schemaID]) {\n throw new SchemaValidationError(`Missing schema \"${schemaID}\" referenced by [\"${node.path}\"].attributes`);\n }\n let schema = schemas[schemaID];\n let value = node.attributes[schemaID];\n try {\n ValidateAttributeValue(schema.value, value, \"\", schemas);\n } catch (e) {\n if (e instanceof SchemaValidationError) {\n throw new SchemaValidationError(`Error validating [\"${node.path}\"].attributes[\"${schemaID}\"]: ${e.message}`);\n } else {\n throw e;\n }\n }\n });\n });\n}\nfunction LoadIfcxFile(file, checkSchemas = true, createArtificialRoot = false) {\n let inputNodes = ToInputNodes(file.data);\n let compositionNodes = ConvertNodes(inputNodes);\n try {\n if (checkSchemas) {\n Validate(file.schemas, compositionNodes);\n }\n } catch (e) {\n throw e;\n }\n if (createArtificialRoot) {\n return CreateArtificialRoot(compositionNodes);\n } else {\n return ExpandFirstRootInInput(compositionNodes);\n }\n}\nfunction Federate(files) {\n let result = {\n header: files[0].header,\n schemas: {},\n data: [],\n };\n files.forEach((file) => {\n Object.keys(file.schemas).forEach((schemaID) => (result.schemas[schemaID] = file.schemas[schemaID]));\n });\n files.forEach((file) => {\n file.data.forEach((node) => result.data.push(node));\n });\n return Prune(result);\n}\nfunction Collapse(nodes, deleteEmpty = false) {\n let result = {\n path: nodes[0].path,\n children: {},\n inherits: {},\n attributes: {},\n };\n nodes.forEach((node) => {\n Object.keys(node.children).forEach((name) => {\n result.children[name] = node.children[name];\n });\n Object.keys(node.inherits).forEach((name) => {\n result.inherits[name] = node.inherits[name];\n });\n Object.keys(node.attributes).forEach((name) => {\n result.attributes[name] = node.attributes[name];\n });\n });\n if (deleteEmpty) {\n let empty = true;\n Object.keys(result.children).forEach((name) => {\n if (result.children[name] !== null) empty = false;\n });\n Object.keys(result.inherits).forEach((name) => {\n if (result.inherits[name] !== null) empty = false;\n });\n Object.keys(result.attributes).forEach((name) => {\n if (result.attributes[name] !== null) empty = false;\n });\n if (empty) return null;\n }\n return result;\n}\nfunction Prune(file, deleteEmpty = false) {\n let result = {\n header: file.header,\n schemas: file.schemas,\n data: [],\n };\n let inputNodes = ToInputNodes(file.data);\n inputNodes.forEach((nodes) => {\n let collapsed = Collapse(nodes, deleteEmpty);\n if (collapsed)\n result.data.push({\n path: collapsed.path,\n children: collapsed.children,\n inherits: collapsed.inherits,\n attributes: collapsed.attributes,\n });\n });\n return result;\n}\n\n// compose-flattened.ts\nfunction TreeNodeToComposedObject(path, node, schemas) {\n let co = {\n name: path,\n attributes: {},\n children: [],\n };\n node.children.forEach((childNode, childName) => {\n co.children?.push(TreeNodeToComposedObject(`${path}/${childName}`, childNode, schemas));\n });\n node.attributes.forEach((attr, attrName) => {\n if (attr && typeof attr === \"object\" && !Array.isArray(attr)) {\n Object.keys(attr).forEach((compname) => {\n co.attributes[`${attrName}::${compname}`] = attr[compname];\n });\n } else {\n let schema = schemas[attrName];\n if (schema && schema.value.quantityKind) {\n let postfix = \"\";\n let quantityKind = schema.value.quantityKind;\n if (quantityKind === \"Length\") {\n postfix = \"m\";\n } else if (quantityKind === \"Volume\") {\n postfix = \"m\" + String.fromCodePoint(179);\n }\n co.attributes[attrName] = `${attr} ${postfix}`;\n } else {\n co.attributes[attrName] = attr;\n }\n }\n });\n if (Object.keys(co.attributes).length === 0) delete co.attributes;\n return co;\n}\nfunction compose3(files) {\n let federated = Federate(files);\n let tree = LoadIfcxFile(federated, true, true);\n return TreeNodeToComposedObject(\"\", tree, federated.schemas);\n}\n\n// render.ts\n// var controls;\n// var renderer;\nvar scene;\nvar camera;\nvar datas = [];\nvar autoCamera = true;\n// var THREE = window[\"THREE\"];\nfunction init() {\n scene = new THREE.Scene();\n camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100);\n camera.up.set(0, 0, 1);\n camera.position.set(50, 50, 50);\n camera.lookAt(0, 0, 0);\n // const nd = document.querySelector(\".viewport\");\n // renderer = new THREE.WebGLRenderer({\n // alpha: true,\n // logarithmicDepthBuffer: true,\n // });\n // renderer.setSize(nd.offsetWidth, nd.offsetHeight);\n // controls = new THREE.OrbitControls(camera, renderer.domElement);\n // controls.enableDamping = true;\n // controls.dampingFactor = 0.25;\n // nd.appendChild(renderer.domElement);\n scene.add(camera);\n return scene;\n}\nfunction HasAttr(node, attrName) {\n if (!node || !node.attributes) return false;\n return !!node.attributes[attrName];\n}\nfunction FindChildWithAttr(node, attrName) {\n if (!node || !node.children) return void 0;\n for (let i = 0; i < node.children.length; i++) {\n if (HasAttr(node.children[i], attrName)) {\n return node.children[i];\n }\n }\n return void 0;\n}\nfunction createMaterialFromParent(parent, root) {\n let reference = parent.attributes[\"usd::usdshade::materialbindingapi::material::binding\"];\n let material = {\n color: new THREE.Color(0.6, 0.6, 0.6),\n transparent: false,\n opacity: 1,\n };\n if (reference) {\n const materialNode = getChildByName(root, reference.ref);\n if (materialNode) {\n let color = materialNode?.attributes[\"bsi::presentation::diffuseColor\"];\n material.color = new THREE.Color(...color);\n if (materialNode?.attributes[\"bsi::presentation::opacity\"]) {\n material.transparent = true;\n material.opacity = materialNode.attributes[\"bsi::presentation::opacity\"];\n }\n }\n }\n return material;\n}\nfunction createCurveFromJson(node, parent, root) {\n let points = new Float32Array(node.attributes[\"usd::usdgeom::basiscurves::points\"].flat());\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n const material = createMaterialFromParent(parent, root);\n let lineMaterial = new THREE.LineBasicMaterial({ ...material });\n lineMaterial.color.multiplyScalar(0.8);\n return new THREE.Line(geometry, lineMaterial);\n}\nfunction createMeshFromJson(node, parent, root) {\n let points = new Float32Array(node.attributes[\"usd::usdgeom::mesh::points\"].flat());\n let indices = new Uint16Array(node.attributes[\"usd::usdgeom::mesh::faceVertexIndices\"]);\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n geometry.computeVertexNormals();\n const material = createMaterialFromParent(parent, root);\n let meshMaterial = new THREE.MeshBasicMaterial({ ...material });\n return new THREE.Mesh(geometry, meshMaterial);\n}\nfunction traverseTree(node, parent, root, parentNode = void 0) {\n let elem = new THREE.Group();\n if (HasAttr(node, \"usd::usdgeom::visibility::visibility\")) {\n if (node.attributes[\"usd::usdgeom::visibility::visibility\"] === \"invisible\") {\n return;\n }\n } else if (HasAttr(node, \"usd::usdgeom::mesh::points\")) {\n elem = createMeshFromJson(node, parentNode, root);\n } else if (HasAttr(node, \"usd::usdgeom::basiscurves::points\")) {\n elem = createCurveFromJson(node, parentNode, root);\n }\n parent.add(elem);\n if (node !== root) {\n elem.matrixAutoUpdate = false;\n let matrixNode =\n node.attributes && node.attributes[\"usd::xformop::transform\"]\n ? node.attributes[\"usd::xformop::transform\"].flat()\n : null;\n if (matrixNode) {\n let matrix = new THREE.Matrix4();\n matrix.set(...matrixNode);\n matrix.transpose();\n elem.matrix = matrix;\n }\n }\n (node.children || []).forEach((child) => traverseTree(child, elem || parent, root, node));\n}\n// function encodeHtmlEntities(str) {\n// const div = document.createElement(\"div\");\n// div.textContent = str;\n// return div.innerHTML;\n// }\n// var icons = {\n// \"usd::usdgeom::mesh::points\": \"deployed_code\",\n// \"usd::usdgeom::basiscurves::points\": \"line_curve\",\n// \"usd::usdshade::material::outputs::surface.connect\": \"line_style\",\n// };\n// function buildDomTree(prim, node) {\n// const elem = document.createElement(\"div\");\n// let span;\n// elem.appendChild(document.createTextNode(prim.name ? prim.name.split(\"/\").reverse()[0] : \"root\"));\n// elem.appendChild((span = document.createElement(\"span\")));\n// Object.entries(icons).forEach(([k, v]) => (span.innerText += (prim.attributes || {})[k] ? v : \" \"));\n// span.className = \"material-symbols-outlined\";\n// elem.onclick = (evt) => {\n// let rows = [[\"name\", prim.name]]\n// .concat(Object.entries(prim.attributes))\n// .map(\n// ([k, v]) =>\n// `<tr><td>${encodeHtmlEntities(k)}</td><td>${encodeHtmlEntities(typeof v === \"object\" ? JSON.stringify(v) : v)}</td>`\n// )\n// .join(\"\");\n// document.querySelector(\".attributes .table\").innerHTML = `<table border=\"0\">${rows}</table>`;\n// evt.stopPropagation();\n// };\n// node.appendChild(elem);\n// (prim.children || []).forEach((p) => buildDomTree(p, elem));\n// }\nfunction composeAndRender() {\n if (scene) {\n scene.children = [];\n }\n // document.querySelector(\".tree\").innerHTML = \"\";\n if (datas.length === 0) {\n return;\n }\n let tree = null;\n let dataArray = datas.map((arr) => arr[1]);\n tree = compose3(dataArray);\n if (!tree) {\n console.error(\"No result from composition\");\n return;\n }\n traverseTree(tree, scene || init(), tree);\n if (autoCamera) {\n const boundingBox = new THREE.Box3();\n boundingBox.setFromObject(scene);\n if (!boundingBox.isEmpty()) {\n let avg = boundingBox.min.clone().add(boundingBox.max).multiplyScalar(0.5);\n let ext = boundingBox.max.clone().sub(boundingBox.min).length();\n camera.position.copy(avg.clone().add(new THREE.Vector3(1, 1, 1).normalize().multiplyScalar(ext)));\n camera.far = ext * 3;\n camera.updateProjectionMatrix();\n // controls.target.copy(avg);\n // controls.update();\n autoCamera = false;\n }\n }\n // buildDomTree(tree, document.querySelector(\".tree\"));\n // animate();\n}\n// function createLayerDom() {\n// document.querySelector(\".layers div\").innerHTML = \"\";\n// datas.forEach(([name, _], index) => {\n// const elem = document.createElement(\"div\");\n// elem.appendChild(document.createTextNode(name));\n// [\"\\u25B3\", \"\\u25BD\", \"\\xD7\"].reverse().forEach((lbl, cmd) => {\n// const btn = document.createElement(\"span\");\n// btn.onclick = (evt) => {\n// evt.stopPropagation();\n// if (cmd === 2) {\n// if (index > 0) {\n// [datas[index], datas[index - 1]] = [datas[index - 1], datas[index]];\n// }\n// } else if (cmd === 1) {\n// if (index < datas.length - 1) {\n// [datas[index], datas[index + 1]] = [datas[index + 1], datas[index]];\n// }\n// } else if (cmd === 0) {\n// datas.splice(index, 1);\n// }\n// composeAndRender();\n// createLayerDom();\n// };\n// btn.appendChild(document.createTextNode(lbl));\n// elem.appendChild(btn);\n// });\n// document.querySelector(\".layers div\").appendChild(elem);\n// });\n// }\n// function addModel(name, m) {\n// datas.push([name, m]);\n// createLayerDom();\n// composeAndRender();\n// }\n// function animate() {\n// requestAnimationFrame(animate);\n// controls.update();\n// renderer.render(scene, camera);\n// }\n// export { composeAndRender, addModel as default };\n\nexport function parse(m, name) {\n datas.push([name, m]);\n composeAndRender();\n return scene;\n}\nexport function clear() {\n scene = undefined;\n datas.length = 0;\n autoCamera = true;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { FileLoader, Loader, Scene } from \"three\";\nimport { parse, clear } from \"./render.js\";\n\nclass IFCXLoader extends Loader<Scene> {\n override load(\n url: string,\n onLoad: (data: Scene) => void,\n onProgress?: (event: ProgressEvent) => void,\n onError?: (err: unknown) => void\n ) {\n const manager = this.manager;\n\n manager.itemStart(url);\n\n const _onLoad = (scene: Scene) => {\n onLoad(scene);\n manager.itemEnd(url);\n };\n\n const _onError = (e: unknown) => {\n if (onError) onError(e);\n else console.error(e);\n manager.itemError(url);\n manager.itemEnd(url);\n };\n\n const loader = new FileLoader(this.manager);\n\n loader.setPath(this.path);\n loader.setResponseType(\"json\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n\n loader.load(url, (json) => this.parse(json, _onLoad, _onError), onProgress, onError);\n }\n\n parse(json: any, onLoad: (scene: Scene) => void, onError: (err: unknown) => void) {\n try {\n onLoad(parse(json));\n } catch (e) {\n onError(e);\n } finally {\n clear();\n }\n }\n}\n\nexport { IFCXLoader };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GLTFLoadingManager, GLTFLoadParams, Loader, Viewer } from \"@inweb/viewer-three\";\nimport { IFCXLoader } from \"./IFCX/IFCXLoader\";\n\nexport class IFCXFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /(ifcx)$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params?: GLTFLoadParams): Promise<this> {\n const manager = new GLTFLoadingManager(file, params);\n\n const loader = new IFCXLoader(manager);\n loader.setPath(manager.path);\n loader.setCrossOrigin(params.crossOrigin || loader.crossOrigin);\n loader.setWithCredentials(params.withCredentials || loader.withCredentials);\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const scene = await loader.loadAsync(manager.fileURL, progress);\n if (!this.viewer.scene) return this;\n\n let handle = 0;\n scene.traverse((object) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n this.viewer.scene.add(scene);\n this.viewer.models.push(scene);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Loader, Viewer } from \"@inweb/viewer-three\";\nimport { parse, clear } from \"./IFCX/render.js\";\n\nexport class IFCXCloudFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.type === \"string\" &&\n typeof file.download === \"function\" &&\n /.ifcx$/i.test(file.type)\n );\n }\n\n override async load(file: any): Promise<this> {\n const progress = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const arrayBuffer = await file.download(progress, this.abortController.signal);\n if (!this.viewer.scene) return this;\n\n const textDecoder = new TextDecoder();\n const json = JSON.parse(textDecoder.decode(arrayBuffer));\n\n const scene = parse(json);\n clear();\n\n let handle = 0;\n scene.traverse((object: any) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n this.viewer.scene.add(scene);\n this.viewer.models.push(scene);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { loaders } from \"@inweb/viewer-three\";\n\nimport { IFCXFileLoader } from \"./IFCXFileLoader\";\nimport { IFCXCloudFileLoader } from \"./IFCXCloudFileLoader\";\n\nloaders.registerLoader(\"ifcx-file\", (viewer: any) => new IFCXFileLoader(viewer));\nloaders.registerLoader(\"ifcx-cloud-file\", (viewer: any) => new IFCXCloudFileLoader(viewer));\n"],"names":["Box3","BufferAttribute","BufferGeometry","Color","Group","Line","LineBasicMaterial","Matrix4","Mesh","MeshBasicMaterial","PerspectiveCamera","Scene","Vector3","Loader","FileLoader","GLTFLoadingManager","loaders"],"mappings":"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"}
1
+ {"version":3,"file":"IFCXLoader.js","sources":["../../../plugins/loaders/IFCX/render.js","../../../plugins/loaders/IFCX/IFCXLoader.ts","../../../plugins/loaders/IFCXFileLoader.ts","../../../plugins/loaders/IFCXCloudLoader.ts","../../../plugins/loaders/IFCXLoader.ts"],"sourcesContent":["///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\n// Repository: https://github.com/buildingSMART/IFC5-development\n// Original File: docs/viewer/render.mjs\n// Commit SHA-1: 83a7ae862232c90065d1bd03fcd538315e7d2563\n// Commit Date: 20.05.2025 21:00:52\n\n// (C) buildingSMART International\n// published under MIT license\n\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable prefer-const */\n/* eslint-disable no-useless-catch */\n\nimport {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n} from \"three\";\n\nconst THREE = {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Color,\n Group,\n Line,\n LineBasicMaterial,\n Matrix4,\n Mesh,\n MeshBasicMaterial,\n PerspectiveCamera,\n Scene,\n Vector3,\n};\n\n// composed-object.ts\nfunction getChildByName(root, childName, skip = 0) {\n let fragments = childName.replace(/^<\\/|^\\/|>$/g, \"\").split(\"/\");\n for (let i = 0; i < skip; ++i) {\n fragments.shift();\n }\n let start = root;\n while (fragments.length && start && start.children) {\n // console.log(start, fragments[0]);\n let f = fragments.shift();\n start = start.children.find((i) => i.name.split(\"/\").reverse()[0] === f);\n }\n if (fragments.length == 0) {\n return start;\n }\n}\n\n// compose-alpha.ts\nfunction GetNode(node, path) {\n if (path === \"\") return node;\n let parts = path.split(\"/\");\n let child = node.children.get(parts[0]);\n if (child) {\n if (parts.length === 1) {\n return child;\n }\n return GetNode(child, GetTail(path));\n } else {\n return null;\n }\n}\nfunction GetHead(path) {\n return path.split(\"/\")[0];\n}\nfunction GetTail(path) {\n let parts = path.split(\"/\");\n parts.shift();\n return parts.join(\"/\");\n}\nfunction MakeNode(node) {\n return {\n node,\n children: /* @__PURE__ */ new Map(),\n attributes: /* @__PURE__ */ new Map(),\n };\n}\nfunction ConvertToCompositionNode(path, inputNodes) {\n let compositionNode = {\n path,\n children: {},\n inherits: {},\n attributes: {},\n };\n inputNodes.forEach((node) => {\n Object.keys(node.children).forEach((childName) => {\n compositionNode.children[childName] = node.children[childName];\n });\n Object.keys(node.inherits).forEach((inheritName) => {\n let ih = node.inherits[inheritName];\n if (ih === null) {\n delete compositionNode.inherits[inheritName];\n } else {\n compositionNode.inherits[inheritName] = ih;\n }\n });\n Object.keys(node.attributes).forEach((attrName) => {\n compositionNode.attributes[attrName] = node.attributes[attrName];\n });\n });\n return compositionNode;\n}\nfunction MMSet(map, key, value) {\n if (map.has(key)) {\n map.get(key)?.push(value);\n } else {\n map.set(key, [value]);\n }\n}\nfunction FindRootsOrCycles(nodes) {\n let dependencies = /* @__PURE__ */ new Map();\n let dependents = /* @__PURE__ */ new Map();\n nodes.forEach((node, path) => {\n Object.keys(node.inherits).forEach((inheritName) => {\n MMSet(dependencies, path, node.inherits[inheritName]);\n MMSet(dependents, node.inherits[inheritName], path);\n });\n Object.keys(node.children).forEach((childName) => {\n MMSet(dependencies, path, node.children[childName]);\n MMSet(dependents, node.children[childName], path);\n });\n });\n let paths = [...nodes.keys()];\n let perm = {};\n let temp = {};\n function visit(path) {\n if (perm[path]) return;\n if (temp[path]) throw new Error(`CYCLE!`);\n temp[path] = true;\n let deps = dependencies.get(path);\n if (deps) {\n deps.forEach((dep) => visit(dep));\n }\n perm[path] = true;\n }\n let roots = /* @__PURE__ */ new Set();\n try {\n paths.forEach((path) => {\n if (!dependents.has(path) && path.indexOf(\"/\") === -1) {\n roots.add(path);\n }\n visit(path);\n });\n } catch (e) {\n return null;\n }\n return roots;\n}\nfunction ConvertNodes(input) {\n let compositionNodes = /* @__PURE__ */ new Map();\n for (let [path, inputNodes] of input) {\n compositionNodes.set(path, ConvertToCompositionNode(path, inputNodes));\n }\n return compositionNodes;\n}\nvar CycleError = class extends Error {};\nfunction ExpandFirstRootInInput(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n return ExpandNewNode([...roots.values()][0], nodes);\n}\nfunction CreateArtificialRoot(nodes) {\n let roots = FindRootsOrCycles(nodes);\n if (!roots) {\n throw new CycleError();\n }\n let pseudoRoot = {\n node: \"\",\n attributes: /* @__PURE__ */ new Map(),\n children: /* @__PURE__ */ new Map(),\n };\n roots.forEach((root) => {\n pseudoRoot.children.set(root, ExpandNewNode(root, nodes));\n });\n return pseudoRoot;\n}\nfunction ExpandNewNode(node, nodes) {\n return ExpandNode(node, MakeNode(node), nodes);\n}\nfunction ExpandNode(path, node, nodes) {\n let input = nodes.get(path);\n if (input) {\n AddDataFromInput(input, node, nodes);\n }\n node.children.forEach((child, name) => {\n ExpandNode(`${path}/${name}`, child, nodes);\n });\n return node;\n}\nfunction AddDataFromInput(input, node, nodes) {\n Object.values(input.inherits).forEach((inherit) => {\n let classNode = ExpandNewNode(GetHead(inherit), nodes);\n let subnode = GetNode(classNode, GetTail(inherit));\n if (!subnode) throw new Error(`Unknown node ${inherit}`);\n subnode.children.forEach((child, childName) => {\n node.children.set(childName, child);\n });\n for (let [attrID, attr] of subnode.attributes) {\n node.attributes.set(attrID, attr);\n }\n });\n Object.entries(input.children).forEach(([childName, child]) => {\n if (child !== null) {\n let classNode = ExpandNewNode(GetHead(child), nodes);\n let subnode = GetNode(classNode, GetTail(child));\n if (!subnode) throw new Error(`Unknown node ${child}`);\n node.children.set(childName, subnode);\n } else {\n node.children.delete(childName);\n }\n });\n Object.entries(input.attributes).forEach(([attrID, attr]) => {\n node.attributes.set(attrID, attr);\n });\n}\n\n// workflow-alpha.ts\nfunction MMSet2(map, key, value) {\n if (map.has(key)) {\n map.get(key)?.push(value);\n } else {\n map.set(key, [value]);\n }\n}\nfunction ToInputNodes(data) {\n let inputNodes = /* @__PURE__ */ new Map();\n data.forEach((ifcxNode) => {\n let node = {\n path: ifcxNode.path,\n children: ifcxNode.children ? ifcxNode.children : {},\n inherits: ifcxNode.inherits ? ifcxNode.inherits : {},\n attributes: ifcxNode.attributes ? ifcxNode.attributes : {},\n };\n MMSet2(inputNodes, node.path, node);\n });\n return inputNodes;\n}\nvar SchemaValidationError = class extends Error {};\nfunction ValidateAttributeValue(desc, value, path, schemas) {\n if (desc.inherits) {\n desc.inherits.forEach((inheritedSchemaID) => {\n let inheritedSchema = schemas[inheritedSchemaID];\n if (!inheritedSchema) {\n throw new SchemaValidationError(`Unknown inherited schema id \"${desc.inherits}\"`);\n }\n ValidateAttributeValue(inheritedSchema.value, value, path, schemas);\n });\n }\n if (desc.dataType === \"Boolean\") {\n if (typeof value !== \"boolean\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type boolean`);\n }\n } else if (desc.dataType === \"String\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"DateTime\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type date`);\n }\n } else if (desc.dataType === \"Enum\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n let found = desc.enumRestrictions.options.filter((option) => option === value).length === 1;\n if (!found) {\n throw new SchemaValidationError(`Expected \"${value}\" to be one of [${desc.enumRestrictions.options.join(\",\")}]`);\n }\n } else if (desc.dataType === \"Integer\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type int`);\n }\n } else if (desc.dataType === \"Real\") {\n if (typeof value !== \"number\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type real`);\n }\n } else if (desc.dataType === \"Relation\") {\n if (typeof value !== \"string\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type string`);\n }\n } else if (desc.dataType === \"Object\") {\n if (typeof value !== \"object\") {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type object`);\n }\n if (desc.objectRestrictions) {\n Object.keys(desc.objectRestrictions.values).forEach((key) => {\n if (!Object.hasOwn(value, key)) {\n throw new SchemaValidationError(`Expected \"${value}\" to have key ${key}`);\n }\n ValidateAttributeValue(desc.objectRestrictions.values[key], value[key], path + \".\" + key, schemas);\n });\n }\n } else if (desc.dataType === \"Array\") {\n if (!Array.isArray(value)) {\n throw new SchemaValidationError(`Expected \"${value}\" to be of type array`);\n }\n value.forEach((entry) => {\n ValidateAttributeValue(desc.arrayRestrictions.value, entry, path + \".<array>.\", schemas);\n });\n } else {\n throw new SchemaValidationError(`Unexpected datatype ${desc.dataType}`);\n }\n}\nfunction Validate(schemas, inputNodes) {\n inputNodes.forEach((node) => {\n Object.keys(node.attributes).forEach((schemaID) => {\n if (!schemas[schemaID]) {\n throw new SchemaValidationError(`Missing schema \"${schemaID}\" referenced by [\"${node.path}\"].attributes`);\n }\n let schema = schemas[schemaID];\n let value = node.attributes[schemaID];\n try {\n ValidateAttributeValue(schema.value, value, \"\", schemas);\n } catch (e) {\n if (e instanceof SchemaValidationError) {\n throw new SchemaValidationError(`Error validating [\"${node.path}\"].attributes[\"${schemaID}\"]: ${e.message}`);\n } else {\n throw e;\n }\n }\n });\n });\n}\nfunction LoadIfcxFile(file, checkSchemas = true, createArtificialRoot = false) {\n let inputNodes = ToInputNodes(file.data);\n let compositionNodes = ConvertNodes(inputNodes);\n try {\n if (checkSchemas) {\n Validate(file.schemas, compositionNodes);\n }\n } catch (e) {\n throw e;\n }\n if (createArtificialRoot) {\n return CreateArtificialRoot(compositionNodes);\n } else {\n return ExpandFirstRootInInput(compositionNodes);\n }\n}\nfunction Federate(files) {\n let result = {\n header: files[0].header,\n schemas: {},\n data: [],\n };\n files.forEach((file) => {\n Object.keys(file.schemas).forEach((schemaID) => (result.schemas[schemaID] = file.schemas[schemaID]));\n });\n files.forEach((file) => {\n file.data.forEach((node) => result.data.push(node));\n });\n return Prune(result);\n}\nfunction Collapse(nodes, deleteEmpty = false) {\n let result = {\n path: nodes[0].path,\n children: {},\n inherits: {},\n attributes: {},\n };\n nodes.forEach((node) => {\n Object.keys(node.children).forEach((name) => {\n result.children[name] = node.children[name];\n });\n Object.keys(node.inherits).forEach((name) => {\n result.inherits[name] = node.inherits[name];\n });\n Object.keys(node.attributes).forEach((name) => {\n result.attributes[name] = node.attributes[name];\n });\n });\n if (deleteEmpty) {\n let empty = true;\n Object.keys(result.children).forEach((name) => {\n if (result.children[name] !== null) empty = false;\n });\n Object.keys(result.inherits).forEach((name) => {\n if (result.inherits[name] !== null) empty = false;\n });\n Object.keys(result.attributes).forEach((name) => {\n if (result.attributes[name] !== null) empty = false;\n });\n if (empty) return null;\n }\n return result;\n}\nfunction Prune(file, deleteEmpty = false) {\n let result = {\n header: file.header,\n schemas: file.schemas,\n data: [],\n };\n let inputNodes = ToInputNodes(file.data);\n inputNodes.forEach((nodes) => {\n let collapsed = Collapse(nodes, deleteEmpty);\n if (collapsed)\n result.data.push({\n path: collapsed.path,\n children: collapsed.children,\n inherits: collapsed.inherits,\n attributes: collapsed.attributes,\n });\n });\n return result;\n}\n\n// compose-flattened.ts\nfunction TreeNodeToComposedObject(path, node, schemas) {\n let co = {\n name: path,\n attributes: {},\n children: [],\n };\n node.children.forEach((childNode, childName) => {\n co.children?.push(TreeNodeToComposedObject(`${path}/${childName}`, childNode, schemas));\n });\n node.attributes.forEach((attr, attrName) => {\n if (attr && typeof attr === \"object\" && !Array.isArray(attr)) {\n Object.keys(attr).forEach((compname) => {\n co.attributes[`${attrName}::${compname}`] = attr[compname];\n });\n } else {\n let schema = schemas[attrName];\n if (schema && schema.value.quantityKind) {\n let postfix = \"\";\n let quantityKind = schema.value.quantityKind;\n if (quantityKind === \"Length\") {\n postfix = \"m\";\n } else if (quantityKind === \"Volume\") {\n postfix = \"m\" + String.fromCodePoint(179);\n }\n co.attributes[attrName] = `${attr} ${postfix}`;\n } else {\n co.attributes[attrName] = attr;\n }\n }\n });\n if (Object.keys(co.attributes).length === 0) delete co.attributes;\n return co;\n}\nfunction compose3(files) {\n let federated = Federate(files);\n let tree = LoadIfcxFile(federated, true, true);\n return TreeNodeToComposedObject(\"\", tree, federated.schemas);\n}\n\n// render.ts\n// var controls;\n// var renderer;\nvar scene;\nvar camera;\nvar datas = [];\nvar autoCamera = true;\n// var THREE = window[\"THREE\"];\nfunction init() {\n scene = new THREE.Scene();\n camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100);\n camera.up.set(0, 0, 1);\n camera.position.set(50, 50, 50);\n camera.lookAt(0, 0, 0);\n // const nd = document.querySelector(\".viewport\");\n // renderer = new THREE.WebGLRenderer({\n // alpha: true,\n // logarithmicDepthBuffer: true,\n // });\n // renderer.setSize(nd.offsetWidth, nd.offsetHeight);\n // controls = new THREE.OrbitControls(camera, renderer.domElement);\n // controls.enableDamping = true;\n // controls.dampingFactor = 0.25;\n // nd.appendChild(renderer.domElement);\n scene.add(camera);\n return scene;\n}\nfunction HasAttr(node, attrName) {\n if (!node || !node.attributes) return false;\n return !!node.attributes[attrName];\n}\nfunction FindChildWithAttr(node, attrName) {\n if (!node || !node.children) return void 0;\n for (let i = 0; i < node.children.length; i++) {\n if (HasAttr(node.children[i], attrName)) {\n return node.children[i];\n }\n }\n return void 0;\n}\nfunction createMaterialFromParent(parent, root) {\n let reference = parent.attributes[\"usd::usdshade::materialbindingapi::material::binding\"];\n let material = {\n color: new THREE.Color(0.6, 0.6, 0.6),\n transparent: false,\n opacity: 1,\n };\n if (reference) {\n const materialNode = getChildByName(root, reference.ref);\n if (materialNode) {\n let color = materialNode?.attributes[\"bsi::presentation::diffuseColor\"];\n material.color = new THREE.Color(...color);\n if (materialNode?.attributes[\"bsi::presentation::opacity\"]) {\n material.transparent = true;\n material.opacity = materialNode.attributes[\"bsi::presentation::opacity\"];\n }\n }\n }\n return material;\n}\nfunction createCurveFromJson(node, parent, root) {\n let points = new Float32Array(node.attributes[\"usd::usdgeom::basiscurves::points\"].flat());\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n const material = createMaterialFromParent(parent, root);\n let lineMaterial = new THREE.LineBasicMaterial({ ...material });\n lineMaterial.color.multiplyScalar(0.8);\n return new THREE.Line(geometry, lineMaterial);\n}\nfunction createMeshFromJson(node, parent, root) {\n let points = new Float32Array(node.attributes[\"usd::usdgeom::mesh::points\"].flat());\n let indices = new Uint16Array(node.attributes[\"usd::usdgeom::mesh::faceVertexIndices\"]);\n const geometry = new THREE.BufferGeometry();\n geometry.setAttribute(\"position\", new THREE.BufferAttribute(points, 3));\n geometry.setIndex(new THREE.BufferAttribute(indices, 1));\n geometry.computeVertexNormals();\n const material = createMaterialFromParent(parent, root);\n let meshMaterial = new THREE.MeshBasicMaterial({ ...material });\n return new THREE.Mesh(geometry, meshMaterial);\n}\nfunction traverseTree(node, parent, root, parentNode = void 0) {\n let elem = new THREE.Group();\n if (HasAttr(node, \"usd::usdgeom::visibility::visibility\")) {\n if (node.attributes[\"usd::usdgeom::visibility::visibility\"] === \"invisible\") {\n return;\n }\n } else if (HasAttr(node, \"usd::usdgeom::mesh::points\")) {\n elem = createMeshFromJson(node, parentNode, root);\n } else if (HasAttr(node, \"usd::usdgeom::basiscurves::points\")) {\n elem = createCurveFromJson(node, parentNode, root);\n }\n parent.add(elem);\n if (node !== root) {\n elem.matrixAutoUpdate = false;\n let matrixNode =\n node.attributes && node.attributes[\"usd::xformop::transform\"]\n ? node.attributes[\"usd::xformop::transform\"].flat()\n : null;\n if (matrixNode) {\n let matrix = new THREE.Matrix4();\n matrix.set(...matrixNode);\n matrix.transpose();\n elem.matrix = matrix;\n }\n }\n (node.children || []).forEach((child) => traverseTree(child, elem || parent, root, node));\n}\n// function encodeHtmlEntities(str) {\n// const div = document.createElement(\"div\");\n// div.textContent = str;\n// return div.innerHTML;\n// }\n// var icons = {\n// \"usd::usdgeom::mesh::points\": \"deployed_code\",\n// \"usd::usdgeom::basiscurves::points\": \"line_curve\",\n// \"usd::usdshade::material::outputs::surface.connect\": \"line_style\",\n// };\n// function buildDomTree(prim, node) {\n// const elem = document.createElement(\"div\");\n// let span;\n// elem.appendChild(document.createTextNode(prim.name ? prim.name.split(\"/\").reverse()[0] : \"root\"));\n// elem.appendChild((span = document.createElement(\"span\")));\n// Object.entries(icons).forEach(([k, v]) => (span.innerText += (prim.attributes || {})[k] ? v : \" \"));\n// span.className = \"material-symbols-outlined\";\n// elem.onclick = (evt) => {\n// let rows = [[\"name\", prim.name]]\n// .concat(Object.entries(prim.attributes))\n// .map(\n// ([k, v]) =>\n// `<tr><td>${encodeHtmlEntities(k)}</td><td>${encodeHtmlEntities(typeof v === \"object\" ? JSON.stringify(v) : v)}</td>`\n// )\n// .join(\"\");\n// document.querySelector(\".attributes .table\").innerHTML = `<table border=\"0\">${rows}</table>`;\n// evt.stopPropagation();\n// };\n// node.appendChild(elem);\n// (prim.children || []).forEach((p) => buildDomTree(p, elem));\n// }\nfunction composeAndRender() {\n if (scene) {\n scene.children = [];\n }\n // document.querySelector(\".tree\").innerHTML = \"\";\n if (datas.length === 0) {\n return;\n }\n let tree = null;\n let dataArray = datas.map((arr) => arr[1]);\n tree = compose3(dataArray);\n if (!tree) {\n console.error(\"No result from composition\");\n return;\n }\n traverseTree(tree, scene || init(), tree);\n if (autoCamera) {\n const boundingBox = new THREE.Box3();\n boundingBox.setFromObject(scene);\n if (!boundingBox.isEmpty()) {\n let avg = boundingBox.min.clone().add(boundingBox.max).multiplyScalar(0.5);\n let ext = boundingBox.max.clone().sub(boundingBox.min).length();\n camera.position.copy(avg.clone().add(new THREE.Vector3(1, 1, 1).normalize().multiplyScalar(ext)));\n camera.far = ext * 3;\n camera.updateProjectionMatrix();\n // controls.target.copy(avg);\n // controls.update();\n autoCamera = false;\n }\n }\n // buildDomTree(tree, document.querySelector(\".tree\"));\n // animate();\n}\n// function createLayerDom() {\n// document.querySelector(\".layers div\").innerHTML = \"\";\n// datas.forEach(([name, _], index) => {\n// const elem = document.createElement(\"div\");\n// elem.appendChild(document.createTextNode(name));\n// [\"\\u25B3\", \"\\u25BD\", \"\\xD7\"].reverse().forEach((lbl, cmd) => {\n// const btn = document.createElement(\"span\");\n// btn.onclick = (evt) => {\n// evt.stopPropagation();\n// if (cmd === 2) {\n// if (index > 0) {\n// [datas[index], datas[index - 1]] = [datas[index - 1], datas[index]];\n// }\n// } else if (cmd === 1) {\n// if (index < datas.length - 1) {\n// [datas[index], datas[index + 1]] = [datas[index + 1], datas[index]];\n// }\n// } else if (cmd === 0) {\n// datas.splice(index, 1);\n// }\n// composeAndRender();\n// createLayerDom();\n// };\n// btn.appendChild(document.createTextNode(lbl));\n// elem.appendChild(btn);\n// });\n// document.querySelector(\".layers div\").appendChild(elem);\n// });\n// }\n// function addModel(name, m) {\n// datas.push([name, m]);\n// createLayerDom();\n// composeAndRender();\n// }\n// function animate() {\n// requestAnimationFrame(animate);\n// controls.update();\n// renderer.render(scene, camera);\n// }\n// export { composeAndRender, addModel as default };\n\nexport function parse(m, name) {\n datas.push([name, m]);\n composeAndRender();\n return scene;\n}\nexport function clear() {\n scene = undefined;\n datas.length = 0;\n autoCamera = true;\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2024, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { FileLoader, Loader, Scene } from \"three\";\nimport { parse, clear } from \"./render.js\";\n\nclass IFCXLoader extends Loader<Scene> {\n override load(\n url: string,\n onLoad: (data: Scene) => void,\n onProgress?: (event: ProgressEvent) => void,\n onError?: (err: unknown) => void\n ) {\n const manager = this.manager;\n\n manager.itemStart(url);\n\n const _onLoad = (scene: Scene) => {\n onLoad(scene);\n manager.itemEnd(url);\n };\n\n const _onError = (e: unknown) => {\n if (onError) onError(e);\n else console.error(e);\n manager.itemError(url);\n manager.itemEnd(url);\n };\n\n const loader = new FileLoader(this.manager);\n\n loader.setPath(this.path);\n loader.setResponseType(\"json\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n\n loader.load(url, (json) => this.parse(json, _onLoad, _onError), onProgress, onError);\n }\n\n parse(json: any, onLoad: (scene: Scene) => void, onError: (err: unknown) => void) {\n try {\n onLoad(parse(json));\n } catch (e) {\n onError(e);\n } finally {\n clear();\n }\n }\n}\n\nexport { IFCXLoader };\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { GLTFLoadingManager, GLTFLoadParams, Loader, ModelImpl, Viewer } from \"@inweb/viewer-three\";\nimport { IFCXLoader } from \"./IFCX/IFCXLoader\";\n\nexport class IFCXFileLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any, format?: string): boolean {\n return (\n (typeof file === \"string\" || file instanceof globalThis.File || file instanceof ArrayBuffer) &&\n /(ifcx)$/i.test(format)\n );\n }\n\n override async load(file: any, format?: string, params?: GLTFLoadParams): Promise<this> {\n const manager = new GLTFLoadingManager(file, params);\n\n const loader = new IFCXLoader(manager);\n loader.setPath(manager.path);\n loader.setCrossOrigin(params.crossOrigin || loader.crossOrigin);\n loader.setWithCredentials(params.withCredentials || loader.withCredentials);\n\n const progress = (event: ProgressEvent) => {\n const { lengthComputable, loaded, total } = event;\n const progress = lengthComputable ? loaded / total : 1;\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const scene = await loader.loadAsync(manager.fileURL, progress);\n if (!this.viewer.scene) return this;\n\n let handle = 0;\n scene.traverse((object) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n const modelImpl = new ModelImpl(scene);\n modelImpl.loader = this;\n modelImpl.viewer = this.viewer;\n\n this.viewer.scene.add(modelImpl.scene);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { Loader, ModelImpl, Viewer } from \"@inweb/viewer-three\";\nimport { parse, clear } from \"./IFCX/render.js\";\n\nexport class IFCXCloudLoader extends Loader {\n public viewer: Viewer;\n\n constructor(viewer: Viewer) {\n super();\n this.viewer = viewer;\n }\n\n override isSupport(file: any): boolean {\n return (\n typeof file === \"object\" &&\n typeof file.type === \"string\" &&\n typeof file.download === \"function\" &&\n /.ifcx$/i.test(file.type)\n );\n }\n\n override async load(file: any): Promise<this> {\n const progress = (progress: number) => {\n this.viewer.emitEvent({ type: \"geometryprogress\", data: progress, file });\n };\n\n const arrayBuffer = await file.download(progress, this.abortController.signal);\n if (!this.viewer.scene) return this;\n\n const textDecoder = new TextDecoder();\n const json = JSON.parse(textDecoder.decode(arrayBuffer));\n\n const scene = parse(json);\n clear();\n\n let handle = 0;\n scene.traverse((object: any) => {\n object.userData = { handle, ...object.userData };\n handle++;\n });\n\n const modelImpl = new ModelImpl(scene);\n modelImpl.loader = this;\n modelImpl.viewer = this.viewer;\n\n this.viewer.scene.add(modelImpl.scene);\n this.viewer.models.push(modelImpl);\n\n this.viewer.syncOptions();\n this.viewer.syncOverlay();\n this.viewer.update();\n\n this.viewer.emitEvent({ type: \"databasechunk\", data: scene, file });\n\n return this;\n }\n}\n","///////////////////////////////////////////////////////////////////////////////\n// Copyright (C) 2002-2025, Open Design Alliance (the \"Alliance\").\n// All rights reserved.\n//\n// This software and its documentation and related materials are owned by\n// the Alliance. The software may only be incorporated into application\n// programs owned by members of the Alliance, subject to a signed\n// Membership Agreement and Supplemental Software License Agreement with the\n// Alliance. The structure and organization of this software are the valuable\n// trade secrets of the Alliance and its suppliers. The software is also\n// protected by copyright law and international treaty provisions. Application\n// programs incorporating this software must include the following statement\n// with their copyright notices:\n//\n// This application incorporates Open Design Alliance software pursuant to a\n// license agreement with Open Design Alliance.\n// Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance.\n// All rights reserved.\n//\n// By use of this software, its documentation or related materials, you\n// acknowledge and accept the above terms.\n///////////////////////////////////////////////////////////////////////////////\n\nimport { loaders } from \"@inweb/viewer-three\";\n\nimport { IFCXFileLoader } from \"./IFCXFileLoader\";\nimport { IFCXCloudLoader } from \"./IFCXCloudLoader\";\n\nloaders.registerLoader(\"ifcx-file\", (viewer: any) => new IFCXFileLoader(viewer));\nloaders.registerLoader(\"ifcx-cloud\", (viewer: any) => new IFCXCloudLoader(viewer));\n"],"names":["Box3","BufferAttribute","BufferGeometry","Color","Group","Line","LineBasicMaterial","Matrix4","Mesh","MeshBasicMaterial","PerspectiveCamera","Scene","Vector3","Loader","FileLoader","GLTFLoadingManager","ModelImpl","loaders"],"mappings":"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"}