@thatopen/components 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  - If you're the tool creator, you can take one from https://www.uuidgenerator.net/.
4
4
 
5
- - If you're using a platform tool, verify the uuid isn't misspelled or contact the tool creator.`)}};I(K,"_pattern",/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/),I(K,"_lut",["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"]);let re=K;class hr extends ${constructor(t,e){super(t);I(this,"onDisposed",new D);I(this,"onVertexFound",new D);I(this,"onVertexLost",new D);I(this,"components");I(this,"workingPlane",null);I(this,"_pickedPoint",null);I(this,"_config");I(this,"_enabled",!1);this.components=t,this.config={snapDistance:.25,showOnlyVertex:!1,...e},this.enabled=!1}set enabled(t){this._enabled=t,t||(this._pickedPoint=null)}get enabled(){return this._enabled}set config(t){this._config={...this._config,...t}}get config(){return this._config}dispose(){this.onVertexFound.reset(),this.onVertexLost.reset(),this.components=null,this.onDisposed.trigger(),this.onDisposed.reset()}get(t){if(!this.enabled)return this._pickedPoint;const o=this.components.get(ae).get(t).castRay();if(!o)return this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint;const n=this.getClosestVertex(o);return n?(this.workingPlane?Math.abs(this.workingPlane.distanceToPoint(n))<.001:!0)?((this._pickedPoint===null||!this._pickedPoint.equals(n))&&(this._pickedPoint=n.clone(),this.onVertexFound.trigger(this._pickedPoint)),this._pickedPoint):(this._pickedPoint=null,this._pickedPoint):(this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint)}getClosestVertex(t){let e=new S.Vector3,i=!1,o=Number.MAX_SAFE_INTEGER;const n=this.getVertices(t);if(n===null)return null;for(const r of n){if(!r)continue;const a=t.point.distanceTo(r);a>o||a>this._config.snapDistance||(i=!0,e=r,o=t.point.distanceTo(r))}return i?e:this.config.showOnlyVertex?null:t.point}getVertices(t){const e=t.object;if(!t.face||!e)return null;const i=e.geometry,o=new S.Matrix4,{instanceId:n}=t,r=n!==void 0,a=e instanceof S.InstancedMesh;return a&&r&&e.getMatrixAt(n,o),[this.getVertex(t.face.a,i),this.getVertex(t.face.b,i),this.getVertex(t.face.c,i)].map(c=>(c&&(a&&r&&c.applyMatrix4(o),c.applyMatrix4(e.matrixWorld)),c))}getVertex(t,e){if(t===void 0)return null;const i=e.attributes.position;return new S.Vector3(i.getX(t),i.getY(t),i.getZ(t))}}const ps=class ps{constructor(){I(this,"onDisposed",new D);I(this,"list",new Map);I(this,"enabled",!1);I(this,"_clock");I(this,"update",()=>{if(!this.enabled)return;const s=this._clock.getDelta();for(const[t,e]of this.list)e.enabled&&e.isUpdateable()&&e.update(s);requestAnimationFrame(this.update)});this._clock=new S.Clock,ps.setupBVH()}add(s,t){if(this.list.has(s))throw new Error("You're trying to add a component that already exists in the components instance. Use Components.get() instead.");re.validate(s),this.list.set(s,t)}get(s){const t=s.uuid;if(!this.list.has(t)){const e=new s(this);return this.list.has(t)||this.add(t,e),e}return this.list.get(t)}init(){this.enabled=!0,this._clock.start(),this.update()}dispose(){this.enabled=!1;for(const[s,t]of this.list)t.enabled=!1,t.isDisposeable()&&t.dispose();this._clock.stop(),this.onDisposed.trigger(),this.onDisposed.reset()}static setupBVH(){S.BufferGeometry.prototype.computeBoundsTree=tr,S.BufferGeometry.prototype.disposeBoundsTree=er,S.Mesh.prototype.raycast=Jo}};I(ps,"release","2.1.0");let hs=ps;class On{constructor(s){I(this,"_event");I(this,"_position",new S.Vector2);I(this,"onDisposed",new D);I(this,"updateMouseInfo",s=>{this._event=s});this.dom=s,this.setupEvents(!0)}get position(){if(this._event){const s=this.dom.getBoundingClientRect();this._position.x=this.getPositionX(s,this._event),this._position.y=this.getPositionY(s,this._event)}return this._position}dispose(){this.setupEvents(!1),this.onDisposed.trigger(),this.onDisposed.reset()}getPositionY(s,t){return-((t.clientY-s.top)/(s.bottom-s.top))*2+1}getPositionX(s,t){return(t.clientX-s.left)/(s.right-s.left)*2-1}setupEvents(s){s?this.dom.addEventListener("pointermove",this.updateMouseInfo):this.dom.removeEventListener("pointermove",this.updateMouseInfo)}}class Sn{constructor(s,t){I(this,"enabled",!0);I(this,"components");I(this,"onDisposed",new D);I(this,"mouse");I(this,"three",new S.Raycaster);I(this,"world");const e=t.renderer;if(!e)throw new Error("A renderer is needed for the raycaster to work!");this.world=t,this.mouse=new On(e.three.domElement),this.components=s}dispose(){this.mouse.dispose(),this.onDisposed.trigger(),this.onDisposed.reset()}castRay(s=Array.from(this.world.meshes)){if(!this.world)throw new Error("A world is needed to cast rays!");const t=this.world.camera.three;return this.three.setFromCamera(this.mouse.position,t),this.intersect(s)}castRayFromVector(s,t,e=Array.from(this.world.meshes)){return this.three.set(s,t),this.intersect(e)}intersect(s=Array.from(this.world.meshes)){const t=this.three.intersectObjects(s),e=this.filterClippingPlanes(t);return e.length>0?e[0]:null}filterClippingPlanes(s){if(!this.world.renderer)throw new Error("Renderer not found!");const t=this.world.renderer.three;if(!t.clippingPlanes)return s;const e=t.clippingPlanes;return s.length<=0||!e||(e==null?void 0:e.length)<=0?s:s.filter(i=>e.every(o=>o.distanceToPoint(i.point)>0))}}const Cs=class Cs extends ${constructor(t){super(t);I(this,"enabled",!0);I(this,"list",new Map);I(this,"onDisposed",new D);t.add(Cs.uuid,this)}get(t){if(this.list.has(t.uuid))return this.list.get(t.uuid);const e=new Sn(this.components,t);return this.list.set(t.uuid,e),t.onDisposed.add(()=>{this.delete(t)}),e}delete(t){const e=this.list.get(t.uuid);e&&e.dispose(),this.list.delete(t.uuid)}dispose(){for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger()}};I(Cs,"uuid","d5d8bdf0-db25-4952-b951-b643af207ace");let ae=Cs;class _n extends Ls{constructor(){super(...arguments);I(this,"meshes",new Set);I(this,"onAfterUpdate",new D);I(this,"onBeforeUpdate",new D);I(this,"onDisposed",new D);I(this,"isDisposing",!1);I(this,"enabled",!0);I(this,"uuid",re.create());I(this,"name");I(this,"_scene");I(this,"_camera");I(this,"_renderer",null)}get scene(){if(!this._scene)throw new Error("No scene initialized!");return this._scene}set scene(t){this._scene=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get camera(){if(!this._camera)throw new Error("No camera initialized!");return this._camera}set camera(t){this._camera=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get renderer(){return this._renderer}set renderer(t){this._renderer=t,t&&(t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"}))}update(t){this.enabled&&(!this._scene||!this._camera||(this.scene.currentWorld=this,this.camera.currentWorld=this,this.renderer&&(this.renderer.currentWorld=this),this.onBeforeUpdate.trigger(),this.scene.isUpdateable()&&this.scene.update(t),this.camera.isUpdateable()&&this.camera.update(t),this.renderer&&this.renderer.update(t),this.onAfterUpdate.trigger()))}dispose(t=!0){if(this.enabled=!1,this.isDisposing=!0,this.scene.onWorldChanged.trigger({world:this,action:"removed"}),this.camera.onWorldChanged.trigger({world:this,action:"removed"}),this.renderer&&this.renderer.onWorldChanged.trigger({world:this,action:"removed"}),t){const e=this.components.get(_t);this.scene.dispose(),this.camera.isDisposeable()&&this.camera.dispose(),this.renderer&&this.renderer.dispose();for(const i of this.meshes)e.destroy(i);this.meshes.clear()}this._scene=null,this._camera=null,this._renderer=null,this.onDisposed.trigger()}}class Er extends An{constructor(t){super(t);I(this,"isSetup",!1);I(this,"three");I(this,"onSetup",new D);I(this,"config",{directionalLight:{color:new S.Color("white"),intensity:1.5,position:new S.Vector3(5,10,3)},ambientLight:{color:new S.Color("white"),intensity:1}});this.three=new S.Scene,this.three.background=new S.Color(2107698)}setup(t){this.config={...this.config,...t};const e=new S.DirectionalLight(this.config.directionalLight.color,this.config.directionalLight.intensity);e.position.copy(this.config.directionalLight.position);const i=new S.AmbientLight(this.config.ambientLight.color,this.config.ambientLight.intensity);this.three.add(e,i),this.isSetup=!0,this.onSetup.trigger(this)}}class dr extends Rn{constructor(t,e,i){super(t);I(this,"enabled",!0);I(this,"container");I(this,"three");I(this,"_canvas");I(this,"_parameters");I(this,"_resizeObserver",null);I(this,"onContainerUpdated",new D);I(this,"_resizing",!1);I(this,"resize",t=>{if(this._resizing)return;this._resizing=!0,this.onContainerUpdated.trigger();const e=t?t.x:this.container.clientWidth,i=t?t.y:this.container.clientHeight;this.three.setSize(e,i),this.onResize.trigger(new S.Vector2(e,i)),this._resizing=!1});I(this,"resizeEvent",()=>{this.resize()});I(this,"onContextLost",t=>{t.preventDefault(),this.enabled=!1});I(this,"onContextBack",()=>{this.three.setRenderTarget(null),this.three.dispose(),this.three=new S.WebGLRenderer({canvas:this._canvas,antialias:!0,alpha:!0,...this._parameters}),this.enabled=!0});this.container=e,this._parameters=i,this.three=new S.WebGLRenderer({antialias:!0,alpha:!0,...i}),this.three.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.setupRenderer(),this.setupEvents(!0),this.resize(),this._canvas=this.three.domElement;const o=this.three.getContext(),{canvas:n}=o;n.addEventListener("webglcontextlost",this.onContextLost,!1),n.addEventListener("webglcontextrestored",this.onContextBack,!1)}update(){if(!this.enabled||!this.currentWorld)return;this.onBeforeUpdate.trigger(this);const t=this.currentWorld.scene.three,e=this.currentWorld.camera.three;this.three.render(t,e),this.onAfterUpdate.trigger(this)}dispose(){this.enabled=!1,this.setupEvents(!1),this.three.domElement.remove(),this.three.dispose(),this.onResize.reset(),this.onAfterUpdate.reset(),this.onBeforeUpdate.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}getSize(){return new S.Vector2(this.three.domElement.clientWidth,this.three.domElement.clientHeight)}setupEvents(t){const e=this.three.domElement.parentElement;if(!e)throw new Error("This renderer needs to have an HTML container!");this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=null),window.removeEventListener("resize",this.resizeEvent),t&&(this._resizeObserver=new ResizeObserver(this.resizeEvent),this._resizeObserver.observe(e),window.addEventListener("resize",this.resizeEvent))}setupRenderer(){this.three.localClippingEnabled=!0,this.container&&this.container.appendChild(this.three.domElement),this.onContainerUpdated.trigger()}}/*!
5
+ - If you're using a platform tool, verify the uuid isn't misspelled or contact the tool creator.`)}};I(K,"_pattern",/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/),I(K,"_lut",["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"]);let re=K;class hr extends ${constructor(t,e){super(t);I(this,"onDisposed",new D);I(this,"onVertexFound",new D);I(this,"onVertexLost",new D);I(this,"onEnabled",new D);I(this,"components");I(this,"workingPlane",null);I(this,"_pickedPoint",null);I(this,"_config");I(this,"_enabled",!1);this.components=t,this.config={snapDistance:.25,showOnlyVertex:!1,...e},this.enabled=!1}set enabled(t){this._enabled=t,t||(this._pickedPoint=null),this.onEnabled.trigger(t)}get enabled(){return this._enabled}set config(t){this._config={...this._config,...t}}get config(){return this._config}dispose(){this.onVertexFound.reset(),this.onVertexLost.reset(),this.components=null,this.onDisposed.trigger(),this.onDisposed.reset()}get(t){if(!this.enabled)return this._pickedPoint;const o=this.components.get(ae).get(t).castRay();if(!o)return this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint;const n=this.getClosestVertex(o);return n?(this.workingPlane?Math.abs(this.workingPlane.distanceToPoint(n))<.001:!0)?((this._pickedPoint===null||!this._pickedPoint.equals(n))&&(this._pickedPoint=n.clone(),this.onVertexFound.trigger(this._pickedPoint)),this._pickedPoint):(this._pickedPoint=null,this._pickedPoint):(this._pickedPoint!==null&&(this.onVertexLost.trigger(),this._pickedPoint=null),this._pickedPoint)}getClosestVertex(t){let e=new S.Vector3,i=!1,o=Number.MAX_SAFE_INTEGER;const n=this.getVertices(t);if(n===null)return null;for(const r of n){if(!r)continue;const a=t.point.distanceTo(r);a>o||a>this._config.snapDistance||(i=!0,e=r,o=t.point.distanceTo(r))}return i?e:this.config.showOnlyVertex?null:t.point}getVertices(t){const e=t.object;if(!t.face||!e)return null;const i=e.geometry,o=new S.Matrix4,{instanceId:n}=t,r=n!==void 0,a=e instanceof S.InstancedMesh;return a&&r&&e.getMatrixAt(n,o),[this.getVertex(t.face.a,i),this.getVertex(t.face.b,i),this.getVertex(t.face.c,i)].map(c=>(c&&(a&&r&&c.applyMatrix4(o),c.applyMatrix4(e.matrixWorld)),c))}getVertex(t,e){if(t===void 0)return null;const i=e.attributes.position;return new S.Vector3(i.getX(t),i.getY(t),i.getZ(t))}}const ps=class ps{constructor(){I(this,"onDisposed",new D);I(this,"list",new Map);I(this,"enabled",!1);I(this,"_clock");I(this,"update",()=>{if(!this.enabled)return;const s=this._clock.getDelta();for(const[t,e]of this.list)e.enabled&&e.isUpdateable()&&e.update(s);requestAnimationFrame(this.update)});this._clock=new S.Clock,ps.setupBVH()}add(s,t){if(this.list.has(s))throw new Error("You're trying to add a component that already exists in the components instance. Use Components.get() instead.");re.validate(s),this.list.set(s,t)}get(s){const t=s.uuid;if(!this.list.has(t)){const e=new s(this);return this.list.has(t)||this.add(t,e),e}return this.list.get(t)}init(){this.enabled=!0,this._clock.start(),this.update()}dispose(){this.enabled=!1;for(const[s,t]of this.list)t.enabled=!1,t.isDisposeable()&&t.dispose();this._clock.stop(),this.onDisposed.trigger(),this.onDisposed.reset()}static setupBVH(){S.BufferGeometry.prototype.computeBoundsTree=tr,S.BufferGeometry.prototype.disposeBoundsTree=er,S.Mesh.prototype.raycast=Jo}};I(ps,"release","2.1.2");let hs=ps;class On{constructor(s){I(this,"_event");I(this,"_position",new S.Vector2);I(this,"onDisposed",new D);I(this,"updateMouseInfo",s=>{this._event=s});this.dom=s,this.setupEvents(!0)}get position(){if(this._event){const s=this.dom.getBoundingClientRect();this._position.x=this.getPositionX(s,this._event),this._position.y=this.getPositionY(s,this._event)}return this._position}dispose(){this.setupEvents(!1),this.onDisposed.trigger(),this.onDisposed.reset()}getPositionY(s,t){return-((t.clientY-s.top)/(s.bottom-s.top))*2+1}getPositionX(s,t){return(t.clientX-s.left)/(s.right-s.left)*2-1}setupEvents(s){s?this.dom.addEventListener("pointermove",this.updateMouseInfo):this.dom.removeEventListener("pointermove",this.updateMouseInfo)}}class Sn{constructor(s,t){I(this,"enabled",!0);I(this,"components");I(this,"onDisposed",new D);I(this,"mouse");I(this,"three",new S.Raycaster);I(this,"world");const e=t.renderer;if(!e)throw new Error("A renderer is needed for the raycaster to work!");this.world=t,this.mouse=new On(e.three.domElement),this.components=s}dispose(){this.mouse.dispose(),this.onDisposed.trigger(),this.onDisposed.reset()}castRay(s=Array.from(this.world.meshes)){if(!this.world)throw new Error("A world is needed to cast rays!");const t=this.world.camera.three;return this.three.setFromCamera(this.mouse.position,t),this.intersect(s)}castRayFromVector(s,t,e=Array.from(this.world.meshes)){return this.three.set(s,t),this.intersect(e)}intersect(s=Array.from(this.world.meshes)){const t=this.three.intersectObjects(s),e=this.filterClippingPlanes(t);return e.length>0?e[0]:null}filterClippingPlanes(s){if(!this.world.renderer)throw new Error("Renderer not found!");const t=this.world.renderer.three;if(!t.clippingPlanes)return s;const e=t.clippingPlanes;return s.length<=0||!e||(e==null?void 0:e.length)<=0?s:s.filter(i=>e.every(o=>o.distanceToPoint(i.point)>0))}}const Cs=class Cs extends ${constructor(t){super(t);I(this,"enabled",!0);I(this,"list",new Map);I(this,"onDisposed",new D);t.add(Cs.uuid,this)}get(t){if(this.list.has(t.uuid))return this.list.get(t.uuid);const e=new Sn(this.components,t);return this.list.set(t.uuid,e),t.onDisposed.add(()=>{this.delete(t)}),e}delete(t){const e=this.list.get(t.uuid);e&&e.dispose(),this.list.delete(t.uuid)}dispose(){for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger()}};I(Cs,"uuid","d5d8bdf0-db25-4952-b951-b643af207ace");let ae=Cs;class _n extends Ls{constructor(){super(...arguments);I(this,"meshes",new Set);I(this,"onAfterUpdate",new D);I(this,"onBeforeUpdate",new D);I(this,"onDisposed",new D);I(this,"isDisposing",!1);I(this,"enabled",!0);I(this,"uuid",re.create());I(this,"name");I(this,"_scene");I(this,"_camera");I(this,"_renderer",null)}get scene(){if(!this._scene)throw new Error("No scene initialized!");return this._scene}set scene(t){this._scene=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get camera(){if(!this._camera)throw new Error("No camera initialized!");return this._camera}set camera(t){this._camera=t,t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"})}get renderer(){return this._renderer}set renderer(t){this._renderer=t,t&&(t.worlds.set(this.uuid,this),t.currentWorld=this,t.onWorldChanged.trigger({world:this,action:"added"}))}update(t){this.enabled&&(!this._scene||!this._camera||(this.scene.currentWorld=this,this.camera.currentWorld=this,this.renderer&&(this.renderer.currentWorld=this),this.onBeforeUpdate.trigger(),this.scene.isUpdateable()&&this.scene.update(t),this.camera.isUpdateable()&&this.camera.update(t),this.renderer&&this.renderer.update(t),this.onAfterUpdate.trigger()))}dispose(t=!0){if(this.enabled=!1,this.isDisposing=!0,this.scene.onWorldChanged.trigger({world:this,action:"removed"}),this.camera.onWorldChanged.trigger({world:this,action:"removed"}),this.renderer&&this.renderer.onWorldChanged.trigger({world:this,action:"removed"}),t){const e=this.components.get(_t);this.scene.dispose(),this.camera.isDisposeable()&&this.camera.dispose(),this.renderer&&this.renderer.dispose();for(const i of this.meshes)e.destroy(i);this.meshes.clear()}this._scene=null,this._camera=null,this._renderer=null,this.onDisposed.trigger()}}class Er extends An{constructor(t){super(t);I(this,"isSetup",!1);I(this,"three");I(this,"onSetup",new D);I(this,"config",{directionalLight:{color:new S.Color("white"),intensity:1.5,position:new S.Vector3(5,10,3)},ambientLight:{color:new S.Color("white"),intensity:1}});this.three=new S.Scene,this.three.background=new S.Color(2107698)}setup(t){this.config={...this.config,...t};const e=new S.DirectionalLight(this.config.directionalLight.color,this.config.directionalLight.intensity);e.position.copy(this.config.directionalLight.position);const i=new S.AmbientLight(this.config.ambientLight.color,this.config.ambientLight.intensity);this.three.add(e,i),this.isSetup=!0,this.onSetup.trigger(this)}}class dr extends Rn{constructor(t,e,i){super(t);I(this,"enabled",!0);I(this,"container");I(this,"three");I(this,"_canvas");I(this,"_parameters");I(this,"_resizeObserver",null);I(this,"onContainerUpdated",new D);I(this,"_resizing",!1);I(this,"resize",t=>{if(this._resizing)return;this._resizing=!0,this.onContainerUpdated.trigger();const e=t?t.x:this.container.clientWidth,i=t?t.y:this.container.clientHeight;this.three.setSize(e,i),this.onResize.trigger(new S.Vector2(e,i)),this._resizing=!1});I(this,"resizeEvent",()=>{this.resize()});I(this,"onContextLost",t=>{t.preventDefault(),this.enabled=!1});I(this,"onContextBack",()=>{this.three.setRenderTarget(null),this.three.dispose(),this.three=new S.WebGLRenderer({canvas:this._canvas,antialias:!0,alpha:!0,...this._parameters}),this.enabled=!0});this.container=e,this._parameters=i,this.three=new S.WebGLRenderer({antialias:!0,alpha:!0,...i}),this.three.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.setupRenderer(),this.setupEvents(!0),this.resize(),this._canvas=this.three.domElement;const o=this.three.getContext(),{canvas:n}=o;n.addEventListener("webglcontextlost",this.onContextLost,!1),n.addEventListener("webglcontextrestored",this.onContextBack,!1)}update(){if(!this.enabled||!this.currentWorld)return;this.onBeforeUpdate.trigger(this);const t=this.currentWorld.scene.three,e=this.currentWorld.camera.three;this.three.render(t,e),this.onAfterUpdate.trigger(this)}dispose(){this.enabled=!1,this.setupEvents(!1),this.three.domElement.remove(),this.three.dispose(),this.onResize.reset(),this.onAfterUpdate.reset(),this.onBeforeUpdate.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}getSize(){return new S.Vector2(this.three.domElement.clientWidth,this.three.domElement.clientHeight)}setupEvents(t){const e=this.three.domElement.parentElement;if(!e)throw new Error("This renderer needs to have an HTML container!");this._resizeObserver&&(this._resizeObserver.disconnect(),this._resizeObserver=null),window.removeEventListener("resize",this.resizeEvent),t&&(this._resizeObserver=new ResizeObserver(this.resizeEvent),this._resizeObserver.observe(e),window.addEventListener("resize",this.resizeEvent))}setupRenderer(){this.three.localClippingEnabled=!0,this.container&&this.container.appendChild(this.three.domElement),this.onContainerUpdated.trigger()}}/*!
6
6
  * camera-controls
7
7
  * https://github.com/yomotsu/camera-controls
8
8
  * (c) 2017 @yomotsu
@@ -85,4 +85,4 @@
85
85
  }
86
86
  postMessage({ colors });
87
87
  });
88
- `,o=new Blob([i],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(o))}dispose(){this.enabled=!1;for(const s of this.scene.children)s.removeFromParent();this.onViewUpdated.reset(),this.worker.terminate(),this.renderer.dispose(),this.renderTarget.dispose(),this._buffer=null,this.onDisposed.reset()}getAvailableColor(){let s=BigInt(this._availableColor.toString());const t=[];do t.unshift(Number(s%256n)),s/=256n;while(s);for(;t.length!==3;)t.unshift(0);const[e,i,o]=t,n=`${e}-${i}-${o}`;return{r:e,g:i,b:o,code:n}}increaseColor(){if(this._availableColor===256*256*256){console.warn("Color can't be increased over 256 x 256 x 256!");return}this._availableColor++}decreaseColor(){if(this._availableColor===1){console.warn("Color can't be decreased under 0!");return}this._availableColor--}applySettings(s){s&&(s.updateInterval!==void 0&&(this.updateInterval=s.updateInterval),s.height!==void 0&&(this._height=s.height),s.width!==void 0&&(this._width=s.width),s.autoUpdate!==void 0&&(this.autoUpdate=s.autoUpdate))}}class wn extends Mn{constructor(t,e,i){super(t,e,i);I(this,"onViewUpdated",new D);I(this,"threshold",100);I(this,"colorMeshes",new Map);I(this,"isProcessing",!1);I(this,"_colorCodeMeshMap",new Map);I(this,"_meshIDColorCodeMap",new Map);I(this,"_currentVisibleMeshes",new Set);I(this,"_recentlyHiddenMeshes",new Set);I(this,"_intervalID",null);I(this,"_transparentMat",new S.MeshBasicMaterial({transparent:!0,opacity:0}));I(this,"handleWorkerMessage",async t=>{if(this.isProcessing)return;const e=t.data.colors;this._recentlyHiddenMeshes=new Set(this._currentVisibleMeshes),this._currentVisibleMeshes.clear();for(const[i,o]of e){if(o<this.threshold)continue;const n=this._colorCodeMeshMap.get(i);n&&(this._currentVisibleMeshes.add(n),this._recentlyHiddenMeshes.delete(n))}this.onViewUpdated.trigger({seen:this._currentVisibleMeshes,unseen:this._recentlyHiddenMeshes}),this._isWorkerBusy=!1});this.worker.addEventListener("message",this.handleWorkerMessage),this.autoUpdate&&window.setInterval(async()=>{this.isProcessing||await this.updateVisibility()},this.updateInterval),this.onViewUpdated.add(({seen:o,unseen:n})=>{for(const r of o)r.visible=!0;for(const r of n)r.visible=!1})}dispose(){super.dispose(),this._intervalID!==null&&(window.clearInterval(this._intervalID),this._intervalID=null),this._currentVisibleMeshes.clear(),this._recentlyHiddenMeshes.clear(),this._meshIDColorCodeMap.clear(),this._transparentMat.dispose(),this._colorCodeMeshMap.clear();const t=this.components.get(_t);for(const e in this.colorMeshes){const i=this.colorMeshes.get(e);i&&t.destroy(i,!0)}this.colorMeshes.clear()}add(t){if(!this.enabled)return;if(this.isProcessing){console.log("Culler processing not finished yet.");return}this.isProcessing=!0;const e=t instanceof S.InstancedMesh,{geometry:i,material:o}=t,{colorMaterial:n,code:r}=this.getAvailableMaterial();let a;if(Array.isArray(o)){let d=!0;const E=[];for(const u of o)ui.isTransparent(u)?E.push(this._transparentMat):(d=!1,E.push(n));if(d){n.dispose(),this.isProcessing=!1;return}a=E}else if(ui.isTransparent(o)){n.dispose(),this.isProcessing=!1;return}else a=n;this._colorCodeMeshMap.set(r,t),this._meshIDColorCodeMap.set(t.uuid,r);const c=e?t.count:1,h=new S.InstancedMesh(i,a,c);e?h.instanceMatrix=t.instanceMatrix:h.setMatrixAt(0,new S.Matrix4),t.visible=!1,t.updateWorldMatrix(!0,!1),h.applyMatrix4(t.matrixWorld),h.updateMatrix(),this.scene.add(h),this.colorMeshes.set(t.uuid,h),this.increaseColor(),this.isProcessing=!1}remove(t){if(this.isProcessing){console.log("Culler processing not finished yet.");return}this.isProcessing=!0;const e=this.components.get(_t);this._currentVisibleMeshes.delete(t),this._recentlyHiddenMeshes.delete(t);const i=this.colorMeshes.get(t.uuid),o=this._meshIDColorCodeMap.get(t.uuid);if(!i||!o){this.isProcessing=!1,console.log(t.visible);return}this._colorCodeMeshMap.delete(o),this._meshIDColorCodeMap.delete(t.uuid),this.colorMeshes.delete(t.uuid),i.geometry=void 0,i.material=[],e.destroy(i,!0),this._recentlyHiddenMeshes.delete(t),this._currentVisibleMeshes.delete(t),this.isProcessing=!1}getAvailableMaterial(){const{r:t,g:e,b:i,code:o}=this.getAvailableColor(),n=S.ColorManagement.enabled;S.ColorManagement.enabled=!1;const r=new S.Color(`rgb(${t}, ${e}, ${i})`);if(!this.world.renderer)throw new Error("Renderer not found in the world!");const a=this.world.renderer.clippingPlanes,c=new S.MeshBasicMaterial({color:r,clippingPlanes:a,side:S.DoubleSide});return S.ColorManagement.enabled=n,{colorMaterial:c,code:o}}}const we=class we extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"_enabled",!0);I(this,"list",new Map);t.add(we.uuid,this)}get enabled(){return this._enabled}set enabled(t){this._enabled=t;for(const[e,i]of this.list)i.enabled=t}create(t,e){if(this.list.has(t.uuid))return this.list.get(t.uuid);const i=new wn(this.components,t,e);return this.list.set(t.uuid,i),i}delete(t){const e=this.list.get(t.uuid);e&&e.dispose(),this.list.delete(t.uuid)}dispose(){this.enabled=!1,this.onDisposed.trigger(we.uuid),this.onDisposed.reset();for(const[t,e]of this.list)e.dispose();this.list.clear()}};I(we,"uuid","69f2a50d-c266-44fc-b1bd-fa4d34be89e6");let ds=we;class Dn{constructor(s){I(this,"onDisposed",new D);I(this,"onAfterUpdate",new D);I(this,"onBeforeUpdate",new D);I(this,"onResize",new D);I(this,"frontOffset",0);I(this,"overrideMaterial",new S.MeshDepthMaterial);I(this,"backgroundColor",new S.Color(395274));I(this,"renderer");I(this,"enabled",!0);I(this,"world");I(this,"_lockRotation",!0);I(this,"_camera");I(this,"_plane");I(this,"_size",new S.Vector2(320,160));I(this,"_tempVector1",new S.Vector3);I(this,"_tempVector2",new S.Vector3);I(this,"_tempTarget",new S.Vector3);I(this,"down",new S.Vector3(0,-1,0));I(this,"updatePlanes",()=>{if(!this.world.renderer)throw new Error("The given world must have a renderer!");const s=[],t=this.world.renderer.three;for(const e of t.clippingPlanes)s.push(e);s.push(this._plane),this.renderer.clippingPlanes=s});if(this.world=s,!this.world.renderer)throw new Error("The given world must have a renderer!");this.renderer=new S.WebGLRenderer,this.renderer.setSize(this._size.x,this._size.y);const t=1,e=this._size.x/this._size.y;this._camera=new S.OrthographicCamera(t*e/-2,t*e/2,t/2,t/-2),this.world.renderer.onClippingPlanesUpdated.add(this.updatePlanes),this._camera.position.set(0,200,0),this._camera.zoom=.1,this._camera.rotation.x=-Math.PI/2,this._plane=new S.Plane(this.down,200),this.updatePlanes()}get lockRotation(){return this._lockRotation}set lockRotation(s){this._lockRotation=s,s&&(this._camera.rotation.z=0)}get zoom(){return this._camera.zoom}set zoom(s){this._camera.zoom=s,this._camera.updateProjectionMatrix()}dispose(){this.enabled=!1,this.onBeforeUpdate.reset(),this.onAfterUpdate.reset(),this.onResize.reset(),this.overrideMaterial.dispose(),this.renderer.dispose(),this.onDisposed.trigger(),this.onDisposed.reset()}get(){return this._camera}update(){if(!this.enabled)return;this.onBeforeUpdate.trigger();const s=this.world.scene.three,t=this.world.camera;if(!t.hasCameraControls())throw new Error("The given world must use camera controls!");if(!(s instanceof S.Scene))throw new Error("The given world must have a THREE.Scene as a root!");const e=t.controls;if(e.getPosition(this._tempVector1),this._camera.position.x=this._tempVector1.x,this._camera.position.z=this._tempVector1.z,this.frontOffset!==0&&(e.getTarget(this._tempVector2),this._tempVector2.sub(this._tempVector1),this._tempVector2.normalize().multiplyScalar(this.frontOffset),this._camera.position.x+=this._tempVector2.x,this._camera.position.z+=this._tempVector2.z),!this._lockRotation){e.getTarget(this._tempTarget);const o=Math.atan2(this._tempTarget.x-this._tempVector1.x,this._tempTarget.z-this._tempVector1.z);this._camera.rotation.z=o+Math.PI}this._plane.set(this.down,this._tempVector1.y);const i=s.background;s.background=this.backgroundColor,this.renderer.render(s,this._camera),s.background=i,this.onAfterUpdate.trigger()}getSize(){return this._size}resize(s=this._size){this._size.copy(s),this.renderer.setSize(s.x,s.y);const t=s.x/s.y,e=1;this._camera.left=e*t/-2,this._camera.right=e*t/2,this._camera.top=e/2,this._camera.bottom=-e/2,this._camera.updateProjectionMatrix(),this.onResize.trigger(s)}}const Rs=class Rs extends ${constructor(t){super(t);I(this,"onAfterUpdate",new D);I(this,"onBeforeUpdate",new D);I(this,"onDisposed",new D);I(this,"enabled",!0);I(this,"list",new Map);this.components.add(Rs.uuid,this)}create(t){if(this.list.has(t.uuid))throw new Error("This world already has a minimap!");const e=new Dn(t);return this.list.set(t.uuid,e),e}delete(t){const e=this.list.get(t);e&&e.dispose(),this.list.delete(t)}dispose(){for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger()}update(){for(const[t,e]of this.list)e.update()}};I(Rs,"uuid","39ad6aad-84c8-4adf-a1e0-7f25313a9e7f");let pi=Rs;class Un{constructor(s){I(this,"enabled",!1);I(this,"id","FirstPerson");this.camera=s}set(s){if(this.enabled=s,s){if(this.camera.projection.current!=="Perspective"){this.camera.set("Orbit");return}this.setupFirstPersonCamera()}}setupFirstPersonCamera(){const s=this.camera.controls,t=new S.Vector3;s.distance--,s.getPosition(t),s.minDistance=1,s.maxDistance=1,s.distance=1,s.moveTo(t.x,t.y,t.z),s.truckSpeed=50,s.mouseButtons.wheel=nt.ACTION.DOLLY,s.touches.two=nt.ACTION.TOUCH_ZOOM_TRUCK}}class xn{constructor(s){I(this,"enabled",!0);I(this,"id","Orbit");this.camera=s,this.activateOrbitControls()}set(s){this.enabled=s,s&&this.activateOrbitControls()}activateOrbitControls(){const s=this.camera.controls;s.minDistance=1,s.maxDistance=300;const t=new S.Vector3;s.getPosition(t);const e=t.length();s.distance=e,s.truckSpeed=2;const{rotation:i}=this.camera.three,o=new S.Vector3(0,0,-1).applyEuler(i),n=t.addScaledVector(o,e);s.moveTo(n.x,n.y,n.z)}}class bn{constructor(s){I(this,"enabled",!1);I(this,"id","Plan");I(this,"mouseAction1");I(this,"mouseAction2");I(this,"mouseInitialized",!1);I(this,"defaultAzimuthSpeed");I(this,"defaultPolarSpeed");this.camera=s,this.defaultAzimuthSpeed=s.controls.azimuthRotateSpeed,this.defaultPolarSpeed=s.controls.polarRotateSpeed}set(s){this.enabled=s;const t=this.camera.controls;t.azimuthRotateSpeed=s?0:this.defaultAzimuthSpeed,t.polarRotateSpeed=s?0:this.defaultPolarSpeed,this.mouseInitialized||(this.mouseAction1=t.touches.one,this.mouseAction2=t.touches.two,this.mouseInitialized=!0),s?(t.mouseButtons.left=nt.ACTION.TRUCK,t.touches.one=nt.ACTION.TOUCH_TRUCK,t.touches.two=nt.ACTION.TOUCH_ZOOM):(t.mouseButtons.left=nt.ACTION.ROTATE,t.touches.one=this.mouseAction1,t.touches.two=this.mouseAction2)}}class vn{constructor(s){I(this,"onChanged",new D);I(this,"current","Perspective");I(this,"camera");I(this,"matchOrthoDistanceEnabled",!1);I(this,"_component");I(this,"_previousDistance",-1);this._component=s,this.camera=s.three}async set(s){this.current!==s&&(s==="Orthographic"?this.setOrthoCamera():await this.setPerspectiveCamera(),this.onChanged.trigger(this.camera))}async toggle(){const t=this.current==="Perspective"?"Orthographic":"Perspective";await this.set(t)}setOrthoCamera(){if(this._component.mode===null||this._component.mode.id==="FirstPerson")return;this._previousDistance=this._component.controls.distance,this._component.controls.distance=200;const s=this.getPerspectiveDims();if(!s)return;const{width:t,height:e}=s;this.setupOrthoCamera(e,t),this.camera=this._component.threeOrtho,this.current="Orthographic"}getPerspectiveDims(){const s=this._component.currentWorld;if(!s||!s.renderer)return null;const t=new S.Vector3;this._component.threePersp.getWorldDirection(t);const e=new S.Vector3;this._component.controls.getTarget(e);const o=e.clone().sub(this._component.threePersp.position).dot(t),n=s.renderer.getSize(),r=n.x/n.y,a=this._component.threePersp,c=o*2*Math.atan(a.fov*(Math.PI/180)/2);return{width:c*r,height:c}}setupOrthoCamera(s,t){this._component.controls.mouseButtons.wheel=nt.ACTION.ZOOM,this._component.controls.mouseButtons.middle=nt.ACTION.ZOOM;const e=this._component.threePersp,i=this._component.threeOrtho;i.zoom=1,i.left=t/-2,i.right=t/2,i.top=s/2,i.bottom=s/-2,i.updateProjectionMatrix(),i.position.copy(e.position),i.quaternion.copy(e.quaternion),this._component.controls.camera=i}getDistance(){const s=this._component.threePersp,t=this._component.threeOrtho;return(t.top-t.bottom)/t.zoom/(2*Math.atan(s.fov*(Math.PI/180)/2))}async setPerspectiveCamera(){this._component.controls.mouseButtons.wheel=nt.ACTION.DOLLY,this._component.controls.mouseButtons.middle=nt.ACTION.DOLLY;const s=this._component.threePersp,t=this._component.threeOrtho;s.position.copy(t.position),s.quaternion.copy(t.quaternion),this._component.controls.mouseButtons.wheel=nt.ACTION.DOLLY,this.matchOrthoDistanceEnabled?this._component.controls.distance=this.getDistance():this._component.controls.distance=this._previousDistance,await this._component.controls.zoomTo(1),s.updateProjectionMatrix(),this._component.controls.camera=s,this.camera=s,this.current="Perspective"}}class Nr extends ce{constructor(t){super(t);I(this,"projection");I(this,"threeOrtho");I(this,"threePersp");I(this,"_userInputButtons",{});I(this,"_frustumSize",50);I(this,"_navigationModes",new Map);I(this,"_mode",null);I(this,"previousSize",null);this.threePersp=this.three,this.threeOrtho=this.newOrthoCamera(),this.projection=new vn(this),this.onAspectUpdated.add(()=>{this.setOrthoPerspCameraAspect()}),this.projection.onChanged.add(e=>{this.three=e,this.updateAspect()}),this.onWorldChanged.add(({action:e})=>{e==="added"&&(this._navigationModes.clear(),this._navigationModes.set("Orbit",new xn(this)),this._navigationModes.set("FirstPerson",new Un(this)),this._navigationModes.set("Plan",new bn(this)),this._mode=this._navigationModes.get("Orbit"),this.mode.set(!0,{preventTargetAdjustment:!0}),this.currentWorld&&this.currentWorld.renderer&&(this.previousSize=this.currentWorld.renderer.getSize().clone()))})}get mode(){if(!this._mode)throw new Error("Mode not found, camera not initialized");return this._mode}dispose(){super.dispose(),this.threeOrtho.removeFromParent()}set(t){if(this.mode!==null&&this.mode.id!==t){if(this.mode.set(!1),!this._navigationModes.has(t))throw new Error("The specified mode does not exist!");this._mode=this._navigationModes.get(t),this.mode.set(!0)}}async fit(t,e=1.5){if(!this.enabled)return;const i=Number.MAX_VALUE,o=Number.MIN_VALUE,n=new S.Vector3(i,i,i),r=new S.Vector3(o,o,o);for(const u of t){const f=new S.Box3().setFromObject(u);f.min.x<n.x&&(n.x=f.min.x),f.min.y<n.y&&(n.y=f.min.y),f.min.z<n.z&&(n.z=f.min.z),f.max.x>r.x&&(r.x=f.max.x),f.max.y>r.y&&(r.y=f.max.y),f.max.z>r.z&&(r.z=f.max.z)}const a=new S.Box3(n,r),c=new S.Vector3;a.getSize(c);const h=new S.Vector3;a.getCenter(h);const d=Math.max(c.x,c.y,c.z)*e,E=new S.Sphere(h,d);await this.controls.fitToSphere(E,!0)}setUserInput(t){t?this.enableUserInput():this.disableUserInput()}disableUserInput(){this._userInputButtons.left=this.controls.mouseButtons.left,this._userInputButtons.right=this.controls.mouseButtons.right,this._userInputButtons.middle=this.controls.mouseButtons.middle,this._userInputButtons.wheel=this.controls.mouseButtons.wheel,this.controls.mouseButtons.left=0,this.controls.mouseButtons.right=0,this.controls.mouseButtons.middle=0,this.controls.mouseButtons.wheel=0}enableUserInput(){Object.keys(this._userInputButtons).length!==0&&(this.controls.mouseButtons.left=this._userInputButtons.left,this.controls.mouseButtons.right=this._userInputButtons.right,this.controls.mouseButtons.middle=this._userInputButtons.middle,this.controls.mouseButtons.wheel=this._userInputButtons.wheel)}newOrthoCamera(){const t=window.innerWidth/window.innerHeight;return new S.OrthographicCamera(this._frustumSize*t/-2,this._frustumSize*t/2,this._frustumSize/2,this._frustumSize/-2,.1,1e3)}setOrthoPerspCameraAspect(){if(!this.currentWorld||!this.currentWorld.renderer||!this.previousSize)return;const t=this.currentWorld.renderer.getSize(),e=this.threeOrtho.top,i=this.threeOrtho.right,o=t.y/this.previousSize.y,n=t.x/this.previousSize.x,r=e*o,a=i*n;this.threeOrtho.left=-a,this.threeOrtho.right=a,this.threeOrtho.top=r,this.threeOrtho.bottom=-r,this.threeOrtho.updateProjectionMatrix(),this.previousSize.copy(t)}}const yr=new Map([[b.IFCRELAGGREGATES,{forRelating:"IsDecomposedBy",forRelated:"Decomposes"}],[b.IFCRELASSOCIATESMATERIAL,{forRelating:"AssociatedTo",forRelated:"HasAssociations"}],[b.IFCRELASSOCIATESCLASSIFICATION,{forRelating:"ClassificationForObjects",forRelated:"HasAssociations"}],[b.IFCRELASSIGNSTOGROUP,{forRelating:"IsGroupedBy",forRelated:"HasAssignments"}],[b.IFCRELDEFINESBYPROPERTIES,{forRelated:"IsDefinedBy",forRelating:"DefinesOcurrence"}],[b.IFCRELDEFINESBYTYPE,{forRelated:"IsTypedBy",forRelating:"Types"}],[b.IFCRELDEFINESBYTEMPLATE,{forRelated:"IsDefinedBy",forRelating:"Defines"}],[b.IFCRELCONTAINEDINSPATIALSTRUCTURE,{forRelated:"ContainedInStructure",forRelating:"ContainsElements"}]]),De=class De extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onRelationsIndexed",new D);I(this,"relationMaps",{});I(this,"enabled",!0);I(this,"_relToAttributesMap",yr);I(this,"_inverseAttributes",["IsDecomposedBy","Decomposes","AssociatedTo","HasAssociations","ClassificationForObjects","IsGroupedBy","HasAssignments","IsDefinedBy","DefinesOcurrence","IsTypedBy","Types","Defines","ContainedInStructure","ContainsElements"]);I(this,"_ifcRels",[b.IFCRELAGGREGATES,b.IFCRELASSOCIATESMATERIAL,b.IFCRELASSOCIATESCLASSIFICATION,b.IFCRELASSIGNSTOGROUP,b.IFCRELDEFINESBYPROPERTIES,b.IFCRELDEFINESBYTYPE,b.IFCRELDEFINESBYTEMPLATE,b.IFCRELCONTAINEDINSPATIALSTRUCTURE]);I(this,"onFragmentsDisposed",t=>{delete this.relationMaps[t.groupID]});this.components.add(De.uuid,this),t.get(ot).onFragmentsDisposed.add(this.onFragmentsDisposed)}indexRelations(t,e,i,o){const n=Object.keys(e).find(E=>E.startsWith("Relating")),r=Object.keys(e).find(E=>E.startsWith("Related"));if(!(n&&r))return;const a=e[n].value,c=e[r].map(E=>E.value),h=t.get(a)??new Map,d=this._inverseAttributes.indexOf(o);h.set(d,c),t.set(a,h);for(const E of c){const u=t.get(E)??new Map,f=this._inverseAttributes.indexOf(i),A=u.get(f)??[];A.push(a),u.set(f,A),t.set(E,u)}}setRelationMap(t,e){this.relationMaps[t.uuid]=e,this.onRelationsIndexed.trigger({modelID:t.uuid,relationsMap:e})}async process(t){if(!t.hasProperties)throw new Error("FragmentsGroup properties not found");let e=this.relationMaps[t.uuid];if(e)return e;e=new Map;for(const i of this._ifcRels){const o=await t.getAllPropertiesOfType(i);if(!o)continue;const n=this._relToAttributesMap.get(i);if(!n)continue;const{forRelated:r,forRelating:a}=n;for(const c in o){const h=o[c];this.indexRelations(e,h,r,a)}}return this.setRelationMap(t,e),e}async processFromWebIfc(t,e){const i=new Map;for(const o of this._ifcRels){const n=this._relToAttributesMap.get(o);if(!n)continue;const{forRelated:r,forRelating:a}=n,c=t.GetLineIDsWithType(e,o);for(let h=0;h<c.size();h++){const d=await t.properties.getItemProperties(e,c.get(h));this.indexRelations(i,d,r,a)}}return this.onRelationsIndexed.trigger({modelID:e.toString(),relationsMap:i}),i}getEntityRelations(t,e,i){const o=this.relationMaps[t.uuid];if(!o)return null;const n=o.get(e),r=this._inverseAttributes.indexOf(i);if(!n||r===-1)return null;const a=n.get(r);return a||null}serializeRelations(t){const e={};for(const[i,o]of t.entries()){e[i]||(e[i]={});for(const[n,r]of o.entries())e[i][n]=r}return JSON.stringify(e)}serializeModelRelations(t){const e=this.relationMaps[t.uuid];return e?this.serializeRelations(e):null}serializeAllRelations(){const t={};for(const e in this.relationMaps){const i=this.relationMaps[e],o={};for(const[n,r]of i.entries()){o[n]||(o[n]={});for(const[a,c]of r.entries())o[n][a]=c}t[e]=o}return JSON.stringify(t)}getRelationsMapFromJSON(t){const e=JSON.parse(t),i=new Map;for(const o in e){const n=e[o],r=new Map;for(const a in n)r.set(Number(a),n[a]);i.set(Number(o),r)}return i}dispose(){this.relationMaps={},this.components.get(ot).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(De.uuid),this.onDisposed.reset()}};I(De,"uuid","23a889ab-83b3-44a4-8bee-ead83438370b");let le=De;const As=class As extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onFragmentsLoaded",new D);I(this,"onFragmentsDisposed",new D);I(this,"list",new Map);I(this,"groups",new Map);I(this,"baseCoordinationModel","");I(this,"enabled",!0);I(this,"_loader",new In.Serializer);this.components.add(As.uuid,this)}get meshes(){const t=[];for(const[e,i]of this.list)t.push(i.mesh);return t}dispose(){for(const[t,e]of this.groups)e.dispose(!0);this.baseCoordinationModel="",this.groups.clear(),this.list.clear(),this.onFragmentsLoaded.reset(),this.onFragmentsDisposed.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}disposeGroup(t){const{uuid:e}=t,i=[];for(const o of t.items)i.push(o.id),this.list.delete(o.id);t.dispose(!0),this.groups.delete(t.uuid),this.onFragmentsDisposed.trigger({groupID:e,fragmentIDs:i})}load(t,e){const o={...{coordinate:!0},...e},{coordinate:n,name:r,properties:a,relationsMap:c}=o,h=this._loader.import(t);r&&(h.name=r);for(const d of h.items)d.group=h,this.list.set(d.id,d);return n&&this.coordinate([h]),this.groups.set(h.uuid,h),a&&h.setLocalProperties(a),c&&this.components.get(le).setRelationMap(h,c),this.onFragmentsLoaded.trigger(h),h}export(t){return this._loader.export(t)}getModelIdMap(t){const e={};for(const i in t){const o=this.list.get(i);if(!(o&&o.group))continue;const n=o.group;n.uuid in e||(e[n.uuid]=new Set);const r=t[i];for(const a of r)e[n.uuid].add(a)}return e}modelIdToFragmentIdMap(t){let e={};for(const i in t){const o=this.groups.get(i);if(!o)continue;const n=t[i],r=o.getFragmentMap(n);e={...e,...r}}return e}coordinate(t=Array.from(this.groups.values())){if(this.baseCoordinationModel.length===0){const o=t.pop();if(!o)return;this.baseCoordinationModel=o.uuid}if(!t.length)return;const i=this.groups.get(this.baseCoordinationModel);if(!i){console.log("No base model found for coordination!");return}for(const o of t)o!==i&&(o.position.set(0,0,0),o.rotation.set(0,0,0),o.scale.set(1,1,1),o.updateMatrix(),o.applyMatrix4(o.coordinationMatrix.clone().invert()),o.applyMatrix4(i.coordinationMatrix))}};I(As,"uuid","fef46874-46a3-461b-8c44-2922ab77c806");let ot=As;const Tt=class Tt extends ${constructor(t){super(t);I(this,"enabled",!0);I(this,"onDisposed",new D);I(this,"_absoluteMin");I(this,"_absoluteMax");I(this,"_meshes",[]);this.components.add(Tt.uuid,this),this._absoluteMin=Tt.newBound(!0),this._absoluteMax=Tt.newBound(!1)}static getDimensions(t){const{min:e,max:i}=t,o=Math.abs(i.x-e.x),n=Math.abs(i.y-e.y),r=Math.abs(i.z-e.z),a=new S.Vector3;return a.subVectors(i,e).divideScalar(2).add(e),{width:o,height:n,depth:r,center:a}}static newBound(t){const e=t?1:-1;return new S.Vector3(e*Number.MAX_VALUE,e*Number.MAX_VALUE,e*Number.MAX_VALUE)}static getBounds(t,e,i){const o=i||this.newBound(!1),n=e||this.newBound(!0);for(const r of t)r.x<n.x&&(n.x=r.x),r.y<n.y&&(n.y=r.y),r.z<n.z&&(n.z=r.z),r.x>o.x&&(o.x=r.x),r.y>o.y&&(o.y=r.y),r.z>o.z&&(o.z=r.z);return new S.Box3(e,i)}dispose(){const t=this.components.get(_t);for(const e of this._meshes)t.destroy(e);this._meshes=[],this.onDisposed.trigger(Tt.uuid),this.onDisposed.reset()}get(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone();return new S.Box3(t,e)}getSphere(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone(),i=Math.abs((e.x-t.x)/2),o=Math.abs((e.y-t.y)/2),n=Math.abs((e.z-t.z)/2),r=new S.Vector3(t.x+i,t.y+o,t.z+n),a=r.distanceTo(t);return new S.Sphere(r,a)}getMesh(){const t=new S.Box3(this._absoluteMin,this._absoluteMax),e=Tt.getDimensions(t),{width:i,height:o,depth:n,center:r}=e,a=new S.BoxGeometry(i,o,n),c=new S.Mesh(a);return this._meshes.push(c),c.position.copy(r),c}reset(){this._absoluteMin=Tt.newBound(!0),this._absoluteMax=Tt.newBound(!1)}add(t){for(const e of t.items)this.addMesh(e.mesh)}addMesh(t,e){if(!t.geometry.index)return;const i=Tt.getFragmentBounds(t);t.updateMatrixWorld();const o=t.matrixWorld,n=new S.Matrix4,r=t instanceof S.InstancedMesh,a=new Set;if(e&&t instanceof Dt.FragmentMesh)for(const c of e){const h=t.fragment.getInstancesIDs(c);if(h)for(const d of h)a.add(d)}else a.add(0);for(const c of a){const h=i.min.clone(),d=i.max.clone();r&&(t.getMatrixAt(c,n),h.applyMatrix4(n),d.applyMatrix4(n)),h.applyMatrix4(o),d.applyMatrix4(o),h.x<this._absoluteMin.x&&(this._absoluteMin.x=h.x),h.y<this._absoluteMin.y&&(this._absoluteMin.y=h.y),h.z<this._absoluteMin.z&&(this._absoluteMin.z=h.z),h.x>this._absoluteMax.x&&(this._absoluteMax.x=h.x),h.y>this._absoluteMax.y&&(this._absoluteMax.y=h.y),h.z>this._absoluteMax.z&&(this._absoluteMax.z=h.z),d.x>this._absoluteMax.x&&(this._absoluteMax.x=d.x),d.y>this._absoluteMax.y&&(this._absoluteMax.y=d.y),d.z>this._absoluteMax.z&&(this._absoluteMax.z=d.z),d.x<this._absoluteMin.x&&(this._absoluteMin.x=d.x),d.y<this._absoluteMin.y&&(this._absoluteMin.y=d.y),d.z<this._absoluteMin.z&&(this._absoluteMin.z=d.z)}}addFragmentIdMap(t){const e=this.components.get(ot);for(const i in t){const o=e.list.get(i);if(!o)continue;const n=t[i];this.addMesh(o.mesh,n)}}static getFragmentBounds(t){const e=t.geometry.attributes.position,i=Number.MAX_VALUE,o=-i,n=new S.Vector3(i,i,i),r=new S.Vector3(o,o,o);if(!t.geometry.index)throw new Error("Geometry must be indexed!");const a=Array.from(t.geometry.index.array);for(let c=0;c<a.length;c++){if(c%3===0&&a[c]===0&&a[c+1]===0&&a[c+2]===0){c+=2;continue}const h=a[c],d=e.getX(h),E=e.getY(h),u=e.getZ(h);d<n.x&&(n.x=d),E<n.y&&(n.y=E),u<n.z&&(n.z=u),d>r.x&&(r.x=d),E>r.y&&(r.y=E),u>r.z&&(r.z=u)}return new S.Box3(n,r)}};I(Tt,"uuid","d1444724-dba6-4cdd-a0c7-68ee1450d166");let Ci=Tt;const Ni=new Set([1123145078,574549367,1675464909,2059837836,3798115385,32440307,3125803723,3207858831,2740243338,2624227202,4240577450,3615266464,3724593414,220341763,477187591,1878645084,1300840506,3303107099,1607154358,1878645084,846575682,1351298697,2417041796,3049322572,3331915920,1416205885,776857604,3285139300,3958052878,2827736869,2732653382,673634403,3448662350,4142052618,2924175390,803316827,2556980723,1809719519,2205249479,807026263,3737207727,1660063152,2347385850,2705031697,3732776249,2485617015,2611217952,1704287377,2937912522,2770003689,1281925730,1484403080,3448662350,4142052618,3800577675,4006246654,3590301190,1383045692,2775532180,2047409740,370225590,3593883385,2665983363,4124623270,812098782,3649129432,987898635,1105321065,3510044353,1635779807,2603310189,3406155212,1310608509,4261334040,2736907675,3649129432,1136057603,1260505505,4182860854,2713105998,2898889636,59481748,3749851601,3486308946,3150382593,1062206242,3264961684,15328376,1485152156,370225590,1981873012,2859738748,45288368,2614616156,2732653382,775493141,2147822146,2601014836,2629017746,1186437898,2367409068,1213902940,3632507154,3900360178,476780140,1472233963,2804161546,3008276851,738692330,374418227,315944413,3905492369,3570813810,2571569899,178912537,2294589976,1437953363,2133299955,572779678,3092502836,388784114,2624227202,1425443689,3057273783,2347385850,1682466193,2519244187,2839578677,3958567839,2513912981,2830218821,427810014]),Fs=class Fs extends ${constructor(t){super(t);I(this,"enabled",!0);t.add(Fs.uuid,this)}async export(t,e,i=!1,o=!0){const n={},r=new Set(t.GetIfcEntityList(e)),a=new Set([b.IFCPROJECT,b.IFCSITE,b.IFCBUILDING,b.IFCBUILDINGSTOREY,b.IFCSPACE]);for(const c of a)r.add(c);for(const c of r){if(Ni.has(c))continue;const h=a.has(c)&&o,d=t.GetLineIDsWithType(e,c);for(const E of d){const u=t.GetLine(0,E,h,i);n[u.expressID]=u}}return n}};I(Fs,"uuid","b32c4332-cd67-436e-ba7f-196646c7a635");let us=Fs;const Bn={103090709:"IFCPROJECT",4097777520:"IFCSITE",4031249490:"IFCBUILDING",3124254112:"IFCBUILDINGSTOREY",3856911033:"IFCSPACE",1674181508:"IFCANNOTATION",25142252:"IFCCONTROLLER",32344328:"IFCBOILER",76236018:"IFCLAMP",90941305:"IFCPUMP",177149247:"IFCAIRTERMINALBOX",182646315:"IFCFLOWINSTRUMENT",263784265:"IFCFURNISHINGELEMENT",264262732:"IFCELECTRICGENERATOR",277319702:"IFCAUDIOVISUALAPPLIANCE",310824031:"IFCPIPEFITTING",331165859:"IFCSTAIR",342316401:"IFCDUCTFITTING",377706215:"IFCMECHANICALFASTENER",395920057:"IFCDOOR",402227799:"IFCELECTRICMOTOR",413509423:"IFCSYSTEMFURNITUREELEMENT",484807127:"IFCEVAPORATOR",486154966:"IFCWINDOWSTANDARDCASE",629592764:"IFCLIGHTFIXTURE",630975310:"IFCUNITARYCONTROLELEMENT",635142910:"IFCCABLECARRIERFITTING",639361253:"IFCCOIL",647756555:"IFCFASTENER",707683696:"IFCFLOWSTORAGEDEVICE",738039164:"IFCPROTECTIVEDEVICE",753842376:"IFCBEAM",812556717:"IFCTANK",819412036:"IFCFILTER",843113511:"IFCCOLUMN",862014818:"IFCELECTRICDISTRIBUTIONBOARD",900683007:"IFCFOOTING",905975707:"IFCCOLUMNSTANDARDCASE",926996030:"IFCVOIDINGFEATURE",979691226:"IFCREINFORCINGBAR",987401354:"IFCFLOWSEGMENT",1003880860:"IFCELECTRICTIMECONTROL",1051757585:"IFCCABLEFITTING",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1073191201:"IFCMEMBER",1095909175:"IFCBUILDINGELEMENTPROXY",1156407060:"IFCPLATESTANDARDCASE",1162798199:"IFCSWITCHINGDEVICE",1329646415:"IFCSHADINGDEVICE",1335981549:"IFCDISCRETEACCESSORY",1360408905:"IFCDUCTSILENCER",1404847402:"IFCSTACKTERMINAL",1426591983:"IFCFIRESUPPRESSIONTERMINAL",1437502449:"IFCMEDICALDEVICE",1509553395:"IFCFURNITURE",1529196076:"IFCSLAB",1620046519:"IFCTRANSPORTELEMENT",1634111441:"IFCAIRTERMINAL",1658829314:"IFCENERGYCONVERSIONDEVICE",1677625105:"IFCCIVILELEMENT",1687234759:"IFCPILE",1904799276:"IFCELECTRICAPPLIANCE",1911478936:"IFCMEMBERSTANDARDCASE",1945004755:"IFCDISTRIBUTIONELEMENT",1973544240:"IFCCOVERING",1999602285:"IFCSPACEHEATER",2016517767:"IFCROOF",2056796094:"IFCAIRTOAIRHEATRECOVERY",2058353004:"IFCFLOWCONTROLLER",2068733104:"IFCHUMIDIFIER",2176052936:"IFCJUNCTIONBOX",2188021234:"IFCFLOWMETER",2223149337:"IFCFLOWTERMINAL",2262370178:"IFCRAILING",2272882330:"IFCCONDENSER",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",2320036040:"IFCREINFORCINGMESH",2347447852:"IFCTENDONANCHOR",2391383451:"IFCVIBRATIONISOLATOR",2391406946:"IFCWALL",2474470126:"IFCMOTORCONNECTION",2769231204:"IFCVIRTUALELEMENT",2814081492:"IFCENGINE",2906023776:"IFCBEAMSTANDARDCASE",2938176219:"IFCBURNER",2979338954:"IFCBUILDINGELEMENTPART",3024970846:"IFCRAMP",3026737570:"IFCTUBEBUNDLE",3027962421:"IFCSLABSTANDARDCASE",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",3053780830:"IFCSANITARYTERMINAL",3079942009:"IFCOPENINGSTANDARDCASE",3087945054:"IFCALARM",3101698114:"IFCSURFACEFEATURE",3127900445:"IFCSLABELEMENTEDCASE",3132237377:"IFCFLOWMOVINGDEVICE",3171933400:"IFCPLATE",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",3242481149:"IFCDOORSTANDARDCASE",3283111854:"IFCRAMPFLIGHT",3296154744:"IFCCHIMNEY",3304561284:"IFCWINDOW",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",3319311131:"IFCHEATEXCHANGER",3415622556:"IFCFAN",3420628829:"IFCSOLARDEVICE",3493046030:"IFCGEOGRAPHICELEMENT",3495092785:"IFCCURTAINWALL",3508470533:"IFCFLOWTREATMENTDEVICE",3512223829:"IFCWALLSTANDARDCASE",3518393246:"IFCDUCTSEGMENT",3571504051:"IFCCOMPRESSOR",3588315303:"IFCOPENINGELEMENT",3612865200:"IFCPIPESEGMENT",3640358203:"IFCCOOLINGTOWER",3651124850:"IFCPROJECTIONELEMENT",3694346114:"IFCOUTLET",3747195512:"IFCEVAPORATIVECOOLER",3758799889:"IFCCABLECARRIERSEGMENT",3824725483:"IFCTENDON",3825984169:"IFCTRANSFORMER",3902619387:"IFCCHILLER",4074379575:"IFCDAMPER",4086658281:"IFCSENSOR",4123344466:"IFCELEMENTASSEMBLY",4136498852:"IFCCOOLEDBEAM",4156078855:"IFCWALLELEMENTEDCASE",4175244083:"IFCINTERCEPTOR",4207607924:"IFCVALVE",4217484030:"IFCCABLESEGMENT",4237592921:"IFCWASTETERMINAL",4252922144:"IFCSTAIRFLIGHT",4278956645:"IFCFLOWFITTING",4288193352:"IFCACTUATOR",4292641817:"IFCUNITARYEQUIPMENT",3009204131:"IFCGRID"};class Pr{getAll(s,t){const e={},i=Object.keys(Bn).map(o=>parseInt(o,10));for(let o=0;o<i.length;o++){const n=i[o],r=s.GetLineIDsWithType(t,n),a=r.size();for(let c=0;c<a;c++)e[r.get(c)]=n}return e}}const yi={950732822:"IFCURIREFERENCE",4075327185:"IFCTIME",1209108979:"IFCTEMPERATURERATEOFCHANGEMEASURE",3457685358:"IFCSOUNDPRESSURELEVELMEASURE",4157543285:"IFCSOUNDPOWERLEVELMEASURE",2798247006:"IFCPROPERTYSETDEFINITIONSET",1790229001:"IFCPOSITIVEINTEGER",525895558:"IFCNONNEGATIVELENGTHMEASURE",1774176899:"IFCLINEINDEX",1275358634:"IFCLANGUAGEID",2541165894:"IFCDURATION",3701338814:"IFCDAYINWEEKNUMBER",2195413836:"IFCDATETIME",937566702:"IFCDATE",1683019596:"IFCCARDINALPOINTREFERENCE",2314439260:"IFCBINARY",1500781891:"IFCAREADENSITYMEASURE",3683503648:"IFCARCINDEX",4065007721:"IFCYEARNUMBER",1718600412:"IFCWARPINGMOMENTMEASURE",51269191:"IFCWARPINGCONSTANTMEASURE",2593997549:"IFCVOLUMETRICFLOWRATEMEASURE",3458127941:"IFCVOLUMEMEASURE",3345633955:"IFCVAPORPERMEABILITYMEASURE",1278329552:"IFCTORQUEMEASURE",2591213694:"IFCTIMESTAMP",2726807636:"IFCTIMEMEASURE",743184107:"IFCTHERMODYNAMICTEMPERATUREMEASURE",2016195849:"IFCTHERMALTRANSMITTANCEMEASURE",857959152:"IFCTHERMALRESISTANCEMEASURE",2281867870:"IFCTHERMALEXPANSIONCOEFFICIENTMEASURE",2645777649:"IFCTHERMALCONDUCTIVITYMEASURE",232962298:"IFCTHERMALADMITTANCEMEASURE",296282323:"IFCTEXTTRANSFORMATION",603696268:"IFCTEXTFONTNAME",3490877962:"IFCTEXTDECORATION",1460886941:"IFCTEXTALIGNMENT",2801250643:"IFCTEXT",58845555:"IFCTEMPERATUREGRADIENTMEASURE",361837227:"IFCSPECULARROUGHNESS",2757832317:"IFCSPECULAREXPONENT",3477203348:"IFCSPECIFICHEATCAPACITYMEASURE",993287707:"IFCSOUNDPRESSUREMEASURE",846465480:"IFCSOUNDPOWERMEASURE",3471399674:"IFCSOLIDANGLEMEASURE",408310005:"IFCSHEARMODULUSMEASURE",2190458107:"IFCSECTIONALAREAINTEGRALMEASURE",3467162246:"IFCSECTIONMODULUSMEASURE",2766185779:"IFCSECONDINMINUTE",3211557302:"IFCROTATIONALSTIFFNESSMEASURE",1755127002:"IFCROTATIONALMASSMEASURE",2133746277:"IFCROTATIONALFREQUENCYMEASURE",200335297:"IFCREAL",96294661:"IFCRATIOMEASURE",3972513137:"IFCRADIOACTIVITYMEASURE",3665567075:"IFCPRESSUREMEASURE",2169031380:"IFCPRESENTABLETEXT",1364037233:"IFCPOWERMEASURE",1245737093:"IFCPOSITIVERATIOMEASURE",3054510233:"IFCPOSITIVEPLANEANGLEMEASURE",2815919920:"IFCPOSITIVELENGTHMEASURE",4042175685:"IFCPLANEANGLEMEASURE",2642773653:"IFCPLANARFORCEMEASURE",2260317790:"IFCPARAMETERVALUE",929793134:"IFCPHMEASURE",2395907400:"IFCNUMERICMEASURE",2095195183:"IFCNORMALISEDRATIOMEASURE",765770214:"IFCMONTHINYEARNUMBER",2615040989:"IFCMONETARYMEASURE",3114022597:"IFCMOMENTOFINERTIAMEASURE",1648970520:"IFCMOLECULARWEIGHTMEASURE",3177669450:"IFCMOISTUREDIFFUSIVITYMEASURE",1753493141:"IFCMODULUSOFSUBGRADEREACTIONMEASURE",1052454078:"IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE",2173214787:"IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE",3341486342:"IFCMODULUSOFELASTICITYMEASURE",102610177:"IFCMINUTEINHOUR",3531705166:"IFCMASSPERLENGTHMEASURE",3124614049:"IFCMASSMEASURE",4017473158:"IFCMASSFLOWRATEMEASURE",1477762836:"IFCMASSDENSITYMEASURE",2486716878:"IFCMAGNETICFLUXMEASURE",286949696:"IFCMAGNETICFLUXDENSITYMEASURE",151039812:"IFCLUMINOUSINTENSITYMEASURE",2755797622:"IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE",2095003142:"IFCLUMINOUSFLUXMEASURE",503418787:"IFCLOGICAL",3086160713:"IFCLINEARVELOCITYMEASURE",1307019551:"IFCLINEARSTIFFNESSMEASURE",2128979029:"IFCLINEARMOMENTMEASURE",191860431:"IFCLINEARFORCEMEASURE",1243674935:"IFCLENGTHMEASURE",3258342251:"IFCLABEL",2054016361:"IFCKINEMATICVISCOSITYMEASURE",3192672207:"IFCISOTHERMALMOISTURECAPACITYMEASURE",3686016028:"IFCIONCONCENTRATIONMEASURE",3809634241:"IFCINTEGERCOUNTRATEMEASURE",1939436016:"IFCINTEGER",2679005408:"IFCINDUCTANCEMEASURE",3358199106:"IFCILLUMINANCEMEASURE",983778844:"IFCIDENTIFIER",2589826445:"IFCHOURINDAY",1158859006:"IFCHEATINGVALUEMEASURE",3113092358:"IFCHEATFLUXDENSITYMEASURE",3064340077:"IFCGLOBALLYUNIQUEID",3044325142:"IFCFREQUENCYMEASURE",1361398929:"IFCFORCEMEASURE",2590844177:"IFCFONTWEIGHT",2715512545:"IFCFONTVARIANT",1102727119:"IFCFONTSTYLE",2078135608:"IFCENERGYMEASURE",2506197118:"IFCELECTRICVOLTAGEMEASURE",2951915441:"IFCELECTRICRESISTANCEMEASURE",3790457270:"IFCELECTRICCURRENTMEASURE",2093906313:"IFCELECTRICCONDUCTANCEMEASURE",3818826038:"IFCELECTRICCHARGEMEASURE",1827137117:"IFCELECTRICCAPACITANCEMEASURE",69416015:"IFCDYNAMICVISCOSITYMEASURE",524656162:"IFCDOSEEQUIVALENTMEASURE",4134073009:"IFCDIMENSIONCOUNT",1514641115:"IFCDESCRIPTIVEMEASURE",300323983:"IFCDAYLIGHTSAVINGHOUR",86635668:"IFCDAYINMONTHNUMBER",94842927:"IFCCURVATUREMEASURE",1778710042:"IFCCOUNTMEASURE",3238673880:"IFCCONTEXTDEPENDENTMEASURE",3812528620:"IFCCOMPOUNDPLANEANGLEMEASURE",2991860651:"IFCCOMPLEXNUMBER",1867003952:"IFCBOXALIGNMENT",2735952531:"IFCBOOLEAN",2650437152:"IFCAREAMEASURE",632304761:"IFCANGULARVELOCITYMEASURE",360377573:"IFCAMOUNTOFSUBSTANCEMEASURE",4182062534:"IFCACCELERATIONMEASURE",3699917729:"IFCABSORBEDDOSEMEASURE",1971632696:"IFCGEOSLICE",2680139844:"IFCGEOMODEL",24726584:"IFCELECTRICFLOWTREATMENTDEVICE",3693000487:"IFCDISTRIBUTIONBOARD",3460952963:"IFCCONVEYORSEGMENT",3999819293:"IFCCAISSONFOUNDATION",3314249567:"IFCBOREHOLE",4196446775:"IFCBEARING",325726236:"IFCALIGNMENT",3425753595:"IFCTRACKELEMENT",991950508:"IFCSIGNAL",3798194928:"IFCREINFORCEDSOIL",3290496277:"IFCRAIL",1383356374:"IFCPAVEMENT",2182337498:"IFCNAVIGATIONELEMENT",234836483:"IFCMOORINGDEVICE",2078563270:"IFCMOBILETELECOMMUNICATIONSAPPLIANCE",1638804497:"IFCLIQUIDTERMINAL",1154579445:"IFCLINEARPOSITIONINGELEMENT",2696325953:"IFCKERB",2713699986:"IFCGEOTECHNICALASSEMBLY",2142170206:"IFCELECTRICFLOWTREATMENTDEVICETYPE",3376911765:"IFCEARTHWORKSFILL",1077100507:"IFCEARTHWORKSELEMENT",3071239417:"IFCEARTHWORKSCUT",479945903:"IFCDISTRIBUTIONBOARDTYPE",3426335179:"IFCDEEPFOUNDATION",1502416096:"IFCCOURSE",2940368186:"IFCCONVEYORSEGMENTTYPE",3203706013:"IFCCAISSONFOUNDATIONTYPE",3862327254:"IFCBUILTSYSTEM",1876633798:"IFCBUILTELEMENT",963979645:"IFCBRIDGEPART",644574406:"IFCBRIDGE",3649138523:"IFCBEARINGTYPE",1662888072:"IFCALIGNMENTVERTICAL",317615605:"IFCALIGNMENTSEGMENT",1545765605:"IFCALIGNMENTHORIZONTAL",4266260250:"IFCALIGNMENTCANT",3956297820:"IFCVIBRATIONDAMPERTYPE",1530820697:"IFCVIBRATIONDAMPER",840318589:"IFCVEHICLE",1953115116:"IFCTRANSPORTATIONDEVICE",618700268:"IFCTRACKELEMENTTYPE",2281632017:"IFCTENDONCONDUITTYPE",3663046924:"IFCTENDONCONDUIT",42703149:"IFCSINESPIRAL",1894708472:"IFCSIGNALTYPE",3599934289:"IFCSIGNTYPE",33720170:"IFCSIGN",1027922057:"IFCSEVENTHORDERPOLYNOMIALSPIRAL",544395925:"IFCSEGMENTEDREFERENCECURVE",3649235739:"IFCSECONDORDERPOLYNOMIALSPIRAL",550521510:"IFCROADPART",146592293:"IFCROAD",3818125796:"IFCRELADHERESTOELEMENT",4021432810:"IFCREFERENT",1891881377:"IFCRAILWAYPART",3992365140:"IFCRAILWAY",1763565496:"IFCRAILTYPE",1946335990:"IFCPOSITIONINGELEMENT",514975943:"IFCPAVEMENTTYPE",506776471:"IFCNAVIGATIONELEMENTTYPE",710110818:"IFCMOORINGDEVICETYPE",1950438474:"IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE",976884017:"IFCMARINEPART",525669439:"IFCMARINEFACILITY",1770583370:"IFCLIQUIDTERMINALTYPE",2176059722:"IFCLINEARELEMENT",679976338:"IFCKERBTYPE",3948183225:"IFCIMPACTPROTECTIONDEVICETYPE",2568555532:"IFCIMPACTPROTECTIONDEVICE",2898700619:"IFCGRADIENTCURVE",1594536857:"IFCGEOTECHNICALSTRATUM",4230923436:"IFCGEOTECHNICALELEMENT",4228831410:"IFCFACILITYPARTCOMMON",1310830890:"IFCFACILITYPART",24185140:"IFCFACILITY",4234616927:"IFCDIRECTRIXDERIVEDREFERENCESWEPTAREASOLID",1306400036:"IFCDEEPFOUNDATIONTYPE",4189326743:"IFCCOURSETYPE",2000195564:"IFCCOSINESPIRAL",3497074424:"IFCCLOTHOID",1626504194:"IFCBUILTELEMENTTYPE",3651464721:"IFCVEHICLETYPE",1229763772:"IFCTRIANGULATEDIRREGULARNETWORK",3665877780:"IFCTRANSPORTATIONDEVICETYPE",782932809:"IFCTHIRDORDERPOLYNOMIALSPIRAL",2735484536:"IFCSPIRAL",1356537516:"IFCSECTIONEDSURFACE",1290935644:"IFCSECTIONEDSOLIDHORIZONTAL",1862484736:"IFCSECTIONEDSOLID",1441486842:"IFCRELPOSITIONS",1033248425:"IFCRELASSOCIATESPROFILEDEF",3381221214:"IFCPOLYNOMIALCURVE",2485787929:"IFCOFFSETCURVEBYDISTANCES",590820931:"IFCOFFSETCURVE",3465909080:"IFCINDEXEDPOLYGONALTEXTUREMAP",593015953:"IFCDIRECTRIXCURVESWEPTAREASOLID",4212018352:"IFCCURVESEGMENT",3425423356:"IFCAXIS2PLACEMENTLINEAR",823603102:"IFCSEGMENT",2165702409:"IFCPOINTBYDISTANCEEXPRESSION",182550632:"IFCOPENCROSSPROFILEDEF",388784114:"IFCLINEARPLACEMENT",536804194:"IFCALIGNMENTHORIZONTALSEGMENT",3752311538:"IFCALIGNMENTCANTSEGMENT",1010789467:"IFCTEXTURECOORDINATEINDICESWITHVOIDS",222769930:"IFCTEXTURECOORDINATEINDICES",2691318326:"IFCQUANTITYNUMBER",3633395639:"IFCALIGNMENTVERTICALSEGMENT",2879124712:"IFCALIGNMENTPARAMETERSEGMENT",25142252:"IFCCONTROLLER",3087945054:"IFCALARM",4288193352:"IFCACTUATOR",630975310:"IFCUNITARYCONTROLELEMENT",4086658281:"IFCSENSOR",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",182646315:"IFCFLOWINSTRUMENT",1426591983:"IFCFIRESUPPRESSIONTERMINAL",819412036:"IFCFILTER",3415622556:"IFCFAN",1003880860:"IFCELECTRICTIMECONTROL",402227799:"IFCELECTRICMOTOR",264262732:"IFCELECTRICGENERATOR",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",862014818:"IFCELECTRICDISTRIBUTIONBOARD",1904799276:"IFCELECTRICAPPLIANCE",1360408905:"IFCDUCTSILENCER",3518393246:"IFCDUCTSEGMENT",342316401:"IFCDUCTFITTING",562808652:"IFCDISTRIBUTIONCIRCUIT",4074379575:"IFCDAMPER",3640358203:"IFCCOOLINGTOWER",4136498852:"IFCCOOLEDBEAM",2272882330:"IFCCONDENSER",3571504051:"IFCCOMPRESSOR",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",639361253:"IFCCOIL",3902619387:"IFCCHILLER",4217484030:"IFCCABLESEGMENT",1051757585:"IFCCABLEFITTING",3758799889:"IFCCABLECARRIERSEGMENT",635142910:"IFCCABLECARRIERFITTING",2938176219:"IFCBURNER",32344328:"IFCBOILER",2906023776:"IFCBEAMSTANDARDCASE",277319702:"IFCAUDIOVISUALAPPLIANCE",2056796094:"IFCAIRTOAIRHEATRECOVERY",177149247:"IFCAIRTERMINALBOX",1634111441:"IFCAIRTERMINAL",486154966:"IFCWINDOWSTANDARDCASE",4237592921:"IFCWASTETERMINAL",4156078855:"IFCWALLELEMENTEDCASE",4207607924:"IFCVALVE",4292641817:"IFCUNITARYEQUIPMENT",3179687236:"IFCUNITARYCONTROLELEMENTTYPE",3026737570:"IFCTUBEBUNDLE",3825984169:"IFCTRANSFORMER",812556717:"IFCTANK",1162798199:"IFCSWITCHINGDEVICE",385403989:"IFCSTRUCTURALLOADCASE",1404847402:"IFCSTACKTERMINAL",1999602285:"IFCSPACEHEATER",3420628829:"IFCSOLARDEVICE",3027962421:"IFCSLABSTANDARDCASE",3127900445:"IFCSLABELEMENTEDCASE",1329646415:"IFCSHADINGDEVICE",3053780830:"IFCSANITARYTERMINAL",2572171363:"IFCREINFORCINGBARTYPE",1232101972:"IFCRATIONALBSPLINECURVEWITHKNOTS",90941305:"IFCPUMP",655969474:"IFCPROTECTIVEDEVICETRIPPINGUNITTYPE",738039164:"IFCPROTECTIVEDEVICE",1156407060:"IFCPLATESTANDARDCASE",3612865200:"IFCPIPESEGMENT",310824031:"IFCPIPEFITTING",3694346114:"IFCOUTLET",144952367:"IFCOUTERBOUNDARYCURVE",2474470126:"IFCMOTORCONNECTION",1911478936:"IFCMEMBERSTANDARDCASE",1437502449:"IFCMEDICALDEVICE",629592764:"IFCLIGHTFIXTURE",76236018:"IFCLAMP",2176052936:"IFCJUNCTIONBOX",4175244083:"IFCINTERCEPTOR",2068733104:"IFCHUMIDIFIER",3319311131:"IFCHEATEXCHANGER",2188021234:"IFCFLOWMETER",1209101575:"IFCEXTERNALSPATIALELEMENT",484807127:"IFCEVAPORATOR",3747195512:"IFCEVAPORATIVECOOLER",2814081492:"IFCENGINE",2417008758:"IFCELECTRICDISTRIBUTIONBOARDTYPE",3242481149:"IFCDOORSTANDARDCASE",3205830791:"IFCDISTRIBUTIONSYSTEM",400855858:"IFCCOMMUNICATIONSAPPLIANCETYPE",905975707:"IFCCOLUMNSTANDARDCASE",1677625105:"IFCCIVILELEMENT",3296154744:"IFCCHIMNEY",2674252688:"IFCCABLEFITTINGTYPE",2188180465:"IFCBURNERTYPE",1177604601:"IFCBUILDINGSYSTEM",39481116:"IFCBUILDINGELEMENTPARTTYPE",1136057603:"IFCBOUNDARYCURVE",2461110595:"IFCBSPLINECURVEWITHKNOTS",1532957894:"IFCAUDIOVISUALAPPLIANCETYPE",4088093105:"IFCWORKCALENDAR",4009809668:"IFCWINDOWTYPE",926996030:"IFCVOIDINGFEATURE",2391383451:"IFCVIBRATIONISOLATOR",2415094496:"IFCTENDONTYPE",3081323446:"IFCTENDONANCHORTYPE",413509423:"IFCSYSTEMFURNITUREELEMENT",3101698114:"IFCSURFACEFEATURE",3657597509:"IFCSTRUCTURALSURFACEACTION",2757150158:"IFCSTRUCTURALCURVEREACTION",1004757350:"IFCSTRUCTURALCURVEACTION",338393293:"IFCSTAIRTYPE",1072016465:"IFCSOLARDEVICETYPE",4074543187:"IFCSHADINGDEVICETYPE",2157484638:"IFCSEAMCURVE",2781568857:"IFCROOFTYPE",2310774935:"IFCREINFORCINGMESHTYPE",964333572:"IFCREINFORCINGELEMENTTYPE",683857671:"IFCRATIONALBSPLINESURFACEWITHKNOTS",1469900589:"IFCRAMPTYPE",2839578677:"IFCPOLYGONALFACESET",1158309216:"IFCPILETYPE",3079942009:"IFCOPENINGSTANDARDCASE",1114901282:"IFCMEDICALDEVICETYPE",3113134337:"IFCINTERSECTIONCURVE",3946677679:"IFCINTERCEPTORTYPE",2571569899:"IFCINDEXEDPOLYCURVE",3493046030:"IFCGEOGRAPHICELEMENT",1509553395:"IFCFURNITURE",1893162501:"IFCFOOTINGTYPE",2853485674:"IFCEXTERNALSPATIALSTRUCTUREELEMENT",4148101412:"IFCEVENT",132023988:"IFCENGINETYPE",2397081782:"IFCELEMENTASSEMBLYTYPE",2323601079:"IFCDOORTYPE",1213902940:"IFCCYLINDRICALSURFACE",1525564444:"IFCCONSTRUCTIONPRODUCTRESOURCETYPE",4105962743:"IFCCONSTRUCTIONMATERIALRESOURCETYPE",2185764099:"IFCCONSTRUCTIONEQUIPMENTRESOURCETYPE",15328376:"IFCCOMPOSITECURVEONSURFACE",3875453745:"IFCCOMPLEXPROPERTYTEMPLATE",3893394355:"IFCCIVILELEMENTTYPE",2197970202:"IFCCHIMNEYTYPE",167062518:"IFCBSPLINESURFACEWITHKNOTS",2887950389:"IFCBSPLINESURFACE",2603310189:"IFCADVANCEDBREPWITHVOIDS",1635779807:"IFCADVANCEDBREP",2916149573:"IFCTRIANGULATEDFACESET",1935646853:"IFCTOROIDALSURFACE",2387106220:"IFCTESSELLATEDFACESET",3206491090:"IFCTASKTYPE",699246055:"IFCSURFACECURVE",4095615324:"IFCSUBCONTRACTRESOURCETYPE",603775116:"IFCSTRUCTURALSURFACEREACTION",4015995234:"IFCSPHERICALSURFACE",2481509218:"IFCSPATIALZONETYPE",463610769:"IFCSPATIALZONE",710998568:"IFCSPATIALELEMENTTYPE",1412071761:"IFCSPATIALELEMENT",3663146110:"IFCSIMPLEPROPERTYTEMPLATE",3243963512:"IFCREVOLVEDAREASOLIDTAPERED",816062949:"IFCREPARAMETRISEDCOMPOSITECURVESEGMENT",1521410863:"IFCRELSPACEBOUNDARY2NDLEVEL",3523091289:"IFCRELSPACEBOUNDARY1STLEVEL",427948657:"IFCRELINTERFERESELEMENTS",307848117:"IFCRELDEFINESBYTEMPLATE",1462361463:"IFCRELDEFINESBYOBJECT",2565941209:"IFCRELDECLARES",1027710054:"IFCRELASSIGNSTOGROUPBYFACTOR",3521284610:"IFCPROPERTYTEMPLATE",492091185:"IFCPROPERTYSETTEMPLATE",653396225:"IFCPROJECTLIBRARY",569719735:"IFCPROCEDURETYPE",3967405729:"IFCPREDEFINEDPROPERTYSET",1682466193:"IFCPCURVE",428585644:"IFCLABORRESOURCETYPE",2294589976:"IFCINDEXEDPOLYGONALFACEWITHVOIDS",178912537:"IFCINDEXEDPOLYGONALFACE",4095422895:"IFCGEOGRAPHICELEMENTTYPE",2652556860:"IFCFIXEDREFERENCESWEPTAREASOLID",2804161546:"IFCEXTRUDEDAREASOLIDTAPERED",4024345920:"IFCEVENTTYPE",2629017746:"IFCCURVEBOUNDEDSURFACE",1815067380:"IFCCREWRESOURCETYPE",3419103109:"IFCCONTEXT",2574617495:"IFCCONSTRUCTIONRESOURCETYPE",2059837836:"IFCCARTESIANPOINTLIST3D",1675464909:"IFCCARTESIANPOINTLIST2D",574549367:"IFCCARTESIANPOINTLIST",3406155212:"IFCADVANCEDFACE",3698973494:"IFCTYPERESOURCE",3736923433:"IFCTYPEPROCESS",901063453:"IFCTESSELLATEDITEM",1096409881:"IFCSWEPTDISKSOLIDPOLYGONAL",1042787934:"IFCRESOURCETIME",1608871552:"IFCRESOURCECONSTRAINTRELATIONSHIP",2943643501:"IFCRESOURCEAPPROVALRELATIONSHIP",2090586900:"IFCQUANTITYSET",1482703590:"IFCPROPERTYTEMPLATEDEFINITION",3778827333:"IFCPREDEFINEDPROPERTIES",2998442950:"IFCMIRROREDPROFILEDEF",853536259:"IFCMATERIALRELATIONSHIP",3404854881:"IFCMATERIALPROFILESETUSAGETAPERING",3079605661:"IFCMATERIALPROFILESETUSAGE",2852063980:"IFCMATERIALCONSTITUENTSET",3708119e3:"IFCMATERIALCONSTITUENT",1585845231:"IFCLAGTIME",2133299955:"IFCINDEXEDTRIANGLETEXTUREMAP",1437953363:"IFCINDEXEDTEXTUREMAP",3570813810:"IFCINDEXEDCOLOURMAP",1437805879:"IFCEXTERNALREFERENCERELATIONSHIP",297599258:"IFCEXTENDEDPROPERTIES",211053100:"IFCEVENTTIME",2713554722:"IFCCONVERSIONBASEDUNITWITHOFFSET",3285139300:"IFCCOLOURRGBLIST",1236880293:"IFCWORKTIME",1199560280:"IFCTIMEPERIOD",3611470254:"IFCTEXTUREVERTEXLIST",2771591690:"IFCTASKTIMERECURRING",1549132990:"IFCTASKTIME",2043862942:"IFCTABLECOLUMN",2934153892:"IFCSURFACEREINFORCEMENTAREA",609421318:"IFCSTRUCTURALLOADORRESULT",3478079324:"IFCSTRUCTURALLOADCONFIGURATION",1054537805:"IFCSCHEDULINGTIME",2439245199:"IFCRESOURCELEVELRELATIONSHIP",2433181523:"IFCREFERENCE",3915482550:"IFCRECURRENCEPATTERN",986844984:"IFCPROPERTYABSTRACTION",3843373140:"IFCPROJECTEDCRS",677532197:"IFCPRESENTATIONITEM",1507914824:"IFCMATERIALUSAGEDEFINITION",552965576:"IFCMATERIALPROFILEWITHOFFSETS",164193824:"IFCMATERIALPROFILESET",2235152071:"IFCMATERIALPROFILE",1847252529:"IFCMATERIALLAYERWITHOFFSETS",760658860:"IFCMATERIALDEFINITION",3057273783:"IFCMAPCONVERSION",4294318154:"IFCEXTERNALINFORMATION",1466758467:"IFCCOORDINATEREFERENCESYSTEM",1785450214:"IFCCOORDINATEOPERATION",775493141:"IFCCONNECTIONVOLUMEGEOMETRY",979691226:"IFCREINFORCINGBAR",3700593921:"IFCELECTRICDISTRIBUTIONPOINT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",578613899:"IFCCONTROLLERTYPE",2454782716:"IFCCHAMFEREDGEFEATURE",753842376:"IFCBEAM",3001207471:"IFCALARMTYPE",2874132201:"IFCACTUATORTYPE",3304561284:"IFCWINDOW",3512223829:"IFCWALLSTANDARDCASE",2391406946:"IFCWALL",3313531582:"IFCVIBRATIONISOLATORTYPE",2347447852:"IFCTENDONANCHOR",3824725483:"IFCTENDON",2515109513:"IFCSTRUCTURALANALYSISMODEL",4252922144:"IFCSTAIRFLIGHT",331165859:"IFCSTAIR",1529196076:"IFCSLAB",1783015770:"IFCSENSORTYPE",1376911519:"IFCROUNDEDEDGEFEATURE",2016517767:"IFCROOF",2320036040:"IFCREINFORCINGMESH",3027567501:"IFCREINFORCINGELEMENT",3055160366:"IFCRATIONALBEZIERCURVE",3283111854:"IFCRAMPFLIGHT",3024970846:"IFCRAMP",2262370178:"IFCRAILING",3171933400:"IFCPLATE",1687234759:"IFCPILE",1073191201:"IFCMEMBER",900683007:"IFCFOOTING",3508470533:"IFCFLOWTREATMENTDEVICE",2223149337:"IFCFLOWTERMINAL",707683696:"IFCFLOWSTORAGEDEVICE",987401354:"IFCFLOWSEGMENT",3132237377:"IFCFLOWMOVINGDEVICE",4037862832:"IFCFLOWINSTRUMENTTYPE",4278956645:"IFCFLOWFITTING",2058353004:"IFCFLOWCONTROLLER",4222183408:"IFCFIRESUPPRESSIONTERMINALTYPE",1810631287:"IFCFILTERTYPE",346874300:"IFCFANTYPE",1658829314:"IFCENERGYCONVERSIONDEVICE",857184966:"IFCELECTRICALELEMENT",1634875225:"IFCELECTRICALCIRCUIT",712377611:"IFCELECTRICTIMECONTROLTYPE",1217240411:"IFCELECTRICMOTORTYPE",1365060375:"IFCELECTRICHEATERTYPE",1534661035:"IFCELECTRICGENERATORTYPE",3277789161:"IFCELECTRICFLOWSTORAGEDEVICETYPE",663422040:"IFCELECTRICAPPLIANCETYPE",855621170:"IFCEDGEFEATURE",2030761528:"IFCDUCTSILENCERTYPE",3760055223:"IFCDUCTSEGMENTTYPE",869906466:"IFCDUCTFITTINGTYPE",395920057:"IFCDOOR",3041715199:"IFCDISTRIBUTIONPORT",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",1945004755:"IFCDISTRIBUTIONELEMENT",2063403501:"IFCDISTRIBUTIONCONTROLELEMENTTYPE",1599208980:"IFCDISTRIBUTIONCHAMBERELEMENTTYPE",2635815018:"IFCDISCRETEACCESSORYTYPE",1335981549:"IFCDISCRETEACCESSORY",4147604152:"IFCDIAMETERDIMENSION",3961806047:"IFCDAMPERTYPE",3495092785:"IFCCURTAINWALL",1973544240:"IFCCOVERING",2954562838:"IFCCOOLINGTOWERTYPE",335055490:"IFCCOOLEDBEAMTYPE",488727124:"IFCCONSTRUCTIONPRODUCTRESOURCE",1060000209:"IFCCONSTRUCTIONMATERIALRESOURCE",3898045240:"IFCCONSTRUCTIONEQUIPMENTRESOURCE",1163958913:"IFCCONDITIONCRITERION",2188551683:"IFCCONDITION",2816379211:"IFCCONDENSERTYPE",3850581409:"IFCCOMPRESSORTYPE",843113511:"IFCCOLUMN",2301859152:"IFCCOILTYPE",2611217952:"IFCCIRCLE",2951183804:"IFCCHILLERTYPE",1285652485:"IFCCABLESEGMENTTYPE",3293546465:"IFCCABLECARRIERSEGMENTTYPE",395041908:"IFCCABLECARRIERFITTINGTYPE",1909888760:"IFCBUILDINGELEMENTPROXYTYPE",1095909175:"IFCBUILDINGELEMENTPROXY",2979338954:"IFCBUILDINGELEMENTPART",52481810:"IFCBUILDINGELEMENTCOMPONENT",3299480353:"IFCBUILDINGELEMENT",231477066:"IFCBOILERTYPE",1916977116:"IFCBEZIERCURVE",819618141:"IFCBEAMTYPE",1967976161:"IFCBSPLINECURVE",3460190687:"IFCASSET",2470393545:"IFCANGULARDIMENSION",1871374353:"IFCAIRTOAIRHEATRECOVERYTYPE",3352864051:"IFCAIRTERMINALTYPE",1411407467:"IFCAIRTERMINALBOXTYPE",3821786052:"IFCACTIONREQUEST",1213861670:"IFC2DCOMPOSITECURVE",1033361043:"IFCZONE",3342526732:"IFCWORKSCHEDULE",4218914973:"IFCWORKPLAN",1028945134:"IFCWORKCONTROL",1133259667:"IFCWASTETERMINALTYPE",1898987631:"IFCWALLTYPE",2769231204:"IFCVIRTUALELEMENT",728799441:"IFCVALVETYPE",1911125066:"IFCUNITARYEQUIPMENTTYPE",1600972822:"IFCTUBEBUNDLETYPE",3593883385:"IFCTRIMMEDCURVE",1620046519:"IFCTRANSPORTELEMENT",1692211062:"IFCTRANSFORMERTYPE",1637806684:"IFCTIMESERIESSCHEDULE",5716631:"IFCTANKTYPE",2254336722:"IFCSYSTEM",2315554128:"IFCSWITCHINGDEVICETYPE",148013059:"IFCSUBCONTRACTRESOURCE",1975003073:"IFCSTRUCTURALSURFACECONNECTION",2986769608:"IFCSTRUCTURALRESULTGROUP",1235345126:"IFCSTRUCTURALPOINTREACTION",734778138:"IFCSTRUCTURALPOINTCONNECTION",2082059205:"IFCSTRUCTURALPOINTACTION",3987759626:"IFCSTRUCTURALPLANARACTIONVARYING",1621171031:"IFCSTRUCTURALPLANARACTION",1252848954:"IFCSTRUCTURALLOADGROUP",1721250024:"IFCSTRUCTURALLINEARACTIONVARYING",1807405624:"IFCSTRUCTURALLINEARACTION",2445595289:"IFCSTRUCTURALCURVEMEMBERVARYING",214636428:"IFCSTRUCTURALCURVEMEMBER",4243806635:"IFCSTRUCTURALCURVECONNECTION",1179482911:"IFCSTRUCTURALCONNECTION",682877961:"IFCSTRUCTURALACTION",1039846685:"IFCSTAIRFLIGHTTYPE",3112655638:"IFCSTACKTERMINALTYPE",3812236995:"IFCSPACETYPE",652456506:"IFCSPACEPROGRAM",1305183839:"IFCSPACEHEATERTYPE",3856911033:"IFCSPACE",2533589738:"IFCSLABTYPE",4097777520:"IFCSITE",4105383287:"IFCSERVICELIFE",3517283431:"IFCSCHEDULETIMECONTROL",1768891740:"IFCSANITARYTERMINALTYPE",2863920197:"IFCRELASSIGNSTASKS",160246688:"IFCRELAGGREGATES",2324767716:"IFCRAMPFLIGHTTYPE",2893384427:"IFCRAILINGTYPE",3248260540:"IFCRADIUSDIMENSION",2250791053:"IFCPUMPTYPE",1842657554:"IFCPROTECTIVEDEVICETYPE",3651124850:"IFCPROJECTIONELEMENT",3642467123:"IFCPROJECTORDERRECORD",2904328755:"IFCPROJECTORDER",2744685151:"IFCPROCEDURE",3740093272:"IFCPORT",3724593414:"IFCPOLYLINE",4017108033:"IFCPLATETYPE",4231323485:"IFCPIPESEGMENTTYPE",804291784:"IFCPIPEFITTINGTYPE",3327091369:"IFCPERMIT",2382730787:"IFCPERFORMANCEHISTORY",2837617999:"IFCOUTLETTYPE",3425660407:"IFCORDERACTION",3588315303:"IFCOPENINGELEMENT",4143007308:"IFCOCCUPANT",1916936684:"IFCMOVE",977012517:"IFCMOTORCONNECTIONTYPE",3181161470:"IFCMEMBERTYPE",2108223431:"IFCMECHANICALFASTENERTYPE",377706215:"IFCMECHANICALFASTENER",2506943328:"IFCLINEARDIMENSION",1161773419:"IFCLIGHTFIXTURETYPE",1051575348:"IFCLAMPTYPE",3827777499:"IFCLABORRESOURCE",4288270099:"IFCJUNCTIONBOXTYPE",2391368822:"IFCINVENTORY",1806887404:"IFCHUMIDIFIERTYPE",1251058090:"IFCHEATEXCHANGERTYPE",2706460486:"IFCGROUP",3009204131:"IFCGRID",200128114:"IFCGASTERMINALTYPE",814719939:"IFCFURNITURESTANDARD",263784265:"IFCFURNISHINGELEMENT",3009222698:"IFCFLOWTREATMENTDEVICETYPE",2297155007:"IFCFLOWTERMINALTYPE",1339347760:"IFCFLOWSTORAGEDEVICETYPE",1834744321:"IFCFLOWSEGMENTTYPE",1482959167:"IFCFLOWMOVINGDEVICETYPE",3815607619:"IFCFLOWMETERTYPE",3198132628:"IFCFLOWFITTINGTYPE",3907093117:"IFCFLOWCONTROLLERTYPE",1287392070:"IFCFEATUREELEMENTSUBTRACTION",2143335405:"IFCFEATUREELEMENTADDITION",2827207264:"IFCFEATUREELEMENT",2489546625:"IFCFASTENERTYPE",647756555:"IFCFASTENER",3737207727:"IFCFACETEDBREPWITHVOIDS",807026263:"IFCFACETEDBREP",3390157468:"IFCEVAPORATORTYPE",3174744832:"IFCEVAPORATIVECOOLERTYPE",3272907226:"IFCEQUIPMENTSTANDARD",1962604670:"IFCEQUIPMENTELEMENT",2107101300:"IFCENERGYCONVERSIONDEVICETYPE",1704287377:"IFCELLIPSE",2590856083:"IFCELEMENTCOMPONENTTYPE",1623761950:"IFCELEMENTCOMPONENT",4123344466:"IFCELEMENTASSEMBLY",1758889154:"IFCELEMENT",360485395:"IFCELECTRICALBASEPROPERTIES",3849074793:"IFCDISTRIBUTIONFLOWELEMENTTYPE",3256556792:"IFCDISTRIBUTIONELEMENTTYPE",681481545:"IFCDIMENSIONCURVEDIRECTEDCALLOUT",1457835157:"IFCCURTAINWALLTYPE",3295246426:"IFCCREWRESOURCE",1916426348:"IFCCOVERINGTYPE",1419761937:"IFCCOSTSCHEDULE",3895139033:"IFCCOSTITEM",3293443760:"IFCCONTROL",2559216714:"IFCCONSTRUCTIONRESOURCE",2510884976:"IFCCONIC",3732776249:"IFCCOMPOSITECURVE",300633059:"IFCCOLUMNTYPE",2937912522:"IFCCIRCLEHOLLOWPROFILEDEF",3124254112:"IFCBUILDINGSTOREY",1950629157:"IFCBUILDINGELEMENTTYPE",4031249490:"IFCBUILDING",1260505505:"IFCBOUNDEDCURVE",3649129432:"IFCBOOLEANCLIPPINGRESULT",1334484129:"IFCBLOCK",3207858831:"IFCASYMMETRICISHAPEPROFILEDEF",1674181508:"IFCANNOTATION",2296667514:"IFCACTOR",2097647324:"IFCTRANSPORTELEMENTTYPE",3473067441:"IFCTASK",1580310250:"IFCSYSTEMFURNITUREELEMENTTYPE",4124788165:"IFCSURFACEOFREVOLUTION",2809605785:"IFCSURFACEOFLINEAREXTRUSION",2028607225:"IFCSURFACECURVESWEPTAREASOLID",4070609034:"IFCSTRUCTUREDDIMENSIONCALLOUT",2218152070:"IFCSTRUCTURALSURFACEMEMBERVARYING",3979015343:"IFCSTRUCTURALSURFACEMEMBER",3689010777:"IFCSTRUCTURALREACTION",530289379:"IFCSTRUCTURALMEMBER",3136571912:"IFCSTRUCTURALITEM",3544373492:"IFCSTRUCTURALACTIVITY",451544542:"IFCSPHERE",3893378262:"IFCSPATIALSTRUCTUREELEMENTTYPE",2706606064:"IFCSPATIALSTRUCTUREELEMENT",3626867408:"IFCRIGHTCIRCULARCYLINDER",4158566097:"IFCRIGHTCIRCULARCONE",1856042241:"IFCREVOLVEDAREASOLID",2914609552:"IFCRESOURCE",1401173127:"IFCRELVOIDSELEMENT",3451746338:"IFCRELSPACEBOUNDARY",366585022:"IFCRELSERVICESBUILDINGS",4122056220:"IFCRELSEQUENCE",1058617721:"IFCRELSCHEDULESCOSTITEMS",1245217292:"IFCRELREFERENCEDINSPATIALSTRUCTURE",750771296:"IFCRELPROJECTSELEMENT",202636808:"IFCRELOVERRIDESPROPERTIES",2051452291:"IFCRELOCCUPIESSPACES",3268803585:"IFCRELNESTS",4189434867:"IFCRELINTERACTIONREQUIREMENTS",279856033:"IFCRELFLOWCONTROLELEMENTS",3940055652:"IFCRELFILLSELEMENT",781010003:"IFCRELDEFINESBYTYPE",4186316022:"IFCRELDEFINESBYPROPERTIES",693640335:"IFCRELDEFINES",2551354335:"IFCRELDECOMPOSES",2802773753:"IFCRELCOVERSSPACES",886880790:"IFCRELCOVERSBLDGELEMENTS",3242617779:"IFCRELCONTAINEDINSPATIALSTRUCTURE",3678494232:"IFCRELCONNECTSWITHREALIZINGELEMENTS",504942748:"IFCRELCONNECTSWITHECCENTRICITY",1638771189:"IFCRELCONNECTSSTRUCTURALMEMBER",3912681535:"IFCRELCONNECTSSTRUCTURALELEMENT",2127690289:"IFCRELCONNECTSSTRUCTURALACTIVITY",3190031847:"IFCRELCONNECTSPORTS",4201705270:"IFCRELCONNECTSPORTTOELEMENT",3945020480:"IFCRELCONNECTSPATHELEMENTS",1204542856:"IFCRELCONNECTSELEMENTS",826625072:"IFCRELCONNECTS",2851387026:"IFCRELASSOCIATESPROFILEPROPERTIES",2655215786:"IFCRELASSOCIATESMATERIAL",3840914261:"IFCRELASSOCIATESLIBRARY",982818633:"IFCRELASSOCIATESDOCUMENT",2728634034:"IFCRELASSOCIATESCONSTRAINT",919958153:"IFCRELASSOCIATESCLASSIFICATION",4095574036:"IFCRELASSOCIATESAPPROVAL",1327628568:"IFCRELASSOCIATESAPPLIEDVALUE",1865459582:"IFCRELASSOCIATES",205026976:"IFCRELASSIGNSTORESOURCE",3372526763:"IFCRELASSIGNSTOPROJECTORDER",2857406711:"IFCRELASSIGNSTOPRODUCT",4278684876:"IFCRELASSIGNSTOPROCESS",1307041759:"IFCRELASSIGNSTOGROUP",2495723537:"IFCRELASSIGNSTOCONTROL",1683148259:"IFCRELASSIGNSTOACTOR",3939117080:"IFCRELASSIGNS",3454111270:"IFCRECTANGULARTRIMMEDSURFACE",2798486643:"IFCRECTANGULARPYRAMID",2770003689:"IFCRECTANGLEHOLLOWPROFILEDEF",3219374653:"IFCPROXY",1451395588:"IFCPROPERTYSET",4194566429:"IFCPROJECTIONCURVE",103090709:"IFCPROJECT",4208778838:"IFCPRODUCT",2945172077:"IFCPROCESS",220341763:"IFCPLANE",603570806:"IFCPLANARBOX",3566463478:"IFCPERMEABLECOVERINGPROPERTIES",3505215534:"IFCOFFSETCURVE3D",3388369263:"IFCOFFSETCURVE2D",3888040117:"IFCOBJECT",1425443689:"IFCMANIFOLDSOLIDBREP",1281925730:"IFCLINE",572779678:"IFCLSHAPEPROFILEDEF",1484403080:"IFCISHAPEPROFILEDEF",987898635:"IFCGEOMETRICCURVESET",1268542332:"IFCFURNITURETYPE",4238390223:"IFCFURNISHINGELEMENTTYPE",3455213021:"IFCFLUIDFLOWPROPERTIES",315944413:"IFCFILLAREASTYLETILES",4203026998:"IFCFILLAREASTYLETILESYMBOLWITHSTYLE",374418227:"IFCFILLAREASTYLEHATCHING",2047409740:"IFCFACEBASEDSURFACEMODEL",477187591:"IFCEXTRUDEDAREASOLID",80994333:"IFCENERGYPROPERTIES",2835456948:"IFCELLIPSEPROFILEDEF",2777663545:"IFCELEMENTARYSURFACE",339256511:"IFCELEMENTTYPE",1883228015:"IFCELEMENTQUANTITY",1472233963:"IFCEDGELOOP",4006246654:"IFCDRAUGHTINGPREDEFINEDCURVEFONT",445594917:"IFCDRAUGHTINGPREDEFINEDCOLOUR",3073041342:"IFCDRAUGHTINGCALLOUT",526551008:"IFCDOORSTYLE",1714330368:"IFCDOORPANELPROPERTIES",2963535650:"IFCDOORLININGPROPERTIES",32440307:"IFCDIRECTION",4054601972:"IFCDIMENSIONCURVETERMINATOR",606661476:"IFCDIMENSIONCURVE",693772133:"IFCDEFINEDSYMBOL",2827736869:"IFCCURVEBOUNDEDPLANE",2601014836:"IFCCURVE",2147822146:"IFCCSGSOLID",2506170314:"IFCCSGPRIMITIVE3D",194851669:"IFCCRANERAILFSHAPEPROFILEDEF",4133800736:"IFCCRANERAILASHAPEPROFILEDEF",2485617015:"IFCCOMPOSITECURVESEGMENT",2205249479:"IFCCLOSEDSHELL",1383045692:"IFCCIRCLEPROFILEDEF",1416205885:"IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM",3331915920:"IFCCARTESIANTRANSFORMATIONOPERATOR3D",3486308946:"IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM",3749851601:"IFCCARTESIANTRANSFORMATIONOPERATOR2D",59481748:"IFCCARTESIANTRANSFORMATIONOPERATOR",1123145078:"IFCCARTESIANPOINT",2898889636:"IFCCSHAPEPROFILEDEF",2713105998:"IFCBOXEDHALFSPACE",2581212453:"IFCBOUNDINGBOX",4182860854:"IFCBOUNDEDSURFACE",2736907675:"IFCBOOLEANRESULT",2740243338:"IFCAXIS2PLACEMENT3D",3125803723:"IFCAXIS2PLACEMENT2D",4261334040:"IFCAXIS1PLACEMENT",1302238472:"IFCANNOTATIONSURFACE",2265737646:"IFCANNOTATIONFILLAREAOCCURRENCE",669184980:"IFCANNOTATIONFILLAREA",3288037868:"IFCANNOTATIONCURVEOCCURRENCE",2543172580:"IFCZSHAPEPROFILEDEF",1299126871:"IFCWINDOWSTYLE",512836454:"IFCWINDOWPANELPROPERTIES",336235671:"IFCWINDOWLININGPROPERTIES",2759199220:"IFCVERTEXLOOP",1417489154:"IFCVECTOR",427810014:"IFCUSHAPEPROFILEDEF",2347495698:"IFCTYPEPRODUCT",1628702193:"IFCTYPEOBJECT",1345879162:"IFCTWODIRECTIONREPEATFACTOR",2715220739:"IFCTRAPEZIUMPROFILEDEF",3124975700:"IFCTEXTLITERALWITHEXTENT",4282788508:"IFCTEXTLITERAL",3028897424:"IFCTERMINATORSYMBOL",3071757647:"IFCTSHAPEPROFILEDEF",230924584:"IFCSWEPTSURFACE",1260650574:"IFCSWEPTDISKSOLID",2247615214:"IFCSWEPTAREASOLID",1878645084:"IFCSURFACESTYLERENDERING",2513912981:"IFCSURFACE",2233826070:"IFCSUBEDGE",3653947884:"IFCSTRUCTURALSTEELPROFILEPROPERTIES",3843319758:"IFCSTRUCTURALPROFILEPROPERTIES",1190533807:"IFCSTRUCTURALLOADSINGLEFORCEWARPING",1597423693:"IFCSTRUCTURALLOADSINGLEFORCE",1973038258:"IFCSTRUCTURALLOADSINGLEDISPLACEMENTDISTORTION",2473145415:"IFCSTRUCTURALLOADSINGLEDISPLACEMENT",2668620305:"IFCSTRUCTURALLOADPLANARFORCE",1595516126:"IFCSTRUCTURALLOADLINEARFORCE",390701378:"IFCSPACETHERMALLOADPROPERTIES",1202362311:"IFCSOUNDVALUE",2485662743:"IFCSOUNDPROPERTIES",723233188:"IFCSOLIDMODEL",2609359061:"IFCSLIPPAGECONNECTIONCONDITION",4124623270:"IFCSHELLBASEDSURFACEMODEL",2411513650:"IFCSERVICELIFEFACTOR",1509187699:"IFCSECTIONEDSPINE",2778083089:"IFCROUNDEDRECTANGLEPROFILEDEF",478536968:"IFCRELATIONSHIP",3765753017:"IFCREINFORCEMENTDEFINITIONPROPERTIES",3413951693:"IFCREGULARTIMESERIES",3615266464:"IFCRECTANGLEPROFILEDEF",110355661:"IFCPROPERTYTABLEVALUE",3650150729:"IFCPROPERTYSINGLEVALUE",3357820518:"IFCPROPERTYSETDEFINITION",941946838:"IFCPROPERTYREFERENCEVALUE",2752243245:"IFCPROPERTYLISTVALUE",4166981789:"IFCPROPERTYENUMERATEDVALUE",1680319473:"IFCPROPERTYDEFINITION",871118103:"IFCPROPERTYBOUNDEDVALUE",673634403:"IFCPRODUCTDEFINITIONSHAPE",179317114:"IFCPREDEFINEDPOINTMARKERSYMBOL",433424934:"IFCPREDEFINEDDIMENSIONSYMBOL",2559016684:"IFCPREDEFINEDCURVEFONT",759155922:"IFCPREDEFINEDCOLOUR",2775532180:"IFCPOLYGONALBOUNDEDHALFSPACE",2924175390:"IFCPOLYLOOP",1423911732:"IFCPOINTONSURFACE",4022376103:"IFCPOINTONCURVE",2067069095:"IFCPOINT",1663979128:"IFCPLANAREXTENT",2004835150:"IFCPLACEMENT",597895409:"IFCPIXELTEXTURE",3021840470:"IFCPHYSICALCOMPLEXQUANTITY",2519244187:"IFCPATH",2529465313:"IFCPARAMETERIZEDPROFILEDEF",1029017970:"IFCORIENTEDEDGE",2665983363:"IFCOPENSHELL",2833995503:"IFCONEDIRECTIONREPEATFACTOR",219451334:"IFCOBJECTDEFINITION",1430189142:"IFCMECHANICALCONCRETEMATERIALPROPERTIES",2022407955:"IFCMATERIALDEFINITIONREPRESENTATION",2347385850:"IFCMAPPEDITEM",1008929658:"IFCLOOP",2624227202:"IFCLOCALPLACEMENT",3422422726:"IFCLIGHTSOURCESPOT",1520743889:"IFCLIGHTSOURCEPOSITIONAL",4266656042:"IFCLIGHTSOURCEGONIOMETRIC",2604431987:"IFCLIGHTSOURCEDIRECTIONAL",125510826:"IFCLIGHTSOURCEAMBIENT",1402838566:"IFCLIGHTSOURCE",3741457305:"IFCIRREGULARTIMESERIES",3905492369:"IFCIMAGETEXTURE",2445078500:"IFCHYGROSCOPICMATERIALPROPERTIES",812098782:"IFCHALFSPACESOLID",178086475:"IFCGRIDPLACEMENT",3590301190:"IFCGEOMETRICSET",4142052618:"IFCGEOMETRICREPRESENTATIONSUBCONTEXT",2453401579:"IFCGEOMETRICREPRESENTATIONITEM",3448662350:"IFCGEOMETRICREPRESENTATIONCONTEXT",1446786286:"IFCGENERALPROFILEPROPERTIES",803998398:"IFCGENERALMATERIALPROPERTIES",3857492461:"IFCFUELPROPERTIES",738692330:"IFCFILLAREASTYLE",4219587988:"IFCFAILURECONNECTIONCONDITION",3008276851:"IFCFACESURFACE",803316827:"IFCFACEOUTERBOUND",1809719519:"IFCFACEBOUND",2556980723:"IFCFACE",1860660968:"IFCEXTENDEDMATERIALPROPERTIES",476780140:"IFCEDGECURVE",3900360178:"IFCEDGE",4170525392:"IFCDRAUGHTINGPREDEFINEDTEXTFONT",3732053477:"IFCDOCUMENTREFERENCE",1694125774:"IFCDIMENSIONPAIR",2273265877:"IFCDIMENSIONCALLOUTRELATIONSHIP",3632507154:"IFCDERIVEDPROFILEDEF",3800577675:"IFCCURVESTYLE",2889183280:"IFCCONVERSIONBASEDUNIT",3050246964:"IFCCONTEXTDEPENDENTUNIT",45288368:"IFCCONNECTIONPOINTECCENTRICITY",1981873012:"IFCCONNECTIONCURVEGEOMETRY",370225590:"IFCCONNECTEDFACESET",1485152156:"IFCCOMPOSITEPROFILEDEF",2542286263:"IFCCOMPLEXPROPERTY",776857604:"IFCCOLOURRGB",647927063:"IFCCLASSIFICATIONREFERENCE",3150382593:"IFCCENTERLINEPROFILEDEF",616511568:"IFCBLOBTEXTURE",2705031697:"IFCARBITRARYPROFILEDEFWITHVOIDS",1310608509:"IFCARBITRARYOPENPROFILEDEF",3798115385:"IFCARBITRARYCLOSEDPROFILEDEF",2297822566:"IFCANNOTATIONTEXTOCCURRENCE",3612888222:"IFCANNOTATIONSYMBOLOCCURRENCE",962685235:"IFCANNOTATIONSURFACEOCCURRENCE",2442683028:"IFCANNOTATIONOCCURRENCE",1065908215:"IFCWATERPROPERTIES",891718957:"IFCVIRTUALGRIDINTERSECTION",1907098498:"IFCVERTEXPOINT",3304826586:"IFCVERTEXBASEDTEXTUREMAP",2799835756:"IFCVERTEX",180925521:"IFCUNITASSIGNMENT",1735638870:"IFCTOPOLOGYREPRESENTATION",1377556343:"IFCTOPOLOGICALREPRESENTATIONITEM",581633288:"IFCTIMESERIESVALUE",1718945513:"IFCTIMESERIESREFERENCERELATIONSHIP",3101149627:"IFCTIMESERIES",3317419933:"IFCTHERMALMATERIALPROPERTIES",1210645708:"IFCTEXTUREVERTEX",2552916305:"IFCTEXTUREMAP",1742049831:"IFCTEXTURECOORDINATEGENERATOR",280115917:"IFCTEXTURECOORDINATE",1484833681:"IFCTEXTSTYLEWITHBOXCHARACTERISTICS",1640371178:"IFCTEXTSTYLETEXTMODEL",2636378356:"IFCTEXTSTYLEFORDEFINEDFONT",1983826977:"IFCTEXTSTYLEFONTMODEL",1447204868:"IFCTEXTSTYLE",912023232:"IFCTELECOMADDRESS",531007025:"IFCTABLEROW",985171141:"IFCTABLE",1290481447:"IFCSYMBOLSTYLE",626085974:"IFCSURFACETEXTURE",1351298697:"IFCSURFACESTYLEWITHTEXTURES",846575682:"IFCSURFACESTYLESHADING",1607154358:"IFCSURFACESTYLEREFRACTION",3303107099:"IFCSURFACESTYLELIGHTING",1300840506:"IFCSURFACESTYLE",3049322572:"IFCSTYLEDREPRESENTATION",3958052878:"IFCSTYLEDITEM",2830218821:"IFCSTYLEMODEL",3408363356:"IFCSTRUCTURALLOADTEMPERATURE",2525727697:"IFCSTRUCTURALLOADSTATIC",2162789131:"IFCSTRUCTURALLOAD",2273995522:"IFCSTRUCTURALCONNECTIONCONDITION",3692461612:"IFCSIMPLEPROPERTY",4240577450:"IFCSHAPEREPRESENTATION",3982875396:"IFCSHAPEMODEL",867548509:"IFCSHAPEASPECT",4165799628:"IFCSECTIONREINFORCEMENTPROPERTIES",2042790032:"IFCSECTIONPROPERTIES",448429030:"IFCSIUNIT",2341007311:"IFCROOT",3679540991:"IFCRIBPLATEPROFILEPROPERTIES",1660063152:"IFCREPRESENTATIONMAP",3008791417:"IFCREPRESENTATIONITEM",3377609919:"IFCREPRESENTATIONCONTEXT",1076942058:"IFCREPRESENTATION",1222501353:"IFCRELAXATION",1580146022:"IFCREINFORCEMENTBARPROPERTIES",2692823254:"IFCREFERENCESVALUEDOCUMENT",825690147:"IFCQUANTITYWEIGHT",2405470396:"IFCQUANTITYVOLUME",3252649465:"IFCQUANTITYTIME",931644368:"IFCQUANTITYLENGTH",2093928680:"IFCQUANTITYCOUNT",2044713172:"IFCQUANTITYAREA",3710013099:"IFCPROPERTYENUMERATION",148025276:"IFCPROPERTYDEPENDENCYRELATIONSHIP",3896028662:"IFCPROPERTYCONSTRAINTRELATIONSHIP",2598011224:"IFCPROPERTY",2802850158:"IFCPROFILEPROPERTIES",3958567839:"IFCPROFILEDEF",2267347899:"IFCPRODUCTSOFCOMBUSTIONPROPERTIES",2095639259:"IFCPRODUCTREPRESENTATION",2417041796:"IFCPRESENTATIONSTYLEASSIGNMENT",3119450353:"IFCPRESENTATIONSTYLE",1304840413:"IFCPRESENTATIONLAYERWITHSTYLE",2022622350:"IFCPRESENTATIONLAYERASSIGNMENT",1775413392:"IFCPREDEFINEDTEXTFONT",3213052703:"IFCPREDEFINEDTERMINATORSYMBOL",990879717:"IFCPREDEFINEDSYMBOL",3727388367:"IFCPREDEFINEDITEM",3355820592:"IFCPOSTALADDRESS",2226359599:"IFCPHYSICALSIMPLEQUANTITY",2483315170:"IFCPHYSICALQUANTITY",101040310:"IFCPERSONANDORGANIZATION",2077209135:"IFCPERSON",1207048766:"IFCOWNERHISTORY",1411181986:"IFCORGANIZATIONRELATIONSHIP",4251960020:"IFCORGANIZATION",1227763645:"IFCOPTICALMATERIALPROPERTIES",2251480897:"IFCOBJECTIVE",3701648758:"IFCOBJECTPLACEMENT",1918398963:"IFCNAMEDUNIT",2706619895:"IFCMONETARYUNIT",3368373690:"IFCMETRIC",677618848:"IFCMECHANICALSTEELMATERIALPROPERTIES",4256014907:"IFCMECHANICALMATERIALPROPERTIES",2597039031:"IFCMEASUREWITHUNIT",3265635763:"IFCMATERIALPROPERTIES",2199411900:"IFCMATERIALLIST",1303795690:"IFCMATERIALLAYERSETUSAGE",3303938423:"IFCMATERIALLAYERSET",248100487:"IFCMATERIALLAYER",1847130766:"IFCMATERIALCLASSIFICATIONRELATIONSHIP",1838606355:"IFCMATERIAL",30780891:"IFCLOCALTIME",1566485204:"IFCLIGHTINTENSITYDISTRIBUTION",4162380809:"IFCLIGHTDISTRIBUTIONDATA",3452421091:"IFCLIBRARYREFERENCE",2655187982:"IFCLIBRARYINFORMATION",3020489413:"IFCIRREGULARTIMESERIESVALUE",852622518:"IFCGRIDAXIS",3548104201:"IFCEXTERNALLYDEFINEDTEXTFONT",3207319532:"IFCEXTERNALLYDEFINEDSYMBOL",1040185647:"IFCEXTERNALLYDEFINEDSURFACESTYLE",2242383968:"IFCEXTERNALLYDEFINEDHATCHSTYLE",3200245327:"IFCEXTERNALREFERENCE",1648886627:"IFCENVIRONMENTALIMPACTVALUE",3796139169:"IFCDRAUGHTINGCALLOUTRELATIONSHIP",770865208:"IFCDOCUMENTINFORMATIONRELATIONSHIP",1154170062:"IFCDOCUMENTINFORMATION",1376555844:"IFCDOCUMENTELECTRONICFORMAT",2949456006:"IFCDIMENSIONALEXPONENTS",1045800335:"IFCDERIVEDUNITELEMENT",1765591967:"IFCDERIVEDUNIT",1072939445:"IFCDATEANDTIME",3510044353:"IFCCURVESTYLEFONTPATTERN",2367409068:"IFCCURVESTYLEFONTANDSCALING",1105321065:"IFCCURVESTYLEFONT",539742890:"IFCCURRENCYRELATIONSHIP",602808272:"IFCCOSTVALUE",1065062679:"IFCCOORDINATEDUNIVERSALTIMEOFFSET",347226245:"IFCCONSTRAINTRELATIONSHIP",613356794:"IFCCONSTRAINTCLASSIFICATIONRELATIONSHIP",1658513725:"IFCCONSTRAINTAGGREGATIONRELATIONSHIP",1959218052:"IFCCONSTRAINT",2732653382:"IFCCONNECTIONSURFACEGEOMETRY",4257277454:"IFCCONNECTIONPORTGEOMETRY",2614616156:"IFCCONNECTIONPOINTGEOMETRY",2859738748:"IFCCONNECTIONGEOMETRY",3264961684:"IFCCOLOURSPECIFICATION",3639012971:"IFCCLASSIFICATIONNOTATIONFACET",938368621:"IFCCLASSIFICATIONNOTATION",1098599126:"IFCCLASSIFICATIONITEMRELATIONSHIP",1767535486:"IFCCLASSIFICATIONITEM",747523909:"IFCCLASSIFICATION",622194075:"IFCCALENDARDATE",2069777674:"IFCBOUNDARYNODECONDITIONWARPING",1387855156:"IFCBOUNDARYNODECONDITION",3367102660:"IFCBOUNDARYFACECONDITION",1560379544:"IFCBOUNDARYEDGECONDITION",4037036970:"IFCBOUNDARYCONDITION",3869604511:"IFCAPPROVALRELATIONSHIP",390851274:"IFCAPPROVALPROPERTYRELATIONSHIP",2080292479:"IFCAPPROVALACTORRELATIONSHIP",130549933:"IFCAPPROVAL",1110488051:"IFCAPPLIEDVALUERELATIONSHIP",411424972:"IFCAPPLIEDVALUE",639542469:"IFCAPPLICATION",618182010:"IFCADDRESS",3630933823:"IFCACTORROLE",599546466:"FILE_DESCRIPTION",1390159747:"FILE_NAME",1109904537:"FILE_SCHEMA"};class Ut{static async getUnits(s){var n,r,a;const{IFCUNITASSIGNMENT:t}=b,e=await s.getAllPropertiesOfType(t);if(!e)return 1;const i=Object.keys(e),o=e[parseInt(i[0],10)];for(const c of o.Units){if(c.value===void 0||c.value===null)continue;const h=await s.getProperties(c.value);if(!h||!h.UnitType||!h.UnitType.value||h.UnitType.value!=="LENGTHUNIT")continue;let E=1,u=1;return h.Name.value==="METRE"&&(u=1),h.Name.value==="FOOT"&&(u=.3048),((n=h.Prefix)==null?void 0:n.value)==="MILLI"?E=.001:((r=h.Prefix)==null?void 0:r.value)==="CENTI"?E=.01:((a=h.Prefix)==null?void 0:a.value)==="DECI"&&(E=.1),u*E}return 1}static async findItemByGuid(s,t){var i;const e=s.getAllPropertiesIDs();for(const o of e){const n=await s.getProperties(o);if(n&&((i=n.GlobalId)==null?void 0:i.value)===t)return n}return null}static async getRelationMap(s,t,e){var a;const o=e??(async()=>{}),n={},r=s.getAllPropertiesIDs();for(const c of r){const h=await s.getProperties(c);if(!h)continue;const d=h.type===t,E=Object.keys(h).find(T=>T.startsWith("Relating")),u=Object.keys(h).find(T=>T.startsWith("Related"));if(!(d&&E&&u))continue;const f=await s.getProperties((a=h[E])==null?void 0:a.value),A=h[u];if(!f||!A||!(A&&Array.isArray(A)))continue;const R=A.map(T=>T.value);await o(f.expressID,R),n[f.expressID]=R}return n}static async getQsetQuantities(s,t,e){const o=e??(()=>{}),n=await s.getProperties(t);return!n||n.type!==b.IFCELEMENTQUANTITY?null:(n.Quantities??[{}]).map(c=>(c.value&&o(c.value),c.value)).filter(c=>c!==null)}static async getPsetProps(s,t,e){const o=e??(()=>{}),n=await s.getProperties(t);return!n||n.type!==b.IFCPROPERTYSET?null:(n.HasProperties??[{}]).map(c=>(c.value&&o(c.value),c.value)).filter(c=>c!==null)}static async getPsetRel(s,t){var r;if(!await s.getProperties(t))return null;const i=await s.getAllPropertiesOfType(b.IFCRELDEFINESBYPROPERTIES);if(!i)return null;const o=Object.values(i);let n=null;for(const a of o)((r=a.RelatingPropertyDefinition)==null?void 0:r.value)===t&&(n=a.expressID);return n}static async getQsetRel(s,t){return Ut.getPsetRel(s,t)}static async getEntityName(s,t){var n;const e=await s.getProperties(t);if(!e)return{key:null,name:null};const i=Object.keys(e).find(r=>r.endsWith("Name"))??null,o=i?(n=e[i])==null?void 0:n.value:null;return{key:i,name:o}}static async getQuantityValue(s,t){const e=await s.getProperties(t);if(!e)return{key:null,value:null};const i=Object.keys(e).find(n=>n.endsWith("Value"))??null;let o;return i===null||e[i]===void 0||e[i]===null?o=null:o=e[i].value,{key:i,value:o}}static isRel(s){return yi[s].startsWith("IFCREL")}static async attributeExists(s,t,e){const i=await s.getProperties(t);return i?Object.keys(i).includes(e):!1}static async groupEntitiesByType(s,t){var i;const e=new Map;for(const o of t){const n=await s.getProperties(o);if(!n)continue;const r=n.type;e.get(r)||e.set(r,new Set),(i=e.get(r))==null||i.add(o)}return e}}class Lr{constructor(){I(this,"factor",1);I(this,"complement",1)}apply(s){const e=this.getScaleMatrix().multiply(s);s.copy(e)}setUp(s){var o,n,r;this.factor=1;const t=this.getLengthUnits(s);if(!t)return;const e=t==null,i=t.Name===void 0||t.Name===null;e||i||(t.Name.value==="FOOT"&&(this.factor=.3048),((o=t.Prefix)==null?void 0:o.value)==="MILLI"?this.complement=.001:((n=t.Prefix)==null?void 0:n.value)==="CENTI"?this.complement=.01:((r=t.Prefix)==null?void 0:r.value)==="DECI"&&(this.complement=.01))}getLengthUnits(s){try{const e=s.GetLineIDsWithType(0,b.IFCUNITASSIGNMENT).get(0),i=s.GetLine(0,e);for(const o of i.Units){if(!o||o.value===null||o.value===void 0)continue;const n=s.GetLine(0,o.value);if(n.UnitType&&n.UnitType.value==="LENGTHUNIT")return n}return null}catch{return console.log("Could not get units"),null}}getScaleMatrix(){const s=this.factor;return new S.Matrix4().fromArray([s,0,0,0,0,s,0,0,0,0,s,0,0,0,0,1])}}class Vn{constructor(){I(this,"itemsByFloor",{});I(this,"_units",new Lr)}setUp(s){this._units.setUp(s),this.cleanUp();try{const t=s.GetLineIDsWithType(0,b.IFCRELCONTAINEDINSPATIALSTRUCTURE),e=new Set,i=s.GetLineIDsWithType(0,b.IFCSPACE);for(let c=0;c<i.size();c++)e.add(i.get(c));const o=s.GetLineIDsWithType(0,b.IFCRELAGGREGATES),n=o.size();for(let c=0;c<n;c++){const h=o.get(c),d=s.GetLine(0,h);if(!d||!d.RelatingObject||!d.RelatedObjects)continue;const E=d.RelatingObject.value,u=d.RelatedObjects;for(const f of u){const A=f.value;e.has(A)&&(this.itemsByFloor[A]=E)}}const r={},a=t.size();for(let c=0;c<a;c++){const h=t.get(c),d=s.GetLine(0,h);if(!d||!d.RelatingStructure||!d.RelatedElements)continue;const E=d.RelatingStructure.value,u=d.RelatedElements;if(e.has(E))for(const f of u){r[E]||(r[E]=[]);const A=f.value;r[E].push(A)}else for(const f of u){const A=f.value;this.itemsByFloor[A]=E}}for(const c in r){const h=this.itemsByFloor[c];if(h!==void 0){const d=r[c];for(const E of d)this.itemsByFloor[E]=h}}for(let c=0;c<n;c++){const h=o.get(c),d=s.GetLine(0,h);if(!d||!d.RelatingObject||!d.RelatedObjects)continue;const E=d.RelatingObject.value,u=d.RelatedObjects;for(const f of u){const A=f.value,R=this.itemsByFloor[E];R!==void 0&&(this.itemsByFloor[A]=R)}}}catch{console.log("Could not get floors.")}}cleanUp(){this.itemsByFloor={}}}class Ds{constructor(){I(this,"includeProperties",!0);I(this,"optionalCategories",[b.IFCSPACE]);I(this,"coordinate",!0);I(this,"wasm",{path:"",absolute:!1,logLevel:b.LogLevel.LOG_LEVEL_OFF});I(this,"excludedCategories",new Set);I(this,"saveLocations",!1);I(this,"webIfc",{COORDINATE_TO_ORIGIN:!0});I(this,"autoSetWasm",!0);I(this,"customLocateFileHandler",null)}}class Yn{constructor(){I(this,"defLineMat",new S.LineBasicMaterial({color:16777215}))}read(s){const t=s.GetAllAlignments(0),e=s.GetAllCrossSections2D(0),i=s.GetAllCrossSections3D(0),o={IfcAlignment:t,IfcCrossSection2D:e,IfcCrossSection3D:i};return this.get(o)}get(s){if(s.IfcAlignment){const t=new Map;for(const e of s.IfcAlignment){const i=new Dt.Alignment;i.absolute=this.getCurves(e.curve3D,i),i.horizontal=this.getCurves(e.horizontal,i),i.vertical=this.getCurves(e.vertical,i),t.set(t.size,i)}return{alignments:t,coordinationMatrix:new S.Matrix4}}}getCurves(s,t){const e=[];let i=0;for(const o of s){const n={};if(o.data)for(const E of o.data){const[u,f]=E.split(": "),A=parseFloat(f);n[u]=A||f}const{points:r}=o,a=new Float32Array(r.length*3);for(let E=0;E<r.length;E++){const{x:u,y:f,z:A}=r[E];a[E*3]=u,a[E*3+1]=f,a[E*3+2]=A||0}const c=new S.BufferAttribute(a,3),h=new S.EdgesGeometry;h.setAttribute("position",c);const d=new Dt.CurveMesh(i,n,t,h,this.defLineMat);e.push(d.curve),i++}return e}}class Gn{getNameInfo(s){var d;const t={},{arguments:e}=s.GetHeaderLine(0,b.FILE_NAME)||{};if(!e)return t;const[i,o,n,r,a,c,h]=e;if(i!=null&&i.value&&(t.name=i.value),o!=null&&o.value&&(t.creationDate=new Date(o.value)),n){t.author={};const[E,u]=n;E!=null&&E.value&&(t.author.name=E.value),u!=null&&u.value&&(t.author.email=u.value)}return(d=r[0])!=null&&d.value&&(t.organization=r[0].value),a!=null&&a.value&&(t.preprocessorVersion=a==null?void 0:a.value),c!=null&&c.value&&(t.originatingSystem=c==null?void 0:c.value),h!=null&&h.value&&(t.authorization=h==null?void 0:h.value),t}getDescriptionInfo(s){var n;const t={},{arguments:e}=s.GetHeaderLine(0,b.FILE_DESCRIPTION)||{};if(!e)return t;const[i,o]=e;if((n=i[0])!=null&&n.value){const r=i[0].value.match(/\[([^\]]+)\]/);r&&r[1]&&(t.viewDefinition=r[1])}return o!=null&&o.value&&(t.implementationLevel=o.value),t}}const Ue=class Ue extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onIfcStartedLoading",new D);I(this,"onSetup",new D);I(this,"settings",new Ds);I(this,"webIfc",new b.IfcAPI);I(this,"enabled",!0);I(this,"_material",new S.MeshLambertMaterial);I(this,"_spatialTree",new Vn);I(this,"_metaData",new Gn);I(this,"_fragmentInstances",new Map);I(this,"_civil",new Yn);I(this,"_visitedFragments",new Map);I(this,"_materialT",new S.MeshLambertMaterial({transparent:!0,opacity:.5}));this.components.add(Ue.uuid,this),this.settings.excludedCategories.add(b.IFCOPENINGELEMENT)}dispose(){this.webIfc=null,this.onDisposed.trigger(Ue.uuid),this.onDisposed.reset()}async setup(t){this.settings={...this.settings,...t},this.settings.autoSetWasm&&await this.autoSetWasm(),this.onSetup.trigger()}async load(t,e=!0){const i=performance.now();this.onIfcStartedLoading.trigger(),await this.readIfcFile(t);const o=await this.getAllGeometries(),r=await this.components.get(us).export(this.webIfc,0);o.setLocalProperties(r),this.cleanUp();const a=this.components.get(ot);a.groups.set(o.uuid,o);for(const c of o.items)a.list.set(c.id,c),c.mesh.uuid=c.id,c.group=o;a.onFragmentsLoaded.trigger(o),e&&a.coordinate([o]);for(const[c]of o.data){const h=r[c];if(!h||!h.GlobalId)continue;const d=h.GlobalId.value||h.GlobalId;o.globalToExpressIDs.set(d,c)}return console.log(`Streaming the IFC took ${performance.now()-i} ms!`),o}async readIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;return this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModel(t,this.settings.webIfc)}cleanUp(){this.webIfc=null,this.webIfc=new b.IfcAPI,this._visitedFragments.clear(),this._fragmentInstances.clear()}async getAllGeometries(){this._spatialTree.setUp(this.webIfc);const t=this.webIfc.GetIfcEntityList(0),e=new Dt.FragmentsGroup;e.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};const i=[];for(const n of t){if(!this.webIfc.IsIfcElement(n)&&n!==b.IFCSPACE||this.settings.excludedCategories.has(n))continue;const r=this.webIfc.GetLineIDsWithType(0,n),a=r.size();for(let c=0;c<a;c++){const h=r.get(c);i.push(h);const d=this._spatialTree.itemsByFloor[h]||0;e.data.set(h,[[],[d,n]])}}this._spatialTree.cleanUp(),this.webIfc.StreamMeshes(0,i,n=>{this.getMesh(n,e)});for(const n of this._visitedFragments){const{index:r,fragment:a}=n[1];e.keyFragments.set(r,a.id)}for(const n of e.items){const r=this._fragmentInstances.get(n.id);if(!r)throw new Error("Fragment not found!");const a=[];for(const[c,h]of r)a.push(h);n.add(a)}const o=this.webIfc.GetCoordinationMatrix(0);return e.coordinationMatrix.fromArray(o),e.civilData=this._civil.read(this.webIfc),e}getMesh(t,e){const i=t.geometries.size(),o=t.expressID;for(let n=0;n<i;n++){const r=t.geometries.get(n),{x:a,y:c,z:h,w:d}=r.color,E=d!==1,{geometryExpressID:u}=r,f=`${u}-${E}`;if(!this._visitedFragments.has(f)){const m=this.getGeometry(this.webIfc,u),O=E?this._materialT:this._material,_=new Dt.Fragment(m,O,1);e.add(_.mesh),e.items.push(_);const N=this._visitedFragments.size;this._visitedFragments.set(f,{index:N,fragment:_})}const A=new S.Color().setRGB(a,c,h,"srgb"),R=new S.Matrix4;R.fromArray(r.flatTransformation);const T=this._visitedFragments.get(f);if(T===void 0)throw new Error("Error getting geometry data for streaming!");const F=e.data.get(o);if(!F)throw new Error("Data not found!");F[0].push(T.index);const{fragment:g}=T;this._fragmentInstances.has(g.id)||this._fragmentInstances.set(g.id,new Map);const p=this._fragmentInstances.get(g.id);if(!p)throw new Error("Instances not found!");if(p.has(o)){const m=p.get(o);if(!m)throw new Error("Instance not found!");m.transforms.push(R),m.colors&&m.colors.push(A)}else p.set(o,{id:o,transforms:[R],colors:[A]})}}getGeometry(t,e){const i=t.GetGeometry(0,e),o=t.GetIndexArray(i.GetIndexData(),i.GetIndexDataSize()),n=t.GetVertexArray(i.GetVertexData(),i.GetVertexDataSize()),r=new Float32Array(n.length/2),a=new Float32Array(n.length/2);for(let E=0;E<n.length;E+=6)r[E/2]=n[E],r[E/2+1]=n[E+1],r[E/2+2]=n[E+2],a[E/2]=n[E+3],a[E/2+1]=n[E+4],a[E/2+2]=n[E+5];const c=new S.BufferGeometry,h=new S.BufferAttribute(r,3),d=new S.BufferAttribute(a,3);return c.setAttribute("position",h),c.setAttribute("normal",d),c.setIndex(Array.from(o)),i.delete(),c}async autoSetWasm(){const t=await fetch(`https://unpkg.com/@thatopen/components@${hs.release}/package.json`);if(!t.ok){console.warn("Couldn't get openbim-components package.json. Set wasm settings manually.");return}const e=await t.json();if(!("web-ifc"in e.peerDependencies))console.warn("Couldn't get web-ifc from peer dependencies in openbim-components. Set wasm settings manually.");else{const i=e.peerDependencies["web-ifc"];this.settings.wasm.path=`https://unpkg.com/web-ifc@${i}/`,this.settings.wasm.absolute=!0}}};I(Ue,"uuid","a659add7-1418-4771-a0d6-7d4d438e4624");let Is=Ue;const Mt=class Mt extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onRequestFile",new D);I(this,"ifcToExport",null);I(this,"onElementToPset",new D);I(this,"onPropToPset",new D);I(this,"onPsetRemoved",new D);I(this,"onDataChanged",new D);I(this,"wasm",{path:"/",absolute:!1});I(this,"enabled",!0);I(this,"attributeListeners",{});I(this,"selectedModel");I(this,"changeMap",{});this.components.add(Mt.uuid,this)}dispose(){this.selectedModel=void 0,this.attributeListeners={},this.changeMap={},this.onElementToPset.reset(),this.onPropToPset.reset(),this.onPsetRemoved.reset(),this.onDataChanged.reset(),this.onDisposed.trigger(Mt.uuid),this.onDisposed.reset()}static getIFCSchema(t){const e=t.ifcMetadata.schema;if(!e)throw new Error("IFC Schema not found");return e}async setData(t,...e){for(const i of e){const o=i.expressID;o&&(await t.setProperties(o,i),this.registerChange(t,o))}}async newPset(t,e,i){const o=Mt.getIFCSchema(t),{ownerHistoryHandle:n}=await this.getOwnerHistory(t),r=this.newGUID(t),a=new b[o].IfcLabel(e),c=i?new b[o].IfcText(i):null,h=new b[o].IfcPropertySet(r,n,a,c,[]);h.expressID=this.increaseMaxID(t);const d=this.newGUID(t),E=new b[o].IfcRelDefinesByProperties(d,n,null,null,[],new b.Handle(h.expressID));return E.expressID=this.increaseMaxID(t),await this.setData(t,h,E),{pset:h,rel:E}}async removePset(t,...e){for(const i of e){const o=await t.getProperties(i);if((o==null?void 0:o.type)!==b.IFCPROPERTYSET)continue;const n=await Ut.getPsetRel(t,i);if(n&&(await t.setProperties(n,null),this.registerChange(t,n)),o){for(const r of o.HasProperties)await t.setProperties(r.value,null);await t.setProperties(i,null),this.onPsetRemoved.trigger({model:t,psetID:i}),this.registerChange(t,i)}}}newSingleStringProperty(t,e,i,o){return this.newSingleProperty(t,e,i,o)}newSingleNumericProperty(t,e,i,o){return this.newSingleProperty(t,e,i,o)}newSingleBooleanProperty(t,e,i,o){return this.newSingleProperty(t,e,i,o)}async removePsetProp(t,e,i){const o=await t.getProperties(e),n=await t.getProperties(i);!o||!n||o.type===b.IFCPROPERTYSET&&n&&(o.HasProperties=o.HasProperties.filter(r=>r.value!==i),await t.setProperties(i,null),this.registerChange(t,e,i))}async addElementToPset(t,e,...i){const o=await Ut.getPsetRel(t,e);if(!o)return;const n=await t.getProperties(o);if(n){for(const r of i){const a=new b.Handle(r);n.RelatedObjects.push(a),this.onElementToPset.trigger({model:t,psetID:e,elementID:r})}this.registerChange(t,e)}}async addPropToPset(t,e,...i){const o=await t.getProperties(e);if(o){for(const n of i){if(o.HasProperties.includes(n))continue;const r=new b.Handle(n);o.HasProperties.push(r),this.onPropToPset.trigger({model:t,psetID:e,propID:n})}this.registerChange(t,e)}}async saveToIfc(t,e){const i=this.components.get(Is),o=i.webIfc,n=await i.readIfcFile(e),r=this.changeMap[t.uuid]??[];for(const c of r){const h=await t.getProperties(c);if(h)try{o.WriteLine(n,h)}catch{}else try{o.DeleteLine(n,c)}catch{}}const a=o.SaveModel(n);return i.webIfc.CloseModel(n),i.cleanUp(),a}async setAttributeListener(t,e,i){this.attributeListeners[t.uuid]||(this.attributeListeners[t.uuid]={});const o=this.attributeListeners[t.uuid][e]?this.attributeListeners[t.uuid][e][i]:null;if(o)return o;const n=await t.getProperties(e);if(!n)throw new Error(`Entity with expressID ${e} doesn't exists.`);const r=n[i];if(Array.isArray(r)||!r)throw new Error(`Attribute ${i} is array or null, and it can't have a listener.`);const a=r.value;if(a===void 0||a==null)throw new Error(`Attribute ${i} has a badly defined handle.`);const c=new D;return Object.defineProperty(n[i],"value",{get(){return this._value},async set(h){this._value=h,c.trigger(h)}}),n[i].value=a,this.attributeListeners[t.uuid][e]||(this.attributeListeners[t.uuid][e]={}),this.attributeListeners[t.uuid][e][i]=c,c}increaseMaxID(t){return t.ifcMetadata.maxExpressID++,t.ifcMetadata.maxExpressID}newGUID(t){const e=Mt.getIFCSchema(t);return new b[e].IfcGloballyUniqueId(re.create())}async getOwnerHistory(t){const e=await t.getAllPropertiesOfType(b.IFCOWNERHISTORY);if(!e)throw new Error("No OwnerHistory was found.");const i=Object.keys(e).map(r=>parseInt(r,10)),o=e[i[0]],n=new b.Handle(o.expressID);return{ownerHistory:o,ownerHistoryHandle:n}}registerChange(t,...e){this.changeMap[t.uuid]||(this.changeMap[t.uuid]=new Set);for(const i of e)this.changeMap[t.uuid].add(i),this.onDataChanged.trigger({model:t,expressID:i})}async newSingleProperty(t,e,i,o){const n=Mt.getIFCSchema(t),r=new b[n].IfcIdentifier(i),a=new b[n][e](o),c=new b[n].IfcPropertySingleValue(r,null,a,null);return c.expressID=this.increaseMaxID(t),await this.setData(t,c),c}};I(Mt,"uuid","58c2d9f0-183c-48d6-a402-dfcf5b9a34df");let Ti=Mt;const gs=class gs extends ${constructor(t){super(t);I(this,"enabled",!0);I(this,"list",{});I(this,"onDisposed",new D);I(this,"onFragmentsDisposed",t=>{const{groupID:e,fragmentIDs:i}=t;for(const o in this.list){const n=this.list[o],r=Object.keys(n);if(r.includes(e))delete n[e],Object.values(n).length===0&&delete this.list[o];else for(const a of r){const c=n[a];for(const h of i)delete c[h];Object.values(c).length===0&&delete n[a]}}});t.add(gs.uuid,this),t.get(ot).onFragmentsDisposed.add(this.onFragmentsDisposed)}dispose(){this.list={},this.components.get(ot).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(),this.onDisposed.reset()}remove(t){for(const e in this.list){const i=this.list[e];for(const o in i){const n=i[o];delete n[t]}}}find(t){const e=this.components.get(ot);if(!t){const r={};for(const[a,c]of e.list)r[a]=new Set(c.ids);return r}const i=Object.keys(t).length,o={};for(const r in t){const a=t[r];if(!this.list[r]){console.warn(`Classification ${r} does not exist.`);continue}for(const c of a){const h=this.list[r][c];if(h)for(const d in h){o[d]||(o[d]=new Map);for(const E of h[d]){const u=o[d].get(E);u===void 0?o[d].set(E,1):o[d].set(E,u+1)}}}}const n={};for(const r in o){const a=o[r];for(const[c,h]of a){if(h===void 0)throw new Error("Malformed fragments map!");h===i&&(n[r]||(n[r]=new Set),n[r].add(c))}}return n}byModel(t,e){this.list.models||(this.list.models={});const i=this.list.models;i[t]||(i[t]={});const o=i[t];for(const[n,r]of e.data){const a=r[0];for(const c of a){const h=e.keyFragments.get(c);h&&(o[h]||(o[h]=new Set),o[h].add(n))}}}async byPredefinedType(t){var o;this.list.predefinedTypes||(this.list.predefinedTypes={});const e=this.list.predefinedTypes,i=t.getAllPropertiesIDs();for(const n of i){const r=await t.getProperties(n);if(!r)continue;const a=String((o=r.PredefinedType)==null?void 0:o.value).toUpperCase();e[a]||(e[a]={});const c=e[a];for(const[h,d]of t.data){const E=d[0];for(const u of E){const f=t.keyFragments.get(u);if(!f)throw new Error("Fragment ID not found!");c[f]||(c[f]=new Set),c[f].add(r.expressID)}}}}byEntity(t){this.list.entities||(this.list.entities={});for(const[e,i]of t.data){const n=i[1][1],r=yi[n];this.saveItem(t,"entities",r,e)}}async byIfcRel(t,e,i){Ut.isRel(e)&&await Ut.getRelationMap(t,e,async(o,n)=>{const{name:r}=await Ut.getEntityName(t,o);for(const a of n)this.saveItem(t,i,r??"NO REL NAME",a)})}async bySpatialStructure(t){var n,r;const e=this.components.get(le),i=e.relationMaps[t.uuid];if(!i)throw new Error(`Classifier: model relations of ${t.name||t.uuid} have to exists to group by spatial structure.`);const o="spatialStructures";for(const[a]of i){const c=e.getEntityRelations(t,a,"Decomposes");if(c)for(const u of c){const f=await t.getProperties(u);if(!f)continue;const A=(n=f.Name)==null?void 0:n.value;this.saveItem(t,o,A,a)}const h=e.getEntityRelations(t,a,"ContainsElements");if(!h)continue;const d=await t.getProperties(a);if(!d)continue;const E=(r=d.Name)==null?void 0:r.value;for(const u of h){this.saveItem(t,o,E,u);const f=e.getEntityRelations(t,Number(u),"IsDecomposedBy");if(f)for(const A of f)this.saveItem(t,o,E,A)}}}setColor(t,e,i=!1){const o=this.components.get(ot);for(const n in t){const r=o.list.get(n);if(!r)continue;const a=t[n];r.setColor(e,a,i)}}resetColor(t){const e=this.components.get(ot);for(const i in t){const o=e.list.get(i);if(!o)continue;const n=t[i];o.resetColor(n)}}saveItem(t,e,i,o){this.list[e]||(this.list[e]={});const n=t.data.get(o);if(n)for(const r of n[0]){const a=t.keyFragments.get(r);if(a){const c=this.list[e];c[i]||(c[i]={}),c[i][a]||(c[i][a]=new Set),c[i][a].add(o)}}}};I(gs,"uuid","e25a7f3c-46c4-4a14-9d3d-5115f24ebeb7");let fs=gs;const Os=class Os extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"enabled",!0);I(this,"height",10);I(this,"groupName","spatialStructures");I(this,"list",new Set);t.add(Os.uuid,this)}dispose(){this.list.clear(),this.onDisposed.trigger(),this.onDisposed.reset()}set(t){if(!this.enabled)return;const e=this.components.get(fs),i=this.components.get(ot),o=t?1:-1;let n=0;const r=e.list[this.groupName],a=new S.Matrix4;for(const c in r){a.elements[13]=n*o*this.height;for(const h in r[c]){const d=i.list.get(h),E=c+h,u=this.list.has(E);if(!d||t&&u||!t&&!u)continue;t?this.list.add(E):this.list.delete(E);const f=r[c][h];d.applyTransform(f,a)}n++}}};I(Os,"uuid","d260618b-ce88-4c7d-826c-6debb91de3e2");let mi=Os;const Ss=class Ss extends ${constructor(t){super(t);I(this,"enabled",!0);this.components.add(Ss.uuid,this)}set(t,e){const i=this.components.get(ot);if(!e){for(const[o,n]of i.list)n&&(n.setVisibility(t),this.updateCulledVisibility(n));return}for(const o in e){const n=e[o],r=i.list.get(o);r&&(r.setVisibility(t,n),this.updateCulledVisibility(r))}}isolate(t){this.set(!1),this.set(!0,t)}updateCulledVisibility(t){const e=this.components.get(ds);for(const[i,o]of e.list){const n=o.colorMeshes.get(t.id);n&&(n.count=t.mesh.count)}}};I(Ss,"uuid","dd9ccf2d-8a21-4821-b7f6-2949add16a29");let Ri=Ss;class zn extends Ds{constructor(){super(...arguments);I(this,"minGeometrySize",10);I(this,"minAssetsSize",1e3)}}const _s=class _s extends ${constructor(t){super(t);I(this,"onGeometryStreamed",new D);I(this,"onAssetStreamed",new D);I(this,"onProgress",new D);I(this,"onIfcLoaded",new D);I(this,"onDisposed",new D);I(this,"settings",new zn);I(this,"enabled",!0);I(this,"webIfc",new b.IfcAPI);I(this,"_spatialTree",new Vn);I(this,"_metaData",new Gn);I(this,"_visitedGeometries",new Map);I(this,"_streamSerializer",new Dt.StreamSerializer);I(this,"_geometries",new Map);I(this,"_geometryCount",0);I(this,"_civil",new Yn);I(this,"_groupSerializer",new Dt.Serializer);I(this,"_assets",[]);I(this,"_meshesWithHoles",new Set);this.components.add(_s.uuid,this),this.settings.excludedCategories.add(b.IFCOPENINGELEMENT)}dispose(){this.onIfcLoaded.reset(),this.onGeometryStreamed.reset(),this.onAssetStreamed.reset(),this.webIfc=null,this.onDisposed.trigger(),this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModel(t,this.settings.webIfc)}async streamIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllGeometries(){const{minGeometrySize:t,minAssetsSize:e}=this.settings;this._spatialTree.setUp(this.webIfc);const i=this.webIfc.GetIfcEntityList(0),o=[[]],n=new Dt.FragmentsGroup;n.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};let r=0,a=0;for(const R of i){if(!this.webIfc.IsIfcElement(R)&&R!==b.IFCSPACE||this.settings.excludedCategories.has(R))continue;const T=this.webIfc.GetLineIDsWithType(0,R),F=T.size();for(let g=0;g<F;g++){r>t&&(r=0,a++,o.push([]));const p=T.get(g);o[a].push(p);const m=this.webIfc.GetLine(0,p);if(m.GlobalId){const _=(m==null?void 0:m.GlobalId.value)||(m==null?void 0:m.GlobalId);n.globalToExpressIDs.set(_,p)}const O=this._spatialTree.itemsByFloor[p]||0;n.data.set(p,[[],[O,R]]),r++}}this._spatialTree.cleanUp();let c=.01,h=0;for(const R of o){h++,this.webIfc.StreamMeshes(0,R,F=>{this.getMesh(this.webIfc,F,n)}),this._geometryCount>t&&await this.streamGeometries(),this._assets.length>e&&await this.streamAssets();const T=h/o.length;T>c&&(c+=.01,c=Math.max(c,T),this.onProgress.trigger(Math.round(c*100)/100))}this._geometryCount&&await this.streamGeometries(),this._assets.length&&await this.streamAssets();const{opaque:d,transparent:E}=n.geometryIDs;for(const[R,{index:T,uuid:F}]of this._visitedGeometries)n.keyFragments.set(T,F),(R>1?d:E).set(R,T);const u=n.data.keys();for(const R of u){const[T]=n.data.get(R);T.length||n.data.delete(R)}const f=this.webIfc.GetCoordinationMatrix(0);n.coordinationMatrix.fromArray(f),n.civilData=this._civil.read(this.webIfc);const A=this._groupSerializer.export(n);this.onIfcLoaded.trigger(A),n.dispose(!0)}cleanUp(){this.webIfc=null,this.webIfc=new b.IfcAPI,this._visitedGeometries.clear(),this._geometries.clear(),this._assets=[],this._meshesWithHoles.clear()}getMesh(t,e,i){const o=e.geometries.size(),n=e.expressID,r={id:n,geometries:[]};for(let a=0;a<o;a++){const c=e.geometries.get(a),h=c.geometryExpressID,d=c.color.w===1?1:-1,E=h*d;if(!this._visitedGeometries.has(E)){this._visitedGeometries.has(h)||this.getGeometry(t,h);const m=this._visitedGeometries.size,O=S.MathUtils.generateUUID();this._visitedGeometries.set(E,{uuid:O,index:m})}const u=this._visitedGeometries.get(E);if(u===void 0)throw new Error("Error getting geometry data for streaming!");const f=i.data.get(n);if(!f)throw new Error("Data not found!");f[0].push(u.index);const{x:A,y:R,z:T,w:F}=c.color,g=[A,R,T,F],p=c.flatTransformation;r.geometries.push({color:g,geometryID:h,transformation:p})}this._assets.push(r)}getGeometry(t,e){const i=t.GetGeometry(0,e),o=t.GetIndexArray(i.GetIndexData(),i.GetIndexDataSize()),n=t.GetVertexArray(i.GetVertexData(),i.GetVertexDataSize()),r=new Float32Array(n.length/2),a=new Float32Array(n.length/2);for(let u=0;u<n.length;u+=6)r[u/2]=n[u],r[u/2+1]=n[u+1],r[u/2+2]=n[u+2],a[u/2]=n[u+3],a[u/2+1]=n[u+4],a[u/2+2]=n[u+5];const c=Fn(r),h=new Float32Array(c.transformation.elements),d=[c.center.x,c.center.y,c.center.z];let E=!1;for(let u=0;u<r.length-2;u+=3){const f=r[u],A=r[u+1],R=r[u+2],T=a[u],F=a[u+1],g=a[u+2];if(gn(d,[f,A,R],[T,F,g])){E=!0;break}}this._geometries.set(e,{position:r,normal:a,index:o,boundingBox:h,hasHoles:E}),i.delete(),this._geometryCount++}async streamAssets(){await this.onAssetStreamed.trigger(this._assets),this._assets=null,this._assets=[]}async streamGeometries(){let t=this._streamSerializer.export(this._geometries),e={};for(const[i,{boundingBox:o,hasHoles:n}]of this._geometries)e[i]={boundingBox:o,hasHoles:n};this.onGeometryStreamed.trigger({data:e,buffer:t}),e=null,t=null,this._geometries.clear(),this._geometryCount=0}};I(_s,"uuid","d9999a00-e1f5-4d3f-8cfe-c56e08609764");let Ai=_s;class Hn extends Ds{constructor(){super(...arguments);I(this,"propertiesSize",100)}}class kn extends ${constructor(){super(...arguments);I(this,"onPropertiesStreamed",new Pe);I(this,"onProgress",new Pe);I(this,"onIndicesStreamed",new Pe);I(this,"onDisposed",new D);I(this,"enabled",!0);I(this,"settings",new Hn);I(this,"webIfc",new b.IfcAPI)}async dispose(){this.onIndicesStreamed.reset(),this.onPropertiesStreamed.reset(),this.webIfc=null,this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModel(t,this.settings.webIfc)}async streamIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllProperties(){const{propertiesSize:t}=this.settings,e=new Set(this.webIfc.GetIfcEntityList(0)),i=new Set([b.IFCPROJECT,b.IFCSITE,b.IFCBUILDING,b.IFCBUILDINGSTOREY,b.IFCSPACE]);for(const c of i)e.add(c);let o=.01,n=0;for(const c of e){if(n++,Ni.has(c))continue;const h=i.has(c),d=this.webIfc.GetLineIDsWithType(0,c),E=d.size();let u=0;for(let A=0;A<E-t;A+=t){const R={};for(let T=0;T<t;T++){u++;const F=d.get(A+T);try{const g=this.webIfc.GetLine(0,F,h);R[g.expressID]=g}catch{console.log(`Could not get property: ${F}`)}}await this.onPropertiesStreamed.trigger({type:c,data:R})}if(u!==E){const A={};for(let R=u;R<E;R++){const T=d.get(R);try{const F=this.webIfc.GetLine(0,T,h);A[F.expressID]=F}catch{console.log(`Could not get property: ${T}`)}}await this.onPropertiesStreamed.trigger({type:c,data:A})}const f=n/e.size;f>o&&(o+=.01,o=Math.max(o,f),await this.onProgress.trigger(Math.round(o*100)/100))}const a=await this.components.get(le).processFromWebIfc(this.webIfc,0);await this.onIndicesStreamed.trigger(a)}cleanUp(){this.webIfc=null,this.webIfc=new b.IfcAPI}}I(kn,"uuid","88d2c89c-ce32-47d7-8cb6-d51e4b311a0b");const Ns=class Ns extends ${constructor(t){super(t);I(this,"enabled",!0);t.add(Ns.uuid,this)}static distanceFromPointToLine(t,e,i,o=!1){const n=new S.Line3,r=new S.Vector3;return n.set(e,i),n.closestPointToPoint(t,o,r),r.distanceTo(t)}getFace(t,e,i){if(!t.geometry.index)throw new Error("Geometry must be indexed!");const o=new Map,n=t.geometry.index.array,{plane:r}=this.getFaceData(e,i,t),a=[];for(let E=0;E<n.length/3;E++){const{plane:u,edges:f}=this.getFaceData(E,i,t);if(u.equals(r)){a.push({index:E,edges:f});for(const{id:A,points:R,distance:T}of f)o.set(A,{points:R,distance:T})}}let c=0;const h=new Map,d=new Map;for(const{index:E,edges:u}of a){const f=new Map;for(const{id:m}of u)if(h.has(m)){const O=h.get(m);f.set(m,O)}const A=u.map(m=>m.id);if(!f.size){const m=c++;for(const{id:O}of u)h.set(O,m);d.set(m,{edges:new Set(A),indices:new Set([E])});continue}let R=null;const T=new Set,F=new Set(A);for(const[m,O]of f){R===null?R=O:O!==R&&T.add(O),h.delete(m);const{edges:_}=d.get(O);_.delete(m),F.delete(m)}if(R===null)throw new Error("Error computing face!");const g=d.get(R),{indices:p}=g;p.add(E);for(const m of F){h.set(m,R);const{edges:O}=g;O.add(m)}for(const m of T){const O=d.get(m),{edges:_,indices:N}=O,y=d.get(R),{edges:L,indices:w}=y;for(const M of _)L.add(M),h.set(M,R);for(const M of N)w.add(M);d.delete(m)}}for(const[E,{indices:u,edges:f}]of d)if(u.has(e)){const A=[];for(const R of f){const T=o.get(R);A.push(T)}return{edges:A,indices:u}}return null}getVerticesAndNormal(t,e,i){if(!t.geometry.index)throw new Error("Geometry must be indexed!");const o=t.geometry.index.array,n=t.geometry.attributes.position.array,r=t.geometry.attributes.normal.array,a=o[e*3]*3,c=o[e*3+1]*3,h=o[e*3+2]*3,d=new S.Vector3(n[a],n[a+1],n[a+2]),E=new S.Vector3(n[c],n[c+1],n[c+2]),u=new S.Vector3(n[h],n[h+1],n[h+2]),f=new S.Vector3(r[a],r[a+1],r[a+2]),A=new S.Vector3(r[c],r[c+1],r[c+2]),R=new S.Vector3(r[h],r[h+1],r[h+2]),T=(f.x+A.x+R.x)/3,F=(f.y+A.y+R.y)/3,g=(f.z+A.z+R.z)/3,p=new S.Vector3(T,F,g);if(i!==void 0&&t instanceof S.InstancedMesh){const m=new S.Matrix4;t.getMatrixAt(i,m);const O=new S.Matrix4;O.extractRotation(m),p.applyMatrix4(O),d.applyMatrix4(m),E.applyMatrix4(m),u.applyMatrix4(m)}return{p1:d,p2:E,p3:u,faceNormal:p}}round(t){t.x=Math.trunc(t.x*1e3)/1e3,t.y=Math.trunc(t.y*1e3)/1e3,t.z=Math.trunc(t.z*1e3)/1e3}getVolumeFromFragments(t){const e=this.components.get(ot),i=new S.Matrix4,o=[];for(const r in t){const a=e.list.get(r);if(!a)continue;const c=t[r];let h=0;for(const u of c){const f=a.getInstancesIDs(u);f&&(h+=f.size)}const d=new S.InstancedMesh(a.mesh.geometry,void 0,h);let E=0;for(const u of c){const f=a.getInstancesIDs(u);if(f)for(const A of f)a.mesh.getMatrixAt(A,i),d.setMatrixAt(E++,i)}o.push(d)}const n=this.getVolumeFromMeshes(o);for(const r of o)r.geometry=null,r.material=[],r.dispose();return n}getVolumeFromMeshes(t){let e=0;for(const i of t)e+=this.getVolumeOfMesh(i);return e}getFaceData(t,e,i){const o=this.getVerticesAndNormal(i,t,e),{p1:n,p2:r,p3:a,faceNormal:c}=o;this.round(n),this.round(r),this.round(a),this.round(c);const h=[{id:`${n.x}|${n.y}|${n.z}`,value:n},{id:`${r.x}|${r.y}|${r.z}`,value:r},{id:`${a.x}|${a.y}|${a.z}`,value:a}];h.sort((g,p)=>g.id<p.id?-1:g.id>p.id?1:0);const[{id:d,value:E},{id:u,value:f},{id:A,value:R}]=h,T=[{id:`${d}|${u}`,distance:E.distanceTo(f),points:[E,f]},{id:`${u}|${A}`,distance:f.distanceTo(R),points:[f,R]},{id:`${d}|${A}`,distance:E.distanceTo(R),points:[E,R]}],F=new S.Plane;return F.setFromNormalAndCoplanarPoint(c,n),F.constant=Math.round(F.constant*10)/10,{plane:F,edges:T}}getVolumeOfMesh(t){let e=0;const i=new S.Vector3,o=new S.Vector3,n=new S.Vector3,{index:r}=t.geometry,a=t.geometry.attributes.position.array;if(!r)return console.warn("Geometry must be indexed to compute its volume!"),0;const c=[];if(t instanceof S.InstancedMesh)for(let d=0;d<t.count;d++){const E=new S.Matrix4;t.getMatrixAt(d,E),c.push(E)}else c.push(new S.Matrix4().identity());const{matrixWorld:h}=t;for(let d=0;d<r.array.length-2;d+=3)for(const E of c){const u=E.multiply(h),f=r.array[d]*3,A=r.array[d+1]*3,R=r.array[d+2]*3;i.set(a[f],a[f+1],a[f+2]).applyMatrix4(u),o.set(a[A],a[A+1],a[A+2]).applyMatrix4(u),n.set(a[R],a[R+1],a[R+2]).applyMatrix4(u),e+=this.getSignedVolumeOfTriangle(i,o,n)}return Math.abs(e)}getSignedVolumeOfTriangle(t,e,i){const o=i.x*e.y*t.z,n=e.x*i.y*t.z,r=i.x*t.y*e.z,a=t.x*i.y*e.z,c=e.x*t.y*i.z,h=t.x*e.y*i.z;return 1/6*(-o+n+r-a-c+h)}};I(Ns,"uuid","267ca032-672f-4cb0-afa9-d24e904f39d6");let Fi=Ns;exports.AsyncEvent=Pe;exports.Base=Ls;exports.BaseCamera=mn;exports.BaseRenderer=Rn;exports.BaseScene=An;exports.BaseWorldItem=Ms;exports.BoundingBoxer=Ci;exports.Classifier=fs;exports.Clipper=fi;exports.Component=$;exports.Components=hs;exports.CullerRenderer=Mn;exports.Cullers=ds;exports.Disposer=_t;exports.Event=D;exports.Exploder=mi;exports.FirstPersonMode=Un;exports.FragmentsManager=ot;exports.GeometryTypes=Ni;exports.Grids=Ii;exports.Hider=Ri;exports.IfcCategories=Pr;exports.IfcCategoryMap=yi;exports.IfcElements=Bn;exports.IfcFragmentSettings=Ds;exports.IfcGeometryTiler=Ai;exports.IfcJsonExporter=us;exports.IfcLoader=Is;exports.IfcPropertiesManager=Ti;exports.IfcPropertiesTiler=kn;exports.IfcPropertiesUtils=Ut;exports.IfcRelationsIndexer=le;exports.IfcStreamingSettings=zn;exports.MaterialsUtils=ui;exports.MeasurementUtils=Fi;exports.MeshCullerRenderer=wn;exports.MiniMap=Dn;exports.MiniMaps=pi;exports.Mouse=On;exports.OrbitMode=xn;exports.OrthoPerspectiveCamera=Nr;exports.PlanMode=bn;exports.ProjectionManager=vn;exports.PropertiesStreamingSettings=Hn;exports.Raycasters=ae;exports.SimpleCamera=ce;exports.SimpleGrid=Pn;exports.SimplePlane=ws;exports.SimpleRaycaster=Sn;exports.SimpleRenderer=dr;exports.SimpleScene=Er;exports.SimpleWorld=_n;exports.UUID=re;exports.VertexPicker=hr;exports.Worlds=Es;exports.isPointInFrontOfPlane=gn;exports.obbFromPoints=Fn;exports.readPixelsAsync=Ln;
88
+ `,o=new Blob([i],{type:"application/javascript"});this.worker=new Worker(URL.createObjectURL(o))}dispose(){this.enabled=!1;for(const s of this.scene.children)s.removeFromParent();this.onViewUpdated.reset(),this.worker.terminate(),this.renderer.dispose(),this.renderTarget.dispose(),this._buffer=null,this.onDisposed.reset()}getAvailableColor(){let s=BigInt(this._availableColor.toString());const t=[];do t.unshift(Number(s%256n)),s/=256n;while(s);for(;t.length!==3;)t.unshift(0);const[e,i,o]=t,n=`${e}-${i}-${o}`;return{r:e,g:i,b:o,code:n}}increaseColor(){if(this._availableColor===256*256*256){console.warn("Color can't be increased over 256 x 256 x 256!");return}this._availableColor++}decreaseColor(){if(this._availableColor===1){console.warn("Color can't be decreased under 0!");return}this._availableColor--}applySettings(s){s&&(s.updateInterval!==void 0&&(this.updateInterval=s.updateInterval),s.height!==void 0&&(this._height=s.height),s.width!==void 0&&(this._width=s.width),s.autoUpdate!==void 0&&(this.autoUpdate=s.autoUpdate))}}class wn extends Mn{constructor(t,e,i){super(t,e,i);I(this,"onViewUpdated",new D);I(this,"threshold",100);I(this,"colorMeshes",new Map);I(this,"isProcessing",!1);I(this,"_colorCodeMeshMap",new Map);I(this,"_meshIDColorCodeMap",new Map);I(this,"_currentVisibleMeshes",new Set);I(this,"_recentlyHiddenMeshes",new Set);I(this,"_intervalID",null);I(this,"_transparentMat",new S.MeshBasicMaterial({transparent:!0,opacity:0}));I(this,"handleWorkerMessage",async t=>{if(this.isProcessing)return;const e=t.data.colors;this._recentlyHiddenMeshes=new Set(this._currentVisibleMeshes),this._currentVisibleMeshes.clear();for(const[i,o]of e){if(o<this.threshold)continue;const n=this._colorCodeMeshMap.get(i);n&&(this._currentVisibleMeshes.add(n),this._recentlyHiddenMeshes.delete(n))}this.onViewUpdated.trigger({seen:this._currentVisibleMeshes,unseen:this._recentlyHiddenMeshes}),this._isWorkerBusy=!1});this.worker.addEventListener("message",this.handleWorkerMessage),this.autoUpdate&&window.setInterval(async()=>{this.isProcessing||await this.updateVisibility()},this.updateInterval),this.onViewUpdated.add(({seen:o,unseen:n})=>{for(const r of o)r.visible=!0;for(const r of n)r.visible=!1})}dispose(){super.dispose(),this._intervalID!==null&&(window.clearInterval(this._intervalID),this._intervalID=null),this._currentVisibleMeshes.clear(),this._recentlyHiddenMeshes.clear(),this._meshIDColorCodeMap.clear(),this._transparentMat.dispose(),this._colorCodeMeshMap.clear();const t=this.components.get(_t);for(const e in this.colorMeshes){const i=this.colorMeshes.get(e);i&&t.destroy(i,!0)}this.colorMeshes.clear()}add(t){if(!this.enabled)return;if(this.isProcessing){console.log("Culler processing not finished yet.");return}this.isProcessing=!0;const e=t instanceof S.InstancedMesh,{geometry:i,material:o}=t,{colorMaterial:n,code:r}=this.getAvailableMaterial();let a;if(Array.isArray(o)){let d=!0;const E=[];for(const u of o)ui.isTransparent(u)?E.push(this._transparentMat):(d=!1,E.push(n));if(d){n.dispose(),this.isProcessing=!1;return}a=E}else if(ui.isTransparent(o)){n.dispose(),this.isProcessing=!1;return}else a=n;this._colorCodeMeshMap.set(r,t),this._meshIDColorCodeMap.set(t.uuid,r);const c=e?t.count:1,h=new S.InstancedMesh(i,a,c);e?h.instanceMatrix=t.instanceMatrix:h.setMatrixAt(0,new S.Matrix4),t.visible=!1,t.updateWorldMatrix(!0,!1),h.applyMatrix4(t.matrixWorld),h.updateMatrix(),this.scene.add(h),this.colorMeshes.set(t.uuid,h),this.increaseColor(),this.isProcessing=!1}remove(t){if(this.isProcessing){console.log("Culler processing not finished yet.");return}this.isProcessing=!0;const e=this.components.get(_t);this._currentVisibleMeshes.delete(t),this._recentlyHiddenMeshes.delete(t);const i=this.colorMeshes.get(t.uuid),o=this._meshIDColorCodeMap.get(t.uuid);if(!i||!o){this.isProcessing=!1,console.log(t.visible);return}this._colorCodeMeshMap.delete(o),this._meshIDColorCodeMap.delete(t.uuid),this.colorMeshes.delete(t.uuid),i.geometry=void 0,i.material=[],e.destroy(i,!0),this._recentlyHiddenMeshes.delete(t),this._currentVisibleMeshes.delete(t),this.isProcessing=!1}getAvailableMaterial(){const{r:t,g:e,b:i,code:o}=this.getAvailableColor(),n=S.ColorManagement.enabled;S.ColorManagement.enabled=!1;const r=new S.Color(`rgb(${t}, ${e}, ${i})`);if(!this.world.renderer)throw new Error("Renderer not found in the world!");const a=this.world.renderer.clippingPlanes,c=new S.MeshBasicMaterial({color:r,clippingPlanes:a,side:S.DoubleSide});return S.ColorManagement.enabled=n,{colorMaterial:c,code:o}}}const we=class we extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"_enabled",!0);I(this,"list",new Map);t.add(we.uuid,this)}get enabled(){return this._enabled}set enabled(t){this._enabled=t;for(const[e,i]of this.list)i.enabled=t}create(t,e){if(this.list.has(t.uuid))return this.list.get(t.uuid);const i=new wn(this.components,t,e);return this.list.set(t.uuid,i),i}delete(t){const e=this.list.get(t.uuid);e&&e.dispose(),this.list.delete(t.uuid)}dispose(){this.enabled=!1,this.onDisposed.trigger(we.uuid),this.onDisposed.reset();for(const[t,e]of this.list)e.dispose();this.list.clear()}};I(we,"uuid","69f2a50d-c266-44fc-b1bd-fa4d34be89e6");let ds=we;class Dn{constructor(s){I(this,"onDisposed",new D);I(this,"onAfterUpdate",new D);I(this,"onBeforeUpdate",new D);I(this,"onResize",new D);I(this,"frontOffset",0);I(this,"overrideMaterial",new S.MeshDepthMaterial);I(this,"backgroundColor",new S.Color(395274));I(this,"renderer");I(this,"enabled",!0);I(this,"world");I(this,"_lockRotation",!0);I(this,"_camera");I(this,"_plane");I(this,"_size",new S.Vector2(320,160));I(this,"_tempVector1",new S.Vector3);I(this,"_tempVector2",new S.Vector3);I(this,"_tempTarget",new S.Vector3);I(this,"down",new S.Vector3(0,-1,0));I(this,"updatePlanes",()=>{if(!this.world.renderer)throw new Error("The given world must have a renderer!");const s=[],t=this.world.renderer.three;for(const e of t.clippingPlanes)s.push(e);s.push(this._plane),this.renderer.clippingPlanes=s});if(this.world=s,!this.world.renderer)throw new Error("The given world must have a renderer!");this.renderer=new S.WebGLRenderer,this.renderer.setSize(this._size.x,this._size.y);const t=1,e=this._size.x/this._size.y;this._camera=new S.OrthographicCamera(t*e/-2,t*e/2,t/2,t/-2),this.world.renderer.onClippingPlanesUpdated.add(this.updatePlanes),this._camera.position.set(0,200,0),this._camera.zoom=.1,this._camera.rotation.x=-Math.PI/2,this._plane=new S.Plane(this.down,200),this.updatePlanes()}get lockRotation(){return this._lockRotation}set lockRotation(s){this._lockRotation=s,s&&(this._camera.rotation.z=0)}get zoom(){return this._camera.zoom}set zoom(s){this._camera.zoom=s,this._camera.updateProjectionMatrix()}dispose(){this.enabled=!1,this.onBeforeUpdate.reset(),this.onAfterUpdate.reset(),this.onResize.reset(),this.overrideMaterial.dispose(),this.renderer.dispose(),this.onDisposed.trigger(),this.onDisposed.reset()}get(){return this._camera}update(){if(!this.enabled)return;this.onBeforeUpdate.trigger();const s=this.world.scene.three,t=this.world.camera;if(!t.hasCameraControls())throw new Error("The given world must use camera controls!");if(!(s instanceof S.Scene))throw new Error("The given world must have a THREE.Scene as a root!");const e=t.controls;if(e.getPosition(this._tempVector1),this._camera.position.x=this._tempVector1.x,this._camera.position.z=this._tempVector1.z,this.frontOffset!==0&&(e.getTarget(this._tempVector2),this._tempVector2.sub(this._tempVector1),this._tempVector2.normalize().multiplyScalar(this.frontOffset),this._camera.position.x+=this._tempVector2.x,this._camera.position.z+=this._tempVector2.z),!this._lockRotation){e.getTarget(this._tempTarget);const o=Math.atan2(this._tempTarget.x-this._tempVector1.x,this._tempTarget.z-this._tempVector1.z);this._camera.rotation.z=o+Math.PI}this._plane.set(this.down,this._tempVector1.y);const i=s.background;s.background=this.backgroundColor,this.renderer.render(s,this._camera),s.background=i,this.onAfterUpdate.trigger()}getSize(){return this._size}resize(s=this._size){this._size.copy(s),this.renderer.setSize(s.x,s.y);const t=s.x/s.y,e=1;this._camera.left=e*t/-2,this._camera.right=e*t/2,this._camera.top=e/2,this._camera.bottom=-e/2,this._camera.updateProjectionMatrix(),this.onResize.trigger(s)}}const Rs=class Rs extends ${constructor(t){super(t);I(this,"onAfterUpdate",new D);I(this,"onBeforeUpdate",new D);I(this,"onDisposed",new D);I(this,"enabled",!0);I(this,"list",new Map);this.components.add(Rs.uuid,this)}create(t){if(this.list.has(t.uuid))throw new Error("This world already has a minimap!");const e=new Dn(t);return this.list.set(t.uuid,e),e}delete(t){const e=this.list.get(t);e&&e.dispose(),this.list.delete(t)}dispose(){for(const[t,e]of this.list)e.dispose();this.list.clear(),this.onDisposed.trigger()}update(){for(const[t,e]of this.list)e.update()}};I(Rs,"uuid","39ad6aad-84c8-4adf-a1e0-7f25313a9e7f");let pi=Rs;class Un{constructor(s){I(this,"enabled",!1);I(this,"id","FirstPerson");this.camera=s}set(s){if(this.enabled=s,s){if(this.camera.projection.current!=="Perspective"){this.camera.set("Orbit");return}this.setupFirstPersonCamera()}}setupFirstPersonCamera(){const s=this.camera.controls,t=new S.Vector3;s.distance--,s.getPosition(t),s.minDistance=1,s.maxDistance=1,s.distance=1,s.moveTo(t.x,t.y,t.z),s.truckSpeed=50,s.mouseButtons.wheel=nt.ACTION.DOLLY,s.touches.two=nt.ACTION.TOUCH_ZOOM_TRUCK}}class xn{constructor(s){I(this,"enabled",!0);I(this,"id","Orbit");this.camera=s,this.activateOrbitControls()}set(s){this.enabled=s,s&&this.activateOrbitControls()}activateOrbitControls(){const s=this.camera.controls;s.minDistance=1,s.maxDistance=300;const t=new S.Vector3;s.getPosition(t);const e=t.length();s.distance=e,s.truckSpeed=2;const{rotation:i}=this.camera.three,o=new S.Vector3(0,0,-1).applyEuler(i),n=t.addScaledVector(o,e);s.moveTo(n.x,n.y,n.z)}}class bn{constructor(s){I(this,"enabled",!1);I(this,"id","Plan");I(this,"mouseAction1");I(this,"mouseAction2");I(this,"mouseInitialized",!1);I(this,"defaultAzimuthSpeed");I(this,"defaultPolarSpeed");this.camera=s,this.defaultAzimuthSpeed=s.controls.azimuthRotateSpeed,this.defaultPolarSpeed=s.controls.polarRotateSpeed}set(s){this.enabled=s;const t=this.camera.controls;t.azimuthRotateSpeed=s?0:this.defaultAzimuthSpeed,t.polarRotateSpeed=s?0:this.defaultPolarSpeed,this.mouseInitialized||(this.mouseAction1=t.touches.one,this.mouseAction2=t.touches.two,this.mouseInitialized=!0),s?(t.mouseButtons.left=nt.ACTION.TRUCK,t.touches.one=nt.ACTION.TOUCH_TRUCK,t.touches.two=nt.ACTION.TOUCH_ZOOM):(t.mouseButtons.left=nt.ACTION.ROTATE,t.touches.one=this.mouseAction1,t.touches.two=this.mouseAction2)}}class vn{constructor(s){I(this,"onChanged",new D);I(this,"current","Perspective");I(this,"camera");I(this,"matchOrthoDistanceEnabled",!1);I(this,"_component");I(this,"_previousDistance",-1);this._component=s,this.camera=s.three}async set(s){this.current!==s&&(s==="Orthographic"?this.setOrthoCamera():await this.setPerspectiveCamera(),this.onChanged.trigger(this.camera))}async toggle(){const t=this.current==="Perspective"?"Orthographic":"Perspective";await this.set(t)}setOrthoCamera(){if(this._component.mode===null||this._component.mode.id==="FirstPerson")return;this._previousDistance=this._component.controls.distance,this._component.controls.distance=200;const s=this.getPerspectiveDims();if(!s)return;const{width:t,height:e}=s;this.setupOrthoCamera(e,t),this.camera=this._component.threeOrtho,this.current="Orthographic"}getPerspectiveDims(){const s=this._component.currentWorld;if(!s||!s.renderer)return null;const t=new S.Vector3;this._component.threePersp.getWorldDirection(t);const e=new S.Vector3;this._component.controls.getTarget(e);const o=e.clone().sub(this._component.threePersp.position).dot(t),n=s.renderer.getSize(),r=n.x/n.y,a=this._component.threePersp,c=o*2*Math.atan(a.fov*(Math.PI/180)/2);return{width:c*r,height:c}}setupOrthoCamera(s,t){this._component.controls.mouseButtons.wheel=nt.ACTION.ZOOM,this._component.controls.mouseButtons.middle=nt.ACTION.ZOOM;const e=this._component.threePersp,i=this._component.threeOrtho;i.zoom=1,i.left=t/-2,i.right=t/2,i.top=s/2,i.bottom=s/-2,i.updateProjectionMatrix(),i.position.copy(e.position),i.quaternion.copy(e.quaternion),this._component.controls.camera=i}getDistance(){const s=this._component.threePersp,t=this._component.threeOrtho;return(t.top-t.bottom)/t.zoom/(2*Math.atan(s.fov*(Math.PI/180)/2))}async setPerspectiveCamera(){this._component.controls.mouseButtons.wheel=nt.ACTION.DOLLY,this._component.controls.mouseButtons.middle=nt.ACTION.DOLLY;const s=this._component.threePersp,t=this._component.threeOrtho;s.position.copy(t.position),s.quaternion.copy(t.quaternion),this._component.controls.mouseButtons.wheel=nt.ACTION.DOLLY,this.matchOrthoDistanceEnabled?this._component.controls.distance=this.getDistance():this._component.controls.distance=this._previousDistance,await this._component.controls.zoomTo(1),s.updateProjectionMatrix(),this._component.controls.camera=s,this.camera=s,this.current="Perspective"}}class Nr extends ce{constructor(t){super(t);I(this,"projection");I(this,"threeOrtho");I(this,"threePersp");I(this,"_userInputButtons",{});I(this,"_frustumSize",50);I(this,"_navigationModes",new Map);I(this,"_mode",null);I(this,"previousSize",null);this.threePersp=this.three,this.threeOrtho=this.newOrthoCamera(),this.projection=new vn(this),this.onAspectUpdated.add(()=>{this.setOrthoPerspCameraAspect()}),this.projection.onChanged.add(e=>{this.three=e,this.updateAspect()}),this.onWorldChanged.add(({action:e})=>{e==="added"&&(this._navigationModes.clear(),this._navigationModes.set("Orbit",new xn(this)),this._navigationModes.set("FirstPerson",new Un(this)),this._navigationModes.set("Plan",new bn(this)),this._mode=this._navigationModes.get("Orbit"),this.mode.set(!0,{preventTargetAdjustment:!0}),this.currentWorld&&this.currentWorld.renderer&&(this.previousSize=this.currentWorld.renderer.getSize().clone()))})}get mode(){if(!this._mode)throw new Error("Mode not found, camera not initialized");return this._mode}dispose(){super.dispose(),this.threeOrtho.removeFromParent()}set(t){if(this.mode!==null&&this.mode.id!==t){if(this.mode.set(!1),!this._navigationModes.has(t))throw new Error("The specified mode does not exist!");this._mode=this._navigationModes.get(t),this.mode.set(!0)}}async fit(t,e=1.5){if(!this.enabled)return;const i=Number.MAX_VALUE,o=Number.MIN_VALUE,n=new S.Vector3(i,i,i),r=new S.Vector3(o,o,o);for(const u of t){const f=new S.Box3().setFromObject(u);f.min.x<n.x&&(n.x=f.min.x),f.min.y<n.y&&(n.y=f.min.y),f.min.z<n.z&&(n.z=f.min.z),f.max.x>r.x&&(r.x=f.max.x),f.max.y>r.y&&(r.y=f.max.y),f.max.z>r.z&&(r.z=f.max.z)}const a=new S.Box3(n,r),c=new S.Vector3;a.getSize(c);const h=new S.Vector3;a.getCenter(h);const d=Math.max(c.x,c.y,c.z)*e,E=new S.Sphere(h,d);await this.controls.fitToSphere(E,!0)}setUserInput(t){t?this.enableUserInput():this.disableUserInput()}disableUserInput(){this._userInputButtons.left=this.controls.mouseButtons.left,this._userInputButtons.right=this.controls.mouseButtons.right,this._userInputButtons.middle=this.controls.mouseButtons.middle,this._userInputButtons.wheel=this.controls.mouseButtons.wheel,this.controls.mouseButtons.left=0,this.controls.mouseButtons.right=0,this.controls.mouseButtons.middle=0,this.controls.mouseButtons.wheel=0}enableUserInput(){Object.keys(this._userInputButtons).length!==0&&(this.controls.mouseButtons.left=this._userInputButtons.left,this.controls.mouseButtons.right=this._userInputButtons.right,this.controls.mouseButtons.middle=this._userInputButtons.middle,this.controls.mouseButtons.wheel=this._userInputButtons.wheel)}newOrthoCamera(){const t=window.innerWidth/window.innerHeight;return new S.OrthographicCamera(this._frustumSize*t/-2,this._frustumSize*t/2,this._frustumSize/2,this._frustumSize/-2,.1,1e3)}setOrthoPerspCameraAspect(){if(!this.currentWorld||!this.currentWorld.renderer||!this.previousSize)return;const t=this.currentWorld.renderer.getSize(),e=this.threeOrtho.top,i=this.threeOrtho.right,o=t.y/this.previousSize.y,n=t.x/this.previousSize.x,r=e*o,a=i*n;this.threeOrtho.left=-a,this.threeOrtho.right=a,this.threeOrtho.top=r,this.threeOrtho.bottom=-r,this.threeOrtho.updateProjectionMatrix(),this.previousSize.copy(t)}}const yr=new Map([[b.IFCRELAGGREGATES,{forRelating:"IsDecomposedBy",forRelated:"Decomposes"}],[b.IFCRELASSOCIATESMATERIAL,{forRelating:"AssociatedTo",forRelated:"HasAssociations"}],[b.IFCRELASSOCIATESCLASSIFICATION,{forRelating:"ClassificationForObjects",forRelated:"HasAssociations"}],[b.IFCRELASSIGNSTOGROUP,{forRelating:"IsGroupedBy",forRelated:"HasAssignments"}],[b.IFCRELDEFINESBYPROPERTIES,{forRelated:"IsDefinedBy",forRelating:"DefinesOcurrence"}],[b.IFCRELDEFINESBYTYPE,{forRelated:"IsTypedBy",forRelating:"Types"}],[b.IFCRELDEFINESBYTEMPLATE,{forRelated:"IsDefinedBy",forRelating:"Defines"}],[b.IFCRELCONTAINEDINSPATIALSTRUCTURE,{forRelated:"ContainedInStructure",forRelating:"ContainsElements"}]]),De=class De extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onRelationsIndexed",new D);I(this,"relationMaps",{});I(this,"enabled",!0);I(this,"_relToAttributesMap",yr);I(this,"_inverseAttributes",["IsDecomposedBy","Decomposes","AssociatedTo","HasAssociations","ClassificationForObjects","IsGroupedBy","HasAssignments","IsDefinedBy","DefinesOcurrence","IsTypedBy","Types","Defines","ContainedInStructure","ContainsElements"]);I(this,"_ifcRels",[b.IFCRELAGGREGATES,b.IFCRELASSOCIATESMATERIAL,b.IFCRELASSOCIATESCLASSIFICATION,b.IFCRELASSIGNSTOGROUP,b.IFCRELDEFINESBYPROPERTIES,b.IFCRELDEFINESBYTYPE,b.IFCRELDEFINESBYTEMPLATE,b.IFCRELCONTAINEDINSPATIALSTRUCTURE]);I(this,"onFragmentsDisposed",t=>{delete this.relationMaps[t.groupID]});this.components.add(De.uuid,this),t.get(ot).onFragmentsDisposed.add(this.onFragmentsDisposed)}indexRelations(t,e,i,o){const n=Object.keys(e).find(E=>E.startsWith("Relating")),r=Object.keys(e).find(E=>E.startsWith("Related"));if(!(n&&r))return;const a=e[n].value,c=e[r].map(E=>E.value),h=t.get(a)??new Map,d=this._inverseAttributes.indexOf(o);h.set(d,c),t.set(a,h);for(const E of c){const u=t.get(E)??new Map,f=this._inverseAttributes.indexOf(i),A=u.get(f)??[];A.push(a),u.set(f,A),t.set(E,u)}}setRelationMap(t,e){this.relationMaps[t.uuid]=e,this.onRelationsIndexed.trigger({modelID:t.uuid,relationsMap:e})}async process(t){if(!t.hasProperties)throw new Error("FragmentsGroup properties not found");let e=this.relationMaps[t.uuid];if(e)return e;e=new Map;for(const i of this._ifcRels){const o=await t.getAllPropertiesOfType(i);if(!o)continue;const n=this._relToAttributesMap.get(i);if(!n)continue;const{forRelated:r,forRelating:a}=n;for(const c in o){const h=o[c];this.indexRelations(e,h,r,a)}}return this.setRelationMap(t,e),e}async processFromWebIfc(t,e){const i=new Map;for(const o of this._ifcRels){const n=this._relToAttributesMap.get(o);if(!n)continue;const{forRelated:r,forRelating:a}=n,c=t.GetLineIDsWithType(e,o);for(let h=0;h<c.size();h++){const d=await t.properties.getItemProperties(e,c.get(h));this.indexRelations(i,d,r,a)}}return this.onRelationsIndexed.trigger({modelID:e.toString(),relationsMap:i}),i}getEntityRelations(t,e,i){const o=this.relationMaps[t.uuid];if(!o)return null;const n=o.get(e),r=this._inverseAttributes.indexOf(i);if(!n||r===-1)return null;const a=n.get(r);return a||null}serializeRelations(t){const e={};for(const[i,o]of t.entries()){e[i]||(e[i]={});for(const[n,r]of o.entries())e[i][n]=r}return JSON.stringify(e)}serializeModelRelations(t){const e=this.relationMaps[t.uuid];return e?this.serializeRelations(e):null}serializeAllRelations(){const t={};for(const e in this.relationMaps){const i=this.relationMaps[e],o={};for(const[n,r]of i.entries()){o[n]||(o[n]={});for(const[a,c]of r.entries())o[n][a]=c}t[e]=o}return JSON.stringify(t)}getRelationsMapFromJSON(t){const e=JSON.parse(t),i=new Map;for(const o in e){const n=e[o],r=new Map;for(const a in n)r.set(Number(a),n[a]);i.set(Number(o),r)}return i}dispose(){this.relationMaps={},this.components.get(ot).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(De.uuid),this.onDisposed.reset()}getElementsChildren(t,e,i=new Set){if(i.add(e),this.relationMaps[t.uuid]===void 0)throw new Error("The provided model has no indices. You have to generate them first.");const n=this.getEntityRelations(t,e,"IsDecomposedBy");if(n)for(const a of n)this.getElementsChildren(t,a,i);const r=this.getEntityRelations(t,e,"ContainsElements");if(r)for(const a of r)this.getElementsChildren(t,a,i);return i}};I(De,"uuid","23a889ab-83b3-44a4-8bee-ead83438370b");let le=De;const As=class As extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onFragmentsLoaded",new D);I(this,"onFragmentsDisposed",new D);I(this,"list",new Map);I(this,"groups",new Map);I(this,"baseCoordinationModel","");I(this,"enabled",!0);I(this,"_loader",new In.Serializer);this.components.add(As.uuid,this)}get meshes(){const t=[];for(const[e,i]of this.list)t.push(i.mesh);return t}dispose(){for(const[t,e]of this.groups)e.dispose(!0);this.baseCoordinationModel="",this.groups.clear(),this.list.clear(),this.onFragmentsLoaded.reset(),this.onFragmentsDisposed.reset(),this.onDisposed.trigger(),this.onDisposed.reset()}disposeGroup(t){const{uuid:e}=t,i=[];for(const o of t.items)i.push(o.id),this.list.delete(o.id);t.dispose(!0),this.groups.delete(t.uuid),this.onFragmentsDisposed.trigger({groupID:e,fragmentIDs:i})}load(t,e){const o={...{coordinate:!0},...e},{coordinate:n,name:r,properties:a,relationsMap:c}=o,h=this._loader.import(t);r&&(h.name=r);for(const d of h.items)d.group=h,this.list.set(d.id,d);return n&&this.coordinate([h]),this.groups.set(h.uuid,h),a&&h.setLocalProperties(a),c&&this.components.get(le).setRelationMap(h,c),this.onFragmentsLoaded.trigger(h),h}export(t){return this._loader.export(t)}getModelIdMap(t){const e={};for(const i in t){const o=this.list.get(i);if(!(o&&o.group))continue;const n=o.group;n.uuid in e||(e[n.uuid]=new Set);const r=t[i];for(const a of r)e[n.uuid].add(a)}return e}modelIdToFragmentIdMap(t){let e={};for(const i in t){const o=this.groups.get(i);if(!o)continue;const n=t[i],r=o.getFragmentMap(n);e={...e,...r}}return e}coordinate(t=Array.from(this.groups.values())){if(this.baseCoordinationModel.length===0){const o=t.pop();if(!o)return;this.baseCoordinationModel=o.uuid}if(!t.length)return;const i=this.groups.get(this.baseCoordinationModel);if(!i){console.log("No base model found for coordination!");return}for(const o of t)o!==i&&(o.position.set(0,0,0),o.rotation.set(0,0,0),o.scale.set(1,1,1),o.updateMatrix(),o.applyMatrix4(o.coordinationMatrix.clone().invert()),o.applyMatrix4(i.coordinationMatrix))}};I(As,"uuid","fef46874-46a3-461b-8c44-2922ab77c806");let ot=As;const Tt=class Tt extends ${constructor(t){super(t);I(this,"enabled",!0);I(this,"onDisposed",new D);I(this,"_absoluteMin");I(this,"_absoluteMax");I(this,"_meshes",[]);this.components.add(Tt.uuid,this),this._absoluteMin=Tt.newBound(!0),this._absoluteMax=Tt.newBound(!1)}static getDimensions(t){const{min:e,max:i}=t,o=Math.abs(i.x-e.x),n=Math.abs(i.y-e.y),r=Math.abs(i.z-e.z),a=new S.Vector3;return a.subVectors(i,e).divideScalar(2).add(e),{width:o,height:n,depth:r,center:a}}static newBound(t){const e=t?1:-1;return new S.Vector3(e*Number.MAX_VALUE,e*Number.MAX_VALUE,e*Number.MAX_VALUE)}static getBounds(t,e,i){const o=i||this.newBound(!1),n=e||this.newBound(!0);for(const r of t)r.x<n.x&&(n.x=r.x),r.y<n.y&&(n.y=r.y),r.z<n.z&&(n.z=r.z),r.x>o.x&&(o.x=r.x),r.y>o.y&&(o.y=r.y),r.z>o.z&&(o.z=r.z);return new S.Box3(e,i)}dispose(){const t=this.components.get(_t);for(const e of this._meshes)t.destroy(e);this._meshes=[],this.onDisposed.trigger(Tt.uuid),this.onDisposed.reset()}get(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone();return new S.Box3(t,e)}getSphere(){const t=this._absoluteMin.clone(),e=this._absoluteMax.clone(),i=Math.abs((e.x-t.x)/2),o=Math.abs((e.y-t.y)/2),n=Math.abs((e.z-t.z)/2),r=new S.Vector3(t.x+i,t.y+o,t.z+n),a=r.distanceTo(t);return new S.Sphere(r,a)}getMesh(){const t=new S.Box3(this._absoluteMin,this._absoluteMax),e=Tt.getDimensions(t),{width:i,height:o,depth:n,center:r}=e,a=new S.BoxGeometry(i,o,n),c=new S.Mesh(a);return this._meshes.push(c),c.position.copy(r),c}reset(){this._absoluteMin=Tt.newBound(!0),this._absoluteMax=Tt.newBound(!1)}add(t){for(const e of t.items)this.addMesh(e.mesh)}addMesh(t,e){if(!t.geometry.index)return;const i=Tt.getFragmentBounds(t);t.updateMatrixWorld();const o=t.matrixWorld,n=new S.Matrix4,r=t instanceof S.InstancedMesh,a=new Set;if(e&&t instanceof Dt.FragmentMesh)for(const c of e){const h=t.fragment.getInstancesIDs(c);if(h)for(const d of h)a.add(d)}else a.add(0);for(const c of a){const h=i.min.clone(),d=i.max.clone();r&&(t.getMatrixAt(c,n),h.applyMatrix4(n),d.applyMatrix4(n)),h.applyMatrix4(o),d.applyMatrix4(o),h.x<this._absoluteMin.x&&(this._absoluteMin.x=h.x),h.y<this._absoluteMin.y&&(this._absoluteMin.y=h.y),h.z<this._absoluteMin.z&&(this._absoluteMin.z=h.z),h.x>this._absoluteMax.x&&(this._absoluteMax.x=h.x),h.y>this._absoluteMax.y&&(this._absoluteMax.y=h.y),h.z>this._absoluteMax.z&&(this._absoluteMax.z=h.z),d.x>this._absoluteMax.x&&(this._absoluteMax.x=d.x),d.y>this._absoluteMax.y&&(this._absoluteMax.y=d.y),d.z>this._absoluteMax.z&&(this._absoluteMax.z=d.z),d.x<this._absoluteMin.x&&(this._absoluteMin.x=d.x),d.y<this._absoluteMin.y&&(this._absoluteMin.y=d.y),d.z<this._absoluteMin.z&&(this._absoluteMin.z=d.z)}}addFragmentIdMap(t){const e=this.components.get(ot);for(const i in t){const o=e.list.get(i);if(!o)continue;const n=t[i];this.addMesh(o.mesh,n)}}static getFragmentBounds(t){const e=t.geometry.attributes.position,i=Number.MAX_VALUE,o=-i,n=new S.Vector3(i,i,i),r=new S.Vector3(o,o,o);if(!t.geometry.index)throw new Error("Geometry must be indexed!");const a=Array.from(t.geometry.index.array);for(let c=0;c<a.length;c++){if(c%3===0&&a[c]===0&&a[c+1]===0&&a[c+2]===0){c+=2;continue}const h=a[c],d=e.getX(h),E=e.getY(h),u=e.getZ(h);d<n.x&&(n.x=d),E<n.y&&(n.y=E),u<n.z&&(n.z=u),d>r.x&&(r.x=d),E>r.y&&(r.y=E),u>r.z&&(r.z=u)}return new S.Box3(n,r)}};I(Tt,"uuid","d1444724-dba6-4cdd-a0c7-68ee1450d166");let Ci=Tt;const Ni=new Set([1123145078,574549367,1675464909,2059837836,3798115385,32440307,3125803723,3207858831,2740243338,2624227202,4240577450,3615266464,3724593414,220341763,477187591,1878645084,1300840506,3303107099,1607154358,1878645084,846575682,1351298697,2417041796,3049322572,3331915920,1416205885,776857604,3285139300,3958052878,2827736869,2732653382,673634403,3448662350,4142052618,2924175390,803316827,2556980723,1809719519,2205249479,807026263,3737207727,1660063152,2347385850,2705031697,3732776249,2485617015,2611217952,1704287377,2937912522,2770003689,1281925730,1484403080,3448662350,4142052618,3800577675,4006246654,3590301190,1383045692,2775532180,2047409740,370225590,3593883385,2665983363,4124623270,812098782,3649129432,987898635,1105321065,3510044353,1635779807,2603310189,3406155212,1310608509,4261334040,2736907675,3649129432,1136057603,1260505505,4182860854,2713105998,2898889636,59481748,3749851601,3486308946,3150382593,1062206242,3264961684,15328376,1485152156,370225590,1981873012,2859738748,45288368,2614616156,2732653382,775493141,2147822146,2601014836,2629017746,1186437898,2367409068,1213902940,3632507154,3900360178,476780140,1472233963,2804161546,3008276851,738692330,374418227,315944413,3905492369,3570813810,2571569899,178912537,2294589976,1437953363,2133299955,572779678,3092502836,388784114,2624227202,1425443689,3057273783,2347385850,1682466193,2519244187,2839578677,3958567839,2513912981,2830218821,427810014]),Fs=class Fs extends ${constructor(t){super(t);I(this,"enabled",!0);t.add(Fs.uuid,this)}async export(t,e,i=!1,o=!0){const n={},r=new Set(t.GetIfcEntityList(e)),a=new Set([b.IFCPROJECT,b.IFCSITE,b.IFCBUILDING,b.IFCBUILDINGSTOREY,b.IFCSPACE]);for(const c of a)r.add(c);for(const c of r){if(Ni.has(c))continue;const h=a.has(c)&&o,d=t.GetLineIDsWithType(e,c);for(const E of d){const u=t.GetLine(0,E,h,i);n[u.expressID]=u}}return n}};I(Fs,"uuid","b32c4332-cd67-436e-ba7f-196646c7a635");let us=Fs;const Bn={103090709:"IFCPROJECT",4097777520:"IFCSITE",4031249490:"IFCBUILDING",3124254112:"IFCBUILDINGSTOREY",3856911033:"IFCSPACE",1674181508:"IFCANNOTATION",25142252:"IFCCONTROLLER",32344328:"IFCBOILER",76236018:"IFCLAMP",90941305:"IFCPUMP",177149247:"IFCAIRTERMINALBOX",182646315:"IFCFLOWINSTRUMENT",263784265:"IFCFURNISHINGELEMENT",264262732:"IFCELECTRICGENERATOR",277319702:"IFCAUDIOVISUALAPPLIANCE",310824031:"IFCPIPEFITTING",331165859:"IFCSTAIR",342316401:"IFCDUCTFITTING",377706215:"IFCMECHANICALFASTENER",395920057:"IFCDOOR",402227799:"IFCELECTRICMOTOR",413509423:"IFCSYSTEMFURNITUREELEMENT",484807127:"IFCEVAPORATOR",486154966:"IFCWINDOWSTANDARDCASE",629592764:"IFCLIGHTFIXTURE",630975310:"IFCUNITARYCONTROLELEMENT",635142910:"IFCCABLECARRIERFITTING",639361253:"IFCCOIL",647756555:"IFCFASTENER",707683696:"IFCFLOWSTORAGEDEVICE",738039164:"IFCPROTECTIVEDEVICE",753842376:"IFCBEAM",812556717:"IFCTANK",819412036:"IFCFILTER",843113511:"IFCCOLUMN",862014818:"IFCELECTRICDISTRIBUTIONBOARD",900683007:"IFCFOOTING",905975707:"IFCCOLUMNSTANDARDCASE",926996030:"IFCVOIDINGFEATURE",979691226:"IFCREINFORCINGBAR",987401354:"IFCFLOWSEGMENT",1003880860:"IFCELECTRICTIMECONTROL",1051757585:"IFCCABLEFITTING",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1073191201:"IFCMEMBER",1095909175:"IFCBUILDINGELEMENTPROXY",1156407060:"IFCPLATESTANDARDCASE",1162798199:"IFCSWITCHINGDEVICE",1329646415:"IFCSHADINGDEVICE",1335981549:"IFCDISCRETEACCESSORY",1360408905:"IFCDUCTSILENCER",1404847402:"IFCSTACKTERMINAL",1426591983:"IFCFIRESUPPRESSIONTERMINAL",1437502449:"IFCMEDICALDEVICE",1509553395:"IFCFURNITURE",1529196076:"IFCSLAB",1620046519:"IFCTRANSPORTELEMENT",1634111441:"IFCAIRTERMINAL",1658829314:"IFCENERGYCONVERSIONDEVICE",1677625105:"IFCCIVILELEMENT",1687234759:"IFCPILE",1904799276:"IFCELECTRICAPPLIANCE",1911478936:"IFCMEMBERSTANDARDCASE",1945004755:"IFCDISTRIBUTIONELEMENT",1973544240:"IFCCOVERING",1999602285:"IFCSPACEHEATER",2016517767:"IFCROOF",2056796094:"IFCAIRTOAIRHEATRECOVERY",2058353004:"IFCFLOWCONTROLLER",2068733104:"IFCHUMIDIFIER",2176052936:"IFCJUNCTIONBOX",2188021234:"IFCFLOWMETER",2223149337:"IFCFLOWTERMINAL",2262370178:"IFCRAILING",2272882330:"IFCCONDENSER",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",2320036040:"IFCREINFORCINGMESH",2347447852:"IFCTENDONANCHOR",2391383451:"IFCVIBRATIONISOLATOR",2391406946:"IFCWALL",2474470126:"IFCMOTORCONNECTION",2769231204:"IFCVIRTUALELEMENT",2814081492:"IFCENGINE",2906023776:"IFCBEAMSTANDARDCASE",2938176219:"IFCBURNER",2979338954:"IFCBUILDINGELEMENTPART",3024970846:"IFCRAMP",3026737570:"IFCTUBEBUNDLE",3027962421:"IFCSLABSTANDARDCASE",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",3053780830:"IFCSANITARYTERMINAL",3079942009:"IFCOPENINGSTANDARDCASE",3087945054:"IFCALARM",3101698114:"IFCSURFACEFEATURE",3127900445:"IFCSLABELEMENTEDCASE",3132237377:"IFCFLOWMOVINGDEVICE",3171933400:"IFCPLATE",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",3242481149:"IFCDOORSTANDARDCASE",3283111854:"IFCRAMPFLIGHT",3296154744:"IFCCHIMNEY",3304561284:"IFCWINDOW",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",3319311131:"IFCHEATEXCHANGER",3415622556:"IFCFAN",3420628829:"IFCSOLARDEVICE",3493046030:"IFCGEOGRAPHICELEMENT",3495092785:"IFCCURTAINWALL",3508470533:"IFCFLOWTREATMENTDEVICE",3512223829:"IFCWALLSTANDARDCASE",3518393246:"IFCDUCTSEGMENT",3571504051:"IFCCOMPRESSOR",3588315303:"IFCOPENINGELEMENT",3612865200:"IFCPIPESEGMENT",3640358203:"IFCCOOLINGTOWER",3651124850:"IFCPROJECTIONELEMENT",3694346114:"IFCOUTLET",3747195512:"IFCEVAPORATIVECOOLER",3758799889:"IFCCABLECARRIERSEGMENT",3824725483:"IFCTENDON",3825984169:"IFCTRANSFORMER",3902619387:"IFCCHILLER",4074379575:"IFCDAMPER",4086658281:"IFCSENSOR",4123344466:"IFCELEMENTASSEMBLY",4136498852:"IFCCOOLEDBEAM",4156078855:"IFCWALLELEMENTEDCASE",4175244083:"IFCINTERCEPTOR",4207607924:"IFCVALVE",4217484030:"IFCCABLESEGMENT",4237592921:"IFCWASTETERMINAL",4252922144:"IFCSTAIRFLIGHT",4278956645:"IFCFLOWFITTING",4288193352:"IFCACTUATOR",4292641817:"IFCUNITARYEQUIPMENT",3009204131:"IFCGRID"};class Pr{getAll(s,t){const e={},i=Object.keys(Bn).map(o=>parseInt(o,10));for(let o=0;o<i.length;o++){const n=i[o],r=s.GetLineIDsWithType(t,n),a=r.size();for(let c=0;c<a;c++)e[r.get(c)]=n}return e}}const yi={950732822:"IFCURIREFERENCE",4075327185:"IFCTIME",1209108979:"IFCTEMPERATURERATEOFCHANGEMEASURE",3457685358:"IFCSOUNDPRESSURELEVELMEASURE",4157543285:"IFCSOUNDPOWERLEVELMEASURE",2798247006:"IFCPROPERTYSETDEFINITIONSET",1790229001:"IFCPOSITIVEINTEGER",525895558:"IFCNONNEGATIVELENGTHMEASURE",1774176899:"IFCLINEINDEX",1275358634:"IFCLANGUAGEID",2541165894:"IFCDURATION",3701338814:"IFCDAYINWEEKNUMBER",2195413836:"IFCDATETIME",937566702:"IFCDATE",1683019596:"IFCCARDINALPOINTREFERENCE",2314439260:"IFCBINARY",1500781891:"IFCAREADENSITYMEASURE",3683503648:"IFCARCINDEX",4065007721:"IFCYEARNUMBER",1718600412:"IFCWARPINGMOMENTMEASURE",51269191:"IFCWARPINGCONSTANTMEASURE",2593997549:"IFCVOLUMETRICFLOWRATEMEASURE",3458127941:"IFCVOLUMEMEASURE",3345633955:"IFCVAPORPERMEABILITYMEASURE",1278329552:"IFCTORQUEMEASURE",2591213694:"IFCTIMESTAMP",2726807636:"IFCTIMEMEASURE",743184107:"IFCTHERMODYNAMICTEMPERATUREMEASURE",2016195849:"IFCTHERMALTRANSMITTANCEMEASURE",857959152:"IFCTHERMALRESISTANCEMEASURE",2281867870:"IFCTHERMALEXPANSIONCOEFFICIENTMEASURE",2645777649:"IFCTHERMALCONDUCTIVITYMEASURE",232962298:"IFCTHERMALADMITTANCEMEASURE",296282323:"IFCTEXTTRANSFORMATION",603696268:"IFCTEXTFONTNAME",3490877962:"IFCTEXTDECORATION",1460886941:"IFCTEXTALIGNMENT",2801250643:"IFCTEXT",58845555:"IFCTEMPERATUREGRADIENTMEASURE",361837227:"IFCSPECULARROUGHNESS",2757832317:"IFCSPECULAREXPONENT",3477203348:"IFCSPECIFICHEATCAPACITYMEASURE",993287707:"IFCSOUNDPRESSUREMEASURE",846465480:"IFCSOUNDPOWERMEASURE",3471399674:"IFCSOLIDANGLEMEASURE",408310005:"IFCSHEARMODULUSMEASURE",2190458107:"IFCSECTIONALAREAINTEGRALMEASURE",3467162246:"IFCSECTIONMODULUSMEASURE",2766185779:"IFCSECONDINMINUTE",3211557302:"IFCROTATIONALSTIFFNESSMEASURE",1755127002:"IFCROTATIONALMASSMEASURE",2133746277:"IFCROTATIONALFREQUENCYMEASURE",200335297:"IFCREAL",96294661:"IFCRATIOMEASURE",3972513137:"IFCRADIOACTIVITYMEASURE",3665567075:"IFCPRESSUREMEASURE",2169031380:"IFCPRESENTABLETEXT",1364037233:"IFCPOWERMEASURE",1245737093:"IFCPOSITIVERATIOMEASURE",3054510233:"IFCPOSITIVEPLANEANGLEMEASURE",2815919920:"IFCPOSITIVELENGTHMEASURE",4042175685:"IFCPLANEANGLEMEASURE",2642773653:"IFCPLANARFORCEMEASURE",2260317790:"IFCPARAMETERVALUE",929793134:"IFCPHMEASURE",2395907400:"IFCNUMERICMEASURE",2095195183:"IFCNORMALISEDRATIOMEASURE",765770214:"IFCMONTHINYEARNUMBER",2615040989:"IFCMONETARYMEASURE",3114022597:"IFCMOMENTOFINERTIAMEASURE",1648970520:"IFCMOLECULARWEIGHTMEASURE",3177669450:"IFCMOISTUREDIFFUSIVITYMEASURE",1753493141:"IFCMODULUSOFSUBGRADEREACTIONMEASURE",1052454078:"IFCMODULUSOFROTATIONALSUBGRADEREACTIONMEASURE",2173214787:"IFCMODULUSOFLINEARSUBGRADEREACTIONMEASURE",3341486342:"IFCMODULUSOFELASTICITYMEASURE",102610177:"IFCMINUTEINHOUR",3531705166:"IFCMASSPERLENGTHMEASURE",3124614049:"IFCMASSMEASURE",4017473158:"IFCMASSFLOWRATEMEASURE",1477762836:"IFCMASSDENSITYMEASURE",2486716878:"IFCMAGNETICFLUXMEASURE",286949696:"IFCMAGNETICFLUXDENSITYMEASURE",151039812:"IFCLUMINOUSINTENSITYMEASURE",2755797622:"IFCLUMINOUSINTENSITYDISTRIBUTIONMEASURE",2095003142:"IFCLUMINOUSFLUXMEASURE",503418787:"IFCLOGICAL",3086160713:"IFCLINEARVELOCITYMEASURE",1307019551:"IFCLINEARSTIFFNESSMEASURE",2128979029:"IFCLINEARMOMENTMEASURE",191860431:"IFCLINEARFORCEMEASURE",1243674935:"IFCLENGTHMEASURE",3258342251:"IFCLABEL",2054016361:"IFCKINEMATICVISCOSITYMEASURE",3192672207:"IFCISOTHERMALMOISTURECAPACITYMEASURE",3686016028:"IFCIONCONCENTRATIONMEASURE",3809634241:"IFCINTEGERCOUNTRATEMEASURE",1939436016:"IFCINTEGER",2679005408:"IFCINDUCTANCEMEASURE",3358199106:"IFCILLUMINANCEMEASURE",983778844:"IFCIDENTIFIER",2589826445:"IFCHOURINDAY",1158859006:"IFCHEATINGVALUEMEASURE",3113092358:"IFCHEATFLUXDENSITYMEASURE",3064340077:"IFCGLOBALLYUNIQUEID",3044325142:"IFCFREQUENCYMEASURE",1361398929:"IFCFORCEMEASURE",2590844177:"IFCFONTWEIGHT",2715512545:"IFCFONTVARIANT",1102727119:"IFCFONTSTYLE",2078135608:"IFCENERGYMEASURE",2506197118:"IFCELECTRICVOLTAGEMEASURE",2951915441:"IFCELECTRICRESISTANCEMEASURE",3790457270:"IFCELECTRICCURRENTMEASURE",2093906313:"IFCELECTRICCONDUCTANCEMEASURE",3818826038:"IFCELECTRICCHARGEMEASURE",1827137117:"IFCELECTRICCAPACITANCEMEASURE",69416015:"IFCDYNAMICVISCOSITYMEASURE",524656162:"IFCDOSEEQUIVALENTMEASURE",4134073009:"IFCDIMENSIONCOUNT",1514641115:"IFCDESCRIPTIVEMEASURE",300323983:"IFCDAYLIGHTSAVINGHOUR",86635668:"IFCDAYINMONTHNUMBER",94842927:"IFCCURVATUREMEASURE",1778710042:"IFCCOUNTMEASURE",3238673880:"IFCCONTEXTDEPENDENTMEASURE",3812528620:"IFCCOMPOUNDPLANEANGLEMEASURE",2991860651:"IFCCOMPLEXNUMBER",1867003952:"IFCBOXALIGNMENT",2735952531:"IFCBOOLEAN",2650437152:"IFCAREAMEASURE",632304761:"IFCANGULARVELOCITYMEASURE",360377573:"IFCAMOUNTOFSUBSTANCEMEASURE",4182062534:"IFCACCELERATIONMEASURE",3699917729:"IFCABSORBEDDOSEMEASURE",1971632696:"IFCGEOSLICE",2680139844:"IFCGEOMODEL",24726584:"IFCELECTRICFLOWTREATMENTDEVICE",3693000487:"IFCDISTRIBUTIONBOARD",3460952963:"IFCCONVEYORSEGMENT",3999819293:"IFCCAISSONFOUNDATION",3314249567:"IFCBOREHOLE",4196446775:"IFCBEARING",325726236:"IFCALIGNMENT",3425753595:"IFCTRACKELEMENT",991950508:"IFCSIGNAL",3798194928:"IFCREINFORCEDSOIL",3290496277:"IFCRAIL",1383356374:"IFCPAVEMENT",2182337498:"IFCNAVIGATIONELEMENT",234836483:"IFCMOORINGDEVICE",2078563270:"IFCMOBILETELECOMMUNICATIONSAPPLIANCE",1638804497:"IFCLIQUIDTERMINAL",1154579445:"IFCLINEARPOSITIONINGELEMENT",2696325953:"IFCKERB",2713699986:"IFCGEOTECHNICALASSEMBLY",2142170206:"IFCELECTRICFLOWTREATMENTDEVICETYPE",3376911765:"IFCEARTHWORKSFILL",1077100507:"IFCEARTHWORKSELEMENT",3071239417:"IFCEARTHWORKSCUT",479945903:"IFCDISTRIBUTIONBOARDTYPE",3426335179:"IFCDEEPFOUNDATION",1502416096:"IFCCOURSE",2940368186:"IFCCONVEYORSEGMENTTYPE",3203706013:"IFCCAISSONFOUNDATIONTYPE",3862327254:"IFCBUILTSYSTEM",1876633798:"IFCBUILTELEMENT",963979645:"IFCBRIDGEPART",644574406:"IFCBRIDGE",3649138523:"IFCBEARINGTYPE",1662888072:"IFCALIGNMENTVERTICAL",317615605:"IFCALIGNMENTSEGMENT",1545765605:"IFCALIGNMENTHORIZONTAL",4266260250:"IFCALIGNMENTCANT",3956297820:"IFCVIBRATIONDAMPERTYPE",1530820697:"IFCVIBRATIONDAMPER",840318589:"IFCVEHICLE",1953115116:"IFCTRANSPORTATIONDEVICE",618700268:"IFCTRACKELEMENTTYPE",2281632017:"IFCTENDONCONDUITTYPE",3663046924:"IFCTENDONCONDUIT",42703149:"IFCSINESPIRAL",1894708472:"IFCSIGNALTYPE",3599934289:"IFCSIGNTYPE",33720170:"IFCSIGN",1027922057:"IFCSEVENTHORDERPOLYNOMIALSPIRAL",544395925:"IFCSEGMENTEDREFERENCECURVE",3649235739:"IFCSECONDORDERPOLYNOMIALSPIRAL",550521510:"IFCROADPART",146592293:"IFCROAD",3818125796:"IFCRELADHERESTOELEMENT",4021432810:"IFCREFERENT",1891881377:"IFCRAILWAYPART",3992365140:"IFCRAILWAY",1763565496:"IFCRAILTYPE",1946335990:"IFCPOSITIONINGELEMENT",514975943:"IFCPAVEMENTTYPE",506776471:"IFCNAVIGATIONELEMENTTYPE",710110818:"IFCMOORINGDEVICETYPE",1950438474:"IFCMOBILETELECOMMUNICATIONSAPPLIANCETYPE",976884017:"IFCMARINEPART",525669439:"IFCMARINEFACILITY",1770583370:"IFCLIQUIDTERMINALTYPE",2176059722:"IFCLINEARELEMENT",679976338:"IFCKERBTYPE",3948183225:"IFCIMPACTPROTECTIONDEVICETYPE",2568555532:"IFCIMPACTPROTECTIONDEVICE",2898700619:"IFCGRADIENTCURVE",1594536857:"IFCGEOTECHNICALSTRATUM",4230923436:"IFCGEOTECHNICALELEMENT",4228831410:"IFCFACILITYPARTCOMMON",1310830890:"IFCFACILITYPART",24185140:"IFCFACILITY",4234616927:"IFCDIRECTRIXDERIVEDREFERENCESWEPTAREASOLID",1306400036:"IFCDEEPFOUNDATIONTYPE",4189326743:"IFCCOURSETYPE",2000195564:"IFCCOSINESPIRAL",3497074424:"IFCCLOTHOID",1626504194:"IFCBUILTELEMENTTYPE",3651464721:"IFCVEHICLETYPE",1229763772:"IFCTRIANGULATEDIRREGULARNETWORK",3665877780:"IFCTRANSPORTATIONDEVICETYPE",782932809:"IFCTHIRDORDERPOLYNOMIALSPIRAL",2735484536:"IFCSPIRAL",1356537516:"IFCSECTIONEDSURFACE",1290935644:"IFCSECTIONEDSOLIDHORIZONTAL",1862484736:"IFCSECTIONEDSOLID",1441486842:"IFCRELPOSITIONS",1033248425:"IFCRELASSOCIATESPROFILEDEF",3381221214:"IFCPOLYNOMIALCURVE",2485787929:"IFCOFFSETCURVEBYDISTANCES",590820931:"IFCOFFSETCURVE",3465909080:"IFCINDEXEDPOLYGONALTEXTUREMAP",593015953:"IFCDIRECTRIXCURVESWEPTAREASOLID",4212018352:"IFCCURVESEGMENT",3425423356:"IFCAXIS2PLACEMENTLINEAR",823603102:"IFCSEGMENT",2165702409:"IFCPOINTBYDISTANCEEXPRESSION",182550632:"IFCOPENCROSSPROFILEDEF",388784114:"IFCLINEARPLACEMENT",536804194:"IFCALIGNMENTHORIZONTALSEGMENT",3752311538:"IFCALIGNMENTCANTSEGMENT",1010789467:"IFCTEXTURECOORDINATEINDICESWITHVOIDS",222769930:"IFCTEXTURECOORDINATEINDICES",2691318326:"IFCQUANTITYNUMBER",3633395639:"IFCALIGNMENTVERTICALSEGMENT",2879124712:"IFCALIGNMENTPARAMETERSEGMENT",25142252:"IFCCONTROLLER",3087945054:"IFCALARM",4288193352:"IFCACTUATOR",630975310:"IFCUNITARYCONTROLELEMENT",4086658281:"IFCSENSOR",2295281155:"IFCPROTECTIVEDEVICETRIPPINGUNIT",182646315:"IFCFLOWINSTRUMENT",1426591983:"IFCFIRESUPPRESSIONTERMINAL",819412036:"IFCFILTER",3415622556:"IFCFAN",1003880860:"IFCELECTRICTIMECONTROL",402227799:"IFCELECTRICMOTOR",264262732:"IFCELECTRICGENERATOR",3310460725:"IFCELECTRICFLOWSTORAGEDEVICE",862014818:"IFCELECTRICDISTRIBUTIONBOARD",1904799276:"IFCELECTRICAPPLIANCE",1360408905:"IFCDUCTSILENCER",3518393246:"IFCDUCTSEGMENT",342316401:"IFCDUCTFITTING",562808652:"IFCDISTRIBUTIONCIRCUIT",4074379575:"IFCDAMPER",3640358203:"IFCCOOLINGTOWER",4136498852:"IFCCOOLEDBEAM",2272882330:"IFCCONDENSER",3571504051:"IFCCOMPRESSOR",3221913625:"IFCCOMMUNICATIONSAPPLIANCE",639361253:"IFCCOIL",3902619387:"IFCCHILLER",4217484030:"IFCCABLESEGMENT",1051757585:"IFCCABLEFITTING",3758799889:"IFCCABLECARRIERSEGMENT",635142910:"IFCCABLECARRIERFITTING",2938176219:"IFCBURNER",32344328:"IFCBOILER",2906023776:"IFCBEAMSTANDARDCASE",277319702:"IFCAUDIOVISUALAPPLIANCE",2056796094:"IFCAIRTOAIRHEATRECOVERY",177149247:"IFCAIRTERMINALBOX",1634111441:"IFCAIRTERMINAL",486154966:"IFCWINDOWSTANDARDCASE",4237592921:"IFCWASTETERMINAL",4156078855:"IFCWALLELEMENTEDCASE",4207607924:"IFCVALVE",4292641817:"IFCUNITARYEQUIPMENT",3179687236:"IFCUNITARYCONTROLELEMENTTYPE",3026737570:"IFCTUBEBUNDLE",3825984169:"IFCTRANSFORMER",812556717:"IFCTANK",1162798199:"IFCSWITCHINGDEVICE",385403989:"IFCSTRUCTURALLOADCASE",1404847402:"IFCSTACKTERMINAL",1999602285:"IFCSPACEHEATER",3420628829:"IFCSOLARDEVICE",3027962421:"IFCSLABSTANDARDCASE",3127900445:"IFCSLABELEMENTEDCASE",1329646415:"IFCSHADINGDEVICE",3053780830:"IFCSANITARYTERMINAL",2572171363:"IFCREINFORCINGBARTYPE",1232101972:"IFCRATIONALBSPLINECURVEWITHKNOTS",90941305:"IFCPUMP",655969474:"IFCPROTECTIVEDEVICETRIPPINGUNITTYPE",738039164:"IFCPROTECTIVEDEVICE",1156407060:"IFCPLATESTANDARDCASE",3612865200:"IFCPIPESEGMENT",310824031:"IFCPIPEFITTING",3694346114:"IFCOUTLET",144952367:"IFCOUTERBOUNDARYCURVE",2474470126:"IFCMOTORCONNECTION",1911478936:"IFCMEMBERSTANDARDCASE",1437502449:"IFCMEDICALDEVICE",629592764:"IFCLIGHTFIXTURE",76236018:"IFCLAMP",2176052936:"IFCJUNCTIONBOX",4175244083:"IFCINTERCEPTOR",2068733104:"IFCHUMIDIFIER",3319311131:"IFCHEATEXCHANGER",2188021234:"IFCFLOWMETER",1209101575:"IFCEXTERNALSPATIALELEMENT",484807127:"IFCEVAPORATOR",3747195512:"IFCEVAPORATIVECOOLER",2814081492:"IFCENGINE",2417008758:"IFCELECTRICDISTRIBUTIONBOARDTYPE",3242481149:"IFCDOORSTANDARDCASE",3205830791:"IFCDISTRIBUTIONSYSTEM",400855858:"IFCCOMMUNICATIONSAPPLIANCETYPE",905975707:"IFCCOLUMNSTANDARDCASE",1677625105:"IFCCIVILELEMENT",3296154744:"IFCCHIMNEY",2674252688:"IFCCABLEFITTINGTYPE",2188180465:"IFCBURNERTYPE",1177604601:"IFCBUILDINGSYSTEM",39481116:"IFCBUILDINGELEMENTPARTTYPE",1136057603:"IFCBOUNDARYCURVE",2461110595:"IFCBSPLINECURVEWITHKNOTS",1532957894:"IFCAUDIOVISUALAPPLIANCETYPE",4088093105:"IFCWORKCALENDAR",4009809668:"IFCWINDOWTYPE",926996030:"IFCVOIDINGFEATURE",2391383451:"IFCVIBRATIONISOLATOR",2415094496:"IFCTENDONTYPE",3081323446:"IFCTENDONANCHORTYPE",413509423:"IFCSYSTEMFURNITUREELEMENT",3101698114:"IFCSURFACEFEATURE",3657597509:"IFCSTRUCTURALSURFACEACTION",2757150158:"IFCSTRUCTURALCURVEREACTION",1004757350:"IFCSTRUCTURALCURVEACTION",338393293:"IFCSTAIRTYPE",1072016465:"IFCSOLARDEVICETYPE",4074543187:"IFCSHADINGDEVICETYPE",2157484638:"IFCSEAMCURVE",2781568857:"IFCROOFTYPE",2310774935:"IFCREINFORCINGMESHTYPE",964333572:"IFCREINFORCINGELEMENTTYPE",683857671:"IFCRATIONALBSPLINESURFACEWITHKNOTS",1469900589:"IFCRAMPTYPE",2839578677:"IFCPOLYGONALFACESET",1158309216:"IFCPILETYPE",3079942009:"IFCOPENINGSTANDARDCASE",1114901282:"IFCMEDICALDEVICETYPE",3113134337:"IFCINTERSECTIONCURVE",3946677679:"IFCINTERCEPTORTYPE",2571569899:"IFCINDEXEDPOLYCURVE",3493046030:"IFCGEOGRAPHICELEMENT",1509553395:"IFCFURNITURE",1893162501:"IFCFOOTINGTYPE",2853485674:"IFCEXTERNALSPATIALSTRUCTUREELEMENT",4148101412:"IFCEVENT",132023988:"IFCENGINETYPE",2397081782:"IFCELEMENTASSEMBLYTYPE",2323601079:"IFCDOORTYPE",1213902940:"IFCCYLINDRICALSURFACE",1525564444:"IFCCONSTRUCTIONPRODUCTRESOURCETYPE",4105962743:"IFCCONSTRUCTIONMATERIALRESOURCETYPE",2185764099:"IFCCONSTRUCTIONEQUIPMENTRESOURCETYPE",15328376:"IFCCOMPOSITECURVEONSURFACE",3875453745:"IFCCOMPLEXPROPERTYTEMPLATE",3893394355:"IFCCIVILELEMENTTYPE",2197970202:"IFCCHIMNEYTYPE",167062518:"IFCBSPLINESURFACEWITHKNOTS",2887950389:"IFCBSPLINESURFACE",2603310189:"IFCADVANCEDBREPWITHVOIDS",1635779807:"IFCADVANCEDBREP",2916149573:"IFCTRIANGULATEDFACESET",1935646853:"IFCTOROIDALSURFACE",2387106220:"IFCTESSELLATEDFACESET",3206491090:"IFCTASKTYPE",699246055:"IFCSURFACECURVE",4095615324:"IFCSUBCONTRACTRESOURCETYPE",603775116:"IFCSTRUCTURALSURFACEREACTION",4015995234:"IFCSPHERICALSURFACE",2481509218:"IFCSPATIALZONETYPE",463610769:"IFCSPATIALZONE",710998568:"IFCSPATIALELEMENTTYPE",1412071761:"IFCSPATIALELEMENT",3663146110:"IFCSIMPLEPROPERTYTEMPLATE",3243963512:"IFCREVOLVEDAREASOLIDTAPERED",816062949:"IFCREPARAMETRISEDCOMPOSITECURVESEGMENT",1521410863:"IFCRELSPACEBOUNDARY2NDLEVEL",3523091289:"IFCRELSPACEBOUNDARY1STLEVEL",427948657:"IFCRELINTERFERESELEMENTS",307848117:"IFCRELDEFINESBYTEMPLATE",1462361463:"IFCRELDEFINESBYOBJECT",2565941209:"IFCRELDECLARES",1027710054:"IFCRELASSIGNSTOGROUPBYFACTOR",3521284610:"IFCPROPERTYTEMPLATE",492091185:"IFCPROPERTYSETTEMPLATE",653396225:"IFCPROJECTLIBRARY",569719735:"IFCPROCEDURETYPE",3967405729:"IFCPREDEFINEDPROPERTYSET",1682466193:"IFCPCURVE",428585644:"IFCLABORRESOURCETYPE",2294589976:"IFCINDEXEDPOLYGONALFACEWITHVOIDS",178912537:"IFCINDEXEDPOLYGONALFACE",4095422895:"IFCGEOGRAPHICELEMENTTYPE",2652556860:"IFCFIXEDREFERENCESWEPTAREASOLID",2804161546:"IFCEXTRUDEDAREASOLIDTAPERED",4024345920:"IFCEVENTTYPE",2629017746:"IFCCURVEBOUNDEDSURFACE",1815067380:"IFCCREWRESOURCETYPE",3419103109:"IFCCONTEXT",2574617495:"IFCCONSTRUCTIONRESOURCETYPE",2059837836:"IFCCARTESIANPOINTLIST3D",1675464909:"IFCCARTESIANPOINTLIST2D",574549367:"IFCCARTESIANPOINTLIST",3406155212:"IFCADVANCEDFACE",3698973494:"IFCTYPERESOURCE",3736923433:"IFCTYPEPROCESS",901063453:"IFCTESSELLATEDITEM",1096409881:"IFCSWEPTDISKSOLIDPOLYGONAL",1042787934:"IFCRESOURCETIME",1608871552:"IFCRESOURCECONSTRAINTRELATIONSHIP",2943643501:"IFCRESOURCEAPPROVALRELATIONSHIP",2090586900:"IFCQUANTITYSET",1482703590:"IFCPROPERTYTEMPLATEDEFINITION",3778827333:"IFCPREDEFINEDPROPERTIES",2998442950:"IFCMIRROREDPROFILEDEF",853536259:"IFCMATERIALRELATIONSHIP",3404854881:"IFCMATERIALPROFILESETUSAGETAPERING",3079605661:"IFCMATERIALPROFILESETUSAGE",2852063980:"IFCMATERIALCONSTITUENTSET",3708119e3:"IFCMATERIALCONSTITUENT",1585845231:"IFCLAGTIME",2133299955:"IFCINDEXEDTRIANGLETEXTUREMAP",1437953363:"IFCINDEXEDTEXTUREMAP",3570813810:"IFCINDEXEDCOLOURMAP",1437805879:"IFCEXTERNALREFERENCERELATIONSHIP",297599258:"IFCEXTENDEDPROPERTIES",211053100:"IFCEVENTTIME",2713554722:"IFCCONVERSIONBASEDUNITWITHOFFSET",3285139300:"IFCCOLOURRGBLIST",1236880293:"IFCWORKTIME",1199560280:"IFCTIMEPERIOD",3611470254:"IFCTEXTUREVERTEXLIST",2771591690:"IFCTASKTIMERECURRING",1549132990:"IFCTASKTIME",2043862942:"IFCTABLECOLUMN",2934153892:"IFCSURFACEREINFORCEMENTAREA",609421318:"IFCSTRUCTURALLOADORRESULT",3478079324:"IFCSTRUCTURALLOADCONFIGURATION",1054537805:"IFCSCHEDULINGTIME",2439245199:"IFCRESOURCELEVELRELATIONSHIP",2433181523:"IFCREFERENCE",3915482550:"IFCRECURRENCEPATTERN",986844984:"IFCPROPERTYABSTRACTION",3843373140:"IFCPROJECTEDCRS",677532197:"IFCPRESENTATIONITEM",1507914824:"IFCMATERIALUSAGEDEFINITION",552965576:"IFCMATERIALPROFILEWITHOFFSETS",164193824:"IFCMATERIALPROFILESET",2235152071:"IFCMATERIALPROFILE",1847252529:"IFCMATERIALLAYERWITHOFFSETS",760658860:"IFCMATERIALDEFINITION",3057273783:"IFCMAPCONVERSION",4294318154:"IFCEXTERNALINFORMATION",1466758467:"IFCCOORDINATEREFERENCESYSTEM",1785450214:"IFCCOORDINATEOPERATION",775493141:"IFCCONNECTIONVOLUMEGEOMETRY",979691226:"IFCREINFORCINGBAR",3700593921:"IFCELECTRICDISTRIBUTIONPOINT",1062813311:"IFCDISTRIBUTIONCONTROLELEMENT",1052013943:"IFCDISTRIBUTIONCHAMBERELEMENT",578613899:"IFCCONTROLLERTYPE",2454782716:"IFCCHAMFEREDGEFEATURE",753842376:"IFCBEAM",3001207471:"IFCALARMTYPE",2874132201:"IFCACTUATORTYPE",3304561284:"IFCWINDOW",3512223829:"IFCWALLSTANDARDCASE",2391406946:"IFCWALL",3313531582:"IFCVIBRATIONISOLATORTYPE",2347447852:"IFCTENDONANCHOR",3824725483:"IFCTENDON",2515109513:"IFCSTRUCTURALANALYSISMODEL",4252922144:"IFCSTAIRFLIGHT",331165859:"IFCSTAIR",1529196076:"IFCSLAB",1783015770:"IFCSENSORTYPE",1376911519:"IFCROUNDEDEDGEFEATURE",2016517767:"IFCROOF",2320036040:"IFCREINFORCINGMESH",3027567501:"IFCREINFORCINGELEMENT",3055160366:"IFCRATIONALBEZIERCURVE",3283111854:"IFCRAMPFLIGHT",3024970846:"IFCRAMP",2262370178:"IFCRAILING",3171933400:"IFCPLATE",1687234759:"IFCPILE",1073191201:"IFCMEMBER",900683007:"IFCFOOTING",3508470533:"IFCFLOWTREATMENTDEVICE",2223149337:"IFCFLOWTERMINAL",707683696:"IFCFLOWSTORAGEDEVICE",987401354:"IFCFLOWSEGMENT",3132237377:"IFCFLOWMOVINGDEVICE",4037862832:"IFCFLOWINSTRUMENTTYPE",4278956645:"IFCFLOWFITTING",2058353004:"IFCFLOWCONTROLLER",4222183408:"IFCFIRESUPPRESSIONTERMINALTYPE",1810631287:"IFCFILTERTYPE",346874300:"IFCFANTYPE",1658829314:"IFCENERGYCONVERSIONDEVICE",857184966:"IFCELECTRICALELEMENT",1634875225:"IFCELECTRICALCIRCUIT",712377611:"IFCELECTRICTIMECONTROLTYPE",1217240411:"IFCELECTRICMOTORTYPE",1365060375:"IFCELECTRICHEATERTYPE",1534661035:"IFCELECTRICGENERATORTYPE",3277789161:"IFCELECTRICFLOWSTORAGEDEVICETYPE",663422040:"IFCELECTRICAPPLIANCETYPE",855621170:"IFCEDGEFEATURE",2030761528:"IFCDUCTSILENCERTYPE",3760055223:"IFCDUCTSEGMENTTYPE",869906466:"IFCDUCTFITTINGTYPE",395920057:"IFCDOOR",3041715199:"IFCDISTRIBUTIONPORT",3040386961:"IFCDISTRIBUTIONFLOWELEMENT",1945004755:"IFCDISTRIBUTIONELEMENT",2063403501:"IFCDISTRIBUTIONCONTROLELEMENTTYPE",1599208980:"IFCDISTRIBUTIONCHAMBERELEMENTTYPE",2635815018:"IFCDISCRETEACCESSORYTYPE",1335981549:"IFCDISCRETEACCESSORY",4147604152:"IFCDIAMETERDIMENSION",3961806047:"IFCDAMPERTYPE",3495092785:"IFCCURTAINWALL",1973544240:"IFCCOVERING",2954562838:"IFCCOOLINGTOWERTYPE",335055490:"IFCCOOLEDBEAMTYPE",488727124:"IFCCONSTRUCTIONPRODUCTRESOURCE",1060000209:"IFCCONSTRUCTIONMATERIALRESOURCE",3898045240:"IFCCONSTRUCTIONEQUIPMENTRESOURCE",1163958913:"IFCCONDITIONCRITERION",2188551683:"IFCCONDITION",2816379211:"IFCCONDENSERTYPE",3850581409:"IFCCOMPRESSORTYPE",843113511:"IFCCOLUMN",2301859152:"IFCCOILTYPE",2611217952:"IFCCIRCLE",2951183804:"IFCCHILLERTYPE",1285652485:"IFCCABLESEGMENTTYPE",3293546465:"IFCCABLECARRIERSEGMENTTYPE",395041908:"IFCCABLECARRIERFITTINGTYPE",1909888760:"IFCBUILDINGELEMENTPROXYTYPE",1095909175:"IFCBUILDINGELEMENTPROXY",2979338954:"IFCBUILDINGELEMENTPART",52481810:"IFCBUILDINGELEMENTCOMPONENT",3299480353:"IFCBUILDINGELEMENT",231477066:"IFCBOILERTYPE",1916977116:"IFCBEZIERCURVE",819618141:"IFCBEAMTYPE",1967976161:"IFCBSPLINECURVE",3460190687:"IFCASSET",2470393545:"IFCANGULARDIMENSION",1871374353:"IFCAIRTOAIRHEATRECOVERYTYPE",3352864051:"IFCAIRTERMINALTYPE",1411407467:"IFCAIRTERMINALBOXTYPE",3821786052:"IFCACTIONREQUEST",1213861670:"IFC2DCOMPOSITECURVE",1033361043:"IFCZONE",3342526732:"IFCWORKSCHEDULE",4218914973:"IFCWORKPLAN",1028945134:"IFCWORKCONTROL",1133259667:"IFCWASTETERMINALTYPE",1898987631:"IFCWALLTYPE",2769231204:"IFCVIRTUALELEMENT",728799441:"IFCVALVETYPE",1911125066:"IFCUNITARYEQUIPMENTTYPE",1600972822:"IFCTUBEBUNDLETYPE",3593883385:"IFCTRIMMEDCURVE",1620046519:"IFCTRANSPORTELEMENT",1692211062:"IFCTRANSFORMERTYPE",1637806684:"IFCTIMESERIESSCHEDULE",5716631:"IFCTANKTYPE",2254336722:"IFCSYSTEM",2315554128:"IFCSWITCHINGDEVICETYPE",148013059:"IFCSUBCONTRACTRESOURCE",1975003073:"IFCSTRUCTURALSURFACECONNECTION",2986769608:"IFCSTRUCTURALRESULTGROUP",1235345126:"IFCSTRUCTURALPOINTREACTION",734778138:"IFCSTRUCTURALPOINTCONNECTION",2082059205:"IFCSTRUCTURALPOINTACTION",3987759626:"IFCSTRUCTURALPLANARACTIONVARYING",1621171031:"IFCSTRUCTURALPLANARACTION",1252848954:"IFCSTRUCTURALLOADGROUP",1721250024:"IFCSTRUCTURALLINEARACTIONVARYING",1807405624:"IFCSTRUCTURALLINEARACTION",2445595289:"IFCSTRUCTURALCURVEMEMBERVARYING",214636428:"IFCSTRUCTURALCURVEMEMBER",4243806635:"IFCSTRUCTURALCURVECONNECTION",1179482911:"IFCSTRUCTURALCONNECTION",682877961:"IFCSTRUCTURALACTION",1039846685:"IFCSTAIRFLIGHTTYPE",3112655638:"IFCSTACKTERMINALTYPE",3812236995:"IFCSPACETYPE",652456506:"IFCSPACEPROGRAM",1305183839:"IFCSPACEHEATERTYPE",3856911033:"IFCSPACE",2533589738:"IFCSLABTYPE",4097777520:"IFCSITE",4105383287:"IFCSERVICELIFE",3517283431:"IFCSCHEDULETIMECONTROL",1768891740:"IFCSANITARYTERMINALTYPE",2863920197:"IFCRELASSIGNSTASKS",160246688:"IFCRELAGGREGATES",2324767716:"IFCRAMPFLIGHTTYPE",2893384427:"IFCRAILINGTYPE",3248260540:"IFCRADIUSDIMENSION",2250791053:"IFCPUMPTYPE",1842657554:"IFCPROTECTIVEDEVICETYPE",3651124850:"IFCPROJECTIONELEMENT",3642467123:"IFCPROJECTORDERRECORD",2904328755:"IFCPROJECTORDER",2744685151:"IFCPROCEDURE",3740093272:"IFCPORT",3724593414:"IFCPOLYLINE",4017108033:"IFCPLATETYPE",4231323485:"IFCPIPESEGMENTTYPE",804291784:"IFCPIPEFITTINGTYPE",3327091369:"IFCPERMIT",2382730787:"IFCPERFORMANCEHISTORY",2837617999:"IFCOUTLETTYPE",3425660407:"IFCORDERACTION",3588315303:"IFCOPENINGELEMENT",4143007308:"IFCOCCUPANT",1916936684:"IFCMOVE",977012517:"IFCMOTORCONNECTIONTYPE",3181161470:"IFCMEMBERTYPE",2108223431:"IFCMECHANICALFASTENERTYPE",377706215:"IFCMECHANICALFASTENER",2506943328:"IFCLINEARDIMENSION",1161773419:"IFCLIGHTFIXTURETYPE",1051575348:"IFCLAMPTYPE",3827777499:"IFCLABORRESOURCE",4288270099:"IFCJUNCTIONBOXTYPE",2391368822:"IFCINVENTORY",1806887404:"IFCHUMIDIFIERTYPE",1251058090:"IFCHEATEXCHANGERTYPE",2706460486:"IFCGROUP",3009204131:"IFCGRID",200128114:"IFCGASTERMINALTYPE",814719939:"IFCFURNITURESTANDARD",263784265:"IFCFURNISHINGELEMENT",3009222698:"IFCFLOWTREATMENTDEVICETYPE",2297155007:"IFCFLOWTERMINALTYPE",1339347760:"IFCFLOWSTORAGEDEVICETYPE",1834744321:"IFCFLOWSEGMENTTYPE",1482959167:"IFCFLOWMOVINGDEVICETYPE",3815607619:"IFCFLOWMETERTYPE",3198132628:"IFCFLOWFITTINGTYPE",3907093117:"IFCFLOWCONTROLLERTYPE",1287392070:"IFCFEATUREELEMENTSUBTRACTION",2143335405:"IFCFEATUREELEMENTADDITION",2827207264:"IFCFEATUREELEMENT",2489546625:"IFCFASTENERTYPE",647756555:"IFCFASTENER",3737207727:"IFCFACETEDBREPWITHVOIDS",807026263:"IFCFACETEDBREP",3390157468:"IFCEVAPORATORTYPE",3174744832:"IFCEVAPORATIVECOOLERTYPE",3272907226:"IFCEQUIPMENTSTANDARD",1962604670:"IFCEQUIPMENTELEMENT",2107101300:"IFCENERGYCONVERSIONDEVICETYPE",1704287377:"IFCELLIPSE",2590856083:"IFCELEMENTCOMPONENTTYPE",1623761950:"IFCELEMENTCOMPONENT",4123344466:"IFCELEMENTASSEMBLY",1758889154:"IFCELEMENT",360485395:"IFCELECTRICALBASEPROPERTIES",3849074793:"IFCDISTRIBUTIONFLOWELEMENTTYPE",3256556792:"IFCDISTRIBUTIONELEMENTTYPE",681481545:"IFCDIMENSIONCURVEDIRECTEDCALLOUT",1457835157:"IFCCURTAINWALLTYPE",3295246426:"IFCCREWRESOURCE",1916426348:"IFCCOVERINGTYPE",1419761937:"IFCCOSTSCHEDULE",3895139033:"IFCCOSTITEM",3293443760:"IFCCONTROL",2559216714:"IFCCONSTRUCTIONRESOURCE",2510884976:"IFCCONIC",3732776249:"IFCCOMPOSITECURVE",300633059:"IFCCOLUMNTYPE",2937912522:"IFCCIRCLEHOLLOWPROFILEDEF",3124254112:"IFCBUILDINGSTOREY",1950629157:"IFCBUILDINGELEMENTTYPE",4031249490:"IFCBUILDING",1260505505:"IFCBOUNDEDCURVE",3649129432:"IFCBOOLEANCLIPPINGRESULT",1334484129:"IFCBLOCK",3207858831:"IFCASYMMETRICISHAPEPROFILEDEF",1674181508:"IFCANNOTATION",2296667514:"IFCACTOR",2097647324:"IFCTRANSPORTELEMENTTYPE",3473067441:"IFCTASK",1580310250:"IFCSYSTEMFURNITUREELEMENTTYPE",4124788165:"IFCSURFACEOFREVOLUTION",2809605785:"IFCSURFACEOFLINEAREXTRUSION",2028607225:"IFCSURFACECURVESWEPTAREASOLID",4070609034:"IFCSTRUCTUREDDIMENSIONCALLOUT",2218152070:"IFCSTRUCTURALSURFACEMEMBERVARYING",3979015343:"IFCSTRUCTURALSURFACEMEMBER",3689010777:"IFCSTRUCTURALREACTION",530289379:"IFCSTRUCTURALMEMBER",3136571912:"IFCSTRUCTURALITEM",3544373492:"IFCSTRUCTURALACTIVITY",451544542:"IFCSPHERE",3893378262:"IFCSPATIALSTRUCTUREELEMENTTYPE",2706606064:"IFCSPATIALSTRUCTUREELEMENT",3626867408:"IFCRIGHTCIRCULARCYLINDER",4158566097:"IFCRIGHTCIRCULARCONE",1856042241:"IFCREVOLVEDAREASOLID",2914609552:"IFCRESOURCE",1401173127:"IFCRELVOIDSELEMENT",3451746338:"IFCRELSPACEBOUNDARY",366585022:"IFCRELSERVICESBUILDINGS",4122056220:"IFCRELSEQUENCE",1058617721:"IFCRELSCHEDULESCOSTITEMS",1245217292:"IFCRELREFERENCEDINSPATIALSTRUCTURE",750771296:"IFCRELPROJECTSELEMENT",202636808:"IFCRELOVERRIDESPROPERTIES",2051452291:"IFCRELOCCUPIESSPACES",3268803585:"IFCRELNESTS",4189434867:"IFCRELINTERACTIONREQUIREMENTS",279856033:"IFCRELFLOWCONTROLELEMENTS",3940055652:"IFCRELFILLSELEMENT",781010003:"IFCRELDEFINESBYTYPE",4186316022:"IFCRELDEFINESBYPROPERTIES",693640335:"IFCRELDEFINES",2551354335:"IFCRELDECOMPOSES",2802773753:"IFCRELCOVERSSPACES",886880790:"IFCRELCOVERSBLDGELEMENTS",3242617779:"IFCRELCONTAINEDINSPATIALSTRUCTURE",3678494232:"IFCRELCONNECTSWITHREALIZINGELEMENTS",504942748:"IFCRELCONNECTSWITHECCENTRICITY",1638771189:"IFCRELCONNECTSSTRUCTURALMEMBER",3912681535:"IFCRELCONNECTSSTRUCTURALELEMENT",2127690289:"IFCRELCONNECTSSTRUCTURALACTIVITY",3190031847:"IFCRELCONNECTSPORTS",4201705270:"IFCRELCONNECTSPORTTOELEMENT",3945020480:"IFCRELCONNECTSPATHELEMENTS",1204542856:"IFCRELCONNECTSELEMENTS",826625072:"IFCRELCONNECTS",2851387026:"IFCRELASSOCIATESPROFILEPROPERTIES",2655215786:"IFCRELASSOCIATESMATERIAL",3840914261:"IFCRELASSOCIATESLIBRARY",982818633:"IFCRELASSOCIATESDOCUMENT",2728634034:"IFCRELASSOCIATESCONSTRAINT",919958153:"IFCRELASSOCIATESCLASSIFICATION",4095574036:"IFCRELASSOCIATESAPPROVAL",1327628568:"IFCRELASSOCIATESAPPLIEDVALUE",1865459582:"IFCRELASSOCIATES",205026976:"IFCRELASSIGNSTORESOURCE",3372526763:"IFCRELASSIGNSTOPROJECTORDER",2857406711:"IFCRELASSIGNSTOPRODUCT",4278684876:"IFCRELASSIGNSTOPROCESS",1307041759:"IFCRELASSIGNSTOGROUP",2495723537:"IFCRELASSIGNSTOCONTROL",1683148259:"IFCRELASSIGNSTOACTOR",3939117080:"IFCRELASSIGNS",3454111270:"IFCRECTANGULARTRIMMEDSURFACE",2798486643:"IFCRECTANGULARPYRAMID",2770003689:"IFCRECTANGLEHOLLOWPROFILEDEF",3219374653:"IFCPROXY",1451395588:"IFCPROPERTYSET",4194566429:"IFCPROJECTIONCURVE",103090709:"IFCPROJECT",4208778838:"IFCPRODUCT",2945172077:"IFCPROCESS",220341763:"IFCPLANE",603570806:"IFCPLANARBOX",3566463478:"IFCPERMEABLECOVERINGPROPERTIES",3505215534:"IFCOFFSETCURVE3D",3388369263:"IFCOFFSETCURVE2D",3888040117:"IFCOBJECT",1425443689:"IFCMANIFOLDSOLIDBREP",1281925730:"IFCLINE",572779678:"IFCLSHAPEPROFILEDEF",1484403080:"IFCISHAPEPROFILEDEF",987898635:"IFCGEOMETRICCURVESET",1268542332:"IFCFURNITURETYPE",4238390223:"IFCFURNISHINGELEMENTTYPE",3455213021:"IFCFLUIDFLOWPROPERTIES",315944413:"IFCFILLAREASTYLETILES",4203026998:"IFCFILLAREASTYLETILESYMBOLWITHSTYLE",374418227:"IFCFILLAREASTYLEHATCHING",2047409740:"IFCFACEBASEDSURFACEMODEL",477187591:"IFCEXTRUDEDAREASOLID",80994333:"IFCENERGYPROPERTIES",2835456948:"IFCELLIPSEPROFILEDEF",2777663545:"IFCELEMENTARYSURFACE",339256511:"IFCELEMENTTYPE",1883228015:"IFCELEMENTQUANTITY",1472233963:"IFCEDGELOOP",4006246654:"IFCDRAUGHTINGPREDEFINEDCURVEFONT",445594917:"IFCDRAUGHTINGPREDEFINEDCOLOUR",3073041342:"IFCDRAUGHTINGCALLOUT",526551008:"IFCDOORSTYLE",1714330368:"IFCDOORPANELPROPERTIES",2963535650:"IFCDOORLININGPROPERTIES",32440307:"IFCDIRECTION",4054601972:"IFCDIMENSIONCURVETERMINATOR",606661476:"IFCDIMENSIONCURVE",693772133:"IFCDEFINEDSYMBOL",2827736869:"IFCCURVEBOUNDEDPLANE",2601014836:"IFCCURVE",2147822146:"IFCCSGSOLID",2506170314:"IFCCSGPRIMITIVE3D",194851669:"IFCCRANERAILFSHAPEPROFILEDEF",4133800736:"IFCCRANERAILASHAPEPROFILEDEF",2485617015:"IFCCOMPOSITECURVESEGMENT",2205249479:"IFCCLOSEDSHELL",1383045692:"IFCCIRCLEPROFILEDEF",1416205885:"IFCCARTESIANTRANSFORMATIONOPERATOR3DNONUNIFORM",3331915920:"IFCCARTESIANTRANSFORMATIONOPERATOR3D",3486308946:"IFCCARTESIANTRANSFORMATIONOPERATOR2DNONUNIFORM",3749851601:"IFCCARTESIANTRANSFORMATIONOPERATOR2D",59481748:"IFCCARTESIANTRANSFORMATIONOPERATOR",1123145078:"IFCCARTESIANPOINT",2898889636:"IFCCSHAPEPROFILEDEF",2713105998:"IFCBOXEDHALFSPACE",2581212453:"IFCBOUNDINGBOX",4182860854:"IFCBOUNDEDSURFACE",2736907675:"IFCBOOLEANRESULT",2740243338:"IFCAXIS2PLACEMENT3D",3125803723:"IFCAXIS2PLACEMENT2D",4261334040:"IFCAXIS1PLACEMENT",1302238472:"IFCANNOTATIONSURFACE",2265737646:"IFCANNOTATIONFILLAREAOCCURRENCE",669184980:"IFCANNOTATIONFILLAREA",3288037868:"IFCANNOTATIONCURVEOCCURRENCE",2543172580:"IFCZSHAPEPROFILEDEF",1299126871:"IFCWINDOWSTYLE",512836454:"IFCWINDOWPANELPROPERTIES",336235671:"IFCWINDOWLININGPROPERTIES",2759199220:"IFCVERTEXLOOP",1417489154:"IFCVECTOR",427810014:"IFCUSHAPEPROFILEDEF",2347495698:"IFCTYPEPRODUCT",1628702193:"IFCTYPEOBJECT",1345879162:"IFCTWODIRECTIONREPEATFACTOR",2715220739:"IFCTRAPEZIUMPROFILEDEF",3124975700:"IFCTEXTLITERALWITHEXTENT",4282788508:"IFCTEXTLITERAL",3028897424:"IFCTERMINATORSYMBOL",3071757647:"IFCTSHAPEPROFILEDEF",230924584:"IFCSWEPTSURFACE",1260650574:"IFCSWEPTDISKSOLID",2247615214:"IFCSWEPTAREASOLID",1878645084:"IFCSURFACESTYLERENDERING",2513912981:"IFCSURFACE",2233826070:"IFCSUBEDGE",3653947884:"IFCSTRUCTURALSTEELPROFILEPROPERTIES",3843319758:"IFCSTRUCTURALPROFILEPROPERTIES",1190533807:"IFCSTRUCTURALLOADSINGLEFORCEWARPING",1597423693:"IFCSTRUCTURALLOADSINGLEFORCE",1973038258:"IFCSTRUCTURALLOADSINGLEDISPLACEMENTDISTORTION",2473145415:"IFCSTRUCTURALLOADSINGLEDISPLACEMENT",2668620305:"IFCSTRUCTURALLOADPLANARFORCE",1595516126:"IFCSTRUCTURALLOADLINEARFORCE",390701378:"IFCSPACETHERMALLOADPROPERTIES",1202362311:"IFCSOUNDVALUE",2485662743:"IFCSOUNDPROPERTIES",723233188:"IFCSOLIDMODEL",2609359061:"IFCSLIPPAGECONNECTIONCONDITION",4124623270:"IFCSHELLBASEDSURFACEMODEL",2411513650:"IFCSERVICELIFEFACTOR",1509187699:"IFCSECTIONEDSPINE",2778083089:"IFCROUNDEDRECTANGLEPROFILEDEF",478536968:"IFCRELATIONSHIP",3765753017:"IFCREINFORCEMENTDEFINITIONPROPERTIES",3413951693:"IFCREGULARTIMESERIES",3615266464:"IFCRECTANGLEPROFILEDEF",110355661:"IFCPROPERTYTABLEVALUE",3650150729:"IFCPROPERTYSINGLEVALUE",3357820518:"IFCPROPERTYSETDEFINITION",941946838:"IFCPROPERTYREFERENCEVALUE",2752243245:"IFCPROPERTYLISTVALUE",4166981789:"IFCPROPERTYENUMERATEDVALUE",1680319473:"IFCPROPERTYDEFINITION",871118103:"IFCPROPERTYBOUNDEDVALUE",673634403:"IFCPRODUCTDEFINITIONSHAPE",179317114:"IFCPREDEFINEDPOINTMARKERSYMBOL",433424934:"IFCPREDEFINEDDIMENSIONSYMBOL",2559016684:"IFCPREDEFINEDCURVEFONT",759155922:"IFCPREDEFINEDCOLOUR",2775532180:"IFCPOLYGONALBOUNDEDHALFSPACE",2924175390:"IFCPOLYLOOP",1423911732:"IFCPOINTONSURFACE",4022376103:"IFCPOINTONCURVE",2067069095:"IFCPOINT",1663979128:"IFCPLANAREXTENT",2004835150:"IFCPLACEMENT",597895409:"IFCPIXELTEXTURE",3021840470:"IFCPHYSICALCOMPLEXQUANTITY",2519244187:"IFCPATH",2529465313:"IFCPARAMETERIZEDPROFILEDEF",1029017970:"IFCORIENTEDEDGE",2665983363:"IFCOPENSHELL",2833995503:"IFCONEDIRECTIONREPEATFACTOR",219451334:"IFCOBJECTDEFINITION",1430189142:"IFCMECHANICALCONCRETEMATERIALPROPERTIES",2022407955:"IFCMATERIALDEFINITIONREPRESENTATION",2347385850:"IFCMAPPEDITEM",1008929658:"IFCLOOP",2624227202:"IFCLOCALPLACEMENT",3422422726:"IFCLIGHTSOURCESPOT",1520743889:"IFCLIGHTSOURCEPOSITIONAL",4266656042:"IFCLIGHTSOURCEGONIOMETRIC",2604431987:"IFCLIGHTSOURCEDIRECTIONAL",125510826:"IFCLIGHTSOURCEAMBIENT",1402838566:"IFCLIGHTSOURCE",3741457305:"IFCIRREGULARTIMESERIES",3905492369:"IFCIMAGETEXTURE",2445078500:"IFCHYGROSCOPICMATERIALPROPERTIES",812098782:"IFCHALFSPACESOLID",178086475:"IFCGRIDPLACEMENT",3590301190:"IFCGEOMETRICSET",4142052618:"IFCGEOMETRICREPRESENTATIONSUBCONTEXT",2453401579:"IFCGEOMETRICREPRESENTATIONITEM",3448662350:"IFCGEOMETRICREPRESENTATIONCONTEXT",1446786286:"IFCGENERALPROFILEPROPERTIES",803998398:"IFCGENERALMATERIALPROPERTIES",3857492461:"IFCFUELPROPERTIES",738692330:"IFCFILLAREASTYLE",4219587988:"IFCFAILURECONNECTIONCONDITION",3008276851:"IFCFACESURFACE",803316827:"IFCFACEOUTERBOUND",1809719519:"IFCFACEBOUND",2556980723:"IFCFACE",1860660968:"IFCEXTENDEDMATERIALPROPERTIES",476780140:"IFCEDGECURVE",3900360178:"IFCEDGE",4170525392:"IFCDRAUGHTINGPREDEFINEDTEXTFONT",3732053477:"IFCDOCUMENTREFERENCE",1694125774:"IFCDIMENSIONPAIR",2273265877:"IFCDIMENSIONCALLOUTRELATIONSHIP",3632507154:"IFCDERIVEDPROFILEDEF",3800577675:"IFCCURVESTYLE",2889183280:"IFCCONVERSIONBASEDUNIT",3050246964:"IFCCONTEXTDEPENDENTUNIT",45288368:"IFCCONNECTIONPOINTECCENTRICITY",1981873012:"IFCCONNECTIONCURVEGEOMETRY",370225590:"IFCCONNECTEDFACESET",1485152156:"IFCCOMPOSITEPROFILEDEF",2542286263:"IFCCOMPLEXPROPERTY",776857604:"IFCCOLOURRGB",647927063:"IFCCLASSIFICATIONREFERENCE",3150382593:"IFCCENTERLINEPROFILEDEF",616511568:"IFCBLOBTEXTURE",2705031697:"IFCARBITRARYPROFILEDEFWITHVOIDS",1310608509:"IFCARBITRARYOPENPROFILEDEF",3798115385:"IFCARBITRARYCLOSEDPROFILEDEF",2297822566:"IFCANNOTATIONTEXTOCCURRENCE",3612888222:"IFCANNOTATIONSYMBOLOCCURRENCE",962685235:"IFCANNOTATIONSURFACEOCCURRENCE",2442683028:"IFCANNOTATIONOCCURRENCE",1065908215:"IFCWATERPROPERTIES",891718957:"IFCVIRTUALGRIDINTERSECTION",1907098498:"IFCVERTEXPOINT",3304826586:"IFCVERTEXBASEDTEXTUREMAP",2799835756:"IFCVERTEX",180925521:"IFCUNITASSIGNMENT",1735638870:"IFCTOPOLOGYREPRESENTATION",1377556343:"IFCTOPOLOGICALREPRESENTATIONITEM",581633288:"IFCTIMESERIESVALUE",1718945513:"IFCTIMESERIESREFERENCERELATIONSHIP",3101149627:"IFCTIMESERIES",3317419933:"IFCTHERMALMATERIALPROPERTIES",1210645708:"IFCTEXTUREVERTEX",2552916305:"IFCTEXTUREMAP",1742049831:"IFCTEXTURECOORDINATEGENERATOR",280115917:"IFCTEXTURECOORDINATE",1484833681:"IFCTEXTSTYLEWITHBOXCHARACTERISTICS",1640371178:"IFCTEXTSTYLETEXTMODEL",2636378356:"IFCTEXTSTYLEFORDEFINEDFONT",1983826977:"IFCTEXTSTYLEFONTMODEL",1447204868:"IFCTEXTSTYLE",912023232:"IFCTELECOMADDRESS",531007025:"IFCTABLEROW",985171141:"IFCTABLE",1290481447:"IFCSYMBOLSTYLE",626085974:"IFCSURFACETEXTURE",1351298697:"IFCSURFACESTYLEWITHTEXTURES",846575682:"IFCSURFACESTYLESHADING",1607154358:"IFCSURFACESTYLEREFRACTION",3303107099:"IFCSURFACESTYLELIGHTING",1300840506:"IFCSURFACESTYLE",3049322572:"IFCSTYLEDREPRESENTATION",3958052878:"IFCSTYLEDITEM",2830218821:"IFCSTYLEMODEL",3408363356:"IFCSTRUCTURALLOADTEMPERATURE",2525727697:"IFCSTRUCTURALLOADSTATIC",2162789131:"IFCSTRUCTURALLOAD",2273995522:"IFCSTRUCTURALCONNECTIONCONDITION",3692461612:"IFCSIMPLEPROPERTY",4240577450:"IFCSHAPEREPRESENTATION",3982875396:"IFCSHAPEMODEL",867548509:"IFCSHAPEASPECT",4165799628:"IFCSECTIONREINFORCEMENTPROPERTIES",2042790032:"IFCSECTIONPROPERTIES",448429030:"IFCSIUNIT",2341007311:"IFCROOT",3679540991:"IFCRIBPLATEPROFILEPROPERTIES",1660063152:"IFCREPRESENTATIONMAP",3008791417:"IFCREPRESENTATIONITEM",3377609919:"IFCREPRESENTATIONCONTEXT",1076942058:"IFCREPRESENTATION",1222501353:"IFCRELAXATION",1580146022:"IFCREINFORCEMENTBARPROPERTIES",2692823254:"IFCREFERENCESVALUEDOCUMENT",825690147:"IFCQUANTITYWEIGHT",2405470396:"IFCQUANTITYVOLUME",3252649465:"IFCQUANTITYTIME",931644368:"IFCQUANTITYLENGTH",2093928680:"IFCQUANTITYCOUNT",2044713172:"IFCQUANTITYAREA",3710013099:"IFCPROPERTYENUMERATION",148025276:"IFCPROPERTYDEPENDENCYRELATIONSHIP",3896028662:"IFCPROPERTYCONSTRAINTRELATIONSHIP",2598011224:"IFCPROPERTY",2802850158:"IFCPROFILEPROPERTIES",3958567839:"IFCPROFILEDEF",2267347899:"IFCPRODUCTSOFCOMBUSTIONPROPERTIES",2095639259:"IFCPRODUCTREPRESENTATION",2417041796:"IFCPRESENTATIONSTYLEASSIGNMENT",3119450353:"IFCPRESENTATIONSTYLE",1304840413:"IFCPRESENTATIONLAYERWITHSTYLE",2022622350:"IFCPRESENTATIONLAYERASSIGNMENT",1775413392:"IFCPREDEFINEDTEXTFONT",3213052703:"IFCPREDEFINEDTERMINATORSYMBOL",990879717:"IFCPREDEFINEDSYMBOL",3727388367:"IFCPREDEFINEDITEM",3355820592:"IFCPOSTALADDRESS",2226359599:"IFCPHYSICALSIMPLEQUANTITY",2483315170:"IFCPHYSICALQUANTITY",101040310:"IFCPERSONANDORGANIZATION",2077209135:"IFCPERSON",1207048766:"IFCOWNERHISTORY",1411181986:"IFCORGANIZATIONRELATIONSHIP",4251960020:"IFCORGANIZATION",1227763645:"IFCOPTICALMATERIALPROPERTIES",2251480897:"IFCOBJECTIVE",3701648758:"IFCOBJECTPLACEMENT",1918398963:"IFCNAMEDUNIT",2706619895:"IFCMONETARYUNIT",3368373690:"IFCMETRIC",677618848:"IFCMECHANICALSTEELMATERIALPROPERTIES",4256014907:"IFCMECHANICALMATERIALPROPERTIES",2597039031:"IFCMEASUREWITHUNIT",3265635763:"IFCMATERIALPROPERTIES",2199411900:"IFCMATERIALLIST",1303795690:"IFCMATERIALLAYERSETUSAGE",3303938423:"IFCMATERIALLAYERSET",248100487:"IFCMATERIALLAYER",1847130766:"IFCMATERIALCLASSIFICATIONRELATIONSHIP",1838606355:"IFCMATERIAL",30780891:"IFCLOCALTIME",1566485204:"IFCLIGHTINTENSITYDISTRIBUTION",4162380809:"IFCLIGHTDISTRIBUTIONDATA",3452421091:"IFCLIBRARYREFERENCE",2655187982:"IFCLIBRARYINFORMATION",3020489413:"IFCIRREGULARTIMESERIESVALUE",852622518:"IFCGRIDAXIS",3548104201:"IFCEXTERNALLYDEFINEDTEXTFONT",3207319532:"IFCEXTERNALLYDEFINEDSYMBOL",1040185647:"IFCEXTERNALLYDEFINEDSURFACESTYLE",2242383968:"IFCEXTERNALLYDEFINEDHATCHSTYLE",3200245327:"IFCEXTERNALREFERENCE",1648886627:"IFCENVIRONMENTALIMPACTVALUE",3796139169:"IFCDRAUGHTINGCALLOUTRELATIONSHIP",770865208:"IFCDOCUMENTINFORMATIONRELATIONSHIP",1154170062:"IFCDOCUMENTINFORMATION",1376555844:"IFCDOCUMENTELECTRONICFORMAT",2949456006:"IFCDIMENSIONALEXPONENTS",1045800335:"IFCDERIVEDUNITELEMENT",1765591967:"IFCDERIVEDUNIT",1072939445:"IFCDATEANDTIME",3510044353:"IFCCURVESTYLEFONTPATTERN",2367409068:"IFCCURVESTYLEFONTANDSCALING",1105321065:"IFCCURVESTYLEFONT",539742890:"IFCCURRENCYRELATIONSHIP",602808272:"IFCCOSTVALUE",1065062679:"IFCCOORDINATEDUNIVERSALTIMEOFFSET",347226245:"IFCCONSTRAINTRELATIONSHIP",613356794:"IFCCONSTRAINTCLASSIFICATIONRELATIONSHIP",1658513725:"IFCCONSTRAINTAGGREGATIONRELATIONSHIP",1959218052:"IFCCONSTRAINT",2732653382:"IFCCONNECTIONSURFACEGEOMETRY",4257277454:"IFCCONNECTIONPORTGEOMETRY",2614616156:"IFCCONNECTIONPOINTGEOMETRY",2859738748:"IFCCONNECTIONGEOMETRY",3264961684:"IFCCOLOURSPECIFICATION",3639012971:"IFCCLASSIFICATIONNOTATIONFACET",938368621:"IFCCLASSIFICATIONNOTATION",1098599126:"IFCCLASSIFICATIONITEMRELATIONSHIP",1767535486:"IFCCLASSIFICATIONITEM",747523909:"IFCCLASSIFICATION",622194075:"IFCCALENDARDATE",2069777674:"IFCBOUNDARYNODECONDITIONWARPING",1387855156:"IFCBOUNDARYNODECONDITION",3367102660:"IFCBOUNDARYFACECONDITION",1560379544:"IFCBOUNDARYEDGECONDITION",4037036970:"IFCBOUNDARYCONDITION",3869604511:"IFCAPPROVALRELATIONSHIP",390851274:"IFCAPPROVALPROPERTYRELATIONSHIP",2080292479:"IFCAPPROVALACTORRELATIONSHIP",130549933:"IFCAPPROVAL",1110488051:"IFCAPPLIEDVALUERELATIONSHIP",411424972:"IFCAPPLIEDVALUE",639542469:"IFCAPPLICATION",618182010:"IFCADDRESS",3630933823:"IFCACTORROLE",599546466:"FILE_DESCRIPTION",1390159747:"FILE_NAME",1109904537:"FILE_SCHEMA"};class Ut{static async getUnits(s){var n,r,a;const{IFCUNITASSIGNMENT:t}=b,e=await s.getAllPropertiesOfType(t);if(!e)return 1;const i=Object.keys(e),o=e[parseInt(i[0],10)];for(const c of o.Units){if(c.value===void 0||c.value===null)continue;const h=await s.getProperties(c.value);if(!h||!h.UnitType||!h.UnitType.value||h.UnitType.value!=="LENGTHUNIT")continue;let E=1,u=1;return h.Name.value==="METRE"&&(u=1),h.Name.value==="FOOT"&&(u=.3048),((n=h.Prefix)==null?void 0:n.value)==="MILLI"?E=.001:((r=h.Prefix)==null?void 0:r.value)==="CENTI"?E=.01:((a=h.Prefix)==null?void 0:a.value)==="DECI"&&(E=.1),u*E}return 1}static async findItemByGuid(s,t){var i;const e=s.getAllPropertiesIDs();for(const o of e){const n=await s.getProperties(o);if(n&&((i=n.GlobalId)==null?void 0:i.value)===t)return n}return null}static async getRelationMap(s,t,e){var a;const o=e??(async()=>{}),n={},r=s.getAllPropertiesIDs();for(const c of r){const h=await s.getProperties(c);if(!h)continue;const d=h.type===t,E=Object.keys(h).find(T=>T.startsWith("Relating")),u=Object.keys(h).find(T=>T.startsWith("Related"));if(!(d&&E&&u))continue;const f=await s.getProperties((a=h[E])==null?void 0:a.value),A=h[u];if(!f||!A||!(A&&Array.isArray(A)))continue;const R=A.map(T=>T.value);await o(f.expressID,R),n[f.expressID]=R}return n}static async getQsetQuantities(s,t,e){const o=e??(()=>{}),n=await s.getProperties(t);return!n||n.type!==b.IFCELEMENTQUANTITY?null:(n.Quantities??[{}]).map(c=>(c.value&&o(c.value),c.value)).filter(c=>c!==null)}static async getPsetProps(s,t,e){const o=e??(()=>{}),n=await s.getProperties(t);return!n||n.type!==b.IFCPROPERTYSET?null:(n.HasProperties??[{}]).map(c=>(c.value&&o(c.value),c.value)).filter(c=>c!==null)}static async getPsetRel(s,t){var r;if(!await s.getProperties(t))return null;const i=await s.getAllPropertiesOfType(b.IFCRELDEFINESBYPROPERTIES);if(!i)return null;const o=Object.values(i);let n=null;for(const a of o)((r=a.RelatingPropertyDefinition)==null?void 0:r.value)===t&&(n=a.expressID);return n}static async getQsetRel(s,t){return Ut.getPsetRel(s,t)}static async getEntityName(s,t){var n;const e=await s.getProperties(t);if(!e)return{key:null,name:null};const i=Object.keys(e).find(r=>r.endsWith("Name"))??null,o=i?(n=e[i])==null?void 0:n.value:null;return{key:i,name:o}}static async getQuantityValue(s,t){const e=await s.getProperties(t);if(!e)return{key:null,value:null};const i=Object.keys(e).find(n=>n.endsWith("Value"))??null;let o;return i===null||e[i]===void 0||e[i]===null?o=null:o=e[i].value,{key:i,value:o}}static isRel(s){return yi[s].startsWith("IFCREL")}static async attributeExists(s,t,e){const i=await s.getProperties(t);return i?Object.keys(i).includes(e):!1}static async groupEntitiesByType(s,t){var i;const e=new Map;for(const o of t){const n=await s.getProperties(o);if(!n)continue;const r=n.type;e.get(r)||e.set(r,new Set),(i=e.get(r))==null||i.add(o)}return e}}class Lr{constructor(){I(this,"factor",1);I(this,"complement",1)}apply(s){const e=this.getScaleMatrix().multiply(s);s.copy(e)}setUp(s){var o,n,r;this.factor=1;const t=this.getLengthUnits(s);if(!t)return;const e=t==null,i=t.Name===void 0||t.Name===null;e||i||(t.Name.value==="FOOT"&&(this.factor=.3048),((o=t.Prefix)==null?void 0:o.value)==="MILLI"?this.complement=.001:((n=t.Prefix)==null?void 0:n.value)==="CENTI"?this.complement=.01:((r=t.Prefix)==null?void 0:r.value)==="DECI"&&(this.complement=.01))}getLengthUnits(s){try{const e=s.GetLineIDsWithType(0,b.IFCUNITASSIGNMENT).get(0),i=s.GetLine(0,e);for(const o of i.Units){if(!o||o.value===null||o.value===void 0)continue;const n=s.GetLine(0,o.value);if(n.UnitType&&n.UnitType.value==="LENGTHUNIT")return n}return null}catch{return console.log("Could not get units"),null}}getScaleMatrix(){const s=this.factor;return new S.Matrix4().fromArray([s,0,0,0,0,s,0,0,0,0,s,0,0,0,0,1])}}class Vn{constructor(){I(this,"itemsByFloor",{});I(this,"_units",new Lr)}setUp(s){this._units.setUp(s),this.cleanUp();try{const t=s.GetLineIDsWithType(0,b.IFCRELCONTAINEDINSPATIALSTRUCTURE),e=new Set,i=s.GetLineIDsWithType(0,b.IFCSPACE);for(let c=0;c<i.size();c++)e.add(i.get(c));const o=s.GetLineIDsWithType(0,b.IFCRELAGGREGATES),n=o.size();for(let c=0;c<n;c++){const h=o.get(c),d=s.GetLine(0,h);if(!d||!d.RelatingObject||!d.RelatedObjects)continue;const E=d.RelatingObject.value,u=d.RelatedObjects;for(const f of u){const A=f.value;e.has(A)&&(this.itemsByFloor[A]=E)}}const r={},a=t.size();for(let c=0;c<a;c++){const h=t.get(c),d=s.GetLine(0,h);if(!d||!d.RelatingStructure||!d.RelatedElements)continue;const E=d.RelatingStructure.value,u=d.RelatedElements;if(e.has(E))for(const f of u){r[E]||(r[E]=[]);const A=f.value;r[E].push(A)}else for(const f of u){const A=f.value;this.itemsByFloor[A]=E}}for(const c in r){const h=this.itemsByFloor[c];if(h!==void 0){const d=r[c];for(const E of d)this.itemsByFloor[E]=h}}for(let c=0;c<n;c++){const h=o.get(c),d=s.GetLine(0,h);if(!d||!d.RelatingObject||!d.RelatedObjects)continue;const E=d.RelatingObject.value,u=d.RelatedObjects;for(const f of u){const A=f.value,R=this.itemsByFloor[E];R!==void 0&&(this.itemsByFloor[A]=R)}}}catch{console.log("Could not get floors.")}}cleanUp(){this.itemsByFloor={}}}class Ds{constructor(){I(this,"includeProperties",!0);I(this,"optionalCategories",[b.IFCSPACE]);I(this,"coordinate",!0);I(this,"wasm",{path:"",absolute:!1,logLevel:b.LogLevel.LOG_LEVEL_OFF});I(this,"excludedCategories",new Set);I(this,"saveLocations",!1);I(this,"webIfc",{COORDINATE_TO_ORIGIN:!0});I(this,"autoSetWasm",!0);I(this,"customLocateFileHandler",null)}}class Yn{constructor(){I(this,"defLineMat",new S.LineBasicMaterial({color:16777215}))}read(s){const t=s.GetAllAlignments(0),e=s.GetAllCrossSections2D(0),i=s.GetAllCrossSections3D(0),o={IfcAlignment:t,IfcCrossSection2D:e,IfcCrossSection3D:i};return this.get(o)}get(s){if(s.IfcAlignment){const t=new Map;for(const e of s.IfcAlignment){const i=new Dt.Alignment;i.absolute=this.getCurves(e.curve3D,i),i.horizontal=this.getCurves(e.horizontal,i),i.vertical=this.getCurves(e.vertical,i),t.set(t.size,i)}return{alignments:t,coordinationMatrix:new S.Matrix4}}}getCurves(s,t){const e=[];let i=0;for(const o of s){const n={};if(o.data)for(const E of o.data){const[u,f]=E.split(": "),A=parseFloat(f);n[u]=A||f}const{points:r}=o,a=new Float32Array(r.length*3);for(let E=0;E<r.length;E++){const{x:u,y:f,z:A}=r[E];a[E*3]=u,a[E*3+1]=f,a[E*3+2]=A||0}const c=new S.BufferAttribute(a,3),h=new S.EdgesGeometry;h.setAttribute("position",c);const d=new Dt.CurveMesh(i,n,t,h,this.defLineMat);e.push(d.curve),i++}return e}}class Gn{getNameInfo(s){var d;const t={},{arguments:e}=s.GetHeaderLine(0,b.FILE_NAME)||{};if(!e)return t;const[i,o,n,r,a,c,h]=e;if(i!=null&&i.value&&(t.name=i.value),o!=null&&o.value&&(t.creationDate=new Date(o.value)),n){t.author={};const[E,u]=n;E!=null&&E.value&&(t.author.name=E.value),u!=null&&u.value&&(t.author.email=u.value)}return(d=r[0])!=null&&d.value&&(t.organization=r[0].value),a!=null&&a.value&&(t.preprocessorVersion=a==null?void 0:a.value),c!=null&&c.value&&(t.originatingSystem=c==null?void 0:c.value),h!=null&&h.value&&(t.authorization=h==null?void 0:h.value),t}getDescriptionInfo(s){var n;const t={},{arguments:e}=s.GetHeaderLine(0,b.FILE_DESCRIPTION)||{};if(!e)return t;const[i,o]=e;if((n=i[0])!=null&&n.value){const r=i[0].value.match(/\[([^\]]+)\]/);r&&r[1]&&(t.viewDefinition=r[1])}return o!=null&&o.value&&(t.implementationLevel=o.value),t}}const Ue=class Ue extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onIfcStartedLoading",new D);I(this,"onSetup",new D);I(this,"settings",new Ds);I(this,"webIfc",new b.IfcAPI);I(this,"enabled",!0);I(this,"_material",new S.MeshLambertMaterial);I(this,"_spatialTree",new Vn);I(this,"_metaData",new Gn);I(this,"_fragmentInstances",new Map);I(this,"_civil",new Yn);I(this,"_visitedFragments",new Map);I(this,"_materialT",new S.MeshLambertMaterial({transparent:!0,opacity:.5}));this.components.add(Ue.uuid,this),this.settings.excludedCategories.add(b.IFCOPENINGELEMENT)}dispose(){this.webIfc=null,this.onDisposed.trigger(Ue.uuid),this.onDisposed.reset()}async setup(t){this.settings={...this.settings,...t},this.settings.autoSetWasm&&await this.autoSetWasm(),this.onSetup.trigger()}async load(t,e=!0){const i=performance.now();this.onIfcStartedLoading.trigger(),await this.readIfcFile(t);const o=await this.getAllGeometries(),r=await this.components.get(us).export(this.webIfc,0);o.setLocalProperties(r),this.cleanUp();const a=this.components.get(ot);a.groups.set(o.uuid,o);for(const c of o.items)a.list.set(c.id,c),c.mesh.uuid=c.id,c.group=o;a.onFragmentsLoaded.trigger(o),e&&a.coordinate([o]);for(const[c]of o.data){const h=r[c];if(!h||!h.GlobalId)continue;const d=h.GlobalId.value||h.GlobalId;o.globalToExpressIDs.set(d,c)}return console.log(`Streaming the IFC took ${performance.now()-i} ms!`),o}async readIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;return this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModel(t,this.settings.webIfc)}cleanUp(){this.webIfc=null,this.webIfc=new b.IfcAPI,this._visitedFragments.clear(),this._fragmentInstances.clear()}async getAllGeometries(){this._spatialTree.setUp(this.webIfc);const t=this.webIfc.GetIfcEntityList(0),e=new Dt.FragmentsGroup;e.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};const i=[];for(const n of t){if(!this.webIfc.IsIfcElement(n)&&n!==b.IFCSPACE||this.settings.excludedCategories.has(n))continue;const r=this.webIfc.GetLineIDsWithType(0,n),a=r.size();for(let c=0;c<a;c++){const h=r.get(c);i.push(h);const d=this._spatialTree.itemsByFloor[h]||0;e.data.set(h,[[],[d,n]])}}this._spatialTree.cleanUp(),this.webIfc.StreamMeshes(0,i,n=>{this.getMesh(n,e)});for(const n of this._visitedFragments){const{index:r,fragment:a}=n[1];e.keyFragments.set(r,a.id)}for(const n of e.items){const r=this._fragmentInstances.get(n.id);if(!r)throw new Error("Fragment not found!");const a=[];for(const[c,h]of r)a.push(h);n.add(a)}const o=this.webIfc.GetCoordinationMatrix(0);return e.coordinationMatrix.fromArray(o),e.civilData=this._civil.read(this.webIfc),e}getMesh(t,e){const i=t.geometries.size(),o=t.expressID;for(let n=0;n<i;n++){const r=t.geometries.get(n),{x:a,y:c,z:h,w:d}=r.color,E=d!==1,{geometryExpressID:u}=r,f=`${u}-${E}`;if(!this._visitedFragments.has(f)){const m=this.getGeometry(this.webIfc,u),O=E?this._materialT:this._material,_=new Dt.Fragment(m,O,1);e.add(_.mesh),e.items.push(_);const N=this._visitedFragments.size;this._visitedFragments.set(f,{index:N,fragment:_})}const A=new S.Color().setRGB(a,c,h,"srgb"),R=new S.Matrix4;R.fromArray(r.flatTransformation);const T=this._visitedFragments.get(f);if(T===void 0)throw new Error("Error getting geometry data for streaming!");const F=e.data.get(o);if(!F)throw new Error("Data not found!");F[0].push(T.index);const{fragment:g}=T;this._fragmentInstances.has(g.id)||this._fragmentInstances.set(g.id,new Map);const p=this._fragmentInstances.get(g.id);if(!p)throw new Error("Instances not found!");if(p.has(o)){const m=p.get(o);if(!m)throw new Error("Instance not found!");m.transforms.push(R),m.colors&&m.colors.push(A)}else p.set(o,{id:o,transforms:[R],colors:[A]})}}getGeometry(t,e){const i=t.GetGeometry(0,e),o=t.GetIndexArray(i.GetIndexData(),i.GetIndexDataSize()),n=t.GetVertexArray(i.GetVertexData(),i.GetVertexDataSize()),r=new Float32Array(n.length/2),a=new Float32Array(n.length/2);for(let E=0;E<n.length;E+=6)r[E/2]=n[E],r[E/2+1]=n[E+1],r[E/2+2]=n[E+2],a[E/2]=n[E+3],a[E/2+1]=n[E+4],a[E/2+2]=n[E+5];const c=new S.BufferGeometry,h=new S.BufferAttribute(r,3),d=new S.BufferAttribute(a,3);return c.setAttribute("position",h),c.setAttribute("normal",d),c.setIndex(Array.from(o)),i.delete(),c}async autoSetWasm(){const t=await fetch(`https://unpkg.com/@thatopen/components@${hs.release}/package.json`);if(!t.ok){console.warn("Couldn't get openbim-components package.json. Set wasm settings manually.");return}const e=await t.json();if(!("web-ifc"in e.peerDependencies))console.warn("Couldn't get web-ifc from peer dependencies in openbim-components. Set wasm settings manually.");else{const i=e.peerDependencies["web-ifc"];this.settings.wasm.path=`https://unpkg.com/web-ifc@${i}/`,this.settings.wasm.absolute=!0}}};I(Ue,"uuid","a659add7-1418-4771-a0d6-7d4d438e4624");let Is=Ue;const Mt=class Mt extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"onRequestFile",new D);I(this,"ifcToExport",null);I(this,"onElementToPset",new D);I(this,"onPropToPset",new D);I(this,"onPsetRemoved",new D);I(this,"onDataChanged",new D);I(this,"wasm",{path:"/",absolute:!1});I(this,"enabled",!0);I(this,"attributeListeners",{});I(this,"selectedModel");I(this,"changeMap",{});this.components.add(Mt.uuid,this)}dispose(){this.selectedModel=void 0,this.attributeListeners={},this.changeMap={},this.onElementToPset.reset(),this.onPropToPset.reset(),this.onPsetRemoved.reset(),this.onDataChanged.reset(),this.onDisposed.trigger(Mt.uuid),this.onDisposed.reset()}static getIFCSchema(t){const e=t.ifcMetadata.schema;if(!e)throw new Error("IFC Schema not found");return e}async setData(t,...e){for(const i of e){const o=i.expressID;o&&(await t.setProperties(o,i),this.registerChange(t,o))}}async newPset(t,e,i){const o=Mt.getIFCSchema(t),{ownerHistoryHandle:n}=await this.getOwnerHistory(t),r=this.newGUID(t),a=new b[o].IfcLabel(e),c=i?new b[o].IfcText(i):null,h=new b[o].IfcPropertySet(r,n,a,c,[]);h.expressID=this.increaseMaxID(t);const d=this.newGUID(t),E=new b[o].IfcRelDefinesByProperties(d,n,null,null,[],new b.Handle(h.expressID));return E.expressID=this.increaseMaxID(t),await this.setData(t,h,E),{pset:h,rel:E}}async removePset(t,...e){for(const i of e){const o=await t.getProperties(i);if((o==null?void 0:o.type)!==b.IFCPROPERTYSET)continue;const n=await Ut.getPsetRel(t,i);if(n&&(await t.setProperties(n,null),this.registerChange(t,n)),o){for(const r of o.HasProperties)await t.setProperties(r.value,null);await t.setProperties(i,null),this.onPsetRemoved.trigger({model:t,psetID:i}),this.registerChange(t,i)}}}newSingleStringProperty(t,e,i,o){return this.newSingleProperty(t,e,i,o)}newSingleNumericProperty(t,e,i,o){return this.newSingleProperty(t,e,i,o)}newSingleBooleanProperty(t,e,i,o){return this.newSingleProperty(t,e,i,o)}async removePsetProp(t,e,i){const o=await t.getProperties(e),n=await t.getProperties(i);!o||!n||o.type===b.IFCPROPERTYSET&&n&&(o.HasProperties=o.HasProperties.filter(r=>r.value!==i),await t.setProperties(i,null),this.registerChange(t,e,i))}async addElementToPset(t,e,...i){const o=await Ut.getPsetRel(t,e);if(!o)return;const n=await t.getProperties(o);if(n){for(const r of i){const a=new b.Handle(r);n.RelatedObjects.push(a),this.onElementToPset.trigger({model:t,psetID:e,elementID:r})}this.registerChange(t,e)}}async addPropToPset(t,e,...i){const o=await t.getProperties(e);if(o){for(const n of i){if(o.HasProperties.includes(n))continue;const r=new b.Handle(n);o.HasProperties.push(r),this.onPropToPset.trigger({model:t,psetID:e,propID:n})}this.registerChange(t,e)}}async saveToIfc(t,e){const i=this.components.get(Is),o=i.webIfc,n=await i.readIfcFile(e),r=this.changeMap[t.uuid]??[];for(const c of r){const h=await t.getProperties(c);if(h)try{o.WriteLine(n,h)}catch{}else try{o.DeleteLine(n,c)}catch{}}const a=o.SaveModel(n);return i.webIfc.CloseModel(n),i.cleanUp(),a}async setAttributeListener(t,e,i){this.attributeListeners[t.uuid]||(this.attributeListeners[t.uuid]={});const o=this.attributeListeners[t.uuid][e]?this.attributeListeners[t.uuid][e][i]:null;if(o)return o;const n=await t.getProperties(e);if(!n)throw new Error(`Entity with expressID ${e} doesn't exists.`);const r=n[i];if(Array.isArray(r)||!r)throw new Error(`Attribute ${i} is array or null, and it can't have a listener.`);const a=r.value;if(a===void 0||a==null)throw new Error(`Attribute ${i} has a badly defined handle.`);const c=new D;return Object.defineProperty(n[i],"value",{get(){return this._value},async set(h){this._value=h,c.trigger(h)}}),n[i].value=a,this.attributeListeners[t.uuid][e]||(this.attributeListeners[t.uuid][e]={}),this.attributeListeners[t.uuid][e][i]=c,c}increaseMaxID(t){return t.ifcMetadata.maxExpressID++,t.ifcMetadata.maxExpressID}newGUID(t){const e=Mt.getIFCSchema(t);return new b[e].IfcGloballyUniqueId(re.create())}async getOwnerHistory(t){const e=await t.getAllPropertiesOfType(b.IFCOWNERHISTORY);if(!e)throw new Error("No OwnerHistory was found.");const i=Object.keys(e).map(r=>parseInt(r,10)),o=e[i[0]],n=new b.Handle(o.expressID);return{ownerHistory:o,ownerHistoryHandle:n}}registerChange(t,...e){this.changeMap[t.uuid]||(this.changeMap[t.uuid]=new Set);for(const i of e)this.changeMap[t.uuid].add(i),this.onDataChanged.trigger({model:t,expressID:i})}async newSingleProperty(t,e,i,o){const n=Mt.getIFCSchema(t),r=new b[n].IfcIdentifier(i),a=new b[n][e](o),c=new b[n].IfcPropertySingleValue(r,null,a,null);return c.expressID=this.increaseMaxID(t),await this.setData(t,c),c}};I(Mt,"uuid","58c2d9f0-183c-48d6-a402-dfcf5b9a34df");let Ti=Mt;const gs=class gs extends ${constructor(t){super(t);I(this,"enabled",!0);I(this,"list",{});I(this,"onDisposed",new D);I(this,"onFragmentsDisposed",t=>{const{groupID:e,fragmentIDs:i}=t;for(const o in this.list){const n=this.list[o],r=Object.keys(n);if(r.includes(e))delete n[e],Object.values(n).length===0&&delete this.list[o];else for(const a of r){const c=n[a];for(const h of i)delete c.map[h];Object.values(c).length===0&&delete n[a]}}});t.add(gs.uuid,this),t.get(ot).onFragmentsDisposed.add(this.onFragmentsDisposed)}dispose(){this.list={},this.components.get(ot).onFragmentsDisposed.remove(this.onFragmentsDisposed),this.onDisposed.trigger(),this.onDisposed.reset()}remove(t){for(const e in this.list){const i=this.list[e];for(const o in i){const n=i[o];delete n.map[t]}}}find(t){const e=this.components.get(ot);if(!t){const r={};for(const[a,c]of e.list)r[a]=new Set(c.ids);return r}const i=Object.keys(t).length,o={};for(const r in t){const a=t[r];if(!this.list[r]){console.warn(`Classification ${r} does not exist.`);continue}for(const c of a){const h=this.list[r][c];if(h)for(const d in h.map){o[d]||(o[d]=new Map);for(const E of h.map[d]){const u=o[d].get(E);u===void 0?o[d].set(E,1):o[d].set(E,u+1)}}}}const n={};for(const r in o){const a=o[r];for(const[c,h]of a){if(h===void 0)throw new Error("Malformed fragments map!");h===i&&(n[r]||(n[r]=new Set),n[r].add(c))}}return n}byModel(t,e){this.list.models||(this.list.models={});const i=this.list.models;i[t]||(i[t]={map:{},id:null,name:t});const o=i[t];for(const[n,r]of e.data){const a=r[0];for(const c of a){const h=e.keyFragments.get(c);h&&(o.map[h]||(o.map[h]=new Set),o.map[h].add(n))}}}async byPredefinedType(t){var o;this.list.predefinedTypes||(this.list.predefinedTypes={});const e=this.list.predefinedTypes,i=t.getAllPropertiesIDs();for(const n of i){const r=await t.getProperties(n);if(!r)continue;const a=String((o=r.PredefinedType)==null?void 0:o.value).toUpperCase();e[a]||(e[a]={map:{},id:null,name:a});const c=e[a];for(const[h,d]of t.data){const E=d[0];for(const u of E){const f=t.keyFragments.get(u);if(!f)throw new Error("Fragment ID not found!");c.map[f]||(c.map[f]=new Set),c.map[f].add(r.expressID)}}}}byEntity(t){this.list.entities||(this.list.entities={});for(const[e,i]of t.data){const n=i[1][1],r=yi[n];this.saveItem(t,"entities",r,e)}}async byIfcRel(t,e,i){Ut.isRel(e)&&await Ut.getRelationMap(t,e,async(o,n)=>{const{name:r}=await Ut.getEntityName(t,o);for(const a of n)this.saveItem(t,i,r??"NO REL NAME",a)})}async bySpatialStructure(t,e={useProperties:!0}){var r,a;const i=this.components.get(le),o=i.relationMaps[t.uuid];if(!o)throw new Error(`Classifier: model relations of ${t.name||t.uuid} have to exists to group by spatial structure.`);const n="spatialStructures";for(const[c]of o){const h=i.getEntityRelations(t,c,"Decomposes");if(h)for(const u of h){let f=u.toString();if(e.useProperties){const A=await t.getProperties(u);if(!A)continue;f=(r=A.Name)==null?void 0:r.value}this.saveItem(t,n,f,c,u)}const d=i.getEntityRelations(t,c,"ContainsElements");if(!d)continue;let E=c.toString();if(e.useProperties){const u=await t.getProperties(c);if(!u)continue;E=(a=u.Name)==null?void 0:a.value}for(const u of d){this.saveItem(t,n,E,u,c);const f=i.getEntityRelations(t,Number(u),"IsDecomposedBy");if(f)for(const A of f)this.saveItem(t,n,E,A,c)}}}setColor(t,e,i=!1){const o=this.components.get(ot);for(const n in t){const r=o.list.get(n);if(!r)continue;const a=t[n];r.setColor(e,a,i)}}resetColor(t){const e=this.components.get(ot);for(const i in t){const o=e.list.get(i);if(!o)continue;const n=t[i];o.resetColor(n)}}saveItem(t,e,i,o,n=null){this.list[e]||(this.list[e]={});const r=t.data.get(o);if(r)for(const a of r[0]){const c=t.keyFragments.get(a);if(c){const h=this.list[e];h[i]||(h[i]={map:{},id:n,name:i}),h[i].map[c]||(h[i].map[c]=new Set),h[i].map[c].add(o)}}}};I(gs,"uuid","e25a7f3c-46c4-4a14-9d3d-5115f24ebeb7");let fs=gs;const Os=class Os extends ${constructor(t){super(t);I(this,"onDisposed",new D);I(this,"enabled",!0);I(this,"height",10);I(this,"groupName","spatialStructures");I(this,"list",new Set);t.add(Os.uuid,this)}dispose(){this.list.clear(),this.onDisposed.trigger(),this.onDisposed.reset()}set(t){if(!this.enabled)return;const e=this.components.get(fs),i=this.components.get(ot),o=t?1:-1;let n=0;const r=e.list[this.groupName],a=new S.Matrix4;for(const c in r){a.elements[13]=n*o*this.height;for(const h in r[c]){const d=i.list.get(h),E=c+h,u=this.list.has(E);if(!d||t&&u||!t&&!u)continue;t?this.list.add(E):this.list.delete(E);const f=r[c].map[h];d.applyTransform(f,a)}n++}}};I(Os,"uuid","d260618b-ce88-4c7d-826c-6debb91de3e2");let mi=Os;const Ss=class Ss extends ${constructor(t){super(t);I(this,"enabled",!0);this.components.add(Ss.uuid,this)}set(t,e){const i=this.components.get(ot);if(!e){for(const[o,n]of i.list)n&&(n.setVisibility(t),this.updateCulledVisibility(n));return}for(const o in e){const n=e[o],r=i.list.get(o);r&&(r.setVisibility(t,n),this.updateCulledVisibility(r))}}isolate(t){this.set(!1),this.set(!0,t)}updateCulledVisibility(t){const e=this.components.get(ds);for(const[i,o]of e.list){const n=o.colorMeshes.get(t.id);n&&(n.count=t.mesh.count)}}};I(Ss,"uuid","dd9ccf2d-8a21-4821-b7f6-2949add16a29");let Ri=Ss;class zn extends Ds{constructor(){super(...arguments);I(this,"minGeometrySize",10);I(this,"minAssetsSize",1e3)}}const _s=class _s extends ${constructor(t){super(t);I(this,"onGeometryStreamed",new D);I(this,"onAssetStreamed",new D);I(this,"onProgress",new D);I(this,"onIfcLoaded",new D);I(this,"onDisposed",new D);I(this,"settings",new zn);I(this,"enabled",!0);I(this,"webIfc",new b.IfcAPI);I(this,"_spatialTree",new Vn);I(this,"_metaData",new Gn);I(this,"_visitedGeometries",new Map);I(this,"_streamSerializer",new Dt.StreamSerializer);I(this,"_geometries",new Map);I(this,"_geometryCount",0);I(this,"_civil",new Yn);I(this,"_groupSerializer",new Dt.Serializer);I(this,"_assets",[]);I(this,"_meshesWithHoles",new Set);this.components.add(_s.uuid,this),this.settings.excludedCategories.add(b.IFCOPENINGELEMENT)}dispose(){this.onIfcLoaded.reset(),this.onGeometryStreamed.reset(),this.onAssetStreamed.reset(),this.webIfc=null,this.onDisposed.trigger(),this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllGeometries(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModel(t,this.settings.webIfc)}async streamIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllGeometries(){const{minGeometrySize:t,minAssetsSize:e}=this.settings;this._spatialTree.setUp(this.webIfc);const i=this.webIfc.GetIfcEntityList(0),o=[[]],n=new Dt.FragmentsGroup;n.ifcMetadata={name:"",description:"",...this._metaData.getNameInfo(this.webIfc),...this._metaData.getDescriptionInfo(this.webIfc),schema:this.webIfc.GetModelSchema(0)||"IFC2X3",maxExpressID:this.webIfc.GetMaxExpressID(0)};let r=0,a=0;for(const R of i){if(!this.webIfc.IsIfcElement(R)&&R!==b.IFCSPACE||this.settings.excludedCategories.has(R))continue;const T=this.webIfc.GetLineIDsWithType(0,R),F=T.size();for(let g=0;g<F;g++){r>t&&(r=0,a++,o.push([]));const p=T.get(g);o[a].push(p);const m=this.webIfc.GetLine(0,p);if(m.GlobalId){const _=(m==null?void 0:m.GlobalId.value)||(m==null?void 0:m.GlobalId);n.globalToExpressIDs.set(_,p)}const O=this._spatialTree.itemsByFloor[p]||0;n.data.set(p,[[],[O,R]]),r++}}this._spatialTree.cleanUp();let c=.01,h=0;for(const R of o){h++,this.webIfc.StreamMeshes(0,R,F=>{this.getMesh(this.webIfc,F,n)}),this._geometryCount>t&&await this.streamGeometries(),this._assets.length>e&&await this.streamAssets();const T=h/o.length;T>c&&(c+=.01,c=Math.max(c,T),this.onProgress.trigger(Math.round(c*100)/100))}this._geometryCount&&await this.streamGeometries(),this._assets.length&&await this.streamAssets();const{opaque:d,transparent:E}=n.geometryIDs;for(const[R,{index:T,uuid:F}]of this._visitedGeometries)n.keyFragments.set(T,F),(R>1?d:E).set(R,T);const u=n.data.keys();for(const R of u){const[T]=n.data.get(R);T.length||n.data.delete(R)}const f=this.webIfc.GetCoordinationMatrix(0);n.coordinationMatrix.fromArray(f),n.civilData=this._civil.read(this.webIfc);const A=this._groupSerializer.export(n);this.onIfcLoaded.trigger(A),n.dispose(!0)}cleanUp(){this.webIfc=null,this.webIfc=new b.IfcAPI,this._visitedGeometries.clear(),this._geometries.clear(),this._assets=[],this._meshesWithHoles.clear()}getMesh(t,e,i){const o=e.geometries.size(),n=e.expressID,r={id:n,geometries:[]};for(let a=0;a<o;a++){const c=e.geometries.get(a),h=c.geometryExpressID,d=c.color.w===1?1:-1,E=h*d;if(!this._visitedGeometries.has(E)){this._visitedGeometries.has(h)||this.getGeometry(t,h);const m=this._visitedGeometries.size,O=S.MathUtils.generateUUID();this._visitedGeometries.set(E,{uuid:O,index:m})}const u=this._visitedGeometries.get(E);if(u===void 0)throw new Error("Error getting geometry data for streaming!");const f=i.data.get(n);if(!f)throw new Error("Data not found!");f[0].push(u.index);const{x:A,y:R,z:T,w:F}=c.color,g=[A,R,T,F],p=c.flatTransformation;r.geometries.push({color:g,geometryID:h,transformation:p})}this._assets.push(r)}getGeometry(t,e){const i=t.GetGeometry(0,e),o=t.GetIndexArray(i.GetIndexData(),i.GetIndexDataSize()),n=t.GetVertexArray(i.GetVertexData(),i.GetVertexDataSize()),r=new Float32Array(n.length/2),a=new Float32Array(n.length/2);for(let u=0;u<n.length;u+=6)r[u/2]=n[u],r[u/2+1]=n[u+1],r[u/2+2]=n[u+2],a[u/2]=n[u+3],a[u/2+1]=n[u+4],a[u/2+2]=n[u+5];const c=Fn(r),h=new Float32Array(c.transformation.elements),d=[c.center.x,c.center.y,c.center.z];let E=!1;for(let u=0;u<r.length-2;u+=3){const f=r[u],A=r[u+1],R=r[u+2],T=a[u],F=a[u+1],g=a[u+2];if(gn(d,[f,A,R],[T,F,g])){E=!0;break}}this._geometries.set(e,{position:r,normal:a,index:o,boundingBox:h,hasHoles:E}),i.delete(),this._geometryCount++}async streamAssets(){await this.onAssetStreamed.trigger(this._assets),this._assets=null,this._assets=[]}async streamGeometries(){let t=this._streamSerializer.export(this._geometries),e={};for(const[i,{boundingBox:o,hasHoles:n}]of this._geometries)e[i]={boundingBox:o,hasHoles:n};this.onGeometryStreamed.trigger({data:e,buffer:t}),e=null,t=null,this._geometries.clear(),this._geometryCount=0}};I(_s,"uuid","d9999a00-e1f5-4d3f-8cfe-c56e08609764");let Ai=_s;class Hn extends Ds{constructor(){super(...arguments);I(this,"propertiesSize",100)}}class kn extends ${constructor(){super(...arguments);I(this,"onPropertiesStreamed",new Pe);I(this,"onProgress",new Pe);I(this,"onIndicesStreamed",new Pe);I(this,"onDisposed",new D);I(this,"enabled",!0);I(this,"settings",new Hn);I(this,"webIfc",new b.IfcAPI)}async dispose(){this.onIndicesStreamed.reset(),this.onPropertiesStreamed.reset(),this.webIfc=null,this.onDisposed.reset()}async streamFromBuffer(t){await this.readIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async streamFromCallBack(t){await this.streamIfcFile(t),await this.streamAllProperties(),this.cleanUp()}async readIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModel(t,this.settings.webIfc)}async streamIfcFile(t){const{path:e,absolute:i,logLevel:o}=this.settings.wasm;this.webIfc.SetWasmPath(e,i),await this.webIfc.Init(),o&&this.webIfc.SetLogLevel(o),this.webIfc.OpenModelFromCallback(t,this.settings.webIfc)}async streamAllProperties(){const{propertiesSize:t}=this.settings,e=new Set(this.webIfc.GetIfcEntityList(0)),i=new Set([b.IFCPROJECT,b.IFCSITE,b.IFCBUILDING,b.IFCBUILDINGSTOREY,b.IFCSPACE]);for(const c of i)e.add(c);let o=.01,n=0;for(const c of e){if(n++,Ni.has(c))continue;const h=i.has(c),d=this.webIfc.GetLineIDsWithType(0,c),E=d.size();let u=0;for(let A=0;A<E-t;A+=t){const R={};for(let T=0;T<t;T++){u++;const F=d.get(A+T);try{const g=this.webIfc.GetLine(0,F,h);R[g.expressID]=g}catch{console.log(`Could not get property: ${F}`)}}await this.onPropertiesStreamed.trigger({type:c,data:R})}if(u!==E){const A={};for(let R=u;R<E;R++){const T=d.get(R);try{const F=this.webIfc.GetLine(0,T,h);A[F.expressID]=F}catch{console.log(`Could not get property: ${T}`)}}await this.onPropertiesStreamed.trigger({type:c,data:A})}const f=n/e.size;f>o&&(o+=.01,o=Math.max(o,f),await this.onProgress.trigger(Math.round(o*100)/100))}const a=await this.components.get(le).processFromWebIfc(this.webIfc,0);await this.onIndicesStreamed.trigger(a)}cleanUp(){this.webIfc=null,this.webIfc=new b.IfcAPI}}I(kn,"uuid","88d2c89c-ce32-47d7-8cb6-d51e4b311a0b");const Ns=class Ns extends ${constructor(t){super(t);I(this,"enabled",!0);t.add(Ns.uuid,this)}static distanceFromPointToLine(t,e,i,o=!1){const n=new S.Line3,r=new S.Vector3;return n.set(e,i),n.closestPointToPoint(t,o,r),r.distanceTo(t)}getFace(t,e,i){if(!t.geometry.index)throw new Error("Geometry must be indexed!");const o=new Map,n=t.geometry.index.array,{plane:r}=this.getFaceData(e,i,t),a=[];for(let E=0;E<n.length/3;E++){const{plane:u,edges:f}=this.getFaceData(E,i,t);if(u.equals(r)){a.push({index:E,edges:f});for(const{id:A,points:R,distance:T}of f)o.set(A,{points:R,distance:T})}}let c=0;const h=new Map,d=new Map;for(const{index:E,edges:u}of a){const f=new Map;for(const{id:m}of u)if(h.has(m)){const O=h.get(m);f.set(m,O)}const A=u.map(m=>m.id);if(!f.size){const m=c++;for(const{id:O}of u)h.set(O,m);d.set(m,{edges:new Set(A),indices:new Set([E])});continue}let R=null;const T=new Set,F=new Set(A);for(const[m,O]of f){R===null?R=O:O!==R&&T.add(O),h.delete(m);const{edges:_}=d.get(O);_.delete(m),F.delete(m)}if(R===null)throw new Error("Error computing face!");const g=d.get(R),{indices:p}=g;p.add(E);for(const m of F){h.set(m,R);const{edges:O}=g;O.add(m)}for(const m of T){const O=d.get(m),{edges:_,indices:N}=O,y=d.get(R),{edges:L,indices:w}=y;for(const M of _)L.add(M),h.set(M,R);for(const M of N)w.add(M);d.delete(m)}}for(const[E,{indices:u,edges:f}]of d)if(u.has(e)){const A=[];for(const R of f){const T=o.get(R);A.push(T)}return{edges:A,indices:u}}return null}getVerticesAndNormal(t,e,i){if(!t.geometry.index)throw new Error("Geometry must be indexed!");const o=t.geometry.index.array,n=t.geometry.attributes.position.array,r=t.geometry.attributes.normal.array,a=o[e*3]*3,c=o[e*3+1]*3,h=o[e*3+2]*3,d=new S.Vector3(n[a],n[a+1],n[a+2]),E=new S.Vector3(n[c],n[c+1],n[c+2]),u=new S.Vector3(n[h],n[h+1],n[h+2]),f=new S.Vector3(r[a],r[a+1],r[a+2]),A=new S.Vector3(r[c],r[c+1],r[c+2]),R=new S.Vector3(r[h],r[h+1],r[h+2]),T=(f.x+A.x+R.x)/3,F=(f.y+A.y+R.y)/3,g=(f.z+A.z+R.z)/3,p=new S.Vector3(T,F,g);if(i!==void 0&&t instanceof S.InstancedMesh){const m=new S.Matrix4;t.getMatrixAt(i,m);const O=new S.Matrix4;O.extractRotation(m),p.applyMatrix4(O),d.applyMatrix4(m),E.applyMatrix4(m),u.applyMatrix4(m)}return{p1:d,p2:E,p3:u,faceNormal:p}}round(t){t.x=Math.trunc(t.x*1e3)/1e3,t.y=Math.trunc(t.y*1e3)/1e3,t.z=Math.trunc(t.z*1e3)/1e3}getVolumeFromFragments(t){const e=this.components.get(ot),i=new S.Matrix4,o=[];for(const r in t){const a=e.list.get(r);if(!a)continue;const c=t[r];let h=0;for(const u of c){const f=a.getInstancesIDs(u);f&&(h+=f.size)}const d=new S.InstancedMesh(a.mesh.geometry,void 0,h);let E=0;for(const u of c){const f=a.getInstancesIDs(u);if(f)for(const A of f)a.mesh.getMatrixAt(A,i),d.setMatrixAt(E++,i)}o.push(d)}const n=this.getVolumeFromMeshes(o);for(const r of o)r.geometry=null,r.material=[],r.dispose();return n}getVolumeFromMeshes(t){let e=0;for(const i of t)e+=this.getVolumeOfMesh(i);return e}getFaceData(t,e,i){const o=this.getVerticesAndNormal(i,t,e),{p1:n,p2:r,p3:a,faceNormal:c}=o;this.round(n),this.round(r),this.round(a),this.round(c);const h=[{id:`${n.x}|${n.y}|${n.z}`,value:n},{id:`${r.x}|${r.y}|${r.z}`,value:r},{id:`${a.x}|${a.y}|${a.z}`,value:a}];h.sort((g,p)=>g.id<p.id?-1:g.id>p.id?1:0);const[{id:d,value:E},{id:u,value:f},{id:A,value:R}]=h,T=[{id:`${d}|${u}`,distance:E.distanceTo(f),points:[E,f]},{id:`${u}|${A}`,distance:f.distanceTo(R),points:[f,R]},{id:`${d}|${A}`,distance:E.distanceTo(R),points:[E,R]}],F=new S.Plane;return F.setFromNormalAndCoplanarPoint(c,n),F.constant=Math.round(F.constant*10)/10,{plane:F,edges:T}}getVolumeOfMesh(t){let e=0;const i=new S.Vector3,o=new S.Vector3,n=new S.Vector3,{index:r}=t.geometry,a=t.geometry.attributes.position.array;if(!r)return console.warn("Geometry must be indexed to compute its volume!"),0;const c=[];if(t instanceof S.InstancedMesh)for(let d=0;d<t.count;d++){const E=new S.Matrix4;t.getMatrixAt(d,E),c.push(E)}else c.push(new S.Matrix4().identity());const{matrixWorld:h}=t;for(let d=0;d<r.array.length-2;d+=3)for(const E of c){const u=E.multiply(h),f=r.array[d]*3,A=r.array[d+1]*3,R=r.array[d+2]*3;i.set(a[f],a[f+1],a[f+2]).applyMatrix4(u),o.set(a[A],a[A+1],a[A+2]).applyMatrix4(u),n.set(a[R],a[R+1],a[R+2]).applyMatrix4(u),e+=this.getSignedVolumeOfTriangle(i,o,n)}return Math.abs(e)}getSignedVolumeOfTriangle(t,e,i){const o=i.x*e.y*t.z,n=e.x*i.y*t.z,r=i.x*t.y*e.z,a=t.x*i.y*e.z,c=e.x*t.y*i.z,h=t.x*e.y*i.z;return 1/6*(-o+n+r-a-c+h)}};I(Ns,"uuid","267ca032-672f-4cb0-afa9-d24e904f39d6");let Fi=Ns;exports.AsyncEvent=Pe;exports.Base=Ls;exports.BaseCamera=mn;exports.BaseRenderer=Rn;exports.BaseScene=An;exports.BaseWorldItem=Ms;exports.BoundingBoxer=Ci;exports.Classifier=fs;exports.Clipper=fi;exports.Component=$;exports.Components=hs;exports.CullerRenderer=Mn;exports.Cullers=ds;exports.Disposer=_t;exports.Event=D;exports.Exploder=mi;exports.FirstPersonMode=Un;exports.FragmentsManager=ot;exports.GeometryTypes=Ni;exports.Grids=Ii;exports.Hider=Ri;exports.IfcCategories=Pr;exports.IfcCategoryMap=yi;exports.IfcElements=Bn;exports.IfcFragmentSettings=Ds;exports.IfcGeometryTiler=Ai;exports.IfcJsonExporter=us;exports.IfcLoader=Is;exports.IfcPropertiesManager=Ti;exports.IfcPropertiesTiler=kn;exports.IfcPropertiesUtils=Ut;exports.IfcRelationsIndexer=le;exports.IfcStreamingSettings=zn;exports.MaterialsUtils=ui;exports.MeasurementUtils=Fi;exports.MeshCullerRenderer=wn;exports.MiniMap=Dn;exports.MiniMaps=pi;exports.Mouse=On;exports.OrbitMode=xn;exports.OrthoPerspectiveCamera=Nr;exports.PlanMode=bn;exports.ProjectionManager=vn;exports.PropertiesStreamingSettings=Hn;exports.Raycasters=ae;exports.SimpleCamera=ce;exports.SimpleGrid=Pn;exports.SimplePlane=ws;exports.SimpleRaycaster=Sn;exports.SimpleRenderer=dr;exports.SimpleScene=Er;exports.SimpleWorld=_n;exports.UUID=re;exports.VertexPicker=hr;exports.Worlds=Es;exports.isPointInFrontOfPlane=gn;exports.obbFromPoints=Fn;exports.readPixelsAsync=Ln;