-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApp.70dc7033995b3b368de09739e134e0f9d61a619b.js
1 lines (1 loc) · 69.9 KB
/
App.70dc7033995b3b368de09739e134e0f9d61a619b.js
1
"use strict";function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _createForOfIteratorHelper(o,allowArrayLike){var i,it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length)return it&&(o=it),i=0,{s:allowArrayLike=function(){},n:function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function(_e2){throw _e2},f:allowArrayLike};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function(){it=it.call(o)},n:function(){var step=it.next();return normalCompletion=step.done,step},e:function(_e3){didErr=!0,err=_e3},f:function(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Map"===(n="Object"===n&&o.constructor?o.constructor.name:n)||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_arr=[],_n=!0,_d=!1;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}define("bimsurfer/src/EventHandler",[],function(){function EventHandler(){this.handlers={}}return EventHandler.prototype.on=function(evt,handler){(this.handlers[evt]||(this.handlers[evt]=[])).push(handler)},EventHandler.prototype.off=function(evt,handler){var evt=this.handlers[evt],found=!1;if(void 0===evt||-1<=(handler=evt.indexOf(handler))&&(evt.splice(handler,1),found=!0),!found)throw new Error("Handler not found")},EventHandler.prototype.fire=function(evt,args){var h=this.handlers[evt];if(h)for(var i=0;i<h.length;++i)h[i].apply(this,args)},EventHandler}),define("bimsurfer/src/Utils",[],function(){function xmlToJson(node,attributeRenamer){if(attributeRenamer=attributeRenamer||{},node.nodeType===node.TEXT_NODE){var v=node.nodeValue;if(null===v.match(/^\s+$/))return v}else if(node.nodeType===node.ELEMENT_NODE||node.nodeType===node.DOCUMENT_NODE){var json={type:node.nodeName,children:[]};if(node.nodeType===node.ELEMENT_NODE)for(var j=0;j<node.attributes.length;j++){var attribute=node.attributes[j];json[attributeRenamer[attribute.nodeName]||attribute.nodeName]=attribute.nodeValue}for(var i=0;i<node.childNodes.length;i++)(j=xmlToJson(node.childNodes[i],attributeRenamer))&&json.children.push(j);return json}}function b64(v,len){return(len&&4!=len?[0,6]:[0,6,12,18]).map(function(i){return guidChars.substr(parseInt(v/(1<<i))%64,1)}).reverse().join("")}var guidChars=[["0",10],["A",26],["a",26],["_",1],["$",1]].map(function(a){for(var li=[],st=a[0].charCodeAt(0),en=st+a[1],i=st;i<en;++i)li.push(i);return String.fromCharCode.apply(null,li)}).join("");return{XmlToJson:xmlToJson,Clone:function(ob){return JSON.parse(JSON.stringify(ob))},CompressGuid:function(g){g=g.replace(/-/g,"");var bs=[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30].map(function(i){return parseInt(g.substr(i,2),16)});return b64(bs[0],2)+[1,4,7,10,13].map(function(i){return b64((bs[i]<<16)+(bs[i+1]<<8)+bs[i+2])}).join("")},FindNodeOfType:function(m,t){var li=[];return function _(n){n.type===t&&li.push(n),(n.children||[]).forEach(function(c){_(c)})}(m),li},Delay:function(dt){return new Promise(function(resolve,reject){setTimeout(resolve,dt)})}}}),define("bimsurfer/src/svgViewer/svgViewer",["../EventHandler","../Utils"],function(EventHandler,Utils){function createElem(tag,attrs,NS){for(var ob=NS?document.createElementNS(NS,tag):document.createElement(tag),_i=0,_Object$entries=Object.entries(attrs||{});_i<_Object$entries.length;_i++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i],2),k=_Object$entries$_i[0],_Object$entries$_i=_Object$entries$_i[1];NS?ob.setAttribute(k,_Object$entries$_i):ob.setAttributeNS(null,k,_Object$entries$_i)}return ob}function children(node){return Array.from(node.childNodes).filter(function(n){return 1===n.nodeType})}function SvgViewer(cfg){var self=this,elem=(EventHandler.call(this),self.selected=new Set,self.lineMapping=new Map,self.svg=null,document.getElementById(cfg.domNode));self.load=function(src){self.select=createElem("select"),self.obj=createElem("div"),elem.appendChild(self.obj);var d=createElem("div",{class:"selectcontainer"});return elem.appendChild(d),d.appendChild(self.select),self.obj.style.width=elem.offsetWidth+"px",self.obj.style.height=elem.offsetHeight-d.offsetHeight+"px",fetch(src).then(function(response){if(response.ok)return response.text();throw new Error("HTTP status "+response.status)}).then(function(text){self.obj.innerHTML=text;text=self.obj.getElementsByTagName("svg")[0];text.style.width=text.style.height="100%"}).catch(function(exc){self.error=!0}).then(function(){self._onload()})},self._updateState=function(n,parentState){if(parentState||self.selected.has(n)){if(!self.lineMapping.has(n)){var _step,_iterator=_createForOfIteratorHelper(children(n));try{for(_iterator.s();!(_step=_iterator.n()).done;){var c=_step.value;self._updateState(c,!0)}}catch(err){_iterator.e(err)}finally{_iterator.f()}"path"==n.tagName&&((parentState=n.cloneNode(!1)).style.cssText="fill: none; stroke: lime; stroke-width: 3px",self.lineMapping.set(n,parentState),self.rootGroup.appendChild(parentState))}}else{self.lineMapping.has(n)&&(self.rootGroup.removeChild(self.lineMapping.get(n)),self.lineMapping.delete(n));var _step2,_iterator2=_createForOfIteratorHelper(children(n));try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _c=_step2.value;self._updateState(_c,!1)}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}},self.setSelection=function(params){function updateState(n){self._updateState(n)}params.clear&&(previous=Array.from(self.selected),self.selected.clear(),previous.forEach(updateState));var previous=params.selected?self.selected.add:self.selected.delete,prefix=self.legacySvgExport?"product-product":"product",nodes=null;params.nodes?nodes=params.nodes:params.ids&&(nodes=params.ids.map(function(s){return self.guidToIdMap.get(s)||s}).map(function(s){return"".concat(prefix,"-").concat(s,"-body")}).map(self.svg.getElementById.bind(self.svg)).filter(function(s){return null!==s})),nodes.forEach(previous.bind(self.selected)),nodes.forEach(updateState),params.nodes&&(previous=params.nodes.map(function(n){return n.getAttribute("id")}),self.fire("selection-changed",[{objects:previous}]))},self.toggleStorey=function(i){self.setSelection({clear:!0,nodes:[],selected:!0}),self.storeys.forEach(function(s,j){s.style.visibility=i==j?"visible":"hidden"}),self.updateTextVisibility()},self.reset=function(args){if(args.colors)for(var _i2=0,_Array$from=Array.from(self.svg.getElementsByTagName("path"));_i2<_Array$from.length;_i2++)_Array$from[_i2]},self.setColor=function(args){var nodes=args.ids.map(function(s){return self.guidToIdMap.get(s)||s}).map(function(s){return"product-product-".concat(s,"-body")}).map(self.svg.getElementById.bind(self.svg)).filter(function(s){return null!==s}),color="#"+args.color.map(function(f){return("0"+parseInt(255*f).toString(16)).substr(-2)}).join("");nodes.forEach(function(n){n.style.fill=n.style.stroke=color,Array.from(n.getElementsByTagName("path")).forEach(function(n){n.style.fill=n.style.stroke=color})})},self.destroy=function(){for(self.spz.destroy();elem.lastChild;)elem.removeChild(elem.lastChild)},self.updateTextVisibility=function(){self.textNodes&&self.textNodes.forEach(function(t){for(var storeyVisible,n=t;n;){if(-1!==self.storeys.indexOf(n)){storeyVisible="hidden"!==n.style.visibility;break}n=n.parentElement}var cls=t.parentElement.className.baseVal,cls=storeyVisible&&(cls.includes("Dimension")||cls.includes("IfcBuildingStorey")||!Array.from(t.parentElement.querySelectorAll("path")).some(function(path){return function(text,path){var Mt=text.getScreenCTM().inverse(),P1=text.ownerSVGElement.createSVGPoint(),P2=text.ownerSVGElement.createSVGPoint();if(void 0===(text=text.getBoundingClientRect()))return!1;P1.x=text.x,P1.y=text.y,P2.x=text.x+text.width,P2.y=text.y+text.height;for(var P1=P1.matrixTransform(Mt),text=(P2=P2.matrixTransform(Mt)).x-P1.x,Mt=P2.y-P1.y,len=path.getTotalLength(),u=0,step=(text<Mt?text:Mt)/2;u<len;){var p=path.getPointAtLength(u);if(p.x>=P1.x&&p.y>=P1.y&&p.x<=P2.x&&p.y<=P2.y)return!0;u+=step}return!1}(t,path)}));t.style.visibility=cls?"visible":"hidden"})},self._onload=function(){var svgDoc,updateZoom;self.error||(svgDoc=self.obj.contentDocument||self.obj.getElementsByTagName("svg")[0],self.svg=self.obj.contentDocument?children(svgDoc)[0]:svgDoc,self.reset({colors:!0}),self.storeys=children(self.svg).filter(function(n){return"g"==n.tagName}),0!==self.storeys.length&&(self.guidToIdMap=new Map,function traverse(e){var g,_step3,id=e.getAttribute("id"),_iterator3=(null!==id&&(2==(id=id.split("-")).filter(function(s){return"product"===s}).length&&(self.legacySvgExport=!0),id=id.filter(function(s){return"product"!==s&&"body"!==s&&"storey"!==s}).join("-"),g=Utils.CompressGuid(id),self.guidToIdMap.set(g,id)),_createForOfIteratorHelper(children(e)));try{for(_iterator3.s();!(_step3=_iterator3.n()).done;)traverse(_step3.value)}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}(self.svg),self.toggleStorey(0),self.select.onchange=function(evt){self.toggleStorey(evt.target.selectedIndex)},self.storeys.forEach(function(s,i){var opt=document.createElement("option"),s=s.hasAttribute("data-name")?s.getAttribute("data-name"):s.hasAttribute("ifc:name")?s.getAttribute("ifc:name"):"storey ".concat(i);opt.setAttribute("value",s),opt.appendChild(document.createTextNode(s)),self.select.appendChild(opt)}),self.textNodes=Array.from(self.svg.querySelectorAll("text")),updateZoom=function(scale){self.svg.style.fontSize=10/self.rootGroup.transform.baseVal.getItem(0).matrix.a+"pt",self.updateTextVisibility()},self.spz=svgPanZoom(self.obj.contentDocument?self.obj:self.obj.getElementsByTagName("svg")[0],{zoomEnabled:!0,preventMouseEventsDefault:!0,controlIconsEnabled:!1,onZoom:updateZoom}),self.rootGroup=children(self.svg).filter(function(n){return"g"==n.tagName})[0],updateZoom(),svgDoc.onclick=function(evt){var n=evt.target,nodes=[];if("svg"!==n.tagName){for(;"g"!==n.tagName&&n.parentNode;)n=n.parentNode;nodes.push(n)}self.setSelection({selected:!0,clear:cfg.app.shouldClearSelection(evt),nodes:nodes})}))}}return SvgViewer.prototype=Object.create(EventHandler.prototype),SvgViewer}),define("bimsurfer/src/threeViewer/threeViewer",["../EventHandler","../Utils"],function(EventHandler,Utils){function ThreeViewer(cfg){var self=this,raycaster=(EventHandler.call(this),self.allIds=[],self.selected=new Set,self.secondarySelected=new Set,self.previousMaterials=new Map,self.originalMaterials=new Map,self.secondaryOrPrimary=new Map,self.nameToId=new Map,self.three=null,new THREE.Raycaster),mouse=new THREE.Vector2,renderer=new THREE.WebGLRenderer({alpha:!0,antialias:!0,preserveDrawingBuffer:!0}),viewerContainer=document.getElementById(cfg.domNode),createdModels=[];function rerender(){return renderer.render(scene,camera)}var camera=window.cam=new THREE.PerspectiveCamera(45,1,.1,9999),scene=(self.resize=function(){var width=viewerContainer.offsetWidth,height=(height=viewerContainer.offsetHeight)||600;cam.aspect=width/height,renderer.setSize(width,height),camera.updateProjectionMatrix()},self.resize(),self.scene=new THREE.Scene),lineMaterial=new THREE.LineBasicMaterial({color:0,transparent:!0,opacity:.3}),lineSelectionMaterial=new THREE.LineBasicMaterial({color:16711680,transparent:!1}),lineSecondarySelectionMaterial=new THREE.LineBasicMaterial({color:14512145,transparent:!1}),light=(lineSelectionMaterial.depthTest=!1,lineSecondarySelectionMaterial.depthTest=!1,renderer.setPixelRatio(window.devicePixelRatio),renderer.gammaFactor=2.2,document.getElementById(cfg.domNode).appendChild(renderer.domElement),renderer.setClearColor(0,0),new THREE.DirectionalLight(16777215));light.position.set(20,10,30),scene.add(light);(light=new THREE.DirectionalLight(16777215,.8)).position.set(-10,1,-30),scene.add(light),scene.add(new THREE.AmbientLight(4210768));var controls=new THREE.OrbitControls(camera,viewerContainer),first=(controls.addEventListener("change",function(){self.fire("camera-changed",[self.getCamera()]),rerender()}),!0);self.reset=function(params){if(params.colors){var _step5,_iterator5=_createForOfIteratorHelper(self.originalMaterials);try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var _step5$value=_slicedToArray(_step5.value,2),id=_step5$value[0],mat=_step5$value[1];scene.getObjectById(id).material=mat}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}rerender()}},self.loadglTF=function(src){var draco,threePath,loader=new THREE.GLTFLoader,isIE11=!!window.MSInputMethodContext&&!!document.documentMode;isIE11||(draco=new THREE.DRACOLoader,threePath=Array.from(document.head.querySelectorAll("script")).map(function(s){return s.src}).filter(function(s){return s.split("/").reverse()[0].startsWith("three")})[0],draco.setDecoderPath(threePath.substr(0,threePath.lastIndexOf("/")+1)),loader.setDRACOLoader(draco)),loader.load(src+(isIE11?".unoptimized":"")+".glb",function(gltf){scene.add(gltf.scene);var createdLines={},geometryCount={},createLines=(gltf.scene.traverse(function(obj){obj.isMesh&&obj.geometry&&(geometryCount[obj.geometry.id]=1)}),Object.keys(geometryCount).length<=500);if(createLines||console.log("not creating line geometries due to model size"),gltf.scene.traverse(function(obj){var edges;obj.isMesh&&obj.geometry&&(self.originalMaterials.set(obj.id,obj.material),obj.material.side=THREE.DoubleSide,obj.material.depthWrite=!obj.material.transparent,createLines&&(edges=obj.geometry.id in createdLines?createdLines[obj.geometry.id]:createdLines[obj.geometry.id]=new THREE.EdgesGeometry(obj.geometry),edges=new THREE.LineSegments(edges,lineMaterial),obj.add(edges))),obj.name.startsWith("product-")&&(edges=obj.name.substr(8,36),edges=Utils.CompressGuid(edges),self.allIds.push(edges),self.nameToId.set(edges,obj.id),self.nameToId.set(obj.name,obj.id))}),first){for(var boundingBox=new THREE.Box3,gltf=(boundingBox.setFromObject(scene),new THREE.Vector3),viewDistance=(boundingBox.getCenter(gltf),controls.target=gltf,boundingBox.getSize(new THREE.Vector3).length()),fovFactor=(camera.position.copy(gltf.clone().add(new THREE.Vector3(.5,.25,1).normalize().multiplyScalar(viewDistance))),camera.near=viewDistance/100,camera.far=100*viewDistance,controls.update(),camera.updateProjectionMatrix(),camera.updateMatrixWorld(),Math.tan(camera.fov/2/180*3.141592653)),outside=0,i=0;i<8;i++){var v=new THREE.Vector3((1&i?boundingBox.min:boundingBox.max).x,(2&i?boundingBox.min:boundingBox.max).y,(4&i?boundingBox.min:boundingBox.max).z);v.applyMatrix4(camera.matrixWorldInverse),outside=Math.max(outside,Math.abs(v.x/camera.aspect)-fovFactor*-v.z,Math.abs(v.y)-fovFactor*-v.z),console.log(v.x/camera.aspect,fovFactor*-v.z)}viewDistance+=2*outside,camera.position.copy(gltf.clone().add(new THREE.Vector3(.5,.25,1).normalize().multiplyScalar(viewDistance))),controls.update(),first=!1}self.fire("loaded")},function(xhr){console.log(xhr.loaded/xhr.total*100+"% loaded")},function(error){console.log("An error happened",error)})};var mouseHasMoved=!(self._updateState=function(){self.previousMaterials.forEach(function(val,id,_){var obj;self.selected.has(id)||self.secondarySelected.has(id)||((obj=scene.getObjectById(id)).material=self.previousMaterials.get(id),self.previousMaterials.delete(id),obj.children.length&&(obj.children[0].material=lineMaterial))}),[self.secondarySelected,self.selected].forEach(function(collection,is_primary){var _step6,originalMaterial,secondary,_iterator6=_createForOfIteratorHelper(collection);try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var obj,_id=_step6.value,is_unselected=!self.previousMaterials.has(_id),has_incorrect_state=self.secondaryOrPrimary.has(_id)&&self.secondaryOrPrimary.get(_id)!=is_primary;(is_unselected||has_incorrect_state)&&(obj=scene.getObjectById(_id),is_unselected&&self.previousMaterials.set(_id,obj.material),self.secondaryOrPrimary.set(_id,is_primary),obj.material=(originalMaterial=obj.material,secondary=!is_primary,(originalMaterial=new THREE.MeshStandardMaterial({color:originalMaterial.color.clone().lerp(new THREE.Color(secondary?16744448:16711680),secondary?.3:.7),flatShading:!0,metalness:0,roughness:1})).side=THREE.DoubleSide,originalMaterial),obj.children.length&&(obj.children[0].material=is_primary?lineSelectionMaterial:lineSecondarySelectionMaterial))}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}}),setTimeout(rerender,0)});viewerContainer.addEventListener("mousedown",function(){mouseHasMoved=!1},!1),viewerContainer.addEventListener("mousemove",function(){mouseHasMoved=!0},!1),viewerContainer.addEventListener("mouseup",function(){setTimeout(function(){mouseHasMoved=!1},20)},!1),viewerContainer.addEventListener("click",function(evt){if(mouseHasMoved)return!1;if(!cfg.disableSelection){var rect=renderer.domElement.getBoundingClientRect(),rect=(mouse.x=(event.clientX-rect.left)/rect.width*2-1,mouse.y=2*-((event.clientY-rect.top)/rect.height)+1,evt.preventDefault(),raycaster.setFromCamera(mouse,camera),raycaster.intersectObjects(scene.children,!0)),ids=[],clearSelection=cfg.app.shouldClearSelection(evt),selected=(clearSelection&&self.selected.clear(),!0),processSelection=function(name,geomIds){ids.push(name);name=((selected=!(self.selected.has(geomIds[0])&&!clearSelection))?self.selected.add:self.selected.delete).bind(self.selected);geomIds.forEach(name)};if(rect.length){var _step7,_iterator7=_createForOfIteratorHelper(rect);try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var x=_step7.value;if("BufferGeometry"==x.object.geometry.type){x.object.name.startsWith("product-")?processSelection(x.object.name.substr(8,36),[x.object.id]):!function(obj){var _step4,_iterator4=_createForOfIteratorHelper(createdModels);try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var m=_step4.value;if(obj.name.startsWith(m+":"))return 1}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}(x.object)?processSelection(x.object.parent.name.substr(8,36),x.object.parent.children.map(function(c){return c.id})):processSelection(x.object.name,[x.object.id]);break}}}catch(err){_iterator7.e(err)}finally{_iterator7.f()}}self._updateState(),self.fire("selection-changed",[{objects:ids,clear:clearSelection,selected:selected}])}},!1),self.setColor=function(params){params.ids.forEach(function(id){id=scene.getObjectById(id)||scene.getObjectById(self.nameToId.get(id));id&&("Group"===id.type?id.children:[id]).forEach(function(object){var opacity,color=params.color,material=object.material=object.material.clone();Array.isArray(color)||color instanceof Float32Array?material.color=new THREE.Color(color[0],color[1],color[2]):"rgb".split().forEach(function(c){c in color&&(material.color[c]=color[c])}),Array.isArray(color)||color instanceof Float32Array?opacity=3<color.length?color[3]:1:("a"in color||"A"in color)&&(opacity="a"in color?color.a:color.A),opacity!==material.opacity&&(material.opacity=opacity,material.transparent=opacity<1,material.depthWrite=!material.transparent)})}),rerender()},self.setVisibility=function(params){var _s2,visibility,ids=params.clear?self.allIds:params.ids;visibility=params.clear?(_s2=new Set(params.ids),function(id){return _s2.has(id)}):function(id){return params.visible},ids.forEach(function(id){var obj=scene.getObjectById(id)||scene.getObjectById(self.nameToId.get(id));obj&&("Group"===obj.type?obj.children:[obj]).forEach(function(object){object.visible=visibility(id)})}),rerender()},self.getObjectIds=function(){return self.allIds},self.setSelection=function(params){var collection=params.secondary?self.secondarySelected:self.selected;self.secondarySelected.clear(),params.clear&&collection.clear(),params.ids.forEach(function(id){var id=self.nameToId.get(id),node=scene.getObjectById(id);if(node)if("Group"===node.type){var _step8,_iterator8=_createForOfIteratorHelper(scene.getObjectById(id).children);try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var c=_step8.value;collection.add(c.id)}}catch(err){_iterator8.e(err)}finally{_iterator8.f()}}else collection.add(id)}),params.selected||params.ids.forEach(function(id){id=self.nameToId.get(id);collection.delete(id)}),self._updateState()},self.getSelection=function(){var elements=new Set;return self.selected.forEach(function(id){id=self.scene.getObjectById(id);id.name.startsWith("product-")?elements.add(id.name.substr(8,36)):elements.add(id.parent.name.substr(8,36))}),Array.from(elements)},self.createModel=function(name){createdModels.push(name)};var createdGeometries={},createdGeometryColors={};self.createGeometry=function(id,ps,ns,clrs,idxs){createdGeometryColors[id]=new THREE.Color(clrs[0],clrs[1],clrs[2]);clrs=createdGeometries[id]=new THREE.BufferGeometry;clrs.addAttribute("position",new THREE.BufferAttribute(new Float32Array(ps),3)),clrs.addAttribute("normal",new THREE.BufferAttribute(new Float32Array(ns),3)),clrs.setIndex(new THREE.BufferAttribute(new Uint16Array(idxs),1))},self.createObject=function(modelId,roid,oid,objectId,geometryIds,type,matrix){var material=new THREE.MeshLambertMaterial({color:createdGeometryColors[geometryIds[0]],vertexColors:THREE.VertexColors}),geometryIds=new THREE.Mesh(createdGeometries[geometryIds[0]],material),material=matrix.elements,matrix=new THREE.Matrix4,material=(matrix.set(material[0],material[2],-material[1],material[3],material[4],material[6],-material[5],material[7],material[8],material[10],-material[9],material[11],material[12],material[14],-material[13],material[15]),matrix.transpose(),geometryIds.matrixAutoUpdate=!1,geometryIds.matrix=matrix,geometryIds.name=modelId+":"+objectId,new THREE.EdgesGeometry(geometryIds.geometry)),matrix=new THREE.LineSegments(material,lineMaterial);geometryIds.add(matrix),scene.add(geometryIds),rerender()},self.destroy=function(){scene.traverse(function(object){object.isMesh&&object.geometry.dispose()})},self.getCamera=function(){function vecToArray(v){return[v.x,v.y,v.z]}return{type:"PERSPECTIVE",eye:vecToArray(controls.object.position),target:vecToArray(controls.target)}},self.setCamera=function(obj){["x","y","z"].forEach(function(c,i){controls.target0[c]=obj.target[i],controls.position0[c]=obj.eye[i]}),controls.reset()}}return ThreeViewer.prototype=Object.create(EventHandler.prototype),ThreeViewer}),window.BIMSERVER_VERSION="1.5",define("bimsurfer/src/BimSurfer",["./EventHandler","./svgViewer/svgViewer","./threeViewer/threeViewer"],function(EventHandler,SvgViewer,ThreeViewer,_BimServerApi){function BimSurfer(cfg){function _traverseMappings(mappings){return function(k){for(var i=0;i<mappings.length;++i){var v=mappings[i][k];if(v)return v}return null}}var self=this,engine=(EventHandler.call(this),cfg=cfg||{},self.engine=(cfg.engine||"threejs").toLowerCase(),{svg:SvgViewer,xeogl:window.XeoViewer,threejs:ThreeViewer}[self.engine]),viewer=this.viewer=new engine(Object.assign(cfg,{app:this}));viewer.on("camera-changed",function(){self.fire("camera-changed",arguments)}),viewer.on("selection-changed",function(){self.fire("selection-changed",arguments)}),this._idMapping={toGuid:[],toId:[]},this.load=function(params){return params.test?(viewer.loadRandom(params),null):params.bimserver?this._loadFromServer(params):params.api?this._loadFromAPI(params):params.src&&(window.XeoViewer&&self.viewer instanceof XeoViewer||self.viewer instanceof ThreeViewer)?this._loadFrom_glTF(params):params.src&&self.viewer instanceof SvgViewer?this._loadFrom_SVG(params):void 0},this._loadFromServer=function(params){var notifier=new Notifier,notifier=new BimServerApi(params.bimserver,notifier);return params.api=notifier,self._initApi(params).then(self._loginToServer).then(self._getRevisionFromServer).then(self._loadFromAPI)},this._initApi=function(params){return new Promise(function(resolve,reject){params.api.init(function(){resolve(params)})})},this._loginToServer=function(params){return new Promise(function(resolve,reject){params.token?params.api.setToken(params.token,function(){resolve(params)},reject):params.api.login(params.username,params.password,function(){resolve(params)},reject)})},this.shouldClearSelection=function(evt){return!evt.shiftKey},this._getRevisionFromServer=function(params){return new Promise(function(resolve,reject){params.roid?resolve(params):params.api.call("ServiceInterface","getAllRelatedProjects",{poid:params.poid},function(data){var resolved=!1;data.forEach(function(projectData){projectData.oid==params.poid&&(params.roid=projectData.lastRevisionId,params.schema=projectData.schema,self.models||(self.models=[]),self.models.push(projectData),resolved=!0,resolve(params))}),resolved||reject()},reject)})},this._loadFrom_SVG=function(params){if(params.src)return viewer.load(params.src+".svg")},this._loadFrom_glTF=function(params){var maxActiveProcessesEncountered,oldProgress;if(params.src)return oldProgress=maxActiveProcessesEncountered=0,new Promise(function(resolve,reject){var m=viewer.loadglTF(params.src);window.XeoViewer&&self.viewer instanceof XeoViewer?m.on("loaded",function(){viewer.scene.canvas.spinner.on("processes",function(n){0===n&&(viewer.viewFit({}),resolve(m)),maxActiveProcessesEncountered<n&&(maxActiveProcessesEncountered=n);n=parseInt(100*(maxActiveProcessesEncountered-n)/maxActiveProcessesEncountered);oldProgress!=n&&self.fire("progress",[n]),oldProgress=n})}):viewer.on("loaded",function(){resolve(viewer),cfg.initiallyInvisible&&viewer.setVisibility({ids:viewer.getObjectIds(),visible:!1})})})},this._loadFromAPI=function(params){return new Promise(function(resolve,reject){params.api.getModel(params.poid,params.roid,params.schema,!1,function(model){var fired=!1;model.query(PreloadQuery,function(){var vmodel;fired||(fired=!0,vmodel=new Model(params.api,model),self._loadModel(vmodel),resolve(vmodel))})})})},this._loadModel=function(model){model.getTree().then(function(tree){var oids=[],oidToGuid={},guidToOid={},tree=(function visit(n){"1.4"==BIMSERVER_VERSION?oids.push(n.id):oids[n.gid]=n.id,oidToGuid[n.id]=n.guid,guidToOid[n.guid]=n.id;for(var i=0;i<(n.children||[]).length;++i)visit(n.children[i])}(tree),self._idMapping.toGuid.push(oidToGuid),self._idMapping.toId.push(guidToOid),{}),loader=(tree[model.model.roid]=model.model,viewer.taskStarted(),viewer.createModel(model.model.roid),new GeometryLoader(model.api,tree,viewer));loader.addProgressListener(function(progress,nrObjectsRead,totalNrObjects){"start"==progress?(console.log("Started loading geometries"),self.fire("loading-started")):"done"==progress&&(console.log("Finished loading geometries ("+totalNrObjects+" objects received)"),self.fire("loading-finished"),viewer.taskFinished())}),loader.setLoadOids([model.model.roid],oids),viewer.on("tick",function(){loader.process()}),loader.start()})};this.toId=function(guids){return guids.map(_traverseMappings(self._idMapping.toId))},this.toGuid=function(ids){return ids.map(_traverseMappings(self._idMapping.toGuid))},this.setVisibility=function(params){viewer.setVisibility(params)},this.setSelection=function(params){return cfg.initiallyInvisible?viewer.setVisibility(Object.assign({},params,{visible:params.selected})):viewer.setSelection(params)},this.getSelection=function(){return viewer.getSelection()},this.setColor=function(params){viewer.setColor(params)},this.setOpacity=function(params){viewer.setOpacity(params)},this.viewFit=function(params){viewer.viewFit(params)},this.getCamera=function(){return viewer.getCamera()},this.setCamera=function(params){viewer.setCamera(params)},this.setLights=function(params){viewer.setLights(params)},this.getLights=function(){return viewer.getLights},this.reset=function(params){viewer.reset(params)},this.getTypes=function(){return viewer.getTypes()},this.setDefaultDragAction=function(action){viewer.setDefaultDragAction(action)},this.getWorldBoundary=function(objectId,result){return viewer.getWorldBoundary(objectId,result)},this.destroy=function(){viewer.destroy()},this.resize=function(){viewer.resize()}}return BimSurfer.prototype=Object.create(EventHandler.prototype),BimSurfer}),define("bimsurfer/src/Request",[],function(){return{Make:function(args){return new Promise(function(resolve,reject){var xhr=new XMLHttpRequest;xhr.open(args.method||"GET",args.url,!0),xhr.onload=function(e){console.log(args.url,xhr.readyState,xhr.status),4===xhr.readyState&&(200===xhr.status?"application/json"==xhr.getResponseHeader("content-type")?resolve(JSON.parse(xhr.responseText)):resolve(xhr.responseXML):reject(xhr.statusText))},xhr.send(null)})}}}),define("bimsurfer/src/StaticTreeRenderer",["./EventHandler","./Request","./Utils"],function(EventHandler,Request,Utils){var SPATIAL_STRUCTURE_ELEMENTS=["IfcProject","IfcSite","IfcBuilding","IfcBuildingStorey","IfcSpace"];function StaticTreeRenderer(args){var self=this,fromXml=(EventHandler.call(this),self.TOGGLE=0,self.SELECT=1,self.SELECT_EXCLUSIVE=2,self.DESELECT=3,!1),domNodes={},selectionState={};function collect(){for(var descendants=[],inner=function inner(id){descendants.push(id),(self.parentToChildMapping[id]||[]).forEach(inner)},_len=arguments.length,qids=new Array(_len),_key=0;_key<_len;_key++)qids[_key]=arguments[_key];return qids.forEach(inner),descendants}this.getOffset=function(elem){for(var reference=document.getElementById(args.domNode),y=0;null!==elem&&(y+=elem.offsetTop,elem!=reference);)elem=elem.offsetParent;return y},this.parentToChildMapping={},this.childParentMapping={},this.objectTypeMapping={},this.roots=[],this.setSelected=function(ids,mode,fire){2==mode&&self.setSelected(self.getSelected(!0),3,!1);var currentViewRange,decomposingParent=null,parentIds=new Set(ids.map(function(i){return self.childParentMapping[i]})),parentIds=(1===parentIds.size&&(decomposingParent=_slicedToArray(parentIds,1)[0],-1!==SPATIAL_STRUCTURE_ELEMENTS.indexOf(self.objectTypeMapping[decomposingParent])&&(decomposingParent=null)),[]),parentIds=(decomposingParent&&(parentIds=self.parentToChildMapping[decomposingParent].filter(function(v){return-1===ids.indexOf(v)})),this.fire("selection-context-changed",[{secondary:!0,selected:!0,ids:parentIds}]),this.fire("selection-context-changed",[{parent:!0,selected:!0,ids:[decomposingParent]}]),fire&&(this.fire("selection-context-changed",[{secondary:!0,selected:!0,clear:!0,ids:[]}]),this.fire("selection-context-changed",[{parent:!0,selected:!0,clear:!0,ids:[]}])),ids.forEach(function(id){var s=null;0==mode?s=selectionState[id]=!selectionState[id]:1==mode||2==mode?s=selectionState[id]=!0:3==mode&&(s=selectionState[id]=!1),s?domNodes[id].label.classList.add("selected"):domNodes[id].label.classList.remove("selected")}),self.getSelected().map(function(id){return self.getOffset(domNodes[id].label)}));parentIds.length&&(parentIds.sort(),parentIds=[parentIds[0],parentIds[parentIds.length-1]],currentViewRange=[(decomposingParent=document.getElementById(args.domNode)).scrollTop,decomposingParent.scrollTop+decomposingParent.offsetHeight],parentIds[0]>=currentViewRange[0]&&parentIds[1]<=currentViewRange[1]||(parentIds[1]-parentIds[0]>currentViewRange[1]-currentViewRange[0]?decomposingParent.scrollTop=parentIds[0]:(parentIds=parseInt((parentIds[1]+parentIds[0])/2-(currentViewRange[1]-currentViewRange[0])/2,10),parentIds=Math.max(parentIds,0),parentIds=Math.min(parentIds,decomposingParent.scrollHeight-decomposingParent.offsetHeight),decomposingParent.scrollTop=parentIds))),fire&&this.fire("selection-changed",[{objects:self.getSelected(!0),clear:!0,selected:!0}])},this.getSelected=function(b){b=void 0===b||!!b;var l=[];return Object.keys(selectionState).forEach(function(k){!!selectionState[k]===b&&l.push(k)}),l};var models=[];this.addModel=function(args){models.push(args),(args.src||args.json)&&(fromXml=!0)},this.qualifyInstance=function(modelId,id){return fromXml?id:modelId+":"+id},this.destroy=function(){for(var node=document.getElementById(args.domNode);node.lastChild;)node.removeChild(node.lastChild)},this.build=function(){function build(modelId,parentId,parent_d,d,n,level){maxLevel<level&&(maxLevel=level);var eye,li,k,qid=self.qualifyInstance(modelId,fromXml?n.guid:n.id),label=(args.singleLevel&&(duplicateNameWrapper=document.createElement("div"),d.appendChild(duplicateNameWrapper),d=duplicateNameWrapper),document.createElement("div")),children=document.createElement("div"),parentId=(args.withVisibilityToggle&&((eye=document.createElement("i")).className="bimsurfer-tree-eye material-icons",label.appendChild(eye)),parentId?((self.parentToChildMapping[parentId]=self.parentToChildMapping[parentId]||[]).push(qid),self.childParentMapping[qid]=parentId):self.roots.push(qid),n.label||n.name||n.guid),duplicateNameWrapper=(args.singleLevel?(k="l".concat(level,"-").concat(parentId),(li=itemsByLevelByName[k]=itemsByLevelByName[k]||[]).length?duplicateNameWrapper.classList.add("duplicate-name"):firstOrrenceOfDuplicateName[k]=qid,li.push(d),duplicateNameWrapper=firstOrrenceOfDuplicateName[k],(li=duplicateNameIdsById[duplicateNameWrapper]=duplicateNameIdsById[duplicateNameWrapper]||[]).push(qid)):(label.className="bimsurfer-tree-label",(k=document.createElement("i")).className="collapse material-icons",label.appendChild(k),(n.children||[]).filter(function(x){return!x["xlink:href"]}).length?k.onclick=function(evt){evt.stopPropagation(),evt.preventDefault(),d.classList.toggle("bimsurfer-tree-node-collapsed")}:k.style.visibility="hidden"),document.createElement("i"));duplicateNameWrapper.className="icon material-icons",duplicateNameWrapper.innerHTML=self.icons[n.type],label.appendChild(duplicateNameWrapper),label.appendChild(document.createTextNode(parentId)),self.objectTypeMapping[qid]=n.type,d.appendChild(label),args.singleLevel||(children.className="bimsurfer-tree-children-with-indent",d.appendChild(children)),domNodes[qid]={label:label,eye:eye},eye&&(eye.onclick=function(evt){evt.stopPropagation(),evt.preventDefault();var evt=!eye.classList.toggle("bimsurfer-tree-eye-off"),descendants=collect(qid),fn=evt?DOMTokenList.prototype.remove:DOMTokenList.prototype.add;return descendants.forEach(function(s){fn.call(domNodes[s].eye.classList,"bimsurfer-tree-eye-off")}),self.fire("visibility-changed",[{visible:evt,ids:descendants}]),!1}),label.onclick=function(evt){evt.stopPropagation(),evt.preventDefault();var evt=args.app?args.app.shouldClearSelection(evt):!evt.shiftKey,ids=mergeMode?collect.apply(void 0,_toConsumableArray(duplicateNameIdsById[qid])):collect(qid);return self.setSelected(ids,evt?2:0,!0),self.fire("click",[qid,self.getSelected(!0)]),!1};for(var i=0;i<(n.children||[]).length;++i){var d2,child=n.children[i];fromXml&&child["xlink:href"]||((d2=document.createElement("div")).className="item",d2.classList.add("level-".concat(level+1)),(args.singleLevel?parent_d:children).appendChild(d2),build(modelId,qid,parent_d,d2,child,level+1))}}var toggleSheet,toggleMergeMode,levelup,leveldown,merged,leveldownsymbol,mergesymbol,controls,domNode=document.getElementById(args.domNode),styleSheet=null,styleSheet2=null,level=0,maxLevel=0,mergeMode=!1,itemsByLevelByName={},firstOrrenceOfDuplicateName={},duplicateNameIdsById={};args.singleLevel&&(toggleMergeMode=function(){styleSheet2||(styleSheet2=document.createElement("style"),document.head.appendChild(styleSheet2)),mergeMode=!mergeMode,styleSheet2.textContent="\n .duplicate-name { display: ".concat(mergeMode?"none":"block","; }\n .number-occurrences { display: ").concat(mergeMode?"inline-block":"none","; }\n "),merged&&merged.classList.toggle("checked")},(toggleSheet=function(){styleSheet||(styleSheet=document.createElement("style"),document.head.appendChild(styleSheet)),styleSheet.textContent="\n .item { display: none; }\n .level-".concat(level," { display: block; }\n ")})(),mergeMode=!0,toggleMergeMode(),(controls=document.createElement("div")).className="controls",levelup=document.createElement("div"),leveldown=document.createElement("div"),merged=document.createElement("div"),domNode.appendChild(controls),controls.appendChild(levelup),controls.appendChild(leveldown),controls.appendChild(merged),(controls=document.createElement("i")).className="material-icons",controls.innerHTML="arrow_back_ios_new",(leveldownsymbol=document.createElement("i")).className="material-icons",leveldownsymbol.innerHTML="arrow_forward_ios",(mergesymbol=document.createElement("i")).className="material-icons",mergesymbol.innerHTML="merge_type",levelup.appendChild(controls),leveldown.appendChild(leveldownsymbol),merged.appendChild(mergesymbol),levelup.onclick=(controls=function(advance){return function(){toggleSheet(level=maxLevel<(level=(level+=advance)<0?0:level)?maxLevel:level)}})(-1),leveldown.onclick=controls(1),merged.onclick=toggleMergeMode);fetch("https://aecgeeks.github.io/ifc-icons/ifc-full-icons.json").then(function(r){return r.json()}).then(function(icons){self.icons=icons,models.forEach(function(m){var loadModelFromJson,column1=document.createElement("div"),row1cell=document.createElement("div");column1.className="bimsurfer-tree-column",row1cell.className="item",row1cell.classList.add("level-0"),column1.appendChild(row1cell),column1.style.width="100%",m.tree?build(m.id,null,column1,row1cell,m.tree,0):(m.src||m.json)&&(loadModelFromJson=function(json){json=Utils.FindNodeOfType(json,"decomposition")[0].children[0];build(m.id,null,column1,row1cell,json,0)},(m.src?function(src){Request.Make({url:src}).then(function(xml){xml=Utils.XmlToJson(xml,{Name:"name",id:"guid"});loadModelFromJson(xml)})}:loadModelFromJson)(m.src||m.json)),domNode.appendChild(column1)});for(var _i3=0,_Object$values=Object.values(itemsByLevelByName);_i3<_Object$values.length;_i3++){var span,items=_Object$values[_i3];1<items.length&&((span=document.createElement("span")).innerHTML=items.length,span.className="number-occurrences",items[0].children[0].appendChild(span))}})}}return StaticTreeRenderer.prototype=Object.create(EventHandler.prototype),StaticTreeRenderer}),define("bimsurfer/src/MetaDataRenderer",["./EventHandler","./Request","./Utils"],function(EventHandler,Request,Utils){function Row(args){var num_names=0,num_values=0;this.setName=function(name){0<num_names++&&args.name.appendChild(document.createTextNode(" ")),args.name.appendChild(document.createTextNode(name))},this.setValue=function(value){0<num_values++&&args.value.appendChild(document.createTextNode(", ")),args.value.appendChild(document.createTextNode(value))}}function identity(x){return x}function Section(args){var div=this.div=document.createElement("div"),nameh=document.createElement("h3"),table=document.createElement("table"),tr=document.createElement("tr"),nameth=(table.appendChild(tr),document.createElement("th")),valueth=document.createElement("th");nameth.appendChild(document.createTextNode("Name")),valueth.appendChild(document.createTextNode("Value")),tr.appendChild(nameth),tr.appendChild(valueth),div.appendChild(nameh),div.appendChild(table),args.domNode.appendChild(div),this.setName=function(name){nameh.appendChild(document.createTextNode(name))},this.addRow=function(){var tr=document.createElement("tr"),nametd=(table.appendChild(tr),document.createElement("td")),valuetd=document.createElement("td");return tr.appendChild(nametd),tr.appendChild(valuetd),new Row({name:nametd,value:valuetd})}}function loadModelFromSource(src){return Request.Make({url:src}).then(function(xml){return loadModelFromJson(Utils.XmlToJson(xml,{Name:"name",id:"guid"}))})}function loadModelFromJson(json){return new Promise(function(resolve,reject){function visitObject(parent,node){var g,p,o=parent&&parent.ObjectPlacement?objects:typeObjects;node["xlink:href"]&&(o[parent.guid]||((p=Utils.Clone(parent)).GlobalId=p.guid,o[p.guid]=p,o[p.guid].properties=[]),g=node["xlink:href"].substr(1),(p=properties[g])?o[parent.guid].properties.push(p):typeObjects[g]&&(o[parent.guid].properties=o[parent.guid].properties.concat(typeObjects[g].properties))),(node.children||[]).forEach(function(n){visitObject(node,n)})}var psets=Utils.FindNodeOfType(json,"properties")[0],project=Utils.FindNodeOfType(json,"decomposition")[0].children[0],types=Utils.FindNodeOfType(json,"types")[0],objects={},typeObjects={},properties={},psets=((psets.children||[]).forEach(function(pset){properties[pset.guid]=pset}),visitObject(null,types),Object.keys(objects).length),types=(visitObject(null,project),Object.keys(objects).length);resolve({model:{objects:objects,productCount:types-psets,source:"XML"}})})}function MetaDataRenderer(args){function renderAttributes(elem){var s=new Section({domNode:domNode});return s.setName(elem.type||elem.getType()),["GlobalId","Name","OverallWidth","OverallHeight","Tag","PredefinedType","FlowDirection"].forEach(function(k){var fn,v=elem[k];void 0===v&&(fn=elem["get"+k])&&(v=fn.apply(elem)),void 0!==v&&((fn=s.addRow()).setName(k),fn.setValue(v))}),s}function renderPSet(pset){var s=new Section({domNode:domNode});return pset.name&&pset.children?(s.setName(pset.name),pset.children.forEach(function(v){var r=s.addRow();r.setName(v.name),r.setValue(v.NominalValue)})):(pset.getName(function(name){s.setName(name)}),pset.getHasProperties(function(prop){var r=s.addRow();prop.getName(function(name){r.setName(name)}),prop.getNominalValue(function(value){r.setValue(value._v)})})),s}function queryPSet(resolve,pset,psetName,propName){return pset.name&&pset.children?pset.name===psetName&&pset.children.map(function(v){return v.name===propName&&(resolve(v.NominalValue),!0)}).some(identity):(pset.getName(function(name){name===psetName&&pset.getHasProperties(function(prop){prop.getName(function(name){name===propName&&prop.getNominalValue(function(value){resolve(value._v)})})})}),s)}var self=this,models=(EventHandler.call(this),{}),domNode=document.getElementById(args.domNode),selectedParent=(this.addModel=function(args){return new Promise(function(resolve,reject){args.model?(models[args.id]=args.model,resolve(args.model)):(args.src?loadModelFromSource:loadModelFromJson)(args.src||args.json).then(function(m){models[args.id]=m,resolve(m)})})},this.query=function(oid,psetName,propName){return new Promise(function(resolve,reject){1==(oid=oid.split(":")).length&&(oid=[Object.keys(models)[0],oid]);var model=models[oid[0]].model||models[oid[0]].apiModel,ob=model.objects[oid[1]];"XML"===model.source?(model=ob.properties.map(function(pset){return queryPSet(resolve,pset,psetName,propName)}),console.log(model),model.some(identity)||reject()):ob.getIsDefinedBy(function(isDefinedBy){"IfcRelDefinesByProperties"==isDefinedBy.getType()&&isDefinedBy.getRelatingPropertyDefinition(function(pset){"IfcPropertySet"==pset.getType()&&queryPSet(resolve,pset,propsetName,propName)})})})},null),selectedElement=null,selectedElements=[];this.setSelectedParent=function(oid){selectedParent=oid,this.processSelection()},this.setSelected=function(oid){selectedElement=1===oid.length?oid[0]:null,this.processSelection()},this.processSelection=function(){selectedElements=[selectedParent,selectedElement].filter(function(x){return x}),self.highlightMode?((self.selectedSections||[]).forEach(function(s){s.div.className=""}),selectedElement?(self.sections[selectedElement].forEach(function(s){s.div.className="selected"}),self.selectedSections=self.sections[selectedElement]):self.selectedSections=[]):(domNode.innerHTML="",selectedElements.forEach(function(oid){var idModel;1==(oid=oid.split(":")).length&&(oid=[Object.keys(models)[0],oid]);for(var i=0;i<Object.keys(models).length;i++)if(void 0!==models[i].model.objects[oid[1][0]]==1){idModel=i;break}var model=models[idModel].model||models[idModel].apiModel,ob=model.objects[oid[1]];renderAttributes(ob),"XML"===model.source?ob.properties.forEach(function(pset){renderPSet(pset)}):ob.getIsDefinedBy(function(isDefinedBy){"IfcRelDefinesByProperties"==isDefinedBy.getType()&&isDefinedBy.getRelatingPropertyDefinition(function(pset){"IfcPropertySet"==pset.getType()&&renderPSet(pset)})})}))},this.renderAll=function(){self.highlightMode=!0,self.sections={},Object.keys(models).forEach(function(m){var model=models[m].model;"XML"===model.source&&Object.keys(model.objects).forEach(function(o){var o=model.objects[o],li=(console.log(o),self.sections[o.guid]=[]);"IfcBuildingElementProxy"!==o.type&&li.push(renderAttributes(o)),o.properties.forEach(function(pset){li.push(renderPSet(pset))})})})},this.destroy=function(){for(;domNode.lastChild;)domNode.removeChild(domNode.lastChild)}}return MetaDataRenderer.prototype=Object.create(EventHandler.prototype),MetaDataRenderer}),define("bimsurfer/src/AnnotationRenderer",["./Utils"],function(Utils){return function(args){function visit(n,fn){fn(n),(n.children||[]).forEach(function(c){visit(c,fn)})}var aabb,min,max,modelExtent,v=args.viewer,m=args.model,a=args.assets,makeMatrix=(modelExtent=(args=!!v.scene.worldBoundary)?(max=(aabb=v.scene.worldBoundary.aabb).subarray(3),min=aabb.subarray(0,3),max=xeogl.math.subVec3(max,min,xeogl.math.vec3()),xeogl.math.lenVec3(max)):((aabb=new THREE.Box3).setFromObject(v.scene),aabb.getSize(new THREE.Vector3).length()),args?function(s,lengthUnit){if(0==arguments.length)return xeogl.math.mat4();s=xeogl.math.mat4(s.split(" "));return s[12]*=lengthUnit,s[13]*=lengthUnit,s[14]*=lengthUnit,s}:function(s,lengthUnit){var m=new THREE.Matrix4;if(0==arguments.length)return m;s=new Float32Array(s.split(" "));return s[12]*=lengthUnit,s[13]*=lengthUnit,s[14]*=lengthUnit,m.set.apply(m,s),m.transpose(),m}),invert=args?xeogl.math.inverseMat4:function(m,n){return m.getInverse(n)},scaleMatrix=args?xeogl.math.scalingMat4s:function(v){return makeMatrix().scale(new THREE.Vector3(v,v,v))},makeVec4=args?function(){return xeogl.math.vec4(arguments)}:function(x,y,z,w){return new THREE.Vector4(x,y,z,w)},m4m4_inplace=(args&&xeogl.math.mulMat4v4,args?function(m,n){xeogl.math.mulMat4(m,n,m)}:function(m,n){m.multiply(n)});this.render=function(){var typelist=Utils.FindNodeOfType(m,"types")[0].children,decomposition=Utils.FindNodeOfType(m,"decomposition")[0],units=Utils.FindNodeOfType(m,"units")[0].children,types={},lengthUnit=(typelist.forEach(function(t){types[t.guid]=t}),1);units.forEach(function(u){"LENGTHUNIT"===u.UnitType&&(lengthUnit=parseFloat(u.SI_equivalent))}),function(types,p,n){var li=[];return function _(p,n){var t=n["xlink:href"];(t=t&&types[t.substr(1)])&&li.push([p,t]),(n.children||[]).forEach(function(c){_(n,c)})}(p,n),li}(types,null,decomposition).forEach(function(l){var elem=l[0],l=l[1],m1=makeMatrix(elem.ObjectPlacement,lengthUnit),elem=makeMatrix(),s=(invert(m1,elem),v.createModel("Annotations"),scaleMatrix(Math.sqrt(modelExtent)/100));makeVec4(0,0,0,1),makeVec4(0,0,1,1);visit(l,function(c){var m2,symbol;c.ObjectPlacement&&(m2=makeMatrix(c.ObjectPlacement,lengthUnit),m4m4_inplace(m2,s),m4m4_inplace(m2,m1),symbol=null,"IfcDistributionPort"===c.type&&("SINK"==c.FlowDirection?symbol=a.ArrowOut():"SOURCE"==c.FlowDirection?symbol=a.ArrowIn():"SOURCEANDSINK"==c.FlowDirection&&(symbol=a.ArrowInOut())),(symbol=null===symbol?a.Sphere():symbol).register(v),symbol.render(v,c.guid,c.type,m2))})})}}}),define("bimsurfer/src/Assets",[],function(){var oidCounter=1;function Asset(){var registered=!1;this.args=arguments,this.register=function(viewer){registered||(registered=!0,viewer.createGeometry.apply(viewer,this.args))},this.render=function(viewer,id,type,matrix){viewer.createObject("Annotations",1,oidCounter,id,[this.args[0]],type,matrix),oidCounter+=1}}var ArrowOut=new Asset("ArrowOut",[-1,-1,-12,1,-1,-12,-1,1,-12,1,1,-12,-1,-1,-5,1,-1,-5,-1,1,-5,1,1,-5,-3,3,-5,0,0,-1,-3,-3,-5,3,-3,-5,3,3,-5,-1,1,-12,-1,1,-12,-1,-1,-12,-1,-1,-12,1,-1,-12,1,-1,-12,1,1,-12,1,1,-12,-1,1,-5,-1,1,-5,-1,-1,-5,-1,-1,-5,1,-1,-5,1,-1,-5,1,1,-5,1,1,-5,3,-3,-5,3,-3,-5,0,0,-1,0,0,-1,0,0,-1,-3,3,-5,-3,3,-5,-3,-3,-5,-3,-3,-5,3,3,-5,3,3,-5],[0,0,-1,0,0,-1,0,0,-1,0,0,-1,-1,0,0,0,-1,0,-.999969482421875,0,0,1,0,0,0,0,-.999969482421875,.7999817132949829,0,.599993884563446,-.7999817132949829,0,.599993884563446,.7999817132949829,0,.599993884563446,.7999817132949829,0,.599993884563446,0,.999969482421875,0,-1,0,0,-.999969482421875,0,0,0,-1,0,0,-.999969482421875,0,1,0,0,.999969482421875,0,0,0,1,0,0,1,0,0,0,-1,0,-.999969482421875,0,0,0,-1,.999969482421875,0,0,0,0,-1,0,.999969482421875,0,0,0,-1,0,0,-.999969482421875,0,-.7999817132949829,.599993884563446,-.7999817132949829,0,.599993884563446,0,-.7999817132949829,.599993884563446,0,.7999817132949829,.599993884563446,-.7999817132949829,0,.599993884563446,0,.7999817132949829,.599993884563446,0,0,-.999969482421875,0,-.7999817132949829,.599993884563446,0,0,-.999969482421875,0,.7999817132949829,.599993884563446],[.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1],[2,3,1,13,21,27,19,7,25,17,5,23,15,4,6,11,12,9,28,38,29,34,10,31,26,29,36,22,8,38,24,36,8,39,35,33,37,30,32,0,2,1,20,13,27,18,19,25,16,17,23,14,15,6,26,28,29,24,26,36,28,22,38,22,24,8]),ArrowIn=new Asset("ArrowIn",[-1,-1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,8,1,-1,8,-1,1,8,1,1,8,-3,3,8,0,0,12,-3,-3,8,3,-3,8,3,3,8,-1,1,1,-1,1,1,-1,-1,1,-1,-1,1,1,-1,1,1,-1,1,1,1,1,1,1,1,-1,1,8,-1,1,8,-1,-1,8,-1,-1,8,1,-1,8,1,-1,8,1,1,8,1,1,8,3,-3,8,3,-3,8,0,0,12,0,0,12,0,0,12,-3,3,8,-3,3,8,-3,-3,8,-3,-3,8,3,3,8,3,3,8],[0,0,-1,0,0,-1,0,0,-1,0,0,-1,-1,0,0,0,-1,0,-.999969482421875,0,0,1,0,0,0,0,-.999969482421875,.7999817132949829,0,.599993884563446,-.7999817132949829,0,.599993884563446,.7999817132949829,0,.599993884563446,.7999817132949829,0,.599993884563446,0,.999969482421875,0,-1,0,0,-.999969482421875,0,0,0,-1,0,0,-.999969482421875,0,1,0,0,.999969482421875,0,0,0,1,0,0,1,0,0,0,-1,0,-.999969482421875,0,0,0,-1,.999969482421875,0,0,0,0,-1,0,.999969482421875,0,0,0,-1,0,0,-.999969482421875,0,-.7999817132949829,.599993884563446,-.7999817132949829,0,.599993884563446,0,-.7999817132949829,.599993884563446,0,.7999817132949829,.599993884563446,-.7999817132949829,0,.599993884563446,0,.7999817132949829,.599993884563446,0,0,-.999969482421875,0,-.7999817132949829,.599993884563446,0,0,-.999969482421875,0,.7999817132949829,.599993884563446],[.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1],[2,3,1,13,21,27,19,7,25,17,5,23,15,4,6,11,12,9,28,38,29,34,10,31,26,29,36,22,8,38,24,36,8,39,35,33,37,30,32,0,2,1,20,13,27,18,19,25,16,17,23,14,15,6,26,28,29,24,26,36,28,22,38,22,24,8]),ArrowInOut=(new Asset("ArrowOutReversed",[-1,-1,12,1,-1,12,-1,1,12,1,1,12,-1,-1,5,1,-1,5,-1,1,5,1,1,5,-3,3,5,0,0,1,-3,-3,5,3,-3,5,3,3,5,-1,1,12,-1,1,12,-1,-1,12,-1,-1,12,1,-1,12,1,-1,12,1,1,12,1,1,12,-1,1,5,-1,1,5,-1,-1,5,-1,-1,5,1,-1,5,1,-1,5,1,1,5,1,1,5,3,-3,5,3,-3,5,0,0,1,0,0,1,0,0,1,-3,3,5,-3,3,5,-3,-3,5,-3,-3,5,3,3,5,3,3,5],[0,0,1,0,0,1,0,0,1,0,0,1,-1,0,0,0,-1,0,-.999969482421875,0,0,1,0,0,0,0,.999969482421875,.7999817132949829,0,-.599993884563446,-.7999817132949829,0,-.599993884563446,.7999817132949829,0,-.599993884563446,.7999817132949829,0,-.599993884563446,0,.999969482421875,0,-1,0,0,-.999969482421875,0,0,0,-1,0,0,-.999969482421875,0,1,0,0,.999969482421875,0,0,0,1,0,0,1,0,0,0,1,0,-.999969482421875,0,0,0,1,.999969482421875,0,0,0,0,1,0,.999969482421875,0,0,0,1,0,0,.999969482421875,0,-.7999817132949829,-.599993884563446,-.7999817132949829,0,-.599993884563446,0,-.7999817132949829,-.599993884563446,0,.7999817132949829,-.599993884563446,-.7999817132949829,0,-.599993884563446,0,.7999817132949829,-.599993884563446,0,0,.999969482421875,0,-.7999817132949829,-.599993884563446,0,0,.999969482421875,0,.7999817132949829,-.599993884563446],[.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1],[2,1,3,13,27,21,19,25,7,17,23,5,15,6,4,11,9,12,28,29,38,34,31,10,26,36,29,22,38,8,24,8,36,39,33,35,37,32,30,0,1,2,20,27,13,18,25,19,16,23,17,14,6,15,26,29,28,24,36,26,28,38,22,22,8,24]),new Asset("ArrowInOut",[-1,-1,-8,1,-1,-8,-1,1,-8,1,1,-8,-1,-1,-5,1,-1,-5,-1,1,-5,1,1,-5,-3,3,-5,0,0,-1,-3,-3,-5,3,-3,-5,3,3,-5,-1,1,-8,-1,1,-8,-1,-1,-8,-1,-1,-8,1,-1,-8,1,-1,-8,1,1,-8,1,1,-8,-1,1,-5,-1,1,-5,-1,-1,-5,-1,-1,-5,1,-1,-5,1,-1,-5,1,1,-5,1,1,-5,3,-3,-5,3,-3,-5,0,0,-1,0,0,-1,0,0,-1,-3,3,-5,-3,3,-5,-3,-3,-5,-3,-3,-5,3,3,-5,3,3,-5,-3,3,-8,0,0,-12,-3,-3,-8,3,-3,-8,3,3,-8,-1,1,-8,-1,-1,-8,1,-1,-8,1,1,-8,3,-3,-8,3,-3,-8,0,0,-12,0,0,-12,0,0,-12,-3,3,-8,-3,3,-8,-3,-3,-8,-3,-3,-8,3,3,-8,3,3,-8],[0,0,-1,0,0,-1,0,0,-1,0,0,-1,-1,0,0,0,-1,0,-1,0,0,1,0,0,0,0,-.999969482421875,.7999817132949829,0,.599993884563446,-.7999817132949829,0,.599993884563446,.7999817132949829,0,.599993884563446,.7999817132949829,0,.599993884563446,0,1,0,-1,0,0,-1,0,0,0,-1,0,0,-1,0,1,0,0,1,0,0,0,1,0,0,1,0,0,0,-1,0,-1,0,0,0,-1,1,0,0,0,0,-1,0,1,0,0,0,-1,0,0,-.999969482421875,0,-.7999817132949829,.599993884563446,-.7999817132949829,0,.599993884563446,0,-.7999817132949829,.599993884563446,0,.7999817132949829,.599993884563446,-.7999817132949829,0,.599993884563446,0,.7999817132949829,.599993884563446,0,0,-.999969482421875,0,-.7999817132949829,.599993884563446,0,0,-.999969482421875,0,.7999817132949829,.599993884563446,0,0,.999969482421875,.7999817132949829,0,-.599993884563446,-.7999817132949829,0,-.599993884563446,.7999817132949829,0,-.599993884563446,.7999817132949829,0,-.599993884563446,0,0,1,0,0,1,0,0,1,0,0,1,0,0,.999969482421875,0,-.7999817132949829,-.599993884563446,-.7999817132949829,0,-.599993884563446,0,-.7999817132949829,-.599993884563446,0,.7999817132949829,-.599993884563446,-.7999817132949829,0,-.599993884563446,0,.7999817132949829,-.599993884563446,0,0,.999969482421875,0,-.7999817132949829,-.599993884563446,0,0,.999969482421875,0,.7999817132949829,-.599993884563446],[.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1],[2,3,1,13,21,27,19,7,25,17,5,23,15,4,6,11,12,9,28,38,29,34,10,31,26,29,36,22,8,38,24,36,8,39,35,33,37,30,32,0,2,1,20,13,27,18,19,25,16,17,23,14,15,6,26,28,29,24,26,36,28,22,38,22,24,8,43,41,44,48,49,58,54,51,42,47,56,49,45,58,40,46,40,56,59,53,55,57,52,50,47,49,48,46,56,47,48,58,45,45,40,46])),Sphere=new Asset("Sphere",[0,0,-1,.7236073017120361,-.5257253050804138,-.44721952080726624,-.276388019323349,-.8506492376327515,-.4472198486328125,-.8944262266159058,0,-.44721561670303345,-.276388019323349,.8506492376327515,-.4472198486328125,.7236073017120361,.5257253050804138,-.44721952080726624,.276388019323349,-.8506492376327515,.4472198486328125,-.7236073017120361,-.5257253050804138,.44721952080726624,-.7236073017120361,.5257253050804138,.44721952080726624,.276388019323349,.8506492376327515,.4472198486328125,.8944262266159058,0,.44721561670303345,0,0,1,-.16245555877685547,-.49999526143074036,-.8506544232368469,.42532268166542053,-.30901139974594116,-.8506541848182678,.26286882162094116,-.8090116381645203,-.5257376432418823,.8506478667259216,0,-.5257359147071838,.42532268166542053,.30901139974594116,-.8506541848182678,-.525729775428772,0,-.8506516814231873,-.6881893873214722,-.49999693036079407,-.5257362127304077,-.16245555877685547,.49999526143074036,-.8506544232368469,-.6881893873214722,.49999693036079407,-.5257362127304077,.26286882162094116,.8090116381645203,-.5257376432418823,.9510578513145447,-.30901262164115906,0,.9510578513145447,.30901262164115906,0,0,-.9999999403953552,0,.5877856016159058,-.8090167045593262,0,-.9510578513145447,-.30901262164115906,0,-.5877856016159058,-.8090167045593262,0,-.5877856016159058,.8090167045593262,0,-.9510578513145447,.30901262164115906,0,.5877856016159058,.8090167045593262,0,0,.9999999403953552,0,.6881893873214722,-.49999693036079407,.5257362127304077,-.26286882162094116,-.8090116381645203,.5257376432418823,-.8506478667259216,0,.5257359147071838,-.26286882162094116,.8090116381645203,.5257376432418823,.6881893873214722,.49999693036079407,.5257362127304077,.16245555877685547,-.49999526143074036,.8506543636322021,.525729775428772,0,.8506516814231873,-.42532268166542053,-.30901139974594116,.8506541848182678,-.42532268166542053,.30901139974594116,.8506541848182678,.16245555877685547,.49999526143074036,.8506543636322021],[0,0,-1,.7235938310623169,-.5257118344306946,-.44718772172927856,-.2763756215572357,-.8506424427032471,-.44721823930740356,-.8944059610366821,0,-.44718772172927856,-.2763756215572357,.8506424427032471,-.44721823930740356,.7235938310623169,.5257118344306946,-.44718772172927856,.2763756215572357,-.8506424427032471,.44721823930740356,-.7235938310623169,-.5257118344306946,.44718772172927856,-.7235938310623169,.5257118344306946,.44718772172927856,.2763756215572357,.8506424427032471,.44721823930740356,.8944059610366821,0,.44718772172927856,0,0,1,-.16245003044605255,-.4999847412109375,-.8506424427032471,.42530596256256104,-.3089998960494995,-.8506424427032471,.2628559172153473,-.808984637260437,-.5257118344306946,.8506424427032471,0,-.5257118344306946,.42530596256256104,.3089998960494995,-.8506424427032471,-.5257118344306946,0,-.8506424427032471,-.6881618499755859,-.4999847412109375,-.5257118344306946,-.16245003044605255,.4999847412109375,-.8506424427032471,-.6881618499755859,.4999847412109375,-.5257118344306946,.2628559172153473,.808984637260437,-.5257118344306946,.9510483145713806,-.3089998960494995,0,.9510483145713806,.3089998960494995,0,0,-1,0,.5877559781074524,-.809015154838562,0,-.9510483145713806,-.3089998960494995,0,-.5877559781074524,-.809015154838562,0,-.5877559781074524,.809015154838562,0,-.9510483145713806,.3089998960494995,0,.5877559781074524,.809015154838562,0,0,1,0,.6881618499755859,-.4999847412109375,.5257118344306946,-.2628559172153473,-.808984637260437,.5257118344306946,-.8506424427032471,0,.5257118344306946,-.2628559172153473,.808984637260437,.5257118344306946,.6881618499755859,.4999847412109375,.5257118344306946,.16245003044605255,-.4999847412109375,.8506424427032471,.5257118344306946,0,.8506424427032471,-.42530596256256104,-.3089998960494995,.8506424427032471,-.42530596256256104,.3089998960494995,.8506424427032471,.16245003044605255,.4999847412109375,.8506424427032471],[.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1,.2,.2,.2,1],[0,13,12,1,13,15,0,12,17,0,17,19,0,19,16,1,15,22,2,14,24,3,18,26,4,20,28,5,21,30,1,22,25,2,24,27,3,26,29,4,28,31,5,30,23,6,32,37,7,33,39,8,34,40,9,35,41,10,36,38,38,41,11,38,36,41,36,9,41,41,40,11,41,35,40,35,8,40,40,39,11,40,34,39,34,7,39,39,37,11,39,33,37,33,6,37,37,38,11,37,32,38,32,10,38,23,36,10,23,30,36,30,9,36,31,35,9,31,28,35,28,8,35,29,34,8,29,26,34,26,7,34,27,33,7,27,24,33,24,6,33,25,32,6,25,22,32,22,10,32,30,31,9,30,21,31,21,4,31,28,29,8,28,20,29,20,3,29,26,27,7,26,18,27,18,2,27,24,25,6,24,14,25,14,1,25,22,23,10,22,15,23,15,5,23,16,21,5,16,19,21,19,4,21,19,20,4,19,17,20,17,3,20,17,18,3,17,12,18,12,2,18,15,16,5,15,13,16,13,0,16,12,14,2,12,13,14,13,1,14]);return function(){this.ArrowIn=function(){return ArrowIn},this.ArrowOut=function(){return ArrowOut},this.ArrowInOut=function(){return ArrowInOut},this.Sphere=function(){return Sphere}}}),define("bimsurfer/lib/domReady",[],function(){var isTop,testDiv,scrollIntervalId,isBrowser="undefined"!=typeof window&&window.document,isPageLoaded=!isBrowser,doc=isBrowser?document:null,readyCalls=[];function callReady(){var callbacks=readyCalls;isPageLoaded&&callbacks.length&&(readyCalls=[],function(callbacks){for(var i=0;i<callbacks.length;i+=1)callbacks[i](doc)}(callbacks))}function pageLoaded(){isPageLoaded||(isPageLoaded=!0,scrollIntervalId&&clearInterval(scrollIntervalId),callReady())}if(isBrowser){if(document.addEventListener)document.addEventListener("DOMContentLoaded",pageLoaded,!1),window.addEventListener("load",pageLoaded,!1);else if(window.attachEvent){window.attachEvent("onload",pageLoaded),testDiv=document.createElement("div");try{isTop=null===window.frameElement}catch(e){}testDiv.doScroll&&isTop&&window.external&&(scrollIntervalId=setInterval(function(){try{testDiv.doScroll(),pageLoaded()}catch(e){}},30))}"complete"===document.readyState&&pageLoaded()}function domReady(callback){return isPageLoaded?callback(doc):readyCalls.push(callback),domReady}return domReady.version="2.0.1",domReady.load=function(name,req,onLoad,config){config.isBuild?onLoad(null):domReady(onLoad)},domReady}),define("bimsurfer/src/MultiModal",["module","bimsurfer/src/BimSurfer","bimsurfer/src/StaticTreeRenderer","bimsurfer/src/MetaDataRenderer","bimsurfer/src/Request","bimsurfer/src/Utils","bimsurfer/src/AnnotationRenderer","bimsurfer/src/Assets","bimsurfer/src/EventHandler","bimsurfer/lib/domReady!"],function(cfg,BimSurfer,StaticTreeRenderer,MetaDataRenderer,Request,Utils,AnnotationRenderer,Assets,EventHandler){function MultiModalViewer(args){var origin,liveShareEnabled=!1,n_files=args.n_files||1;EventHandler.call(this);try{origin=new URL(cfg.uri).origin}catch(e){origin=window.location.origin}var bimSurfer2D,self=this,bimSurfer=self.bimSurfer3D=new BimSurfer({domNode:args.domNode,engine:"threejs",initiallyInvisible:args.viewerInitiallyInvisible,disableSelection:args.viewerInitiallyInvisible}),modelPath=("click"===args.multiSelect?this.shouldClearSelection=bimSurfer.shouldClearSelection=function(){return!1}:this.shouldClearSelection=bimSurfer.shouldClearSelection=function(evt){return!evt.shiftKey},"".concat(origin,"/m/").concat(args.modelId));function mapFrom(view,objectIds){view="svg"===view.engine?objectIds.map(function(id){return id.replace(/product-/g,"")}):"xeogl"===view.engine?objectIds.map(function(id){return"Annotations:"===id.substr(0,12)?id.substr(12):id.split("#")[1].replace(/product-/g,"")}):objectIds;return view}function mapTo(view,objectIds){return objectIds.map(function(s){return 22<s.length?Utils.CompressGuid(s):s})}function processSelectionEvent(source,args0,args1){var objectIds,propagate=!0;source instanceof BimSurfer||source instanceof StaticTreeRenderer?(objectIds=mapFrom(source,args0.objects),"xeogl"===source.engine&&(propagate=!!args0.clickPosition||0==objectIds.length)):"user"===source&&(objectIds=mapFrom(source,args1)),propagate&&(self.fire("selection-changed",[objectIds]),[bimSurfer,bimSurfer2D,self.treeView,self.metaDataView].forEach(function(view){view&&view!==source&&(view.setSelection?view.viewer&&view.viewer.error||view.setSelection({ids:mapTo(0,objectIds),clear:!0,selected:!0}):view.setSelected(mapTo(0,objectIds),view.SELECT_EXCLUSIVE))}),self.onSelectionChanged&&self.onSelectionChanged(objectIds),liveShareEnabled&&fetch("/live/".concat(LIVE_SHARE_ID),{method:"POST",body:JSON.stringify({type:"selection",data:objectIds})}))}function makePartial(fn,arg){return function(arg0,arg1){fn(arg,arg0,arg1)}}this.spinner=null,this.requestsInProgress=0,this.incrementRequestsInProgress=function(){self.requestsInProgress++,self.spinner&&(self.spinner.style.display=self.requestsInProgress?"block":"none")},this.decrementRequestsInProgress=function(){self.requestsInProgress--,self.spinner&&(self.spinner.style.display=self.requestsInProgress?"block":"none")},this.loadXmlPromise=null,this.loadXml=function(){if(self.loadXmlPromise)return self.loadXmlPromise;for(var promises=[],i=0;i<n_files;i++){self.incrementRequestsInProgress();var postfix=args.n_files?"_".concat(i):"";promises.push(Request.Make({url:"".concat(modelPath).concat(postfix,".tree.json")}).then(function(x){return self.decrementRequestsInProgress(),x}))}return self.loadXmlPromise=Promise.all(promises)},this.loadTreeView=function(domNode,part,baseId){var tree=new StaticTreeRenderer({domNode:domNode,withVisibilityToggle:args.withTreeVisibilityToggle,singleLevel:args.withThreeSingleLevel,app:this}),domNode=args.withTreeViewIcons?fetch("https://aecgeeks.github.io/ifc-icons/ifc-full-icons.json").then(function(r){return r.json()}):new Promise(function(resolve,reject){resolve()});domNode.then(function(potentaillyIcons){return self.loadXml().then(function(jsons){for(var i=0;i<n_files;i++)tree.addModel({id:i,json:jsons[i]});tree.icons=potentaillyIcons,tree.build(),(self.treeView=tree).on("selection-changed",makePartial(processSelectionEvent,tree)),tree.on("visibility-changed",bimSurfer.setVisibility),tree.on("selection-context-changed",function(args){args.secondary&&self.bimSurfer3D.setSelection(args),args.parent&&self.metaDataView&&self.metaDataView.setSelectedParent(args.ids[0])})})})},this.setSpinner=function(args){args.url?(self.spinner=new Image,self.spinner.src=url,self.spinner.onload=function(){self.spinner.style="position: fixed; top: 50%; left: 50%; margin-top: -"+self.spinner.height/2+"px; margin-left: -"+self.spinner.width/2+"px",self.spinner.style.display=self.requestsInProgress?"block":"none",document.body.appendChild(self.spinner)}):args.className&&(self.spinner=document.createElement("div"),self.spinner.className=args.className,document.body.appendChild(self.spinner))},this.loadMetadata=function(domNode,part,baseId){var data=new MetaDataRenderer({domNode:domNode});this.loadXml().then(function(jsons){for(var i=0;i<n_files;i++)data.addModel({id:i,json:jsons[i]});self.metaDataView=data})},this.load2d=function(){bimSurfer2D=self.bimSurfer2D=new BimSurfer({domNode:args.svgDomNode,engine:"svg"}),"click"===args.multiSelect&&(bimSurfer2D.shouldClearSelection=function(){return!1}),self.incrementRequestsInProgress();var P=bimSurfer2D.load({src:modelPath}).then(function(){self.decrementRequestsInProgress()});return bimSurfer2D.on("selection-changed",makePartial(processSelectionEvent,bimSurfer2D)),P},this.destroy=function(){for(var _i4=0,_arr2=[self.metaDataView,self.treeView,bimSurfer2D,bimSurfer];_i4<_arr2.length;_i4++){var v=_arr2[_i4];v&&v.destroy()}self.metaDataView=self.treeView=bimSurfer2D=bimSurfer=null},this.getSelection=function(){return bimSurfer.getSelection().map(function(id){return id.replace(/product-/g,"")}).map(Utils.CompressGuid)},this.setSelection=function(args){processSelectionEvent("user","select",args.ids)},this.load3d=function(part,baseId){for(var i=0;i<n_files;i++){self.incrementRequestsInProgress();var src=modelPath+(part?"/".concat(part):baseId||""),P=(args.n_files&&(src+="_"+i),bimSurfer.load({src:src}).then(function(model){"xeogl"!==bimSurfer.engine||part||Utils.Delay(100).then(function(){var scene=bimSurfer.viewer.scene,aabb=scene.worldBoundary.aabb,max=aabb.subarray(3),aabb=aabb.subarray(0,3),max=xeogl.math.subVec3(max,aabb,xeogl.math.vec3()),aabb=xeogl.math.lenVec3(max);scene.camera.project.near=aabb/1e3,scene.camera.project.far=100*aabb,bimSurfer.viewFit({centerModel:!0}),bimSurfer.viewer.scene.canvas.canvas.style.display="block"}),self.decrementRequestsInProgress()}))}return bimSurfer.on("selection-changed",makePartial(processSelectionEvent,bimSurfer)),P},this.setColor=function(args){var _arguments=arguments,viewers=[bimSurfer];bimSurfer2D&&viewers.push(bimSurfer2D),viewers.forEach(function(v){args.ids&&args.ids.length?(args.highlight&&v.viewer&&v.viewer.getObjectIds&&v.setColor({ids:v.viewer.getObjectIds(),color:{a:.1}}),v.setColor.apply(v,_arguments)):v.reset({colors:!0})})},this.resize=function(){bimSurfer.resize()},this.listen=function(path){new EventSource(path).onmessage=function(e){e=JSON.parse(e.data);"camera"==e.type?self.bimSurfer3D.setCamera(e.data):"selection"==e.type&&processSelectionEvent("user",null,e.data)}},this.toggleLiveShare=function(){var timer,delay,F,lastUpdate=0;liveShareEnabled=!liveShareEnabled;return bimSurfer.on("camera-changed",(delay=200,F=function(cam){fetch("/live/".concat(LIVE_SHARE_ID),{method:"POST",body:JSON.stringify({type:"camera",data:cam})})},function(){for(var now,_len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++)args[_key2]=arguments[_key2];liveShareEnabled&&((now=performance.now())-lastUpdate<delay?clearTimeout(timer):lastUpdate=now,timer=setTimeout(function(){F.apply(void 0,args)},delay))})),liveShareEnabled}}return MultiModalViewer.prototype=Object.create(EventHandler.prototype),MultiModalViewer}),require(["bimsurfer/src/MultiModal","bimsurfer/lib/domReady!"],function(Viewer){Viewer=window.viewer=new Viewer({domNode:"right",svgDomNode:"bottom",modelId:window.MODEL_ID,withTreeVisibilityToggle:!0,withTreeViewIcons:!0,n_files:window.NUM_FILES});window.SPINNER_CLASS?Viewer.setSpinner({className:window.SPINNER_CLASS}):window.SPINNER_URL&&Viewer.setSpinner({url:window.SPINNER_URL}),Viewer.load2d(),Viewer.load3d(),Viewer.loadMetadata("middle"),Viewer.loadTreeView("top"),window.onViewerLoaded&&window.onViewerLoaded(self)}),define("App",function(){});