2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
(()=>{"use strict";var e,t={314:(e,t,n)=>{var a=n(437),o=n(38),l=n(697),d=n(878),r=(n(6),n(231));let i;async function s(e){const t=document.getElementById("full-screen"),n=new o.XF,s=n.get(o.RA),c=n.get(o.mg);i=c.create(),i.scene=new o.VS(n),i.renderer=new l.Hs(n,t),i.camera=new o.us(n),i.camera.controls._camera.near=.1,i.camera.controls._camera.far=1e4,i.camera.controls._camera.updateProjectionMatrix(),i.scene.setup(),i.renderer.postproduction.enabled=!0,n.init();const u=(new r.Y).setPath("./textures/"),[m]=await Promise.all([u.loadAsync("demonstration-research-center.hdr")]);m.mapping=a.wfO,i.scene.three.background=m,i.scene.three.backgroundBlurriness=.9,i.scene.three.environment=m;const{postproduction:p}=i.renderer;p.enabled=!0;const v=p.n8ao.configuration;p.setPasses({ao:!0}),v.halfRes=!0;const h=n.get(o.HB),g=n.get(o.Yd);await g.setup();const b=new d.IfcAPI;b.SetWasmPath("./wasm/",!0),await b.Init();const f=[d.IFCTENDONANCHOR,d.IFCREINFORCINGBAR,d.IFCREINFORCINGELEMENT];for(const e of f)g.settings.excludedCategories.add(e);let E,y,I;g.settings.webIfc.COORDINATE_TO_ORIGIN=!0;let S=document.getElementById("progress-text");!async function(e){const t=new FileReader;t.onprogress=t=>{if(t.lengthComputable){const n=t.loaded/t.total*100;S.textContent=`<DownLoad-reader> File Size: ${(e.size/1048576).toFixed(2)}MB | ${n.toFixed(2)}%`}},t.onload=async t=>{S.textContent=`<Reading File> File Size: ${(e.size/1048576).toFixed(2)} MB`,S.innerHTML+='<span class="loader"></span>';const a=new Uint8Array(t.target.result);E=await g.load(a),i.scene.three.add(E),document.getElementById("schema").textContent=E.ifcMetadata.schema,document.getElementById("schema").style.background="#6944F0",document.getElementById("file-name").textContent=e.name.replace(/\.[^/.]+$/,"")+".ifc",y=b.OpenModel(a);const l=n.get(o.bX);l.add(E);const d=l.getMesh();l.reset(),i.camera.controls.fitToSphere(d,!0),I=n.get(o.$O),await I.process(E),await async function(){if(!h.groups.size)return;const e=Array.from(h.groups.values())[0];L=e.getLocalProperties()}(),await async function(){w=I.serializeAllRelations(),N=JSON.parse(w),A=Object.values(N)[0]}(),function(){const e=Number(Object.keys(A)[0]),t=document.querySelector(".tree-container");t.style.cssText="margin-top: 14px";const n=document.createElement("ul");n.className="tree",t.appendChild(n),M(n,e)}(),document.querySelector(".progress-wrap").style.display="none"},t.readAsArrayBuffer(e)}(e);const C=n.get(l.MD);C.setup({world:i}),C.zoomToSelection=!0;const T=n.get(l.TF);T.world=i,T.enabled=!0,T.create("example",new a.V9B({color:12382500,transparent:!0,opacity:.5})),C.events.select.onHighlight.add(e=>{const t=Object.values(e)[0];t&&(t.forEach(async e=>{await async function(e,t){document.querySelector(".right").classList.add("show-right"),document.querySelector(".right-conts").innerHTML="";const n=await e.getProperties(Number(t));if(n){const e=`\n <div class="accordion">\n <div class="accordion-header">\n <button type="button" class="btn-accordion" aria-expanded="true" aria-controls="Attributes">\n Attributes\n </button>\n </div>\n <div class="accordion-collapse collapse" id="Attributes" aria-hidden="false">\n <div class="accordion-body">\n \x3c!-- <dl>\n <dt>Class</dt>\n <dd>${n?.constructor?.name}</dd>\n </dl>\n <dl>\n <dt>Global Id</dt>\n <dd>${n?.GlobalId?.value}</dd>\n </dl> --\x3e\n </div>\n </div>\n </div>\n `;document.querySelector(".right-conts").innerHTML+=e;const t=document.getElementById("Attributes").children[0],a=[{label:"Class",value:n?.constructor?.name},{label:"Global Id",value:n?.GlobalId?.value},{label:"Name",value:n?.Name?.value},{label:"Object Type",value:n?.ObjectType?.value},{label:"Tag",value:n?.Tag?.value},{label:"Pre-Defined Type",value:n?.PredefinedType?.value}];t.innerHTML+=a.filter(e=>e.value).map(e=>`\n <dl>\n <dt>${e.label}</dt>\n <dd>${e.value}</dd>\n </dl>\n `).join(""),a.filter(e=>e.value).map(e=>{})}const a=I.getEntityRelations(e,Number(t),"IsDefinedBy");if(a.length){const t='\n <div class="accordion">\n <div class="accordion-header">\n <button type="button" class="btn-accordion" aria-expanded="true" aria-controls="PropertySets">\n Property Sets\n </button>\n </div>\n <div class="accordion-collapse collapse" id="PropertySets" aria-hidden="false">\n <div class="accordion-body">\n \x3c!-- <div class="sub-title">GSA Space Areas</div>\n <dl>\n <dt>Class</dt>\n <dd>IfcSlab</dd>\n </dl>\n <dl>\n <dt>Global Id</dt>\n <dd>1s5utE</dd>\n </dl> --\x3e\n </div>\n </div>\n </div>\n ';document.querySelector(".right-conts").innerHTML+=t;const n=document.getElementById("PropertySets").children[0];for(const t of a){const a=await e.getProperties(t),o=`\n <div class="sub-title">•${a?.Name?.value}</div>\n `;n.innerHTML+=o;const l=a.HasProperties;if(l){let t=[];for(const n of l){const a=await e.getProperties(Number(n.value));a?.Name?.value&&t.push({name:a.Name.value,value:a?.NominalValue?.value||""})}t.sort((e,t)=>e.name.localeCompare(t.name)),t.forEach(e=>{});let a="";t.forEach(e=>{a+=`\n <dl>\n <dt>${e.name}</dt>\n <dd>${e.value}</dd>\n </dl>\n `}),n.innerHTML+=a}}}const o=I.getEntityRelations(e,Number(t),"HasAssociations");if(o.length){const t='\n <div class="accordion">\n <div class="accordion-header">\n <button type="button" class="btn-accordion" aria-expanded="true" aria-controls="Material">\n Material\n </button>\n </div>\n <div class="accordion-collapse collapse" id="Material" aria-hidden="false">\n <div class="accordion-body">\n \x3c!-- <div class="sub-title">Layers</div>\n <dl>\n <dt>Thickness</dt>\n <dd>0.3</dd>\n </dl>\n <dl>\n <dt>Material</dt>\n <dd>Suelos por defecto</dd>\n </dl> --\x3e\n </div>\n </div>\n </div>\n ';document.querySelector(".right-conts").innerHTML+=t;const n=document.getElementById("Material").children[0];for(const t of o){const a=await e.getProperties(t);if(a.type===d.IFCMATERIALLAYERSETUSAGE){const t=a?.ForLayerSet?.value,o=await e.getProperties(t);if(!o)return;for(const t of o.MaterialLayers){const a=await e.getProperties(t.value),o=await e.getProperties(a.Material.value),l=`\n <div class="sub-title">•Layer</div>\n <dl>\n <dt>Thickness</dt>\n <dd>${a?.LayerThickness?.value}</dd>\n </dl>\n <dl>\n <dt>Material</dt>\n <dd>${o?.Name?.value}</dd>\n </dl>\n `;n.innerHTML+=l}}if(a.type===d.IFCMATERIAL){const e=`\n <dl>\n <dt>Name</dt>\n <dd>${a?.Name?.value}</dd>\n </dl>\n `;n.innerHTML+=e}if(a.type===d.IFCMATERIALLIST)for(const t of a.Materials){const a=await e.getProperties(t.value),o=`\n <dl>\n <dt>Name</dt>\n <dd>${a?.Name?.value}</dd>\n </dl>\n `;n.innerHTML+=o}}}const l=I.getEntityRelations(e,Number(t),"ContainedInStructure");if(l)for(const t of l){const n=await e.getProperties(t),a='\n <div class="accordion">\n <div class="accordion-header">\n <button type="button" class="btn-accordion" aria-expanded="true" aria-controls="SpatialContainer">\n Spatial Container\n </button>\n </div>\n <div class="accordion-collapse collapse" id="SpatialContainer" aria-hidden="false">\n <div class="accordion-body">\n \x3c!-- <div class="sub-title">GSA Space Areas</div>\n <dl>\n <dt>Class</dt>\n <dd>IfcSlab</dd>\n </dl>\n <dl>\n <dt>Global Id</dt>\n <dd>1s5utE</dd>\n </dl> --\x3e\n </div>\n </div>\n </div>\n ';document.querySelector(".right-conts").innerHTML+=a;const o=document.getElementById("SpatialContainer").children[0],l=[{label:"GlobalId",value:n?.GlobalId?.value},{label:"Name",value:n?.Name?.value},{label:"ObjectType",value:n?.ObjectType?.value},{label:"LongName",value:n?.LongName?.value},{label:"Elevation",value:n?.Elevation?.value}];o.innerHTML+=l.filter(e=>e.value).map(e=>`\n <dl>\n <dt>${e.label}</dt>\n <dd>${e.value}</dd>\n </dl>\n `).join(""),l.filter(e=>e.value).map(e=>{})}document.querySelectorAll(".btn-accordion").forEach(e=>{e.addEventListener("click",()=>{e.classList.toggle("collapse");const t="true"===e.getAttribute("aria-expanded");e.setAttribute("aria-expanded",!t);document.getElementById(e.getAttribute("aria-controls")).setAttribute("aria-hidden",t)})})}(E,e);const t=document.getElementById(e+"-div");t&&t.classList.add("selected")}),T.clear("example"),T.add("example",e))}),C.events.select.onClear.add(()=>{T.clear("example"),document.querySelector(".right").classList.remove("show-right");document.querySelectorAll(".tree li > div.selected").forEach(e=>{e.classList.remove("selected")})});let L,w,N,A;function M(e,t){const n=Number(t),a=L[n],o=a.constructor.name,l=I.getEntityChildren(E,n),d=E.getFragmentMap(l),r=document.createElement("ul"),i=document.createElement("li"),c=document.createElement("input"),u=document.createElement("label"),m=document.createElement("input"),p=document.createElement("label"),v=document.createElement("div"),h=document.createElement("span"),g=document.createElement("span");O(n).length<1&&(c.style.display="none",u.style.display="none"),c.type="checkbox",c.className="input-caret",c.dataset.expressid=n,c.id=n,c.addEventListener("change",e=>{if(e.target.checked){O(n).forEach(e=>{M(i,e)})}else{i.querySelectorAll("ul").forEach(e=>{e.remove()})}}),u.htmlFor=n,u.className="label-caret",m.type="checkbox",m.className="input-visible",m.checked=!0,m.id=n+"-visible",p.htmlFor=n+"-visible",p.className="label-visible",p.addEventListener("click",e=>{const t=!e.target.previousElementSibling.checked;s.set(t,d)}),v.id=n+"-div",v.title=a?.Name?.value||"",v.addEventListener("click",async e=>{C.highlightByID("select",d,!0,!0);document.querySelectorAll(".tree li > div.selected").forEach(e=>{e.classList.remove("selected")}),v.classList.add("selected")}),h.className="ifc-type",h.textContent=o,v.appendChild(h),g.className="ifc-name",g.textContent=a?.Name?.value||"",v.appendChild(g),i.appendChild(c),i.appendChild(u),i.appendChild(m),i.appendChild(p),i.appendChild(v),r.appendChild(i),e.appendChild(r)}function O(e){const t=[],n=Number(e),a=I.getEntityRelations(E,n,"IsDecomposedBy"),o=I.getEntityRelations(E,n,"ContainsElements");return(a.length||o.length)&&(a.forEach(e=>{t.push(e)}),o.forEach(e=>{t.push(e)})),t}}d.IFCRELAGGREGATES,d.IFCRELASSOCIATESMATERIAL,d.IFCRELASSOCIATESCLASSIFICATION,d.IFCRELASSIGNSTOGROUP,d.IFCRELDEFINESBYPROPERTIES,d.IFCRELDEFINESBYTYPE,d.IFCRELDEFINESBYTEMPLATE,d.IFCRELCONTAINEDINSPATIALSTRUCTURE,d.IFCRELFLOWCONTROLELEMENTS,d.IFCRELCONNECTSELEMENTS,d.IFCRELASSIGNSTOPRODUCT,d.IFCRELDECLARES,d.IFCRELASSIGNSTOCONTROL,d.IFCRELNESTS,d.IFCRELASSOCIATESDOCUMENT;async function c(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:960,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:540,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.9,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"image/jpeg",o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"cover",l=arguments.length>5&&void 0!==arguments[5]?arguments[5]:200;const d=i.renderer._canvas,r=d.width||d.clientWidth,s=d.height||d.clientHeight;if(!r||!s||r<l||s<l)return null;i.renderer.three.render(i.scene,i.camera),await new Promise(e=>requestAnimationFrame(e));const c=r/s,u=e/t,m=document.createElement("canvas");m.width=e,m.height=t;const p=m.getContext("2d");let v=0,h=0,g=r,b=s,f=0,E=0,y=e,I=t;if("fit"===o){const n=Math.min(e/r,t/s);y=Math.round(r*n),I=Math.round(s*n),f=Math.round((e-y)/2),E=Math.round((t-I)/2)}else c>u?(g=Math.round(s*u),v=Math.round((r-g)/2)):(b=Math.round(r/u),h=Math.round((s-b)/2));p.drawImage(d,v,h,g,b,f,E,y,I);return await new Promise(e=>m.toBlob(e,a,n))}window.addEventListener("message",async e=>{if(!e.data?.path)return;let{path:t,thumbnail_key:n,resourcePath:a,dataId:o,path_name:l}=e.data;"null"==n&&(n=null);try{if(await async function(e){const t=e.split("/").pop().split("?")[0],n=decodeURIComponent(t).split("__")[0];try{const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch ${e}: ${t.status}`);const a=t.headers.get("Content-Length"),o=a?parseInt(a,10):0,l=t.body.getReader();let d=0;const r=[];for(;;){const{done:e,value:t}=await l.read();if(e)break;if(r.push(t),d+=t.length,o){const e=(d/o*100).toFixed(2);u.textContent=`File Size: ${(o/1048576).toFixed(2)}MB | ${e}%`}else u.textContent=`Downloaded: ${(d/1048576).toFixed(2)}MB`}const i=t.headers.get("Content-Type")||"application/octet-stream",c=new File(r,n,{type:i});await s(c)}catch(e){}}(t),n)return;const d=a.replace(/\.[^/.]+$/,".jpeg"),r=`${e.origin}${l}`,i=await axios.post(`${r}/generateUploadUrl`,{resourcePath:a,date:new Date,needsThumbnail:!0,thumbnailPath:d}),{thumbnailUrl:m,thumbnailKey:p}=i.data.result;await new Promise(e=>setTimeout(e,1500));const v=await c(763,540,.9);if(!v)return;await axios.put(m,v,{headers:{"Content-Type":v.type||"image/jpeg"}});await axios.post(`${r}/updateThumbnailInfo`,{data_id:o,thumbnail_key:p,thumbnail_size:v.size})}catch(e){e.response||e.request}},!1);let u=document.getElementById("progress-text")}},n={};function a(e){var o=n[e];if(void 0!==o)return o.exports;var l=n[e]={exports:{}};return t[e](l,l.exports,a),l.exports}a.m=t,a.amdO={},e=[],a.O=(t,n,o,l)=>{if(!n){var d=1/0;for(c=0;c<e.length;c++){for(var[n,o,l]=e[c],r=!0,i=0;i<n.length;i++)(!1&l||d>=l)&&Object.keys(a.O).every(e=>a.O[e](n[i]))?n.splice(i--,1):(r=!1,l<d&&(d=l));if(r){e.splice(c--,1);var s=o();void 0!==s&&(t=s)}}return t}l=l||0;for(var c=e.length;c>0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[n,o,l]},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e={792:0};a.O.j=t=>0===e[t];var t=(t,n)=>{var o,l,[d,r,i]=n,s=0;if(d.some(t=>0!==e[t])){for(o in r)a.o(r,o)&&(a.m[o]=r[o]);if(i)var c=i(a)}for(t&&t(n);s<d.length;s++)l=d[s],a.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return a.O(c)},n=self.webpackChunkifcviewer2=self.webpackChunkifcviewer2||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var o=a.O(void 0,[59],()=>a(314));o=a.O(o)})();
|
|
//# sourceMappingURL=bundle.f1f097cba5dc7baf1c3c.js.map
|