@aibee/crc-bmap 0.0.64 → 0.0.65
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/lib/bmap.cjs.min.js +1 -1
- package/lib/bmap.cjs.min.js.map +3 -3
- package/lib/bmap.esm.js +9 -4
- package/lib/bmap.esm.js.map +2 -2
- package/lib/bmap.esm.min.js +1 -1
- package/lib/bmap.esm.min.js.map +3 -3
- package/lib/bmap.min.js +1 -1
- package/lib/bmap.min.js.map +3 -3
- package/lib/src/context.d.ts +2 -2
- package/package.json +1 -1
package/lib/bmap.esm.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Bt=Object.defineProperty,Ht=Object.defineProperties;var It=Object.getOwnPropertyDescriptors;var dt=Object.getOwnPropertySymbols;var $t=Object.prototype.hasOwnProperty,Vt=Object.prototype.propertyIsEnumerable;var P=Math.pow,at=(s,a,t)=>a in s?Bt(s,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[a]=t,x=(s,a)=>{for(var t in a||(a={}))$t.call(a,t)&&at(s,t,a[t]);if(dt)for(var t of dt(a))Vt.call(a,t)&&at(s,t,a[t]);return s},ct=(s,a)=>Ht(s,It(a));var n=(s,a,t)=>(at(s,typeof a!="symbol"?a+"":a,t),t);var D=(s,a,t)=>new Promise((e,i)=>{var o=h=>{try{c(t.next(h))}catch(l){i(l)}},r=h=>{try{c(t.throw(h))}catch(l){i(l)}},c=h=>h.done?e(h.value):Promise.resolve(h.value).then(o,r);c((t=t.apply(s,a)).next())});import{EventDispatcher as oi}from"three";var A=class{constructor(){n(this,"tasks",{requestAnimation:new Set,timeout:new Set,interval:new Set})}requestAnimationFrame(a){let t=window.requestAnimationFrame(()=>{this.tasks.requestAnimation.delete(t),a()});return this.tasks.requestAnimation.add(t),t}cancelAnimationFrame(a){this.tasks.requestAnimation.delete(a),window.cancelAnimationFrame(a)}setTimeout(a,t){let e=window.setTimeout(()=>{this.tasks.timeout.delete(e),a()},t);return this.tasks.timeout.add(e),e}clearTimeout(a){this.tasks.timeout.delete(a),window.clearTimeout(a)}setInterval(a,t){let e=window.setInterval(()=>{this.tasks.interval.delete(e),a()},t);return this.tasks.interval.add(e),e}clearInterval(a){this.tasks.interval.delete(a),window.clearInterval(a)}dispose(){this.tasks.requestAnimation.forEach(a=>{window.cancelAnimationFrame(a)}),this.tasks.requestAnimation.clear(),this.tasks.timeout.forEach(a=>{window.clearTimeout(a)}),this.tasks.timeout.clear(),this.tasks.interval.forEach(a=>{window.clearInterval(a)}),this.tasks.interval.clear()}};import{Scene as Ut,WebGLRenderer as _t,OrthographicCamera as Kt,Shape as jt,PCFSoftShadowMap as Zt,Group as Xt,Color as Wt,DirectionalLight as Yt,AmbientLight as qt,Path as Nt,Vector2 as ut}from"three";import{MapControls as Qt}from"three/examples/jsm/controls/MapControls";function gt(){let s=new Ut;return s.background=new Wt(16777215),s}function ft(){let s=new _t({antialias:!0});return s.autoClear=!0,s.setClearAlpha(1),s.setClearColor(16777215),s.setPixelRatio(window.devicePixelRatio),s.shadowMap.enabled=!0,s.shadowMap.autoUpdate=!0,s.shadowMap.type=Zt,s}function vt(s,a){let t=new Kt(-s/2,s/2,a/2,-a/2,-1e3,5e3);return t.up.set(0,0,1),t.position.set(0,0,100),t.lookAt(0,0,0),t}function yt(){let s=new Xt,a=new qt(16777215,2.6);return s.add(a),s}function xt(s,a){let t=new Qt(s,a);return t.enableDamping=!1,t.zoomSpeed=2,t}function bt(s,a=[]){let t=new jt(s.map(e=>new ut(...e)));return a.length&&a.forEach(e=>{var i=new Nt(e.map(o=>new ut(...o)));t.holes.push(i)}),t}function Et(s=16777215,a=1){let t=new Yt(s,a);return t.castShadow=!0,t.shadow.radius=8,t.shadow.bias=-.001,t.shadow.mapSize.set(256,256),t.shadow.camera.left=-200,t.shadow.camera.right=200,t.shadow.camera.top=200,t.shadow.camera.bottom=-200,t}function k(s,a){var t;if(a&&s.children&&s.children.length&&s.children.forEach(e=>{k(e,a)}),s.isMesh){let e=s;e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach(i=>{i.dispose()}):e.material.dispose())}s.isLight&&((t=s.dispose)==null||t.call(s))}function Pt(s){return/[\u4E00-\u9FA5]+/g.test(s)}import{DataTexture as Jt,RGBAFormat as te,LinearFilter as wt}from"three";var $=new Map;function ee(){let s=document.createElement("canvas");s.width=1024,s.height=64;let a=s.getContext("2d",{willReadFrequently:!0});return a.font="54px sans-serif",a.textBaseline="hanging",a.lineWidth=12,a.fillStyle="rgba(0,0,0,1)",a.strokeStyle="white",{canvas:s,ctx:a}}var ht,O;function ie(){if(!ht){let{canvas:s,ctx:a}=ee();ht=s,O=a}}function vi(s){if($.has(s))return $.get(s);ie(),O.clearRect(0,0,1024,64);let a=Pt(s)?4:8;O.strokeText(s,2,a),O.fillText(s,2,a);let t=Math.ceil(O.measureText(s).width);t=t%2===0?t:t+1,t+=2;let e=O.getImageData(0,0,t,64),i=new Jt(Uint8Array.from(e.data),t,64,te);return i.flipY=!0,i.minFilter=wt,i.magFilter=wt,$.set(s,i),i}function Ct(){$.clear()}function Mt(){O=null,ht=null}import{point as oe,featureCollection as ne,center as re}from"@turf/turf";function y(s,a,t,e){let i=s.clone().project(a),o=t/2,r=e/2,c=Math.round(i.x*o+o),h=Math.round(-i.y*r+r);return{x:c,y:h}}function lt(s){let a=ne(s.map(e=>oe(e)));return re(a).geometry.coordinates}function V(s,a,t){return s.x>=a.x&&s.x<=t.x&&s.y>=a.y&&s.y<=t.y}function U(s,a){return new Proxy(s,{get:(t,e,i)=>Reflect.get(t,e,i),set:(t,e,i,o)=>{let r=Reflect.get(t,e,o),c=Reflect.set(t,e,i,o);return r!==i&&a.dispatchEvent({type:`change-${e}`,value:i}),c}})}function R(s,a){return Promise.race([s,new Promise((t,e)=>{setTimeout(()=>e(new Error("Promise timeout")),a)})])}function _(s){return document.createElementNS("http://www.w3.org/2000/svg",s)}function Lt(s,a){let t=_("svg");return t.setAttribute("width",s),t.setAttribute("height",a),t.style.cssText="position: absolute; left: 0; top: 0; pointer-events: none;",t}function B(s="2",a){let t=_("circle");return t.setAttribute("r",s),t.setAttribute("fill",a),t}function K(s){let a=_("line");return a.setAttribute("stroke",s),a}function F(s,a){let t=_("rect");return t.setAttribute("stroke",s),t.setAttribute("fill",a),t}function z(s,a,t){s.setAttribute("cx",`${a}`),s.setAttribute("cy",`${t}`)}function w(s,a,t){a&&(s.setAttribute("x1",`${a.x}`),s.setAttribute("y1",`${a.y}`)),t&&(s.setAttribute("x2",`${t.x}`),s.setAttribute("y2",`${t.y}`))}function C(s,a,t,e,i){s.setAttribute("x",`${a}`),s.setAttribute("y",`${t}`),s.setAttribute("width",`${e}`),s.setAttribute("height",`${i}`)}function Gt(){return Promise.resolve()}function Ci(){return new Promise(s=>{requestAnimationFrame(s)})}function Li(s){return parseInt(s.replace("#","0x"),16)}function Gi(s,a){let t=parseInt(s.substring(1,3),16),e=parseInt(s.substring(3,5),16),i=parseInt(s.substring(5,7),16),o=Math.round(t*a),r=Math.round(e*a),c=Math.round(i*a);return`#${(1<<24|o<<16|r<<8|c).toString(16).slice(1)}`}import{EventDispatcher as We,Box2 as Ye,Vector3 as ot,Vector2 as nt,Raycaster as qe,Box3 as Ne,Color as Qe,AmbientLight as Je}from"three";import{Group as ti,Tween as rt}from"@tweenjs/tween.js";import{EventDispatcher as Ke}from"three";import{Object3D as se,ExtrudeGeometry as ae,Mesh as ce,Box3 as St,Vector3 as H,BufferGeometry as he,LineSegments as le}from"three";var pe={id:"",height:.1,airHeight:0,area:0,group:"",fillColor:"#EFF4FB",strokeColor:"#ffffff",fillOpacity:1,strokeOpacity:1,strokeWidth:1,doors:[],locked:!1,visible:!0,geometry:{type:"polygon",cds:[],curveCpt:[],curveIndex:[]},layerType:"",zIndex:0,stroke:!0,deltaHeight:0,userData:{}},M=class extends se{constructor(t,e){super();this.context=t;n(this,"geometry");n(this,"material");n(this,"mesh");n(this,"line");n(this,"lineMaterial");n(this,"lineGeometry");n(this,"options");if(this.options=U(x(x({},pe),e),this),this.options.geometry.type==="point"){let[i,o]=this.options.geometry.cds;return this.position.set(i,o,this.options.height+this.options.airHeight),this}this.init(),this.visible=this.options.visible,this.addEventListener("change-fillColor",({value:i})=>{this.initMaterial(),this.initMesh()}),this.addEventListener("change-fillOpacity",({value:i})=>{this.initMaterial(),this.initMesh()}),this.addEventListener("change-height",({value:i})=>{this.dispose(),this.init()}),this.addEventListener("change-strokeColor",({value:i})=>{this.options.stroke&&(this.initLineMaterial(),this.createBorder())}),this.addEventListener("change-strokeOpacity",({value:i})=>{this.options.stroke&&(this.initLineMaterial(),this.createBorder())}),this.addEventListener("change-airHeight",({value:i})=>{this.position.z=i}),this.addEventListener("change-visible",({value:i})=>{this.visible=i}),this.addEventListener("change-stroke",({value:i})=>{var o;if(i){if(this.line)return;this.initLineGeometry(),this.initLineMaterial(),this.createBorder()}else this.line&&(this.remove(this.line),(o=this.lineGeometry)==null||o.dispose())})}getCenter(){if(this.options.geometry.type==="point")return this.position.clone();let t=new H,e=new St;return e.setFromObject(this),e.getCenter(t),t}getSize(){if(this.options.geometry.type==="point")return new H(0,0,0);let t=new St,e=new H;return t.setFromObject(this),t.getSize(e),e}getPosition(){let t=this.getCenter();return t.setZ(t.z+this.options.height),t}init(){this.geometry=this.initGeometry(),this.initMaterial(),this.initMesh(),this.mesh.position.z=this.options.airHeight+this.options.deltaHeight,this.options.stroke&&(this.initLineMaterial(),this.initLineGeometry(),this.createBorder())}initGeometry(){let t=bt(this.options.geometry.cds[0],this.options.geometry.cds.slice(1));return new ae(t,{steps:1,bevelEnabled:!1,depth:this.options.height,curveSegments:4})}initMaterial(){let t=this.context.materialFactory.createMeshStandardMaterial({color:this.options.fillColor,opacity:this.options.fillOpacity});return this.material=t,t}initLineMaterial(){let t=this.context.materialFactory.createLineMaterial({color:this.options.strokeColor,opacity:this.options.strokeOpacity});return this.lineMaterial=t,t}initMesh(){this.mesh&&this.remove(this.mesh),this.mesh=new ce(this.geometry,this.material),this.add(this.mesh)}getBorderPoints(){let t=[],e=this.options.height+this.options.deltaHeight,{cds:i,curveIndex:o}=this.options.geometry;for(let r=0;r<i.length;r++){let c=i[r];for(let h=0;h<c.length;h++){let l=c[h],p=h+1===c.length?c[0]:c[h+1];t.push(new H(l[0],l[1],e)),t.push(new H(p[0],p[1],e))}}return t}initLineGeometry(){this.lineGeometry&&this.lineGeometry.dispose();let t=this.getBorderPoints(),e=new he().setFromPoints(t);this.lineGeometry=e}createBorder(){this.line&&this.remove(this.line);let t=new le(this.lineGeometry,this.lineMaterial);return t.position.z=this.options.airHeight+.01,this.line=t,this.add(t),t}raycast(t){if(!this.visible||this.options.geometry.type==="point")return!1;let e=t.intersectObject(this.mesh);if(e[0]){let{point:i,distance:o}=e[0];return{position:i,distance:o}}return!1}dispose(){var t;this.geometry.dispose(),(t=this.line)==null||t.geometry.dispose(),this.clear()}};import{Object3D as me,PlaneGeometry as de,Mesh as ue,ShadowMaterial as ge,Color as fe,DoubleSide as ve}from"three";var j=class extends me{constructor(){super();n(this,"directionalLight");n(this,"plane");n(this,"basicOpacity",.07);this.directionalLight=this.initLight(),this.initPlane()}initLight(){let t=Et(16777215,.5);return t.position.set(0,0,100),this.add(t),t}changeLightCamera(t){let e=t.x,i=t.y;this.directionalLight.shadow.camera.left=-e,this.directionalLight.shadow.camera.right=e,this.directionalLight.shadow.camera.top=i,this.directionalLight.shadow.camera.bottom=-i,this.directionalLight.shadow.camera.near=.5,this.directionalLight.shadow.camera.far=Math.max(e,i)}changeLightColor(t){this.directionalLight.color=new fe(t)}setPosition(t){this.position.copy(t),this.directionalLight.position.set(-t.x/2,-t.y/2,100)}initPlane(t=1e3,e=1e3){let i=new de(t,e),o=new ge({transparent:!0,opacity:0,side:ve}),r=new ue(i,o);return r.receiveShadow=!0,r.position.z=-10,this.add(r),this.plane=r,r}setTarget(t){this.directionalLight.target=t}transformOpacity(t){return t*this.basicOpacity}setOpacity(t){this.plane.material.opacity=this.transformOpacity(t)}dispose(){k(this,!0)}};import{EventDispatcher as Ee,Vector3 as Pe}from"three";import{Box3 as ye,EventDispatcher as xe,Vector3 as Dt}from"three";var be={autoUpdate:!0},Z=class extends xe{constructor(t,e={}){super();this.context=t;n(this,"div");n(this,"element");n(this,"position",new Dt);n(this,"clientPos",{x:0,y:0});n(this,"visible",!0);n(this,"options");n(this,"onUpdate",()=>{let t=this.getPosition(),{width:e,height:i}=this.context.clientSize,{x:o,y:r}=y(t,this.context.camera,e,i);this.clientPos.x===o&&this.clientPos.y===r||(this.clientPos={x:o,y:r},this.options.autoUpdate?this.div.style.transform=`translate3d(${o}px, ${-i+r}px, 0)`:this.dispatchEvent({type:"update-position",x:o,y:r,width:e,height:i}))});this.options=x(x({},be),e),this.registryEvent(),this.div=this.initDiv(),this.context.container.appendChild(this.div)}initDiv(){let t=document.createElement("div");return t.style.position="absolute",t}bindElement(t){this.element=t,this.onUpdate()}unBindElement(){this.element=void 0}setVisible(t,e="block"){t!==this.visible&&(this.div.style.display=t?e:"none",this.visible=t)}setOpacity(t){this.div.style.opacity=`${t}`}getPosition(){return this.element?typeof this.element.getPosition=="function"?this.element.getPosition():new ye().setFromObject(this.element).getCenter(new Dt):this.position}get withinDisplayRange(){let{x:t,y:e}=this.clientPos,{width:i,height:o}=this.context.clientSize;return t>=0&&t<=i&&e>=0&&e<=o}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}dispose(){this.unRegistryEvent(),this.unBindElement(),this.div&&this.context.container.removeChild(this.div),this.div=null}};var we={texts:[{text:""}],level:1,collision_enable:!0,opacity:1,id:"",position:{x:0,y:0,z:0},icon_opacity:1,icon_border:{color:"#586EE0",width:0},background:""},I=class extends Ee{constructor(t,e){var i,o,r;super();this.context=t;n(this,"div");n(this,"textDiv");n(this,"img");n(this,"overlay");n(this,"options");n(this,"visible",!0);n(this,"size",{width:0,height:0});n(this,"position",new Pe);n(this,"_changePosition",()=>{});this.options=U(x(x({},we),e),this),this.position.set(((i=e.position)==null?void 0:i.x)||0,((o=e.position)==null?void 0:o.y)||0,((r=e.position)==null?void 0:r.z)||0),this.overlay=new Z(this.context,{autoUpdate:!1}),this.overlay.addEventListener("update-position",({x:c,y:h,height:l})=>{this.overlay.div.style.transform=`translate3d(calc(${c}px - 50%), calc(${-l+h}px - ${this.options.icon?"100%":"50%"}), 0)`}),this.overlay.bindElement(this),this.registryEvent(),this.initDiv(),this.addEventListener("change-icon",({value:c})=>{c?this.img?this.img.setAttribute("src",c):this.div.appendChild(this.initIcon()):(this.img&&this.div.removeChild(this.img),this.img=void 0,this._changePosition(),this.resetSize())}),this.addEventListener("change-texts",({value:c})=>{this.div.removeChild(this.textDiv),this.div.appendChild(this.initText()),this.resetSize()}),this.addEventListener("change-opacity",({value:c})=>{this.overlay.setOpacity(c)}),this.addEventListener("change-icon_size",({value:c})=>{this.img&&(this.img.style.width=`${(c==null?void 0:c[0])||32}px`,this.img.style.height=`${(c==null?void 0:c[1])||32}px`,this.resetSize())}),this.addEventListener("change-icon_opacity",({value:c})=>{this.img&&(this.img.style.opacity=`${c}`)}),this.addEventListener("change-icon_border",({value:c})=>{this.img&&(this.img.style.border=`${c.width}px solid ${c.color}`,this.resetSize())}),this.addEventListener("change-background",({value:c})=>{this.div.style.background=c})}get withinDisplayRange(){return this.overlay.withinDisplayRange}resetSize(){return D(this,null,function*(){yield Gt();let{width:t,height:e}=this.div.getBoundingClientRect();this.size={width:t+4,height:e+4}})}renderHelperBox(){let t=document.createElement("div"),e=this.getBox();t.style.cssText=`position: absolute; top: ${e.top}px;left: ${e.left}px;width: ${e.right-e.left}px;height: ${e.bottom-e.top}px;border: 1px solid red;`,this.context.container.appendChild(t)}get clientPos(){return this.overlay.clientPos}initDiv(){let t=document.createElement("div");return t.appendChild(this.initText()),this.options.icon&&t.appendChild(this.initIcon()),t.style.fontSize="12px",t.style.textShadow="#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0",t.style.display="flex",t.style.flexDirection="column",t.style.justifyContent="center",t.style.alignItems="center",t.style.padding="4px",this.overlay.setOpacity(this.options.opacity),this.overlay.div.style.pointerEvents="none",this.overlay.div.style.userSelect="none",this.overlay.div.appendChild(t),this.div=t,this._changePosition(),this.resetSize(),t}getPosition(){return this.position}initText(){let t=document.createElement("div");return t.appendChild(this.createTextFragment()),t.style.textAlign="center",this.textDiv=t,t}createTextFragment(){let t=document.createDocumentFragment();return this.options.texts.forEach(e=>{let i=document.createElement("div");if(i.style.whiteSpace="nowrap",e.styles)for(let[o,r]of Object.entries(e.styles))i.style[o]=r;i.textContent=e.text,t.appendChild(i)}),t}initIcon(){var e,i;let t=document.createElement("img");return t.setAttribute("src",this.options.icon),t.style.width=`${((e=this.options.icon_size)==null?void 0:e[0])||32}px`,t.style.height=`${((i=this.options.icon_size)==null?void 0:i[1])||32}px`,t.style.opacity=`${this.options.icon_opacity}px`,t.style.borderRadius="50%",this.options.icon_border.width&&(t.style.border=`${this.options.icon_border.width}px solid ${this.options.icon_border.color}`),t.onload=()=>{this._changePosition(),this.resetSize()},this.img=t,t}registryEvent(){}unRegistryEvent(){}setVisible(t){t!==this.visible&&(this.visible=t,t||(this.overlay.visible=t,this.overlay.div.style.visibility=t?"visible":"hidden"))}parentSetVisible(t){this.visible&&t!==this.overlay.visible&&(this.overlay.visible=t,this.overlay.div.style.visibility=t?"visible":"hidden")}getBox(){let{width:t,height:e}=this.size,{x:i,y:o}=this.overlay.clientPos;return{left:i-t/2,right:i+t/2,top:this.options.icon?o-e:o-e/2,bottom:this.options.icon?o:o+e/2}}isContain(t,e){if(!this.overlay.visible)return!1;let i=this.getBox();return t>=i.left&&t<=i.right&&e>=i.top&&e<=i.bottom}dispose(){this.unRegistryEvent(),this.div=null,this.textDiv=null,this.img=void 0,this.overlay.dispose()}};import{Box3 as pt,Object3D as kt,Vector3 as mt}from"three";import{Box3 as Me,Vector3 as Le}from"three";import{Object3D as Ce}from"three";var T=class extends Ce{constructor(t){super();this.context=t}dispose(){k(this),this.clear()}};var X=class extends T{constructor(t){super(t);n(this,"graphicMap",new Map)}getCenter(){return new Me().setFromObject(this).getCenter(new Le)}createGraphic(t){let e=new M(this.context,t);return this.add(e),this.graphicMap.set(t.id,e),e}removeGraphic(t){this.remove(t),this.graphicMap.delete(t.options.id),t.dispose()}removeGraphicById(t){this.graphicMap.has(t)&&this.removeGraphic(this.graphicMap.get(t))}getGraphicByNodeId(t){return this.graphicMap.get(t)||null}getGraphicByRaycaster(t){let e={distance:1e4,graphic:null,position:null},i=this.children.reduce((o,r)=>{if(r instanceof M){let c=r.raycast(t);if(c){let{distance:h}=c;if(h<o.distance)return{distance:o.distance,position:o.position,graphic:r}}return o}else return o},e);return i===e?{graphics:[],position:null}:{graphics:[i.graphic],position:i.position}}};import{debounce as Ge}from"lodash";var W=class extends T{constructor(t){super(t);n(this,"pois",[]);n(this,"debounceCollisionDetection");n(this,"timer",new A);n(this,"onUpdate",()=>{this.timer.requestAnimationFrame(()=>{this.collisionDetection()})});this.registryEvent(),this.debounceCollisionDetection=Ge(this.collisionDetection,10)}clear(){return super.clear(),this.pois.forEach(t=>t.dispose()),this.pois=[],this}createPoi(t){let e=new I(this.context,t);return this.pushPoi(e),e.addEventListener("change-level",()=>this.changePoiLevelOrCollisionEnable(e)),e.addEventListener("change-collision_enable",()=>this.changePoiLevelOrCollisionEnable(e)),Promise.resolve().then(()=>{this.debounceCollisionDetection()}),e}changePoiLevelOrCollisionEnable(t){let e=this.pois.findIndex(i=>i===t);e!==-1&&(this.pois.splice(e,1),this.pushPoi(t))}removePoi(t){let e=this.pois.findIndex(i=>i===t);e!==-1&&(this.pois.splice(e,1),t.dispose())}removePoiById(t){let e=this.pois.find(i=>i.options.id===t);e&&this.removePoi(e)}getPoiById(t){return this.pois.find(i=>i.options.id===t)||null}pushPoi(t){if(!t.options.collision_enable){this.pois.unshift(t);return}if(t.options.level===1){this.pois.push(t);return}for(let e=0;e<this.pois.length;e++){let i=this.pois[e];if(i.options.collision_enable&&i.options.level<=t.options.level){this.pois.splice(e,0,t);return}}this.pois.push(t)}getPoiByDeviceXy(t,e){return this.pois.filter(o=>o instanceof I&&o.isContain(t,e))}collisionDetection(){let t=[];this.pois.filter(i=>i.visible&&i.withinDisplayRange).forEach((i,o)=>{let{left:r,right:c,top:h,bottom:l}=i.getBox();if(o===0){t.push({left:r,right:c,top:h,bottom:l});return}let p=t.some(m=>c<m.right&&c>m.left||r>m.left&&r<m.right||r===m.left&&c===m.right?l<=m.bottom&&l>m.top||h>=m.top&&h<m.bottom:!1);i.parentSetVisible(!p),p||t.push({left:r,right:c,top:h,bottom:l})})}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}dispose(){this.timer.dispose(),this.pois.forEach(t=>t.dispose()),this.pois.length=0,this.debounceCollisionDetection=()=>{},super.dispose(),this.unRegistryEvent()}};import{MeshBasicMaterial as Se,Object3D as De,PlaneGeometry as Ae,Texture as ke,DoubleSide as Oe,Mesh as ze,Matrix3 as At,Vector2 as Fe}from"three";import{create as Te}from"@mars3d/heatmap.js";import{featureCollection as Re,point as Be,bbox as He,center as Ie}from"@turf/turf";var Y=class extends De{constructor(t){super();this.context=t;n(this,"heatmap");n(this,"div");n(this,"plane");this.div=document.createElement("div")}clearHeatmap(){this.div.firstChild&&this.div.removeChild(this.div.firstChild),this.heatmap=void 0}loadData(t){this.clearHeatmap();let{width:e,height:i,leftTop:o,center:r}=this.getBox(t);this.heatmap=Te(x({width:e,height:i,container:this.div},this.context.config.heatMap)),this.heatmap.setData(this.transformData(t,o)),this.initPlane(e,i),this.position.set(r[0],r[1],this.position.z)}initPlane(t,e){this.plane&&this.remove(this.plane);let i=new Ae(t,e),o=new ke(this.div.firstChild);o.needsUpdate=!0;let r=new Se({transparent:!0,side:Oe,map:o});r.needsUpdate=!0,this.plane=new ze(i,r),this.add(this.plane)}getTransMatrix({x:t,y:e}){return new At().makeScale(1,-1).multiply(new At().makeTranslation(0-t,0-e))}transformData(t,e){let i=this.getTransMatrix(e);return{data:t.data.map(r=>{let c=new Fe(r.x,r.y).applyMatrix3(i);return{x:c.x,y:c.y,value:r.value}}),max:t.max,min:t.min}}getBox(t){let e=Re(t.data.map(l=>Be([l.x,l.y]))),i=He(e),o=i[2]-i[0],r=i[3]-i[1],c={x:i[0],y:i[3]},h=Ie(e);return{width:o,height:r,leftTop:c,center:h.geometry.coordinates}}dispose(){this.div=null,this.heatmap=void 0}};var q=class extends kt{constructor(t){super();this.context=t;n(this,"graphicLayer");n(this,"poiLayer");n(this,"grounds",new Set);n(this,"shadow",new j);n(this,"heatmap");n(this,"groundUpper",new kt);n(this,"groundMaxHeight",0);this.graphicLayer=new X(this.context),this.poiLayer=new W(this.context),this.groundUpper.add(this.graphicLayer),this.groundUpper.add(this.poiLayer),this.add(this.groundUpper)}createGround(t){let e=new M(this.context,t);this.addGrounds([e])}addGrounds(t){t.forEach(e=>{this.grounds.has(e)||(e.mesh.castShadow=!0,this.grounds.add(e),this.groundUpper.add(e))}),this.changeGroundMaxHeight()}changeGroundMaxHeight(){let t=Array.from(this.grounds);this.groundMaxHeight=this.grounds.size>0?Math.max(...t.map(e=>e.options.height+e.options.airHeight+e.options.deltaHeight)):0,this.graphicLayer.position.z=this.groundMaxHeight}get hasElement(){return!!(this.grounds.size||this.graphicLayer.children.length)}getCenter(){return new pt().setFromObject(this.groundUpper).getCenter(new mt)}addShadow(){let t=new pt().setFromObject(this.groundUpper),e=t.getCenter(new mt),i=t.getSize(new mt);this.shadow.setPosition(e),this.shadow.changeLightCamera(i),this.add(this.shadow)}addGraphic(t){return this.graphicLayer.createGraphic(t)}addPoi(t){return this.poiLayer.createPoi(t)}addHeatmap(t){this.heatmap||(this.heatmap=new Y(this.context),this.add(this.heatmap)),this.heatmap.loadData(t);let e=new pt().setFromObject(this.graphicLayer);return this.heatmap.position.setZ(e.max.z),this.heatmap}removeHeatMap(){this.heatmap&&(this.remove(this.heatmap),this.heatmap.dispose(),this.heatmap=void 0)}setShadowOpacity(t){this.shadow.setOpacity(t)}setShadowVisible(t){this.shadow.visible=t}dispose(){var t;this.shadow.dispose(),this.graphicLayer.dispose(),this.poiLayer.dispose(),this.grounds.forEach(e=>e.dispose()),(t=this.heatmap)==null||t.dispose(),this.groundUpper.clear(),this.clear()}};import{EventDispatcher as $e,Vector3 as Ve}from"three";var S=class extends $e{constructor(t){super();this.context=t;n(this,"points",[]);n(this,"svg");n(this,"enable",!0);n(this,"_onResize",({width:t,height:e})=>{this.svg&&(this.svg.setAttribute("width",`${t}`),this.svg.setAttribute("height",`${e}`))});this.svg=Lt(`${t.container.clientWidth}`,`${t.container.clientHeight}`),t.container.appendChild(this.svg),this._registryEvent()}_registryEvent(){this.context.addEventListener("resize",this._onResize)}_unRegistryEvent(){this.context.removeEventListener("resize",this._onResize)}setEnable(t){this.enable=t,t?this.svg.style.display="block":this.svg.style.display="none"}getIntersectByPointerEvent(t){let{camera:e,renderer:i}=this.context,{offsetX:o,offsetY:r}=t,{clientWidth:c,clientHeight:h}=i.domElement,l=o/c*2-1,p=1-r/h*2;return new Ve(l,p,0).unproject(e)}getSvgCoordinate(t){let{camera:e,container:i}=this.context;return y(t,e,i.clientWidth,i.clientHeight)}dispose(){this._unRegistryEvent(),this.context.container.removeChild(this.svg),this.svg=null}};var N=class extends S{constructor(t){super(t);this.context=t;n(this,"circles");n(this,"line");n(this,"onUpdate",()=>{if(this.points[0]){let t=this.getSvgCoordinate(this.points[0]);z(this.circles[0],t.x,t.y),w(this.line,t)}if(this.points[1]){let t=this.getSvgCoordinate(this.points[1]);z(this.circles[1],t.x,t.y),w(this.line,void 0,t)}});n(this,"onPointermove",t=>{this.points.length===1&&(this.line.style.display="block",w(this.line,void 0,{x:t.offsetX,y:t.offsetY}))});n(this,"onPointerleave",()=>{this.points[1]||(this.line.style.display="none")});n(this,"onPointerdown",t=>{if(this.points[1])return;let e=this.getIntersectByPointerEvent(t);if(e){let{offsetX:i,offsetY:o}=t,r=this.circles[this.points.length];z(r,i,o),this.points.length||w(this.line,{x:i,y:o},{x:i,y:o}),this.addPoint(e)}});let{config:{svg:{circle:e,line:i}}}=t;this.circles=[B(e.radius,e.fill),B(e.radius,e.fill)],this.line=K(i.stroke),this.svg.appendChild(this.circles[0]),this.svg.appendChild(this.circles[1]),this.svg.appendChild(this.line),this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}registryEvent(){this.context.container.addEventListener("pointerenter",this.onPointermove),this.context.container.addEventListener("pointermove",this.onPointermove),this.context.container.addEventListener("pointerleave",this.onPointerleave),this.context.container.addEventListener("pointerdown",this.onPointerdown),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerenter",this.onPointermove),this.context.container.removeEventListener("pointermove",this.onPointermove),this.context.container.removeEventListener("pointerleave",this.onPointerleave),this.context.container.removeEventListener("pointerdown",this.onPointerdown),this.context.removeEventListener("update",this.onUpdate)}addPoint(t){if(this.points.push(t),this.points.length>=2){let e=this.calculatedDistance();this.dispatchEvent({type:"distance",distance:e})}}calculatedDistance(){let[{x:t,y:e},{x:i,y:o}]=this.points;return Math.sqrt(P(i-t,2)+P(o-e,2))}dispose(){super.dispose(),this.unRegistryEvent(),this.line=null,this.circles=[]}};var Q=class extends S{constructor(t){super(t);n(this,"circles",[]);n(this,"lines",[]);n(this,"isClose",!1);n(this,"onUpdate",()=>{this.points.length&&this.points.forEach((t,e)=>{let i=this.getSvgCoordinate(t);this.circles[e]&&z(this.circles[e],i.x,i.y),e!==0&&w(this.lines[e-1],void 0,i),this.lines[e]&&w(this.lines[e],i)})});n(this,"onPointermove",t=>{!this.lastLine||this.isClose||(this.lastLine.style.display="block",w(this.lastLine,void 0,{x:t.offsetX,y:t.offsetY}))});n(this,"onPointerleave",()=>{this.isClose||(this.lastLine.style.display="none")});n(this,"onPointerdown",t=>{if(this.isClose)return;let e=this.getIntersectByPointerEvent(t);if(e){let{offsetX:i,offsetY:o}=t;this.checkAdsorb(i,o)?(this.isClose=!0,this.addPoint(this.points[0])):this.addPoint(e);let{circle:{fill:r,radius:c},line:{stroke:h}}=this.context.config.svg;if(!this.isClose){let l=B(c,r);z(l,i,o),this.addCircle(l)}if(this.lines.length&&w(this.lastLine,void 0,{x:i,y:o}),!this.isClose){let l=K(h);w(l,{x:i,y:o},{x:i,y:o}),this.addLine(l)}}});this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}get lastLine(){return this.lines.slice(-1)[0]}addCircle(t){this.circles.push(t),this.svg.appendChild(t)}addLine(t){this.lines.push(t),this.svg.appendChild(t)}registryEvent(){this.context.container.addEventListener("pointerenter",this.onPointermove),this.context.container.addEventListener("pointermove",this.onPointermove),this.context.container.addEventListener("pointerleave",this.onPointerleave),this.context.container.addEventListener("pointerdown",this.onPointerdown),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerenter",this.onPointermove),this.context.container.removeEventListener("pointermove",this.onPointermove),this.context.container.removeEventListener("pointerleave",this.onPointerleave),this.context.container.removeEventListener("pointerdown",this.onPointerdown),this.context.removeEventListener("update",this.onUpdate)}checkAdsorb(t,e){if(this.points.length<3)return!1;let i=this.circles[0],o=+i.getAttribute("cx"),r=+i.getAttribute("cy");return Math.sqrt(P(t-o,2)+P(e-r,2))<=5}addPoint(t){if(this.points.push(t),this.isClose){let e=this.calculatedArea();this.dispatchEvent({type:"area",area:e})}}calculatedArea(){let t=this.points.map(o=>[o.x,o.y]),e=0,i=t.length;for(let o=0;o<i;o++){let r=(o+1)%i;e+=t[o][0]*t[r][1]-t[r][0]*t[o][1]}return Math.abs(e/2)}dispose(){super.dispose(),this.unRegistryEvent(),this.lines=[],this.circles=[]}};import{Box3 as Ue}from"three";var Ot=class extends S{constructor(t){super(t);this.context=t;n(this,"rect");n(this,"cornerRect",[]);n(this,"centerRect",[]);n(this,"graphic");n(this,"onUpdate",()=>{if(this.graphic){let t=new Ue().setFromObject(this.graphic),{camera:e,container:{clientWidth:i,clientHeight:o}}=this.context,{min:r,max:c}=t,h=y(r,e,i,o),l=y(c,e,i,o);C(this.rect,h.x,l.y,Math.abs(l.x-h.x),Math.abs(l.y-h.y));let{x:p,y:m}=h,{x:v,y:g}=l,d=5,b=[{x:p-d,y:g-d},{x:v-d,y:g-d},{x:p-d,y:m-d},{x:v-d,y:m-d}];for(let E=0;E<b.length;E++)C(this.cornerRect[E],b[E].x,b[E].y,d*2,d*2);let f=4,u=(p+v)/2,L=(m+g)/2,G=[{x:u-f,y:g-f},{x:p-f,y:L-f},{x:v-f,y:L-f},{x:u-f,y:m-f}];for(let E=0;E<G.length;E++)C(this.centerRect[E],G[E].x,G[E].y,f*2,f*2)}else{C(this.rect,0,0,0,0);for(let t=0;t<this.cornerRect.length;t++)C(this.cornerRect[t],0,0,0,0),C(this.centerRect[t],0,0,0,0)}});let{config:{svg:{line:e}}}=t;this.rect=F(e.stroke,"transparent"),this.svg.appendChild(this.rect);for(let i=0;i<4;i++)this.cornerRect[i]=F(e.stroke,"#ffffff"),this.centerRect[i]=F(e.stroke,"#ffffff"),this.svg.appendChild(this.cornerRect[i]),this.svg.appendChild(this.centerRect[i]);this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}selectGraphic(t){this.graphic=t}dispose(){super.dispose(),this.unRegistryEvent(),this.rect=null,this.cornerRect=[],this.centerRect=[]}};import{Frustum as _e}from"three";var J=class extends S{constructor(t){super(t);n(this,"startPoint");n(this,"endPoint");n(this,"rect");n(this,"frustum",new _e);n(this,"onPointerDown",t=>{if(!this.enable)return;let e=this.getIntersectByPointerEvent(t);e&&(this.startPoint=e),this.endPoint=void 0});n(this,"onPointerMove",t=>{if(!this.enable||!this.startPoint)return;let e=this.getIntersectByPointerEvent(t);e&&(this.endPoint=e)});n(this,"onPointerUp",t=>{if(!this.enable)return;let e=this.getIntersectByPointerEvent(t);e&&(this.endPoint=e),this.doSelect(),this.startPoint=void 0});n(this,"onUpdate",()=>{if(this.startPoint){let t=this.getSvgCoordinate(this.startPoint),e=x({},t);this.endPoint&&(e=this.getSvgCoordinate(this.endPoint));let i={x:Math.min(t.x,e.x),y:Math.min(t.y,e.y)},o=Math.abs(e.x-t.x),r=Math.abs(e.y-t.y);C(this.rect,i.x,i.y,o,r)}else C(this.rect,0,0,0,0)});let{config:{selectBox:{fill:e,stroke:i}}}=t;this.rect=F(i,e),this.svg.appendChild(this.rect),this.registryEvent()}setEnable(t){super.setEnable(t),C(this.rect,0,0,0,0),t?this.registryEvent():(this.startPoint=void 0,this.unRegistryEvent())}registryEvent(){this.context.container.addEventListener("pointerdown",this.onPointerDown),this.context.container.addEventListener("pointermove",this.onPointerMove),this.context.container.addEventListener("pointerup",this.onPointerUp),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerdown",this.onPointerDown),this.context.container.removeEventListener("pointermove",this.onPointerMove),this.context.container.removeEventListener("pointerup",this.onPointerUp),this.context.removeEventListener("update",this.onUpdate)}doSelect(){if(this.startPoint&&this.endPoint){if(this.startPoint.distanceTo(this.endPoint)<.1)return;let{context:{camera:e,container:{clientWidth:i,clientHeight:o}}}=this,r=y(this.startPoint,e,i,o),c=y(this.endPoint,e,i,o),h={x:Math.min(r.x,c.x),y:Math.min(r.y,c.y)},l={x:Math.max(r.x,c.x),y:Math.max(r.y,c.y)},p=this.searchMapInFrustum(h,l);this.dispatchEvent({type:"selected",list:p})}}searchMapInFrustum(t,e){var o;let{context:i}=this;return((o=i.currentFloor)==null?void 0:o.graphicLayer.children.filter(r=>r instanceof M&&this.searchChildInFrustum(r,t,e)))||[]}searchChildInFrustum(t,e,i){let{context:{camera:o,container:{clientWidth:r,clientHeight:c}}}=this;if(!t)return!1;if(!t.mesh){let g=t.getPosition();if(g){let d=y(g,o,r,c);return V(d,e,i)}return!1}t.mesh.geometry.boundingBox||t.mesh.geometry.computeBoundingBox();let h=t.mesh.geometry.boundingBox;if(!h)return!1;let{min:l,max:p}=h,m=y(l,o,r,c),v=y(p,o,r,c);return!(!V(m,e,i)||!V(v,e,i))}dispose(){this.unRegistryEvent()}};var tt=class extends Ke{constructor(t){super();this.context=t;n(this,"_list",new Set);n(this,"boxSelection");n(this,"prevPanStatus");n(this,"prevRotateStatus");n(this,"downPoint",null);n(this,"isMultipleSelect",!1);n(this,"onPointerDown",t=>{this.downPoint={x:t.offsetX,y:t.offsetY}});n(this,"onPointerUp",t=>{if(!this.downPoint)return;let{offsetX:e,offsetY:i}=t,{x:o,y:r}=this.downPoint;if(Math.sqrt(P(o-e,2)+P(r-i,2))>3)return;let{graphics:c}=this.context.getGraphicsByDeviceXy(e,i),h=new Set(c.map(p=>p.options.id));this.context.getPoisByDeviceXy(e,i).forEach(p=>{var m;if(!h.has(p.options.id)){let v=((m=this.context.currentFloor)==null?void 0:m.graphicLayer.graphicMap.get(p.options.id))||null;v&&v.options.geometry.type==="point"&&(c.push(v),h.add(p.options.id))}}),t.ctrlKey||this._list.clear(),c.forEach(p=>this._list.add(p)),this.selectEnd(),this.downPoint=null});n(this,"onKeyDown",t=>{t.key==="Control"&&(this.isMultipleSelect=!0,this.boxSelection.setEnable(!0),this.prevPanStatus=this.context.control.enablePan,this.prevRotateStatus=this.context.control.enableRotate,this.context.control.enablePan=!1,this.context.control.enableRotate=!1)});n(this,"onKeyUp",t=>{t.key==="Control"&&(this.isMultipleSelect=!1,this.boxSelection.setEnable(!1),this.context.control.enablePan=!!this.prevPanStatus,this.context.control.enableRotate=!!this.prevRotateStatus)});n(this,"onBoxSelected",({list:t})=>{this._list.clear(),t.forEach(e=>{this._list.add(e)}),this.selectEnd()});this.boxSelection=new J(t),this.boxSelection.setEnable(!1),this.registryEvent()}get list(){return this._list}selectEnd(){this.dispatchEvent({type:"select",graphics:[...this._list],isMultipleSelect:this.isMultipleSelect})}registryEvent(){this.context.container.addEventListener("pointerdown",this.onPointerDown),this.context.container.addEventListener("pointerup",this.onPointerUp),window.addEventListener("keydown",this.onKeyDown),window.addEventListener("keyup",this.onKeyUp),this.boxSelection.addEventListener("selected",this.onBoxSelected)}unRegistryEvent(){this.context.container.removeEventListener("pointerdown",this.onPointerDown),this.context.container.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("keydown",this.onKeyDown),window.removeEventListener("keyup",this.onKeyUp),this.boxSelection.removeEventListener("selected",this.onBoxSelected)}clear(){this._list.clear()}remove(t){this._list.delete(t)}dispose(){this.unRegistryEvent()}};import{EventDispatcher as je}from"three";var et=class extends je{constructor(t){super();this.context=t;n(this,"curGraphics",new Set);n(this,"timer",new A);n(this,"graphicTimerMap",new Map);n(this,"onPointerMove",({graphics:t,pois:e})=>{let i=e.map(h=>{var l;return(l=this.context.currentFloor)==null?void 0:l.graphicLayer.graphicMap.get(h.options.id)}).filter(h=>h&&h.options.geometry.type==="point");if(!t.length&&!i&&this.curGraphics.size){this.curGraphics.clear(),this.handleHoverGraphicsChange();return}let{time:o}=this.context.config.hover,r=new Set(t);r.size||i.forEach(h=>{r.add(h)}),r.forEach(h=>{if(this.graphicTimerMap.get(h)||this.curGraphics.has(h))return;let l=this.timer.setTimeout(()=>{this.curGraphics.add(h),this.handleHoverGraphicsChange()},o);this.graphicTimerMap.set(h,l)}),this.graphicTimerMap.forEach((h,l)=>{r.has(l)||(this.timer.clearTimeout(h),this.graphicTimerMap.delete(l))});let c=this.curGraphics.size;this.curGraphics.forEach(h=>{r.has(h)||this.curGraphics.delete(h)}),c!==this.curGraphics.size&&this.handleHoverGraphicsChange()});n(this,"onPointerLevel",()=>{this.curGraphics.clear(),this.handleHoverGraphicsChange()});this.registryEvent()}handleHoverGraphicsChange(t=this.curGraphics){this.dispatchEvent({type:"hover-change",graphics:Array.from(t)})}registryEvent(){this.context.addEventListener("pointer-over",this.onPointerMove),this.context.addEventListener("pointer-move",this.onPointerMove),this.context.addEventListener("pointer-level",this.onPointerLevel)}unRegistryEvent(){this.context.removeEventListener("pointer-over",this.onPointerMove),this.context.removeEventListener("pointer-move",this.onPointerMove),this.context.removeEventListener("pointer-level",this.onPointerLevel)}dispose(){this.unRegistryEvent(),this.timer.dispose()}};import{LineBasicMaterial as Ze,MeshStandardMaterial as Xe}from"three";var it=class{constructor(a){this.context=a;n(this,"lineMaterialMap",new Map);n(this,"meshStandardMaterialMap",new Map)}generateLineMaterialKey({color:a,opacity:t}){return`${a}-${t}`}createLineMaterial({color:a,opacity:t}){let e=this.generateLineMaterialKey({color:a,opacity:t});if(this.lineMaterialMap.has(e))return this.lineMaterialMap.get(e);let i=new Ze({color:a,transparent:!0,opacity:t});return this.lineMaterialMap.set(e,i),i}createMeshStandardMaterial({color:a,opacity:t}){let e=`${a}-${t}`;if(this.meshStandardMaterialMap.has(e))return this.meshStandardMaterialMap.get(e);let i=new Xe({color:a,roughness:1,transparent:!0,opacity:t,depthWrite:!0});return this.meshStandardMaterialMap.set(e,i),i}dispose(){this.lineMaterialMap.forEach((a,t)=>{a.dispose()}),this.lineMaterialMap.clear()}};var st=class extends We{constructor(t,e){super();this.container=t;this.config=e;n(this,"scene",gt());n(this,"renderer",ft());n(this,"camera");n(this,"control");n(this,"lights",yt());n(this,"timer",new A);n(this,"tweenGroup",new ti);n(this,"currentFloor");n(this,"selection");n(this,"hoverHelper");n(this,"basicRatio");n(this,"materialFactory");n(this,"observe",null);n(this,"clientSize",{width:0,height:0});n(this,"onWindowResize",()=>{let{container:t,camera:e,renderer:i}=this,{clientWidth:o,clientHeight:r}=t;o=Math.max(1,o),r=Math.max(1,r),e.left=-o/2,e.right=o/2,e.top=r/2,e.bottom=-r/2,e.updateProjectionMatrix(),i.setSize(o,r),this.resizeClientSize(o,r),this.dispatchEvent({type:"resize",width:o,height:r})});n(this,"onClick",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY);e.length&&this.dispatchEvent({type:"graphic-click",graphics:e,position:i});let o=this.getPoisByDeviceXy(t.offsetX,t.offsetY);o.length&&this.dispatchEvent({type:"poi-click",pois:o})});n(this,"onPointerover",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY),o=this.getPoisByDeviceXy(t.offsetX,t.offsetY);this.dispatchEvent({type:"pointer-over",graphics:e,pois:o,position:i})});n(this,"onPointermove",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY),o=this.getPoisByDeviceXy(t.offsetX,t.offsetY);this.dispatchEvent({type:"pointer-move",graphics:e,pois:o,position:i})});n(this,"onPointerleave",()=>{this.dispatchEvent({type:"pointer-level"})});n(this,"onSelectionSelect",({graphics:t,isMultipleSelect:e})=>{this.dispatchEvent({type:"select-graphic",graphics:t,isMultipleSelect:e})});n(this,"onHoverChange",({graphics:t})=>{this.dispatchEvent({type:"hover",graphics:t})});this.container.style.position="relative",this.container.style.overflow="hidden",this.init(),this.selection=new tt(this),this.hoverHelper=new et(this),this.materialFactory=new it(this),this.resizeClientSize(),this.registryEvent()}resizeClientSize(t,e){this.clientSize={width:t||this.container.clientWidth,height:e||this.container.clientHeight}}init(){let{clientWidth:t,clientHeight:e}=this.container;this.camera=vt(t,e),this.renderer.setSize(t,e),this.control=xt(this.camera,this.renderer.domElement),this.control.maxPolarAngle=this.config.control.maxPolar,this.container.appendChild(this.renderer.domElement),this.scene.add(this.lights),this.basicRatio=this.getRatio(),this.control.addEventListener("change",()=>{var o;let i=this.control.getPolarAngle();(o=this.currentFloor)==null||o.setShadowOpacity(i/this.config.control.maxPolar),this.dispatchEvent({type:"change-ratio",px:(this.basicRatio||0)*this.camera.zoom}),this.dispatchEvent({type:"control-change"})})}getRatio(t=new ot(0,0,0),e=new ot(100,0,0)){let{clientWidth:i,clientHeight:o}=this.container,r=y(t,this.camera,i,o),c=y(e,this.camera,i,o);return Math.ceil(Math.sqrt(P(c.x-r.x,2)+P(c.y-r.y,2)))}changeAmbientLightColor(t){this.lights.children.forEach(e=>{e instanceof Je&&(e.color=new Qe(t))})}switchFloor(t){this.currentFloor&&(this.scene.remove(this.currentFloor),this.currentFloor.dispose()),this.currentFloor=t,this.scene.add(t);let e=t.getCenter();e&&(this.lights.position.x=e.x,this.lights.position.y=e.y)}getGraphicsByDeviceXy(t,e){var c;let i=new nt;i.x=t/this.clientSize.width*2-1,i.y=e/this.clientSize.height*-2+1;let o=new qe;return o.setFromCamera(i,this.camera),((c=this.currentFloor)==null?void 0:c.graphicLayer.getGraphicByRaycaster(o))||{graphics:[],position:null}}getPoisByDeviceXy(t,e){var o;return((o=this.currentFloor)==null?void 0:o.poiLayer.getPoiByDeviceXy(t,e))||[]}registryEvent(){window.addEventListener("resize",this.onWindowResize),this.container.addEventListener("click",this.onClick),this.container.addEventListener("pointerover",this.onPointerover),this.container.addEventListener("pointermove",this.onPointermove),this.container.addEventListener("pointerleave",this.onPointerleave),this.selection.addEventListener("select",this.onSelectionSelect),this.hoverHelper.addEventListener("hover-change",this.onHoverChange)}unRegistryEvent(){window.removeEventListener("resize",this.onWindowResize),this.container.removeEventListener("click",this.onClick),this.container.removeEventListener("pointerover",this.onPointerover),this.container.removeEventListener("pointermove",this.onPointermove),this.container.removeEventListener("pointerleave",this.onPointerleave),this.selection.removeEventListener("select",this.onSelectionSelect),this.hoverHelper.removeEventListener("hover-change",this.onHoverChange)}setPolarAngle(t,e=500){return e===0?(this.control.maxPolarAngle=t,this.control.minPolarAngle=t,this.control.update(),this.control.maxPolarAngle=this.config.control.maxPolar,this.control.minPolarAngle=0,Promise.resolve()):R(new Promise(i=>{let o={polar:this.control.getPolarAngle()},r={polar:t},c=new rt(o,this.tweenGroup).to(r,e).onUpdate(()=>{this.control.maxPolarAngle=o.polar,this.control.minPolarAngle=o.polar,this.control.update()}).onComplete(()=>{this.control.enabled=!0,this.control.maxPolarAngle=this.config.control.maxPolar,this.control.minPolarAngle=0,this.tweenGroup.remove(c),i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}setAzimuthalAngle(t,e=500){if(e===0){this.control.maxAzimuthAngle=t,this.control.minAzimuthAngle=t,this.control.update(),this.control.maxAzimuthAngle=1/0,this.control.minAzimuthAngle=1/0;return}return R(new Promise(i=>{let o={azimuthal:this.control.getAzimuthalAngle()},r={azimuthal:t},c=new rt(o,this.tweenGroup).to(r,e).onUpdate(()=>{this.control.maxAzimuthAngle=o.azimuthal,this.control.minAzimuthAngle=o.azimuthal,this.control.update()}).onComplete(()=>{this.control.enabled=!0,this.control.maxAzimuthAngle=1/0,this.control.minAzimuthAngle=1/0,this.tweenGroup.remove(c),i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}getCameraLookAt(){return new ot().subVectors(this.control.target,this.camera.position)}setZoom(t,e,i=500){let o=this.getCameraLookAt(),r={zoom:this.camera.zoom,target:this.control.target.clone()};if(!i){this.camera.position.copy(e.clone().sub(o)),this.control.target.copy(e),this.camera.zoom=t,this.control.update();return}return R(new Promise(c=>{let h=new rt(r,this.tweenGroup).to({zoom:t,target:e},i).onUpdate(()=>{this.camera.position.copy(r.target.clone().sub(o)),this.control.target.copy(r.target),this.camera.zoom=r.zoom,this.control.update()}).onComplete(()=>{this.tweenGroup.remove(h),this.control.enabled=!0,c(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),i+500)}fitCameraToObject(t,e=[20,20,20,20],i=500){let[o,r,c,h]=e,{clientSize:{width:l,height:p}}=this,m=this.control.getPolarAngle();this.setPolarAngle(0,0);let v=new Ne().setFromObject(t);this.setPolarAngle(m,0);let{max:g,min:d}=v,b=y(g,this.camera,l,p),f=y(d,this.camera,l,p),L=new Ye().setFromPoints([new nt(b.x,b.y),new nt(f.x,f.y)]).getSize(new nt),G=(l-r-h)/L.x,E=(p-o-c)/L.y,Tt=Math.min(G,E),Rt=new ot((g.x+d.x)/2,(g.y+d.y)/2,g.z);return this.setZoom(Tt*this.camera.zoom,Rt,i)}fitCameraToGround(t=[20,20,20,20],e=500){return this.currentFloor&&this.currentFloor.hasElement?this.fitCameraToObject(this.currentFloor.groundUpper,t,e):Promise.resolve(!1)}setCameraPosition(t,e){return R(new Promise(i=>{let o=this.camera.position.clone(),r=this.getCameraLookAt(),c=new rt(o,this.tweenGroup).to(t,e).onUpdate(()=>{this.camera.position.copy(o),this.control.target.copy(t.clone().add(r))}).onComplete(()=>{this.tweenGroup.remove(c),this.camera.position.copy(o.clone().sub(r)),this.control.target.copy(t.clone()),this.control.update(),this.control.enabled=!0,i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}render(){this.renderer.render(this.scene,this.camera),this.dispatchEvent({type:"update"}),this.timer.requestAnimationFrame(()=>{this.render()}),this.tweenGroup.update()}dispose(){this.selection.dispose(),this.hoverHelper.dispose(),this.tweenGroup.getAll().forEach(t=>t.stop()),this.tweenGroup.removeAll(),this.unRegistryEvent(),this.container.removeChild(this.renderer.domElement),this.timer.dispose(),this.renderer.dispose(),this.lights.children.forEach(t=>t.dispose()),this.materialFactory.dispose(),k(this.scene)}};import{merge as ei}from"lodash";var ii={apiDomain:"",apiInfo:{},apiPath:{floorGraphic:"/api/inception-map/floor/get",floorRange:"/api/inception-map/range/get"},resizeObserver:!1,initTransToMark:!1,heatMap:{radius:50,gradient:{0:"#8F9FCD",.5:"#6284FF",1:"#F95D5D"}},useFloorCache:!0,control:{maxPolar:1.2,defaultPolar:.9},svg:{circle:{radius:"2",fill:"#1CADFF"},line:{stroke:"#1CADFF"}},selectBox:{stroke:"#1CADFF",fill:"rgba(28, 173, 255, 0.3)"},hover:{time:100},ground:{color:"#FAFAFA",opacity:1,height:3,stroke:!0,strokeColor:"#E6E6E6",strokeOpacity:1},markGraphic:{color:"#EEF0F3",opacity:1,height:.001,stroke:!1,strokeColor:"#000",strokeOpacity:1},graphic:{fillOpacity:1}};function zt(s){return ei({},ii,s)}import{debounce as ni}from"lodash";var ri=(t=>(t[t.D2=0]="D2",t[t.D3=.9]="D3",t))(ri||{}),Ft=class extends oi{constructor(t,e={}){super();this.container=t;n(this,"config");n(this,"context");n(this,"polarKeys",[]);n(this,"azimuthalKeys",[]);n(this,"svgLine");n(this,"svgPolygon");n(this,"basicZoom",1);n(this,"prevCameraZoom",1);n(this,"type","2d");n(this,"floorDataMap",new Map);n(this,"buildingGroundMap",new Map);n(this,"currentBuildGround",null);n(this,"observe",null);n(this,"onControlChange",()=>{let{camera:{zoom:t}}=this.context;t!==this.prevCameraZoom&&(this.dispatchEvent({type:"zoom-change",basicZoom:this.basicZoom,cameraZoom:this.context.camera.zoom}),this.prevCameraZoom=t)});n(this,"onKeydown",t=>{this.polarKeys.includes(t.code)&&(this.context.control.maxPolarAngle=this.config.control.maxPolar,this.context.control.minPolarAngle=0),this.azimuthalKeys.includes(t.code)&&(this.context.control.maxAzimuthAngle=1/0,this.context.control.minAzimuthAngle=1/0)});n(this,"onKeyUp",t=>{if(this.polarKeys.includes(t.code)){let e=this.context.control.getPolarAngle();this.context.control.maxPolarAngle=e,this.context.control.minPolarAngle=e}if(this.azimuthalKeys.includes(t.code)){let e=this.context.control.getAzimuthalAngle();this.context.control.maxAzimuthAngle=e,this.context.control.minAzimuthAngle=e}});n(this,"resize",()=>{this.context.onWindowResize();let t=this.context.control.getAzimuthalAngle(),e=this.context.camera.zoom;this.context.control.minZoom=0,this.context.control.maxZoom=1/0,this.context.camera.zoom=1,this.context.setAzimuthalAngle(0,0),this.context.fitCameraToGround(void 0,0),this.basicZoom=this.context.camera.zoom,this.context.control.minZoom=this.basicZoom,this.context.control.maxZoom=this.basicZoom*25,this.context.camera.zoom=e,this.context.control.addEventListener("change",this.onControlChange),this.context.setAzimuthalAngle(t,0)});this.config=zt(e),this.context=new st(t,this.config),this.registryEvent(),this.context.render()}loadGraphics(l){return D(this,arguments,function*({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){let{apiDomain:p,apiPath:{floorGraphic:m},apiInfo:v}=this.config,g=`${p}${m}?brand=${t}&project=${e}&phase=${i}&building=${o}&floor=${r}&ts=${c}&resource_type_list=${h}`;return yield fetch(g,v).then(b=>b.json()).then(b=>b.data).then(b=>((b||[]).map(f=>f.info=JSON.parse(f.info)),b||[]))})}getBuildingKey({brand:t,project:e,phase:i,building:o}){return`${t}-${e}-${i}-${o}`}loadBuildingGround(r){return D(this,arguments,function*({brand:t,project:e,phase:i,building:o}){let c=this.getBuildingKey({brand:t,project:e,phase:i,building:o});if(this.buildingGroundMap.get(c))return this.buildingGroundMap.get(c)||null;let{apiDomain:h,apiPath:{floorRange:l},apiInfo:p}=this.config,m=`${h}${l}?brand=${t}&project=${e}&phase=${i}&building=${o}`,v=yield fetch(m,p).then(g=>g.json()).then(g=>g.data).then(g=>{let d=(g||[])[0];return d&&(d.info=JSON.parse(d.info)),d});return this.buildingGroundMap.set(c,v),v})}getFloorKey({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){return`${t}-${e}-${i}-${o}-${r}-${c}-${h}`}load(l){return D(this,arguments,function*({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){let p=this.getFloorKey({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h});if(this.floorDataMap.get(p))return;let[m,v]=yield Promise.all([this.loadGraphics({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}),this.loadBuildingGround({brand:t,project:e,phase:i,building:o})]);if(v){let f=lt(v.info.geometry.cds[0]);m.forEach(u=>{if(u.info.geometry.type==="polygon")u.info.geometry.cds.map(L=>{Array.isArray(L)&&L.forEach(G=>{G[0]-=f[0],G[1]-=f[1]})});else{let[L,G]=u.info.geometry.cds;u.info.geometry.cds=[L-f[0],G-f[1]]}u.info.transformToBuildingGround=!0})}let{ground:g,markGraphic:d,graphic:b}=this.config;for(let f=0;f<m.length;f++){let u=m[f];u.info.deltaHeight=1e-5*(f+1),u.info.group==="ground"?(u.info.fillColor=g.color,u.info.fillOpacity=g.opacity,u.info.height=g.height,u.info.stroke=g.stroke,u.info.strokeColor=g.strokeColor,u.info.strokeOpacity=g.strokeOpacity):u.info.userData.mark?(u.info.height=d.height,u.info.fillColor=d.color,u.info.fillOpacity=d.opacity,u.info.stroke=d.stroke,u.info.strokeColor=d.strokeColor,u.info.strokeOpacity=d.strokeOpacity):(u.info.fillOpacity=b.fillOpacity,this.config.initTransToMark&&(u.info.height=d.height,u.info.fillColor=d.color,u.info.stroke=d.stroke,u.info.strokeColor=d.strokeColor,u.info.strokeOpacity=d.strokeOpacity))}return this.config.useFloorCache||this.floorDataMap.clear(),this.floorDataMap.set(p,m),m})}createFloor(t){let e=new q(this.context);if(!t.length)return{curFloor:e,graphics:[]};let i=new Map,o=[];for(let r of t)if(r.info.group==="ground")e.createGround(r.info);else{let c=e.addGraphic(r.info);c.userData.data=r,i.set(r.legacy_id,c),o.push(c)}return e.addShadow(),e.userData.legacyToGraphicMap=i,{curFloor:e,graphics:o}}switchFloor({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){let l=this.getFloorKey({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}),p=this.floorDataMap.get(l);if(this.context.control.removeEventListener("change",this.onControlChange),p){let m=this.getBuildingKey({brand:t,project:e,phase:i,building:o});this.currentBuildGround=this.buildingGroundMap.get(m)||null;let v=this.createFloor(p);v?(this.context.switchFloor(v.curFloor),this.context.control.minZoom=0,this.context.control.maxZoom=1/0,this.context.camera.zoom=1,this.context.setAzimuthalAngle(0,0),this.context.fitCameraToGround(void 0,0),this.basicZoom=this.context.camera.zoom,this.context.control.minZoom=this.basicZoom,this.context.control.maxZoom=this.basicZoom*25,this.context.control.addEventListener("change",this.onControlChange),this.onControlChange()):console.warn("[switchFloor error] ["+r+"] \u697C\u5C42\u6CA1\u6709\u6570\u636E")}else console.warn("[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42")}addHeatmap(t){var e;return(e=this.context.currentFloor)==null?void 0:e.addHeatmap(t)}getLegacyToGraphicMap(){var t;return((t=this.context.currentFloor)==null?void 0:t.userData.legacyToGraphicMap)||new Map}getFloorAllGraphics(){var t;return((t=this.context.currentFloor)==null?void 0:t.graphicLayer.children.filter(e=>e instanceof M))||[]}createGraphicPoi(t,e){if(this.context.currentFloor){e.id===void 0&&(e.id=t.options.id);let i=t.getCenter();return this.context.currentFloor.addPoi(ct(x({},e),{position:ct(x({},i),{z:i.z+t.options.height/2})}))}return null}removeHeatMap(){var t;(t=this.context.currentFloor)==null||t.removeHeatMap()}translateElementToCenter(t,e=500){let i=t.getPosition();return this.context.setCameraPosition(i,e)}getElementDeviceCoordinate(t){let e=t.position.clone(),{clientWidth:i,clientHeight:o}=this.container;return y(e,this.context.camera,i,o)}changeMapType(t,e=500){return this.type=t,t==="2d"?this.context.setPolarAngle(0,e):this.context.setPolarAngle(.9,e)}resetView(t=300){return D(this,null,function*(){let e=t/3;yield this.context.setAzimuthalAngle(0,e),yield this.changeMapType(this.type,e),yield this.context.fitCameraToGround(void 0,e)})}reduceMap(t=.5,e=500){let i=this.context.camera.zoom;return this.context.setZoom(i-t,this.context.control.target,e)}enlargeMap(t=.5,e=500){let i=this.context.camera.zoom;return this.context.setZoom(i+t,this.context.control.target,e)}registryEvent(){if(window.addEventListener("keydown",this.onKeydown),window.addEventListener("keyup",this.onKeyUp),this.config.resizeObserver){let t=new ResizeObserver(ni(this.resize,5));t.observe(this.container),this.observe=t}}unRegistryEvent(){var t;window.removeEventListener("keydown",this.onKeydown),window.removeEventListener("keyup",this.onKeyUp),(t=this.observe)==null||t.disconnect(),this.observe=null}configurePolarShortcutKeys(t){this.polarKeys=t}configureAzimuthalShortcutKeys(t){this.azimuthalKeys=t}rotateMap(t=.1){let e=this.context.control.getAzimuthalAngle();this.context.control.maxAzimuthAngle=e+t,this.context.control.minAzimuthAngle=e+t,this.context.control.update()}measureDistance(){return D(this,null,function*(){return this.cancelDistance(),new Promise((t,e)=>{this.changeMapType("2d",0),this.context.control.enableRotate=!1,this.svgLine=new N(this.context);let i=this.svgLine.dispose.bind(this.svgLine);this.svgLine.dispose=function(){i(),e("cancel")},this.svgLine.addEventListener("distance",({distance:o})=>{t(o)})})})}cancelDistance(){this.svgLine&&(this.svgLine.dispose(),this.svgLine=void 0,this.context.control.enableRotate=!0)}measureArea(){return this.cancelArea(),new Promise((t,e)=>{this.changeMapType("2d",0),this.context.control.enableRotate=!1,this.svgPolygon=new Q(this.context);let i=this.svgPolygon.dispose.bind(this.svgPolygon);this.svgPolygon.dispose=function(){i(),e("cancel")},this.svgPolygon.addEventListener("area",({area:o})=>{t(o)})})}cancelArea(){this.svgPolygon&&(this.svgPolygon.dispose(),this.svgPolygon=void 0,this.context.control.enableRotate=!0)}getGraphicByNodeId(t){var e;return((e=this.context.currentFloor)==null?void 0:e.graphicLayer.getGraphicByNodeId(t))||null}deleteGraphic(t){var e;(e=this.context.currentFloor)==null||e.graphicLayer.removeGraphic(t)}createGraphicByOptions(t){var e;if(!t.transformToBuildingGround&&this.currentBuildGround){let i=lt(this.currentBuildGround.info.geometry.cds[0]);if(t.geometry.type==="polygon")t.geometry.cds.map(o=>{Array.isArray(o)&&o.forEach(r=>{r[0]-=i[0],r[1]-=i[1]})});else{let[o,r]=t.geometry.cds;t.geometry.cds=[o-i[0],r-i[1]]}}return(e=this.context.currentFloor)==null?void 0:e.graphicLayer.createGraphic(t)}removePoiById(t){var e;return(e=this.context.currentFloor)==null?void 0:e.poiLayer.removePoiById(t)}getPoiById(t){var e;return(e=this.context.currentFloor)==null?void 0:e.poiLayer.getPoiById(t)}getPois(){var t;return((t=this.context.currentFloor)==null?void 0:t.poiLayer.pois)||[]}clearPoi(){this.context.currentFloor&&this.context.currentFloor.poiLayer.clear()}removeSelectGraphic(t){this.context.selection.remove(t)}dispose(){this.context.dispose(),this.floorDataMap.clear(),this.buildingGroundMap.clear(),Ct(),Mt(),this.unRegistryEvent()}};export{Ft as BMap,S as BaseSvg,st as Context,q as Floor,M as Graphic,X as GraphicLayer,Y as HeatmapElement,et as HoverHelper,T as Layer,ri as MapTypePolar,Z as Overlay,I as Poi,W as PoiLayer,Ot as SelectBox,tt as Selection,j as Shadow,N as SvgLine,Q as SvgPolygon,A as Timer,Gi as addAlphaToHexColor,Mt as clearCanvas,Ct as clearTextTexture,ie as createCanvas,B as createCircle,K as createLine,F as createRect,Lt as createSvg,_ as createSvgElement,ii as defaultConfig,k as dispose,lt as getCenter,zt as getConfig,vi as getTextureByText,Pt as hasChinese,vt as initCamera,ee as initCanvas,xt as initControl,Et as initDirectionalLight,yt as initLight,ft as initRenderer,gt as initScene,bt as initShape,V as isContain,U as proxyOptions,z as setCirclePosition,w as setLineStartEnd,C as setRectPosition,Gt as sleepOnePromise,Ci as sleepOneRf,Li as strToNumber,R as timeoutPromise,y as vector3ToDevice};
|
|
1
|
+
var Ht=Object.defineProperty,It=Object.defineProperties;var $t=Object.getOwnPropertyDescriptors;var dt=Object.getOwnPropertySymbols;var Vt=Object.prototype.hasOwnProperty,Ut=Object.prototype.propertyIsEnumerable;var P=Math.pow,at=(s,a,t)=>a in s?Ht(s,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[a]=t,b=(s,a)=>{for(var t in a||(a={}))Vt.call(a,t)&&at(s,t,a[t]);if(dt)for(var t of dt(a))Ut.call(a,t)&&at(s,t,a[t]);return s},ct=(s,a)=>It(s,$t(a));var n=(s,a,t)=>(at(s,typeof a!="symbol"?a+"":a,t),t);var D=(s,a,t)=>new Promise((e,i)=>{var o=h=>{try{c(t.next(h))}catch(l){i(l)}},r=h=>{try{c(t.throw(h))}catch(l){i(l)}},c=h=>h.done?e(h.value):Promise.resolve(h.value).then(o,r);c((t=t.apply(s,a)).next())});import{EventDispatcher as ni}from"three";var A=class{constructor(){n(this,"tasks",{requestAnimation:new Set,timeout:new Set,interval:new Set})}requestAnimationFrame(a){let t=window.requestAnimationFrame(()=>{this.tasks.requestAnimation.delete(t),a()});return this.tasks.requestAnimation.add(t),t}cancelAnimationFrame(a){this.tasks.requestAnimation.delete(a),window.cancelAnimationFrame(a)}setTimeout(a,t){let e=window.setTimeout(()=>{this.tasks.timeout.delete(e),a()},t);return this.tasks.timeout.add(e),e}clearTimeout(a){this.tasks.timeout.delete(a),window.clearTimeout(a)}setInterval(a,t){let e=window.setInterval(()=>{this.tasks.interval.delete(e),a()},t);return this.tasks.interval.add(e),e}clearInterval(a){this.tasks.interval.delete(a),window.clearInterval(a)}dispose(){this.tasks.requestAnimation.forEach(a=>{window.cancelAnimationFrame(a)}),this.tasks.requestAnimation.clear(),this.tasks.timeout.forEach(a=>{window.clearTimeout(a)}),this.tasks.timeout.clear(),this.tasks.interval.forEach(a=>{window.clearInterval(a)}),this.tasks.interval.clear()}};import{Scene as _t,WebGLRenderer as Kt,OrthographicCamera as jt,Shape as Zt,PCFSoftShadowMap as Xt,Group as Wt,Color as Yt,DirectionalLight as qt,AmbientLight as Nt,Path as Qt,Vector2 as ut}from"three";import{MapControls as Jt}from"three/examples/jsm/controls/MapControls";function gt(){let s=new _t;return s.background=new Yt(16777215),s}function ft(){let s=new Kt({antialias:!0});return s.autoClear=!0,s.setClearAlpha(1),s.setClearColor(16777215),s.setPixelRatio(window.devicePixelRatio),s.shadowMap.enabled=!0,s.shadowMap.autoUpdate=!0,s.shadowMap.type=Xt,s}function vt(s,a){let t=new jt(-s/2,s/2,a/2,-a/2,-1e3,5e3);return t.up.set(0,0,1),t.position.set(0,0,100),t.lookAt(0,0,0),t}function yt(){let s=new Wt,a=new Nt(16777215,2.6);return s.add(a),s}function xt(s,a){let t=new Jt(s,a);return t.enableDamping=!1,t.zoomSpeed=2,t}function bt(s,a=[]){let t=new Zt(s.map(e=>new ut(...e)));return a.length&&a.forEach(e=>{var i=new Qt(e.map(o=>new ut(...o)));t.holes.push(i)}),t}function Et(s=16777215,a=1){let t=new qt(s,a);return t.castShadow=!0,t.shadow.radius=8,t.shadow.bias=-.001,t.shadow.mapSize.set(256,256),t.shadow.camera.left=-200,t.shadow.camera.right=200,t.shadow.camera.top=200,t.shadow.camera.bottom=-200,t}function k(s,a){var t;if(a&&s.children&&s.children.length&&s.children.forEach(e=>{k(e,a)}),s.isMesh){let e=s;e.geometry&&e.geometry.dispose(),e.material&&(Array.isArray(e.material)?e.material.forEach(i=>{i.dispose()}):e.material.dispose())}s.isLight&&((t=s.dispose)==null||t.call(s))}function Pt(s){return/[\u4E00-\u9FA5]+/g.test(s)}import{DataTexture as te,RGBAFormat as ee,LinearFilter as wt}from"three";var $=new Map;function ie(){let s=document.createElement("canvas");s.width=1024,s.height=64;let a=s.getContext("2d",{willReadFrequently:!0});return a.font="54px sans-serif",a.textBaseline="hanging",a.lineWidth=12,a.fillStyle="rgba(0,0,0,1)",a.strokeStyle="white",{canvas:s,ctx:a}}var ht,O;function oe(){if(!ht){let{canvas:s,ctx:a}=ie();ht=s,O=a}}function yi(s){if($.has(s))return $.get(s);oe(),O.clearRect(0,0,1024,64);let a=Pt(s)?4:8;O.strokeText(s,2,a),O.fillText(s,2,a);let t=Math.ceil(O.measureText(s).width);t=t%2===0?t:t+1,t+=2;let e=O.getImageData(0,0,t,64),i=new te(Uint8Array.from(e.data),t,64,ee);return i.flipY=!0,i.minFilter=wt,i.magFilter=wt,$.set(s,i),i}function Ct(){$.clear()}function Mt(){O=null,ht=null}import{point as ne,featureCollection as re,center as se}from"@turf/turf";function y(s,a,t,e){let i=s.clone().project(a),o=t/2,r=e/2,c=Math.round(i.x*o+o),h=Math.round(-i.y*r+r);return{x:c,y:h}}function lt(s){let a=re(s.map(e=>ne(e)));return se(a).geometry.coordinates}function V(s,a,t){return s.x>=a.x&&s.x<=t.x&&s.y>=a.y&&s.y<=t.y}function U(s,a){return new Proxy(s,{get:(t,e,i)=>Reflect.get(t,e,i),set:(t,e,i,o)=>{let r=Reflect.get(t,e,o),c=Reflect.set(t,e,i,o);return r!==i&&a.dispatchEvent({type:`change-${e}`,value:i}),c}})}function R(s,a){return Promise.race([s,new Promise((t,e)=>{setTimeout(()=>e(new Error("Promise timeout")),a)})])}function _(s){return document.createElementNS("http://www.w3.org/2000/svg",s)}function Lt(s,a){let t=_("svg");return t.setAttribute("width",s),t.setAttribute("height",a),t.style.cssText="position: absolute; left: 0; top: 0; pointer-events: none;",t}function B(s="2",a){let t=_("circle");return t.setAttribute("r",s),t.setAttribute("fill",a),t}function K(s){let a=_("line");return a.setAttribute("stroke",s),a}function F(s,a){let t=_("rect");return t.setAttribute("stroke",s),t.setAttribute("fill",a),t}function z(s,a,t){s.setAttribute("cx",`${a}`),s.setAttribute("cy",`${t}`)}function C(s,a,t){a&&(s.setAttribute("x1",`${a.x}`),s.setAttribute("y1",`${a.y}`)),t&&(s.setAttribute("x2",`${t.x}`),s.setAttribute("y2",`${t.y}`))}function M(s,a,t,e,i){s.setAttribute("x",`${a}`),s.setAttribute("y",`${t}`),s.setAttribute("width",`${e}`),s.setAttribute("height",`${i}`)}function Gt(){return Promise.resolve()}function Mi(){return new Promise(s=>{requestAnimationFrame(s)})}function Gi(s){return parseInt(s.replace("#","0x"),16)}function Si(s,a){let t=parseInt(s.substring(1,3),16),e=parseInt(s.substring(3,5),16),i=parseInt(s.substring(5,7),16),o=Math.round(t*a),r=Math.round(e*a),c=Math.round(i*a);return`#${(1<<24|o<<16|r<<8|c).toString(16).slice(1)}`}import{EventDispatcher as Ye,Box2 as qe,Vector3 as ot,Vector2 as nt,Raycaster as Ne,Box3 as Qe,Color as Je,AmbientLight as ti}from"three";import{Group as ei,Tween as rt}from"@tweenjs/tween.js";import{EventDispatcher as je}from"three";import{Object3D as ae,ExtrudeGeometry as ce,Mesh as he,Box3 as St,Vector3 as H,BufferGeometry as le,LineSegments as pe}from"three";var me={id:"",height:.1,airHeight:0,area:0,group:"",fillColor:"#EFF4FB",strokeColor:"#ffffff",fillOpacity:1,strokeOpacity:1,strokeWidth:1,doors:[],locked:!1,visible:!0,geometry:{type:"polygon",cds:[],curveCpt:[],curveIndex:[]},layerType:"",zIndex:0,stroke:!0,deltaHeight:0,userData:{}},L=class extends ae{constructor(t,e){super();this.context=t;n(this,"geometry");n(this,"material");n(this,"mesh");n(this,"line");n(this,"lineMaterial");n(this,"lineGeometry");n(this,"options");if(this.options=U(b(b({},me),e),this),this.options.geometry.type==="point"){let[i,o]=this.options.geometry.cds;return this.position.set(i,o,this.options.height+this.options.airHeight),this}this.init(),this.visible=this.options.visible,this.addEventListener("change-fillColor",({value:i})=>{this.initMaterial(),this.initMesh()}),this.addEventListener("change-fillOpacity",({value:i})=>{this.initMaterial(),this.initMesh()}),this.addEventListener("change-height",({value:i})=>{this.dispose(),this.init()}),this.addEventListener("change-strokeColor",({value:i})=>{this.options.stroke&&(this.initLineMaterial(),this.createBorder())}),this.addEventListener("change-strokeOpacity",({value:i})=>{this.options.stroke&&(this.initLineMaterial(),this.createBorder())}),this.addEventListener("change-airHeight",({value:i})=>{this.position.z=i}),this.addEventListener("change-visible",({value:i})=>{this.visible=i}),this.addEventListener("change-stroke",({value:i})=>{var o;if(i){if(this.line)return;this.initLineGeometry(),this.initLineMaterial(),this.createBorder()}else this.line&&(this.remove(this.line),(o=this.lineGeometry)==null||o.dispose())})}getCenter(){if(this.options.geometry.type==="point")return this.position.clone();let t=new H,e=new St;return e.setFromObject(this),e.getCenter(t),t}getSize(){if(this.options.geometry.type==="point")return new H(0,0,0);let t=new St,e=new H;return t.setFromObject(this),t.getSize(e),e}getPosition(){let t=this.getCenter();return t.setZ(t.z+this.options.height),t}init(){this.geometry=this.initGeometry(),this.initMaterial(),this.initMesh(),this.mesh.position.z=this.options.airHeight+this.options.deltaHeight,this.options.stroke&&(this.initLineMaterial(),this.initLineGeometry(),this.createBorder())}initGeometry(){let t=bt(this.options.geometry.cds[0],this.options.geometry.cds.slice(1));return new ce(t,{steps:1,bevelEnabled:!1,depth:this.options.height,curveSegments:4})}initMaterial(){let t=this.context.materialFactory.createMeshStandardMaterial({color:this.options.fillColor,opacity:this.options.fillOpacity});return this.material=t,t}initLineMaterial(){let t=this.context.materialFactory.createLineMaterial({color:this.options.strokeColor,opacity:this.options.strokeOpacity});return this.lineMaterial=t,t}initMesh(){this.mesh&&this.remove(this.mesh),this.mesh=new he(this.geometry,this.material),this.add(this.mesh)}getBorderPoints(){let t=[],e=this.options.height+this.options.deltaHeight,{cds:i,curveIndex:o}=this.options.geometry;for(let r=0;r<i.length;r++){let c=i[r];for(let h=0;h<c.length;h++){let l=c[h],p=h+1===c.length?c[0]:c[h+1];t.push(new H(l[0],l[1],e)),t.push(new H(p[0],p[1],e))}}return t}initLineGeometry(){this.lineGeometry&&this.lineGeometry.dispose();let t=this.getBorderPoints(),e=new le().setFromPoints(t);this.lineGeometry=e}createBorder(){this.line&&this.remove(this.line);let t=new pe(this.lineGeometry,this.lineMaterial);return t.position.z=this.options.airHeight+.01,this.line=t,this.add(t),t}raycast(t){if(!this.visible||this.options.geometry.type==="point")return!1;let e=t.intersectObject(this.mesh);if(e[0]){let{point:i,distance:o}=e[0];return{position:i,distance:o}}return!1}dispose(){var t;this.geometry.dispose(),(t=this.line)==null||t.geometry.dispose(),this.clear()}};import{Object3D as de,PlaneGeometry as ue,Mesh as ge,ShadowMaterial as fe,Color as ve,DoubleSide as ye}from"three";var j=class extends de{constructor(){super();n(this,"directionalLight");n(this,"plane");n(this,"basicOpacity",.07);this.directionalLight=this.initLight(),this.initPlane()}initLight(){let t=Et(16777215,.5);return t.position.set(0,0,100),this.add(t),t}changeLightCamera(t){let e=t.x,i=t.y;this.directionalLight.shadow.camera.left=-e,this.directionalLight.shadow.camera.right=e,this.directionalLight.shadow.camera.top=i,this.directionalLight.shadow.camera.bottom=-i,this.directionalLight.shadow.camera.near=.5,this.directionalLight.shadow.camera.far=Math.max(e,i)}changeLightColor(t){this.directionalLight.color=new ve(t)}setPosition(t){this.position.copy(t),this.directionalLight.position.set(-t.x/2,-t.y/2,100)}initPlane(t=1e3,e=1e3){let i=new ue(t,e),o=new fe({transparent:!0,opacity:0,side:ye}),r=new ge(i,o);return r.receiveShadow=!0,r.position.z=-10,this.add(r),this.plane=r,r}setTarget(t){this.directionalLight.target=t}transformOpacity(t){return t*this.basicOpacity}setOpacity(t){this.plane.material.opacity=this.transformOpacity(t)}dispose(){k(this,!0)}};import{EventDispatcher as Pe,Vector3 as we}from"three";import{Box3 as xe,EventDispatcher as be,Vector3 as Dt}from"three";var Ee={autoUpdate:!0},Z=class extends be{constructor(t,e={}){super();this.context=t;n(this,"div");n(this,"element");n(this,"position",new Dt);n(this,"clientPos",{x:0,y:0});n(this,"visible",!0);n(this,"options");n(this,"onUpdate",()=>{let t=this.getPosition(),{width:e,height:i}=this.context.clientSize,{x:o,y:r}=y(t,this.context.camera,e,i);this.clientPos.x===o&&this.clientPos.y===r||(this.clientPos={x:o,y:r},this.options.autoUpdate?this.div.style.transform=`translate3d(${o}px, ${-i+r}px, 0)`:this.dispatchEvent({type:"update-position",x:o,y:r,width:e,height:i}))});this.options=b(b({},Ee),e),this.registryEvent(),this.div=this.initDiv(),this.context.container.appendChild(this.div)}initDiv(){let t=document.createElement("div");return t.style.position="absolute",t}bindElement(t){this.element=t,this.onUpdate()}unBindElement(){this.element=void 0}setVisible(t,e="block"){t!==this.visible&&(this.div.style.display=t?e:"none",this.visible=t)}setOpacity(t){this.div.style.opacity=`${t}`}getPosition(){return this.element?typeof this.element.getPosition=="function"?this.element.getPosition():new xe().setFromObject(this.element).getCenter(new Dt):this.position}get withinDisplayRange(){let{x:t,y:e}=this.clientPos,{width:i,height:o}=this.context.clientSize;return t>=0&&t<=i&&e>=0&&e<=o}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}dispose(){this.unRegistryEvent(),this.unBindElement(),this.div&&this.context.container.removeChild(this.div),this.div=null}};var Ce={texts:[{text:""}],level:1,collision_enable:!0,opacity:1,id:"",position:{x:0,y:0,z:0},icon_opacity:1,icon_border:{color:"#586EE0",width:0},background:""},I=class extends Pe{constructor(t,e){var i,o,r;super();this.context=t;n(this,"div");n(this,"textDiv");n(this,"img");n(this,"overlay");n(this,"options");n(this,"visible",!0);n(this,"size",{width:0,height:0});n(this,"position",new we);n(this,"_changePosition",()=>{});this.options=U(b(b({},Ce),e),this),this.position.set(((i=e.position)==null?void 0:i.x)||0,((o=e.position)==null?void 0:o.y)||0,((r=e.position)==null?void 0:r.z)||0),this.overlay=new Z(this.context,{autoUpdate:!1}),this.overlay.addEventListener("update-position",({x:c,y:h,height:l})=>{this.overlay.div.style.transform=`translate3d(calc(${c}px - 50%), calc(${-l+h}px - ${this.options.icon?"100%":"50%"}), 0)`}),this.overlay.bindElement(this),this.registryEvent(),this.initDiv(),this.addEventListener("change-icon",({value:c})=>{c?this.img?this.img.setAttribute("src",c):this.div.appendChild(this.initIcon()):(this.img&&this.div.removeChild(this.img),this.img=void 0,this._changePosition(),this.resetSize())}),this.addEventListener("change-texts",({value:c})=>{this.div.removeChild(this.textDiv),this.div.appendChild(this.initText()),this.resetSize()}),this.addEventListener("change-opacity",({value:c})=>{this.overlay.setOpacity(c)}),this.addEventListener("change-icon_size",({value:c})=>{this.img&&(this.img.style.width=`${(c==null?void 0:c[0])||32}px`,this.img.style.height=`${(c==null?void 0:c[1])||32}px`,this.resetSize())}),this.addEventListener("change-icon_opacity",({value:c})=>{this.img&&(this.img.style.opacity=`${c}`)}),this.addEventListener("change-icon_border",({value:c})=>{this.img&&(this.img.style.border=`${c.width}px solid ${c.color}`,this.resetSize())}),this.addEventListener("change-background",({value:c})=>{this.div.style.background=c})}get withinDisplayRange(){return this.overlay.withinDisplayRange}resetSize(){return D(this,null,function*(){yield Gt();let{width:t,height:e}=this.div.getBoundingClientRect();this.size={width:t+4,height:e+4}})}renderHelperBox(){let t=document.createElement("div"),e=this.getBox();t.style.cssText=`position: absolute; top: ${e.top}px;left: ${e.left}px;width: ${e.right-e.left}px;height: ${e.bottom-e.top}px;border: 1px solid red;`,this.context.container.appendChild(t)}get clientPos(){return this.overlay.clientPos}initDiv(){let t=document.createElement("div");return t.appendChild(this.initText()),this.options.icon&&t.appendChild(this.initIcon()),t.style.fontSize="12px",t.style.textShadow="#fff 1px 0 0, #fff 0 1px 0, #fff -1px 0 0, #fff 0 -1px 0",t.style.display="flex",t.style.flexDirection="column",t.style.justifyContent="center",t.style.alignItems="center",t.style.padding="4px",this.overlay.setOpacity(this.options.opacity),this.overlay.div.style.pointerEvents="none",this.overlay.div.style.userSelect="none",this.overlay.div.appendChild(t),this.div=t,this._changePosition(),this.resetSize(),t}getPosition(){return this.position}initText(){let t=document.createElement("div");return t.appendChild(this.createTextFragment()),t.style.textAlign="center",this.textDiv=t,t}createTextFragment(){let t=document.createDocumentFragment();return this.options.texts.forEach(e=>{let i=document.createElement("div");if(i.style.whiteSpace="nowrap",e.styles)for(let[o,r]of Object.entries(e.styles))i.style[o]=r;i.textContent=e.text,t.appendChild(i)}),t}initIcon(){var e,i;let t=document.createElement("img");return t.setAttribute("src",this.options.icon),t.style.width=`${((e=this.options.icon_size)==null?void 0:e[0])||32}px`,t.style.height=`${((i=this.options.icon_size)==null?void 0:i[1])||32}px`,t.style.opacity=`${this.options.icon_opacity}px`,t.style.borderRadius="50%",this.options.icon_border.width&&(t.style.border=`${this.options.icon_border.width}px solid ${this.options.icon_border.color}`),t.onload=()=>{this._changePosition(),this.resetSize()},this.img=t,t}registryEvent(){}unRegistryEvent(){}setVisible(t){t!==this.visible&&(this.visible=t,t||(this.overlay.visible=t,this.overlay.div.style.visibility=t?"visible":"hidden"))}parentSetVisible(t){this.visible&&t!==this.overlay.visible&&(this.overlay.visible=t,this.overlay.div.style.visibility=t?"visible":"hidden")}getBox(){let{width:t,height:e}=this.size,{x:i,y:o}=this.overlay.clientPos;return{left:i-t/2,right:i+t/2,top:this.options.icon?o-e:o-e/2,bottom:this.options.icon?o:o+e/2}}isContain(t,e){if(!this.overlay.visible)return!1;let i=this.getBox();return t>=i.left&&t<=i.right&&e>=i.top&&e<=i.bottom}dispose(){this.unRegistryEvent(),this.div=null,this.textDiv=null,this.img=void 0,this.overlay.dispose()}};import{Box3 as pt,Object3D as kt,Vector3 as mt}from"three";import{Box3 as Le,Vector3 as Ge}from"three";import{Object3D as Me}from"three";var T=class extends Me{constructor(t){super();this.context=t}dispose(){k(this),this.clear()}};var X=class extends T{constructor(t){super(t);n(this,"graphicMap",new Map)}getCenter(){return new Le().setFromObject(this).getCenter(new Ge)}createGraphic(t){let e=new L(this.context,t);return this.add(e),this.graphicMap.set(t.id,e),e}removeGraphic(t){this.remove(t),this.graphicMap.delete(t.options.id),t.dispose()}removeGraphicById(t){this.graphicMap.has(t)&&this.removeGraphic(this.graphicMap.get(t))}getGraphicByNodeId(t){return this.graphicMap.get(t)||null}getGraphicByRaycaster(t){let e={distance:1e4,graphic:null,position:null},i=this.children.reduce((o,r)=>{if(r instanceof L){let c=r.raycast(t);if(c){let{distance:h}=c;if(h<o.distance)return{distance:o.distance,position:o.position,graphic:r}}return o}else return o},e);return i===e?{graphics:[],position:null}:{graphics:[i.graphic],position:i.position}}};import{debounce as Se}from"lodash";var W=class extends T{constructor(t){super(t);n(this,"pois",[]);n(this,"debounceCollisionDetection");n(this,"timer",new A);n(this,"onUpdate",()=>{this.timer.requestAnimationFrame(()=>{this.collisionDetection()})});this.registryEvent(),this.debounceCollisionDetection=Se(this.collisionDetection,10)}clear(){return super.clear(),this.pois.forEach(t=>t.dispose()),this.pois=[],this}createPoi(t){let e=new I(this.context,t);return this.pushPoi(e),e.addEventListener("change-level",()=>this.changePoiLevelOrCollisionEnable(e)),e.addEventListener("change-collision_enable",()=>this.changePoiLevelOrCollisionEnable(e)),Promise.resolve().then(()=>{this.debounceCollisionDetection()}),e}changePoiLevelOrCollisionEnable(t){let e=this.pois.findIndex(i=>i===t);e!==-1&&(this.pois.splice(e,1),this.pushPoi(t))}removePoi(t){let e=this.pois.findIndex(i=>i===t);e!==-1&&(this.pois.splice(e,1),t.dispose())}removePoiById(t){let e=this.pois.find(i=>i.options.id===t);e&&this.removePoi(e)}getPoiById(t){return this.pois.find(i=>i.options.id===t)||null}pushPoi(t){if(!t.options.collision_enable){this.pois.unshift(t);return}if(t.options.level===1){this.pois.push(t);return}for(let e=0;e<this.pois.length;e++){let i=this.pois[e];if(i.options.collision_enable&&i.options.level<=t.options.level){this.pois.splice(e,0,t);return}}this.pois.push(t)}getPoiByDeviceXy(t,e){return this.pois.filter(o=>o instanceof I&&o.isContain(t,e))}collisionDetection(){let t=[];this.pois.filter(i=>i.visible&&i.withinDisplayRange).forEach((i,o)=>{let{left:r,right:c,top:h,bottom:l}=i.getBox();if(o===0){t.push({left:r,right:c,top:h,bottom:l});return}let p=t.some(m=>c<m.right&&c>m.left||r>m.left&&r<m.right||r===m.left&&c===m.right?l<=m.bottom&&l>m.top||h>=m.top&&h<m.bottom:!1);i.parentSetVisible(!p),p||t.push({left:r,right:c,top:h,bottom:l})})}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}dispose(){this.timer.dispose(),this.pois.forEach(t=>t.dispose()),this.pois.length=0,this.debounceCollisionDetection=()=>{},super.dispose(),this.unRegistryEvent()}};import{MeshBasicMaterial as De,Object3D as Ae,PlaneGeometry as ke,Texture as Oe,DoubleSide as ze,Mesh as Fe,Matrix3 as At,Vector2 as Te}from"three";import{create as Re}from"@mars3d/heatmap.js";import{featureCollection as Be,point as He,bbox as Ie,center as $e}from"@turf/turf";var Y=class extends Ae{constructor(t){super();this.context=t;n(this,"heatmap");n(this,"div");n(this,"plane");this.div=document.createElement("div")}clearHeatmap(){this.div.firstChild&&this.div.removeChild(this.div.firstChild),this.heatmap=void 0}loadData(t){this.clearHeatmap();let{width:e,height:i,leftTop:o,center:r}=this.getBox(t);this.heatmap=Re(b({width:e,height:i,container:this.div},this.context.config.heatMap)),this.heatmap.setData(this.transformData(t,o)),this.initPlane(e,i),this.position.set(r[0],r[1],this.position.z)}initPlane(t,e){this.plane&&this.remove(this.plane);let i=new ke(t,e),o=new Oe(this.div.firstChild);o.needsUpdate=!0;let r=new De({transparent:!0,side:ze,map:o});r.needsUpdate=!0,this.plane=new Fe(i,r),this.add(this.plane)}getTransMatrix({x:t,y:e}){return new At().makeScale(1,-1).multiply(new At().makeTranslation(0-t,0-e))}transformData(t,e){let i=this.getTransMatrix(e);return{data:t.data.map(r=>{let c=new Te(r.x,r.y).applyMatrix3(i);return{x:c.x,y:c.y,value:r.value}}),max:t.max,min:t.min}}getBox(t){let e=Be(t.data.map(l=>He([l.x,l.y]))),i=Ie(e),o=i[2]-i[0],r=i[3]-i[1],c={x:i[0],y:i[3]},h=$e(e);return{width:o,height:r,leftTop:c,center:h.geometry.coordinates}}dispose(){this.div=null,this.heatmap=void 0}};var q=class extends kt{constructor(t){super();this.context=t;n(this,"graphicLayer");n(this,"poiLayer");n(this,"grounds",new Set);n(this,"shadow",new j);n(this,"heatmap");n(this,"groundUpper",new kt);n(this,"groundMaxHeight",0);this.graphicLayer=new X(this.context),this.poiLayer=new W(this.context),this.groundUpper.add(this.graphicLayer),this.groundUpper.add(this.poiLayer),this.add(this.groundUpper)}createGround(t){let e=new L(this.context,t);this.addGrounds([e])}addGrounds(t){t.forEach(e=>{this.grounds.has(e)||(e.mesh.castShadow=!0,this.grounds.add(e),this.groundUpper.add(e))}),this.changeGroundMaxHeight()}changeGroundMaxHeight(){let t=Array.from(this.grounds);this.groundMaxHeight=this.grounds.size>0?Math.max(...t.map(e=>e.options.height+e.options.airHeight+e.options.deltaHeight)):0,this.graphicLayer.position.z=this.groundMaxHeight}get hasElement(){return!!(this.grounds.size||this.graphicLayer.children.length)}getCenter(){return new pt().setFromObject(this.groundUpper).getCenter(new mt)}addShadow(){let t=new pt().setFromObject(this.groundUpper),e=t.getCenter(new mt),i=t.getSize(new mt);this.shadow.setPosition(e),this.shadow.changeLightCamera(i),this.add(this.shadow)}addGraphic(t){return this.graphicLayer.createGraphic(t)}addPoi(t){return this.poiLayer.createPoi(t)}addHeatmap(t){this.heatmap||(this.heatmap=new Y(this.context),this.add(this.heatmap)),this.heatmap.loadData(t);let e=new pt().setFromObject(this.graphicLayer);return this.heatmap.position.setZ(e.max.z),this.heatmap}removeHeatMap(){this.heatmap&&(this.remove(this.heatmap),this.heatmap.dispose(),this.heatmap=void 0)}setShadowOpacity(t){this.shadow.setOpacity(t)}setShadowVisible(t){this.shadow.visible=t}dispose(){var t;this.shadow.dispose(),this.graphicLayer.dispose(),this.poiLayer.dispose(),this.grounds.forEach(e=>e.dispose()),(t=this.heatmap)==null||t.dispose(),this.groundUpper.clear(),this.clear()}};import{EventDispatcher as Ve,Vector3 as Ue}from"three";var G=class extends Ve{constructor(t){super();this.context=t;n(this,"points",[]);n(this,"svg");n(this,"enable",!0);n(this,"_onResize",({width:t,height:e})=>{this.svg&&(this.svg.setAttribute("width",`${t}`),this.svg.setAttribute("height",`${e}`))});this.svg=Lt(`${t.container.clientWidth}`,`${t.container.clientHeight}`),t.container.appendChild(this.svg),this._registryEvent()}_registryEvent(){this.context.addEventListener("resize",this._onResize)}_unRegistryEvent(){this.context.removeEventListener("resize",this._onResize)}setEnable(t){this.enable=t,t?this.svg.style.display="block":this.svg.style.display="none"}getIntersectByPointerEvent(t){let{camera:e,renderer:i}=this.context,{offsetX:o,offsetY:r}=t,{clientWidth:c,clientHeight:h}=i.domElement,l=o/c*2-1,p=1-r/h*2;return new Ue(l,p,0).unproject(e)}getSvgCoordinate(t){let{camera:e,container:i}=this.context;return y(t,e,i.clientWidth,i.clientHeight)}dispose(){this._unRegistryEvent(),this.context.container.removeChild(this.svg),this.svg=null}};var N=class extends G{constructor(t){super(t);this.context=t;n(this,"circles");n(this,"line");n(this,"onUpdate",()=>{if(this.points[0]){let t=this.getSvgCoordinate(this.points[0]);z(this.circles[0],t.x,t.y),C(this.line,t)}if(this.points[1]){let t=this.getSvgCoordinate(this.points[1]);z(this.circles[1],t.x,t.y),C(this.line,void 0,t)}});n(this,"onPointermove",t=>{this.points.length===1&&(this.line.style.display="block",C(this.line,void 0,{x:t.offsetX,y:t.offsetY}))});n(this,"onPointerleave",()=>{this.points[1]||(this.line.style.display="none")});n(this,"onPointerdown",t=>{if(this.points[1])return;let e=this.getIntersectByPointerEvent(t);if(e){let{offsetX:i,offsetY:o}=t,r=this.circles[this.points.length];z(r,i,o),this.points.length||C(this.line,{x:i,y:o},{x:i,y:o}),this.addPoint(e)}});let{config:{svg:{circle:e,line:i}}}=t;this.circles=[B(e.radius,e.fill),B(e.radius,e.fill)],this.line=K(i.stroke),this.svg.appendChild(this.circles[0]),this.svg.appendChild(this.circles[1]),this.svg.appendChild(this.line),this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}registryEvent(){this.context.container.addEventListener("pointerenter",this.onPointermove),this.context.container.addEventListener("pointermove",this.onPointermove),this.context.container.addEventListener("pointerleave",this.onPointerleave),this.context.container.addEventListener("pointerdown",this.onPointerdown),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerenter",this.onPointermove),this.context.container.removeEventListener("pointermove",this.onPointermove),this.context.container.removeEventListener("pointerleave",this.onPointerleave),this.context.container.removeEventListener("pointerdown",this.onPointerdown),this.context.removeEventListener("update",this.onUpdate)}addPoint(t){if(this.points.push(t),this.points.length>=2){let e=this.calculatedDistance();this.dispatchEvent({type:"distance",distance:e})}}calculatedDistance(){let[{x:t,y:e},{x:i,y:o}]=this.points;return Math.sqrt(P(i-t,2)+P(o-e,2))}dispose(){super.dispose(),this.unRegistryEvent(),this.line=null,this.circles=[]}};var Q=class extends G{constructor(t){super(t);n(this,"circles",[]);n(this,"lines",[]);n(this,"isClose",!1);n(this,"onUpdate",()=>{this.points.length&&this.points.forEach((t,e)=>{let i=this.getSvgCoordinate(t);this.circles[e]&&z(this.circles[e],i.x,i.y),e!==0&&C(this.lines[e-1],void 0,i),this.lines[e]&&C(this.lines[e],i)})});n(this,"onPointermove",t=>{!this.lastLine||this.isClose||(this.lastLine.style.display="block",C(this.lastLine,void 0,{x:t.offsetX,y:t.offsetY}))});n(this,"onPointerleave",()=>{this.isClose||(this.lastLine.style.display="none")});n(this,"onPointerdown",t=>{if(this.isClose)return;let e=this.getIntersectByPointerEvent(t);if(e){let{offsetX:i,offsetY:o}=t;this.checkAdsorb(i,o)?(this.isClose=!0,this.addPoint(this.points[0])):this.addPoint(e);let{circle:{fill:r,radius:c},line:{stroke:h}}=this.context.config.svg;if(!this.isClose){let l=B(c,r);z(l,i,o),this.addCircle(l)}if(this.lines.length&&C(this.lastLine,void 0,{x:i,y:o}),!this.isClose){let l=K(h);C(l,{x:i,y:o},{x:i,y:o}),this.addLine(l)}}});this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}get lastLine(){return this.lines.slice(-1)[0]}addCircle(t){this.circles.push(t),this.svg.appendChild(t)}addLine(t){this.lines.push(t),this.svg.appendChild(t)}registryEvent(){this.context.container.addEventListener("pointerenter",this.onPointermove),this.context.container.addEventListener("pointermove",this.onPointermove),this.context.container.addEventListener("pointerleave",this.onPointerleave),this.context.container.addEventListener("pointerdown",this.onPointerdown),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerenter",this.onPointermove),this.context.container.removeEventListener("pointermove",this.onPointermove),this.context.container.removeEventListener("pointerleave",this.onPointerleave),this.context.container.removeEventListener("pointerdown",this.onPointerdown),this.context.removeEventListener("update",this.onUpdate)}checkAdsorb(t,e){if(this.points.length<3)return!1;let i=this.circles[0],o=+i.getAttribute("cx"),r=+i.getAttribute("cy");return Math.sqrt(P(t-o,2)+P(e-r,2))<=5}addPoint(t){if(this.points.push(t),this.isClose){let e=this.calculatedArea();this.dispatchEvent({type:"area",area:e})}}calculatedArea(){let t=this.points.map(o=>[o.x,o.y]),e=0,i=t.length;for(let o=0;o<i;o++){let r=(o+1)%i;e+=t[o][0]*t[r][1]-t[r][0]*t[o][1]}return Math.abs(e/2)}dispose(){super.dispose(),this.unRegistryEvent(),this.lines=[],this.circles=[]}};import{Box3 as _e}from"three";var Ot=class extends G{constructor(t){super(t);this.context=t;n(this,"rect");n(this,"cornerRect",[]);n(this,"centerRect",[]);n(this,"graphic");n(this,"onUpdate",()=>{if(this.graphic){let t=new _e().setFromObject(this.graphic),{camera:e,container:{clientWidth:i,clientHeight:o}}=this.context,{min:r,max:c}=t,h=y(r,e,i,o),l=y(c,e,i,o);M(this.rect,h.x,l.y,Math.abs(l.x-h.x),Math.abs(l.y-h.y));let{x:p,y:m}=h,{x:v,y:f}=l,d=5,x=[{x:p-d,y:f-d},{x:v-d,y:f-d},{x:p-d,y:m-d},{x:v-d,y:m-d}];for(let E=0;E<x.length;E++)M(this.cornerRect[E],x[E].x,x[E].y,d*2,d*2);let g=4,u=(p+v)/2,S=(m+f)/2,w=[{x:u-g,y:f-g},{x:p-g,y:S-g},{x:v-g,y:S-g},{x:u-g,y:m-g}];for(let E=0;E<w.length;E++)M(this.centerRect[E],w[E].x,w[E].y,g*2,g*2)}else{M(this.rect,0,0,0,0);for(let t=0;t<this.cornerRect.length;t++)M(this.cornerRect[t],0,0,0,0),M(this.centerRect[t],0,0,0,0)}});let{config:{svg:{line:e}}}=t;this.rect=F(e.stroke,"transparent"),this.svg.appendChild(this.rect);for(let i=0;i<4;i++)this.cornerRect[i]=F(e.stroke,"#ffffff"),this.centerRect[i]=F(e.stroke,"#ffffff"),this.svg.appendChild(this.cornerRect[i]),this.svg.appendChild(this.centerRect[i]);this.registryEvent()}setEnable(t){super.setEnable(t),t?this.registryEvent():this.unRegistryEvent()}registryEvent(){this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.removeEventListener("update",this.onUpdate)}selectGraphic(t){this.graphic=t}dispose(){super.dispose(),this.unRegistryEvent(),this.rect=null,this.cornerRect=[],this.centerRect=[]}};import{Frustum as Ke}from"three";var J=class extends G{constructor(t){super(t);n(this,"startPoint");n(this,"endPoint");n(this,"rect");n(this,"frustum",new Ke);n(this,"onPointerDown",t=>{if(!this.enable)return;let e=this.getIntersectByPointerEvent(t);e&&(this.startPoint=e),this.endPoint=void 0});n(this,"onPointerMove",t=>{if(!this.enable||!this.startPoint)return;let e=this.getIntersectByPointerEvent(t);e&&(this.endPoint=e)});n(this,"onPointerUp",t=>{if(!this.enable)return;let e=this.getIntersectByPointerEvent(t);e&&(this.endPoint=e),this.doSelect(),this.startPoint=void 0});n(this,"onUpdate",()=>{if(this.startPoint){let t=this.getSvgCoordinate(this.startPoint),e=b({},t);this.endPoint&&(e=this.getSvgCoordinate(this.endPoint));let i={x:Math.min(t.x,e.x),y:Math.min(t.y,e.y)},o=Math.abs(e.x-t.x),r=Math.abs(e.y-t.y);M(this.rect,i.x,i.y,o,r)}else M(this.rect,0,0,0,0)});let{config:{selectBox:{fill:e,stroke:i}}}=t;this.rect=F(i,e),this.svg.appendChild(this.rect),this.registryEvent()}setEnable(t){super.setEnable(t),M(this.rect,0,0,0,0),t?this.registryEvent():(this.startPoint=void 0,this.unRegistryEvent())}registryEvent(){this.context.container.addEventListener("pointerdown",this.onPointerDown),this.context.container.addEventListener("pointermove",this.onPointerMove),this.context.container.addEventListener("pointerup",this.onPointerUp),this.context.addEventListener("update",this.onUpdate)}unRegistryEvent(){this.context.container.removeEventListener("pointerdown",this.onPointerDown),this.context.container.removeEventListener("pointermove",this.onPointerMove),this.context.container.removeEventListener("pointerup",this.onPointerUp),this.context.removeEventListener("update",this.onUpdate)}doSelect(){if(this.startPoint&&this.endPoint){if(this.startPoint.distanceTo(this.endPoint)<.1)return;let{context:{camera:e,container:{clientWidth:i,clientHeight:o}}}=this,r=y(this.startPoint,e,i,o),c=y(this.endPoint,e,i,o),h={x:Math.min(r.x,c.x),y:Math.min(r.y,c.y)},l={x:Math.max(r.x,c.x),y:Math.max(r.y,c.y)},p=this.searchMapInFrustum(h,l);this.dispatchEvent({type:"selected",list:p})}}searchMapInFrustum(t,e){var o;let{context:i}=this;return((o=i.currentFloor)==null?void 0:o.graphicLayer.children.filter(r=>r instanceof L&&this.searchChildInFrustum(r,t,e)))||[]}searchChildInFrustum(t,e,i){let{context:{camera:o,container:{clientWidth:r,clientHeight:c}}}=this;if(!t)return!1;if(!t.mesh){let f=t.getPosition();if(f){let d=y(f,o,r,c);return V(d,e,i)}return!1}t.mesh.geometry.boundingBox||t.mesh.geometry.computeBoundingBox();let h=t.mesh.geometry.boundingBox;if(!h)return!1;let{min:l,max:p}=h,m=y(l,o,r,c),v=y(p,o,r,c);return!(!V(m,e,i)||!V(v,e,i))}dispose(){this.unRegistryEvent()}};var tt=class extends je{constructor(t){super();this.context=t;n(this,"_list",new Set);n(this,"boxSelection");n(this,"prevPanStatus");n(this,"prevRotateStatus");n(this,"downPoint",null);n(this,"isMultipleSelect",!1);n(this,"onPointerDown",t=>{this.downPoint={x:t.offsetX,y:t.offsetY}});n(this,"onPointerUp",t=>{if(!this.downPoint)return;let{offsetX:e,offsetY:i}=t,{x:o,y:r}=this.downPoint;if(Math.sqrt(P(o-e,2)+P(r-i,2))>3)return;let{graphics:c}=this.context.getGraphicsByDeviceXy(e,i),h=new Set(c.map(p=>p.options.id));this.context.getPoisByDeviceXy(e,i).forEach(p=>{var m;if(!h.has(p.options.id)){let v=((m=this.context.currentFloor)==null?void 0:m.graphicLayer.graphicMap.get(p.options.id))||null;v&&v.options.geometry.type==="point"&&(c.push(v),h.add(p.options.id))}}),t.ctrlKey||this._list.clear(),c.forEach(p=>this._list.add(p)),this.selectEnd(),this.downPoint=null});n(this,"onKeyDown",t=>{t.key==="Control"&&(this.isMultipleSelect=!0,this.boxSelection.setEnable(!0),this.prevPanStatus=this.context.control.enablePan,this.prevRotateStatus=this.context.control.enableRotate,this.context.control.enablePan=!1,this.context.control.enableRotate=!1)});n(this,"onKeyUp",t=>{t.key==="Control"&&(this.isMultipleSelect=!1,this.boxSelection.setEnable(!1),this.context.control.enablePan=!!this.prevPanStatus,this.context.control.enableRotate=!!this.prevRotateStatus)});n(this,"onBoxSelected",({list:t})=>{this._list.clear(),t.forEach(e=>{this._list.add(e)}),this.selectEnd()});this.boxSelection=new J(t),this.boxSelection.setEnable(!1),this.registryEvent()}get list(){return this._list}selectEnd(){this.dispatchEvent({type:"select",graphics:[...this._list],isMultipleSelect:this.isMultipleSelect})}registryEvent(){this.context.container.addEventListener("pointerdown",this.onPointerDown),this.context.container.addEventListener("pointerup",this.onPointerUp),window.addEventListener("keydown",this.onKeyDown),window.addEventListener("keyup",this.onKeyUp),this.boxSelection.addEventListener("selected",this.onBoxSelected)}unRegistryEvent(){this.context.container.removeEventListener("pointerdown",this.onPointerDown),this.context.container.removeEventListener("pointerup",this.onPointerUp),window.removeEventListener("keydown",this.onKeyDown),window.removeEventListener("keyup",this.onKeyUp),this.boxSelection.removeEventListener("selected",this.onBoxSelected)}clear(){this._list.clear()}remove(t){this._list.delete(t)}dispose(){this.unRegistryEvent()}};import{EventDispatcher as Ze}from"three";var et=class extends Ze{constructor(t){super();this.context=t;n(this,"curGraphics",new Set);n(this,"timer",new A);n(this,"graphicTimerMap",new Map);n(this,"onPointerMove",({graphics:t,pois:e})=>{let i=e.map(h=>{var l;return(l=this.context.currentFloor)==null?void 0:l.graphicLayer.graphicMap.get(h.options.id)}).filter(h=>h&&h.options.geometry.type==="point");if(!t.length&&!i&&this.curGraphics.size){this.curGraphics.clear(),this.handleHoverGraphicsChange();return}let{time:o}=this.context.config.hover,r=new Set(t);r.size||i.forEach(h=>{r.add(h)}),r.forEach(h=>{if(this.graphicTimerMap.get(h)||this.curGraphics.has(h))return;let l=this.timer.setTimeout(()=>{this.curGraphics.add(h),this.handleHoverGraphicsChange()},o);this.graphicTimerMap.set(h,l)}),this.graphicTimerMap.forEach((h,l)=>{r.has(l)||(this.timer.clearTimeout(h),this.graphicTimerMap.delete(l))});let c=this.curGraphics.size;this.curGraphics.forEach(h=>{r.has(h)||this.curGraphics.delete(h)}),c!==this.curGraphics.size&&this.handleHoverGraphicsChange()});n(this,"onPointerLevel",()=>{this.curGraphics.clear(),this.handleHoverGraphicsChange()});this.registryEvent()}handleHoverGraphicsChange(t=this.curGraphics){this.dispatchEvent({type:"hover-change",graphics:Array.from(t)})}registryEvent(){this.context.addEventListener("pointer-over",this.onPointerMove),this.context.addEventListener("pointer-move",this.onPointerMove),this.context.addEventListener("pointer-level",this.onPointerLevel)}unRegistryEvent(){this.context.removeEventListener("pointer-over",this.onPointerMove),this.context.removeEventListener("pointer-move",this.onPointerMove),this.context.removeEventListener("pointer-level",this.onPointerLevel)}dispose(){this.unRegistryEvent(),this.timer.dispose()}};import{LineBasicMaterial as Xe,MeshStandardMaterial as We}from"three";var it=class{constructor(a){this.context=a;n(this,"lineMaterialMap",new Map);n(this,"meshStandardMaterialMap",new Map)}generateLineMaterialKey({color:a,opacity:t}){return`${a}-${t}`}createLineMaterial({color:a,opacity:t}){let e=this.generateLineMaterialKey({color:a,opacity:t});if(this.lineMaterialMap.has(e))return this.lineMaterialMap.get(e);let i=new Xe({color:a,transparent:!0,opacity:t});return this.lineMaterialMap.set(e,i),i}createMeshStandardMaterial({color:a,opacity:t}){let e=`${a}-${t}`;if(this.meshStandardMaterialMap.has(e))return this.meshStandardMaterialMap.get(e);let i=new We({color:a,roughness:1,transparent:!0,opacity:t,depthWrite:!0});return this.meshStandardMaterialMap.set(e,i),i}dispose(){this.lineMaterialMap.forEach((a,t)=>{a.dispose()}),this.lineMaterialMap.clear()}};var st=class extends Ye{constructor(t,e){super();this.container=t;this.config=e;n(this,"scene",gt());n(this,"renderer",ft());n(this,"camera");n(this,"control");n(this,"lights",yt());n(this,"timer",new A);n(this,"tweenGroup",new ei);n(this,"currentFloor");n(this,"selection");n(this,"hoverHelper");n(this,"basicRatio");n(this,"materialFactory");n(this,"observe",null);n(this,"clientSize",{width:0,height:0});n(this,"onWindowResize",()=>{let{container:t,camera:e,renderer:i}=this,{clientWidth:o,clientHeight:r}=t;o=Math.max(1,o),r=Math.max(1,r),e.left=-o/2,e.right=o/2,e.top=r/2,e.bottom=-r/2,e.updateProjectionMatrix(),i.setSize(o,r),this.resizeClientSize(o,r),this.dispatchEvent({type:"resize",width:o,height:r})});n(this,"onClick",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY);e.length&&this.dispatchEvent({type:"graphic-click",graphics:e,position:i});let o=this.getPoisByDeviceXy(t.offsetX,t.offsetY);o.length&&this.dispatchEvent({type:"poi-click",pois:o})});n(this,"onPointerover",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY),o=this.getPoisByDeviceXy(t.offsetX,t.offsetY);this.dispatchEvent({type:"pointer-over",graphics:e,pois:o,position:i})});n(this,"onPointermove",t=>{let{graphics:e,position:i}=this.getGraphicsByDeviceXy(t.offsetX,t.offsetY),o=this.getPoisByDeviceXy(t.offsetX,t.offsetY);this.dispatchEvent({type:"pointer-move",graphics:e,pois:o,position:i})});n(this,"onPointerleave",()=>{this.dispatchEvent({type:"pointer-level"})});n(this,"onSelectionSelect",({graphics:t,isMultipleSelect:e})=>{this.dispatchEvent({type:"select-graphic",graphics:t,isMultipleSelect:e})});n(this,"onHoverChange",({graphics:t})=>{this.dispatchEvent({type:"hover",graphics:t})});this.container.style.position="relative",this.container.style.overflow="hidden",this.init(),this.selection=new tt(this),this.hoverHelper=new et(this),this.materialFactory=new it(this),this.resizeClientSize(),this.registryEvent()}resizeClientSize(t,e){this.clientSize={width:t||this.container.clientWidth,height:e||this.container.clientHeight}}init(){let{clientWidth:t,clientHeight:e}=this.container;this.camera=vt(t,e),this.renderer.setSize(t,e),this.control=xt(this.camera,this.renderer.domElement),this.control.maxPolarAngle=this.config.control.maxPolar,this.container.appendChild(this.renderer.domElement),this.scene.add(this.lights),this.basicRatio=this.getRatio(),this.control.addEventListener("change",()=>{var o;let i=this.control.getPolarAngle();(o=this.currentFloor)==null||o.setShadowOpacity(i/this.config.control.maxPolar),this.dispatchEvent({type:"change-ratio",px:(this.basicRatio||0)*this.camera.zoom}),this.dispatchEvent({type:"control-change"})})}getRatio(t=new ot(0,0,0),e=new ot(100,0,0)){let{clientWidth:i,clientHeight:o}=this.container,r=y(t,this.camera,i,o),c=y(e,this.camera,i,o);return Math.ceil(Math.sqrt(P(c.x-r.x,2)+P(c.y-r.y,2)))}changeAmbientLightColor(t){this.lights.children.forEach(e=>{e instanceof ti&&(e.color=new Je(t))})}switchFloor(t){this.currentFloor&&(this.scene.remove(this.currentFloor),this.currentFloor.dispose()),this.currentFloor=t,this.scene.add(t);let e=t.getCenter();e&&(this.lights.position.x=e.x,this.lights.position.y=e.y)}getGraphicsByDeviceXy(t,e){var c;let i=new nt;i.x=t/this.clientSize.width*2-1,i.y=e/this.clientSize.height*-2+1;let o=new Ne;return o.setFromCamera(i,this.camera),((c=this.currentFloor)==null?void 0:c.graphicLayer.getGraphicByRaycaster(o))||{graphics:[],position:null}}getPoisByDeviceXy(t,e){var o;return((o=this.currentFloor)==null?void 0:o.poiLayer.getPoiByDeviceXy(t,e))||[]}registryEvent(){window.addEventListener("resize",this.onWindowResize),this.container.addEventListener("click",this.onClick),this.container.addEventListener("pointerover",this.onPointerover),this.container.addEventListener("pointermove",this.onPointermove),this.container.addEventListener("pointerleave",this.onPointerleave),this.selection.addEventListener("select",this.onSelectionSelect),this.hoverHelper.addEventListener("hover-change",this.onHoverChange)}unRegistryEvent(){window.removeEventListener("resize",this.onWindowResize),this.container.removeEventListener("click",this.onClick),this.container.removeEventListener("pointerover",this.onPointerover),this.container.removeEventListener("pointermove",this.onPointermove),this.container.removeEventListener("pointerleave",this.onPointerleave),this.selection.removeEventListener("select",this.onSelectionSelect),this.hoverHelper.removeEventListener("hover-change",this.onHoverChange)}setPolarAngle(t,e=500){return e===0?(this.control.maxPolarAngle=t,this.control.minPolarAngle=t,this.control.update(),this.control.maxPolarAngle=this.config.control.maxPolar,this.control.minPolarAngle=0,Promise.resolve()):R(new Promise(i=>{let o={polar:this.control.getPolarAngle()},r={polar:t},c=new rt(o,this.tweenGroup).to(r,e).onUpdate(()=>{this.control.maxPolarAngle=o.polar,this.control.minPolarAngle=o.polar,this.control.update()}).onComplete(()=>{this.control.enabled=!0,this.control.maxPolarAngle=this.config.control.maxPolar,this.control.minPolarAngle=0,this.tweenGroup.remove(c),i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}setAzimuthalAngle(t,e=500){if(e===0){this.control.maxAzimuthAngle=t,this.control.minAzimuthAngle=t,this.control.update(),this.control.maxAzimuthAngle=1/0,this.control.minAzimuthAngle=1/0;return}return R(new Promise(i=>{let o={azimuthal:this.control.getAzimuthalAngle()},r={azimuthal:t},c=new rt(o,this.tweenGroup).to(r,e).onUpdate(()=>{this.control.maxAzimuthAngle=o.azimuthal,this.control.minAzimuthAngle=o.azimuthal,this.control.update()}).onComplete(()=>{this.control.enabled=!0,this.control.maxAzimuthAngle=1/0,this.control.minAzimuthAngle=1/0,this.tweenGroup.remove(c),i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}getCameraLookAt(){return new ot().subVectors(this.control.target,this.camera.position)}setZoom(t,e,i=500){let o=this.getCameraLookAt(),r={zoom:this.camera.zoom,target:this.control.target.clone()};if(!i){this.camera.position.copy(e.clone().sub(o)),this.control.target.copy(e),this.camera.zoom=t,this.control.update();return}return R(new Promise(c=>{let h=new rt(r,this.tweenGroup).to({zoom:t,target:e},i).onUpdate(()=>{this.camera.position.copy(r.target.clone().sub(o)),this.control.target.copy(r.target),this.camera.zoom=r.zoom,this.control.update()}).onComplete(()=>{this.tweenGroup.remove(h),this.control.enabled=!0,c(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),i+500)}fitCameraToObject(t,e=[20,20,20,20],i=500,o=!0){let[r,c,h,l]=e,{clientSize:{width:p,height:m}}=this,v=this.control.getPolarAngle();o&&this.setPolarAngle(0,0);let f=new Qe().setFromObject(t);this.setPolarAngle(v,0);let{max:d,min:x}=f,g=y(d,this.camera,p,m),u=y(x,this.camera,p,m),w=new qe().setFromPoints([new nt(g.x,g.y),new nt(u.x,u.y)]).getSize(new nt),E=(p-c-l)/w.x,Tt=(m-r-h)/w.y,Rt=Math.min(E,Tt),Bt=new ot((d.x+x.x)/2,(d.y+x.y)/2,d.z);return this.setZoom(Rt*this.camera.zoom,Bt,i)}fitCameraToGround(t=[20,20,20,20],e=500,i=!0){return this.currentFloor&&this.currentFloor.hasElement?this.fitCameraToObject(this.currentFloor.groundUpper,t,e,i):Promise.resolve(!1)}setCameraPosition(t,e){return R(new Promise(i=>{let o=this.camera.position.clone(),r=this.getCameraLookAt(),c=new rt(o,this.tweenGroup).to(t,e).onUpdate(()=>{this.camera.position.copy(o),this.control.target.copy(t.clone().add(r))}).onComplete(()=>{this.tweenGroup.remove(c),this.camera.position.copy(o.clone().sub(r)),this.control.target.copy(t.clone()),this.control.update(),this.control.enabled=!0,i(!0)}).onStart(()=>{this.control.enabled=!1}).start()}),e+500)}render(){this.renderer.render(this.scene,this.camera),this.dispatchEvent({type:"update"}),this.timer.requestAnimationFrame(()=>{this.render()}),this.tweenGroup.update()}dispose(){this.selection.dispose(),this.hoverHelper.dispose(),this.tweenGroup.getAll().forEach(t=>t.stop()),this.tweenGroup.removeAll(),this.unRegistryEvent(),this.container.removeChild(this.renderer.domElement),this.timer.dispose(),this.renderer.dispose(),this.lights.children.forEach(t=>t.dispose()),this.materialFactory.dispose(),k(this.scene)}};import{merge as ii}from"lodash";var oi={apiDomain:"",apiInfo:{},apiPath:{floorGraphic:"/api/inception-map/floor/get",floorRange:"/api/inception-map/range/get"},resizeObserver:!1,initTransToMark:!1,heatMap:{radius:50,gradient:{0:"#8F9FCD",.5:"#6284FF",1:"#F95D5D"}},useFloorCache:!0,control:{maxPolar:1.2,defaultPolar:.9},svg:{circle:{radius:"2",fill:"#1CADFF"},line:{stroke:"#1CADFF"}},selectBox:{stroke:"#1CADFF",fill:"rgba(28, 173, 255, 0.3)"},hover:{time:100},ground:{color:"#FAFAFA",opacity:1,height:3,stroke:!0,strokeColor:"#E6E6E6",strokeOpacity:1},markGraphic:{color:"#EEF0F3",opacity:1,height:.001,stroke:!1,strokeColor:"#000",strokeOpacity:1},graphic:{fillOpacity:1}};function zt(s){return ii({},oi,s)}import{debounce as ri}from"lodash";var si=(t=>(t[t.D2=0]="D2",t[t.D3=.9]="D3",t))(si||{}),Ft=class extends ni{constructor(t,e={}){super();this.container=t;n(this,"config");n(this,"context");n(this,"polarKeys",[]);n(this,"azimuthalKeys",[]);n(this,"svgLine");n(this,"svgPolygon");n(this,"basicZoom",1);n(this,"prevCameraZoom",1);n(this,"type","2d");n(this,"floorDataMap",new Map);n(this,"buildingGroundMap",new Map);n(this,"currentBuildGround",null);n(this,"observe",null);n(this,"onControlChange",()=>{let{camera:{zoom:t}}=this.context;t!==this.prevCameraZoom&&(this.dispatchEvent({type:"zoom-change",basicZoom:this.basicZoom,cameraZoom:this.context.camera.zoom}),this.prevCameraZoom=t)});n(this,"onKeydown",t=>{this.polarKeys.includes(t.code)&&(this.context.control.maxPolarAngle=this.config.control.maxPolar,this.context.control.minPolarAngle=0),this.azimuthalKeys.includes(t.code)&&(this.context.control.maxAzimuthAngle=1/0,this.context.control.minAzimuthAngle=1/0)});n(this,"onKeyUp",t=>{if(this.polarKeys.includes(t.code)){let e=this.context.control.getPolarAngle();this.context.control.maxPolarAngle=e,this.context.control.minPolarAngle=e}if(this.azimuthalKeys.includes(t.code)){let e=this.context.control.getAzimuthalAngle();this.context.control.maxAzimuthAngle=e,this.context.control.minAzimuthAngle=e}});n(this,"resize",()=>{this.context.onWindowResize();let t=this.context.control.getAzimuthalAngle(),e=this.context.camera.zoom;this.context.control.minZoom=0,this.context.control.maxZoom=1/0,this.context.camera.zoom=1,this.context.setAzimuthalAngle(0,0),this.context.fitCameraToGround(void 0,0),this.basicZoom=this.context.camera.zoom,this.context.control.minZoom=this.basicZoom,this.context.control.maxZoom=this.basicZoom*25,this.context.camera.zoom=e,this.context.control.addEventListener("change",this.onControlChange),this.context.setAzimuthalAngle(t,0)});this.config=zt(e),this.context=new st(t,this.config),this.registryEvent(),this.context.render()}loadGraphics(l){return D(this,arguments,function*({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){let{apiDomain:p,apiPath:{floorGraphic:m},apiInfo:v}=this.config,f=`${p}${m}?brand=${t}&project=${e}&phase=${i}&building=${o}&floor=${r}&ts=${c}&resource_type_list=${h}`;return yield fetch(f,v).then(x=>x.json()).then(x=>x.data).then(x=>((x||[]).map(g=>g.info=JSON.parse(g.info)),x||[]))})}getBuildingKey({brand:t,project:e,phase:i,building:o}){return`${t}-${e}-${i}-${o}`}loadBuildingGround(r){return D(this,arguments,function*({brand:t,project:e,phase:i,building:o}){let c=this.getBuildingKey({brand:t,project:e,phase:i,building:o});if(this.buildingGroundMap.get(c))return this.buildingGroundMap.get(c)||null;let{apiDomain:h,apiPath:{floorRange:l},apiInfo:p}=this.config,m=`${h}${l}?brand=${t}&project=${e}&phase=${i}&building=${o}`,v=yield fetch(m,p).then(f=>f.json()).then(f=>f.data).then(f=>{let d=(f||[])[0];return d&&(d.info=JSON.parse(d.info)),d});return this.buildingGroundMap.set(c,v),v})}getFloorKey({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){return`${t}-${e}-${i}-${o}-${r}-${c}-${h}`}load(l){return D(this,arguments,function*({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){let p=this.getFloorKey({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h});if(this.floorDataMap.get(p))return;let[m,v]=yield Promise.all([this.loadGraphics({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}),this.loadBuildingGround({brand:t,project:e,phase:i,building:o})]);if(v){let g=lt(v.info.geometry.cds[0]);m.forEach(u=>{if(u.info.geometry.type==="polygon")u.info.geometry.cds.map(S=>{Array.isArray(S)&&S.forEach(w=>{w[0]-=g[0],w[1]-=g[1]})});else{let[S,w]=u.info.geometry.cds;u.info.geometry.cds=[S-g[0],w-g[1]]}u.info.transformToBuildingGround=!0})}let{ground:f,markGraphic:d,graphic:x}=this.config;for(let g=0;g<m.length;g++){let u=m[g];u.info.deltaHeight=1e-5*(g+1),u.info.group==="ground"?(u.info.fillColor=f.color,u.info.fillOpacity=f.opacity,u.info.height=f.height,u.info.stroke=f.stroke,u.info.strokeColor=f.strokeColor,u.info.strokeOpacity=f.strokeOpacity):u.info.userData.mark?(u.info.height=d.height,u.info.fillColor=d.color,u.info.fillOpacity=d.opacity,u.info.stroke=d.stroke,u.info.strokeColor=d.strokeColor,u.info.strokeOpacity=d.strokeOpacity):(u.info.fillOpacity=x.fillOpacity,this.config.initTransToMark&&(u.info.height=d.height,u.info.fillColor=d.color,u.info.stroke=d.stroke,u.info.strokeColor=d.strokeColor,u.info.strokeOpacity=d.strokeOpacity))}return this.config.useFloorCache||this.floorDataMap.clear(),this.floorDataMap.set(p,m),m})}createFloor(t){let e=new q(this.context);if(!t.length)return{curFloor:e,graphics:[]};let i=new Map,o=[];for(let r of t)if(r.info.group==="ground")e.createGround(r.info);else{let c=e.addGraphic(r.info);c.userData.data=r,i.set(r.legacy_id,c),o.push(c)}return e.addShadow(),e.userData.legacyToGraphicMap=i,{curFloor:e,graphics:o}}switchFloor({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}){let l=this.getFloorKey({brand:t,project:e,phase:i,building:o,floor:r,ts:c,resource_type_list:h}),p=this.floorDataMap.get(l);if(this.context.control.removeEventListener("change",this.onControlChange),p){let m=this.getBuildingKey({brand:t,project:e,phase:i,building:o});this.currentBuildGround=this.buildingGroundMap.get(m)||null;let v=this.createFloor(p);v?(this.context.switchFloor(v.curFloor),this.context.control.minZoom=0,this.context.control.maxZoom=1/0,this.context.camera.zoom=1,this.context.setAzimuthalAngle(0,0),this.context.fitCameraToGround(void 0,0),this.basicZoom=this.context.camera.zoom,this.context.control.minZoom=this.basicZoom,this.context.control.maxZoom=this.basicZoom*25,this.context.control.addEventListener("change",this.onControlChange),this.type==="3d"&&this.context.fitCameraToGround([80,20,80,20],0,!1),this.onControlChange()):console.warn("[switchFloor error] ["+r+"] \u697C\u5C42\u6CA1\u6709\u6570\u636E")}else console.warn("[switchFloor error] \u6CA1\u6709\u8FD9\u4E2A\u697C\u5C42\uFF0C\u8BF7\u5148\u8C03\u7528load\u65B9\u6CD5\u52A0\u8F7D\u697C\u5C42")}addHeatmap(t){var e;return(e=this.context.currentFloor)==null?void 0:e.addHeatmap(t)}getLegacyToGraphicMap(){var t;return((t=this.context.currentFloor)==null?void 0:t.userData.legacyToGraphicMap)||new Map}getFloorAllGraphics(){var t;return((t=this.context.currentFloor)==null?void 0:t.graphicLayer.children.filter(e=>e instanceof L))||[]}createGraphicPoi(t,e){if(this.context.currentFloor){e.id===void 0&&(e.id=t.options.id);let i=t.getCenter();return this.context.currentFloor.addPoi(ct(b({},e),{position:ct(b({},i),{z:i.z+t.options.height/2})}))}return null}removeHeatMap(){var t;(t=this.context.currentFloor)==null||t.removeHeatMap()}translateElementToCenter(t,e=500){let i=t.getPosition();return this.context.setCameraPosition(i,e)}getElementDeviceCoordinate(t){let e=t.position.clone(),{clientWidth:i,clientHeight:o}=this.container;return y(e,this.context.camera,i,o)}changeMapType(t,e=500){return this.type=t,t==="2d"?this.context.setPolarAngle(0,e):this.context.setPolarAngle(.9,e)}resetView(t=300){return D(this,null,function*(){let e=t/3;yield this.context.setAzimuthalAngle(0,e),yield this.changeMapType(this.type,e),yield this.context.fitCameraToGround(void 0,e)})}reduceMap(t=.5,e=500){let i=this.context.camera.zoom;return this.context.setZoom(i-t,this.context.control.target,e)}enlargeMap(t=.5,e=500){let i=this.context.camera.zoom;return this.context.setZoom(i+t,this.context.control.target,e)}registryEvent(){if(window.addEventListener("keydown",this.onKeydown),window.addEventListener("keyup",this.onKeyUp),this.config.resizeObserver){let t=new ResizeObserver(ri(this.resize,5));t.observe(this.container),this.observe=t}}unRegistryEvent(){var t;window.removeEventListener("keydown",this.onKeydown),window.removeEventListener("keyup",this.onKeyUp),(t=this.observe)==null||t.disconnect(),this.observe=null}configurePolarShortcutKeys(t){this.polarKeys=t}configureAzimuthalShortcutKeys(t){this.azimuthalKeys=t}rotateMap(t=.1){let e=this.context.control.getAzimuthalAngle();this.context.control.maxAzimuthAngle=e+t,this.context.control.minAzimuthAngle=e+t,this.context.control.update()}measureDistance(){return D(this,null,function*(){return this.cancelDistance(),new Promise((t,e)=>{this.changeMapType("2d",0),this.context.control.enableRotate=!1,this.svgLine=new N(this.context);let i=this.svgLine.dispose.bind(this.svgLine);this.svgLine.dispose=function(){i(),e("cancel")},this.svgLine.addEventListener("distance",({distance:o})=>{t(o)})})})}cancelDistance(){this.svgLine&&(this.svgLine.dispose(),this.svgLine=void 0,this.context.control.enableRotate=!0)}measureArea(){return this.cancelArea(),new Promise((t,e)=>{this.changeMapType("2d",0),this.context.control.enableRotate=!1,this.svgPolygon=new Q(this.context);let i=this.svgPolygon.dispose.bind(this.svgPolygon);this.svgPolygon.dispose=function(){i(),e("cancel")},this.svgPolygon.addEventListener("area",({area:o})=>{t(o)})})}cancelArea(){this.svgPolygon&&(this.svgPolygon.dispose(),this.svgPolygon=void 0,this.context.control.enableRotate=!0)}getGraphicByNodeId(t){var e;return((e=this.context.currentFloor)==null?void 0:e.graphicLayer.getGraphicByNodeId(t))||null}deleteGraphic(t){var e;(e=this.context.currentFloor)==null||e.graphicLayer.removeGraphic(t)}createGraphicByOptions(t){var e;if(!t.transformToBuildingGround&&this.currentBuildGround){let i=lt(this.currentBuildGround.info.geometry.cds[0]);if(t.geometry.type==="polygon")t.geometry.cds.map(o=>{Array.isArray(o)&&o.forEach(r=>{r[0]-=i[0],r[1]-=i[1]})});else{let[o,r]=t.geometry.cds;t.geometry.cds=[o-i[0],r-i[1]]}}return(e=this.context.currentFloor)==null?void 0:e.graphicLayer.createGraphic(t)}removePoiById(t){var e;return(e=this.context.currentFloor)==null?void 0:e.poiLayer.removePoiById(t)}getPoiById(t){var e;return(e=this.context.currentFloor)==null?void 0:e.poiLayer.getPoiById(t)}getPois(){var t;return((t=this.context.currentFloor)==null?void 0:t.poiLayer.pois)||[]}clearPoi(){this.context.currentFloor&&this.context.currentFloor.poiLayer.clear()}removeSelectGraphic(t){this.context.selection.remove(t)}dispose(){this.context.dispose(),this.floorDataMap.clear(),this.buildingGroundMap.clear(),Ct(),Mt(),this.unRegistryEvent()}};export{Ft as BMap,G as BaseSvg,st as Context,q as Floor,L as Graphic,X as GraphicLayer,Y as HeatmapElement,et as HoverHelper,T as Layer,si as MapTypePolar,Z as Overlay,I as Poi,W as PoiLayer,Ot as SelectBox,tt as Selection,j as Shadow,N as SvgLine,Q as SvgPolygon,A as Timer,Si as addAlphaToHexColor,Mt as clearCanvas,Ct as clearTextTexture,oe as createCanvas,B as createCircle,K as createLine,F as createRect,Lt as createSvg,_ as createSvgElement,oi as defaultConfig,k as dispose,lt as getCenter,zt as getConfig,yi as getTextureByText,Pt as hasChinese,vt as initCamera,ie as initCanvas,xt as initControl,Et as initDirectionalLight,yt as initLight,ft as initRenderer,gt as initScene,bt as initShape,V as isContain,U as proxyOptions,z as setCirclePosition,C as setLineStartEnd,M as setRectPosition,Gt as sleepOnePromise,Mi as sleepOneRf,Gi as strToNumber,R as timeoutPromise,y as vector3ToDevice};
|
|
2
2
|
//# sourceMappingURL=bmap.esm.min.js.map
|