import{GLTFLoader as C}from"three/examples/jsm/loaders/GLTFLoader.js";import{DRACOLoader as F}from"three/examples/jsm/loaders/DRACOLoader.js";import{Vector3 as b,Matrix4 as g,Box3 as k,Sphere as x,Vector2 as w,Raycaster as T}from"three";import{bind as v}from"lodash-es";import{TilesRenderer as R}from"3d-tiles-renderer";class E{constructor(){this._listeners={}}on(e,t,s){this._listeners[e]?this._listeners[e].push({callback:t,isOnce:s}):this._listeners[e]=[{callback:t,isOnce:s}]}off(e,t){if(!t)throw new Error("\u53D6\u6D88\u4E8B\u4EF6\u65F6\u9700\u8981\u4F20\u5165\u539F\u56DE\u8C03\u51FD\u6570");const s=this._listeners[e];if(s&&s.length>0){for(let i=0;i0)for(let i=0;i{e.disposeTile(t)}),e.lruCache.itemSet.clear(),e.lruCache.itemList=[],e.lruCache.callbacks.clear(),e.lruCache=null,e.visibleTiles.clear(),e.activeTiles.clear(),e.downloadQueue.callbacks.clear(),e.downloadQueue.items=[],e.downloadQueue=null,e.parseQueue.callbacks.clear(),e.parseQueue.items=[],e.parseQueue=null,this.clearGroup(this.group),e.tileSets={},e.cameraMap.clear(),e.cameras=[],e.cameraInfo=[],e.group=null}clearGroup(e){e.traverse(t=>{t.isMesh&&(t.geometry.dispose(),t.material.dispose(),t.material.texture&&t.material.texture.dispose&&t.material.texture.dispose()),delete t.featureTable,delete t.batchTable}),delete e.tilesRenderer,e.remove(...e.children)}}class L extends E{constructor(e,t){super(),this.animationFrame=-1,this.mouse=new w,this.layer=e;const s=new D(t.url);s.setCamera(this.layer.getCamera()),s.setResolutionFromRenderer(this.layer.getCamera(),this.layer.getRender());const i=t.fetchOptions||{},o=new C(s.manager);i.credentials==="include"&&i.mode==="cors"&&o.setCrossOrigin("use-credentials"),"credentials"in i&&o.setWithCredentials(i.credentials==="include"),i.headers&&o.setRequestHeader(i.headers);const l=new F,h=t.dracoDecoderPath||"https://cdn.jsdelivr.net/npm/three@0.143/examples/js/libs/draco/";if(l.setDecoderPath(h),o.setDRACOLoader(l),s.manager.addHandler(/\.gltf$/i,o),s.onLoadTileSet=n=>{this.emit("loadTileSet",n)},s.onLoadModel=(n,a)=>{this.emit("loadModel",{scene:n,tile:a})},s.onDisposeModel=(n,a)=>{this.emit("disposeModel",{scene:n,tile:a})},s.downloadQueue.maxJobs=6,s.parseQueue.maxJobs=6,this.group=s.group,this.layer.add(this.group),this.tilesRenderer=s,t.position&&this.setPosition(t.position),t.rotation&&this.setRotation(t.rotation),t.translate&&this.setTranslate(t.translate),t.scale&&this.setScale(t.scale),this.animate(),t.debug){const n=document.createElement("div");n.style.position="absolute",n.style.top="0px",n.style.left="0px",n.style.color="white",n.style.width="100%",n.style.textAlign="center",n.style.padding="5px",n.style.pointerEvents="none",n.style.lineHeight="1.5em",document.body.appendChild(n),this.statsContainer=n}this.bindEvents(t.mouseEvent)}bindEvents(e){if(e){this.raycaster=new T,this.raycaster.firstHitOnly=!0;const t=this.layer.getMap();this.clickMapFn=v(this.clickMap,this),t.on("click",this.clickMapFn),this.mousemoveMapFn=v(this.mousemoveMap,this),t.on("mousemove",this.mousemoveMapFn),this.rightClickMapFn=v(this.rightClickMap,this),t.on("rightclick",this.rightClickMapFn)}}unbindEvents(){const e=this.layer.getMap();this.clickMapFn&&(e.off("click",this.clickMapFn),this.clickMapFn=null),this.mousemoveMapFn&&(e.off("mousemove",this.mousemoveMapFn),this.mousemoveMapFn=null),this.rightClickMapFn&&(e.off("rightclick",this.rightClickMapFn),this.rightClickMapFn=null),this.tilesRenderer&&(this.tilesRenderer.onLoadTileSet=null,this.tilesRenderer.onLoadModel=null,this.tilesRenderer.onDisposeModel=null)}clickMap(e){const t=this._intersectGltf(e);this.emit("click",t)}mousemoveMap(e){const t=this._intersectGltf(e);this.emit("mousemove",t)}rightClickMap(e){const t=this._intersectGltf(e);this.emit("rightClick",t)}_intersectGltf(e){var t,s;const i=this.layer.getMap().getContainer().getBoundingClientRect(),o=this.mouse;o.x=e.originEvent.clientX-i.x,o.y=e.originEvent.clientY-i.y,o.x=o.x/i.width*2-1,o.y=-(o.y/i.height)*2+1;const l=this.layer.getCamera();(t=this.raycaster)===null||t===void 0||t.setFromCamera(o,l);const h=(s=this.raycaster)===null||s===void 0?void 0:s.intersectObject(this.group,!0);if(h!=null&&h.length){const n=h[0].object,a={},p=this.getBatchTable(n);return p&&p.getKeys().forEach(r=>{a[r]=p.getData(r)}),{object:n,batchData:a}}return null}getBatchTable(e){return e?e.batchTable?e.batchTable:this.getBatchTable(e.parent):null}setPosition(e){const t=this.layer.convertLngLat(e);this.group.position.setX(t[0]),this.group.position.setY(t[1]),this.refresh()}setRotation(e){if(e){const t=Math.PI/180*(e.x||0),s=Math.PI/180*(e.y||0),i=Math.PI/180*(e.z||0);this.group.rotation.set(t,s,i),this.refresh()}}setTranslate(e){e&&(this.group.translateX(e.x),this.group.translateY(e.y),this.group.translateZ(e.z),this.refresh())}setScale(e){let t;typeof e=="number"?t={x:e,y:e,z:e}:t=e,this.group.scale.set(t.x,t.y,t.z),this.refresh()}refresh(){this.layer.update()}show(){this.group.visible=!0,this.refresh()}hide(){this.group.visible=!1,this.refresh()}animate(){this.animationFrame=requestAnimationFrame(()=>{this.update(),this.animate()})}update(){var e;if(this.layer.getCamera().updateMatrixWorld(),(e=this.tilesRenderer)===null||e===void 0||e.update(),this.layer.update(),this.statsContainer){const t=this.tilesRenderer;this.statsContainer.innerHTML=`\u6B63\u5728\u4E0B\u8F7D: ${t.stats.downloading} \u6B63\u5728\u7F16\u8BD1: ${t.stats.parsing} \u5DF2\u663E\u793A: ${t.group.children.length-2}`}}getGroup(){return this.group}getTilesRenderer(){return this.tilesRenderer}destroy(){var e;cancelAnimationFrame(this.animationFrame),this.unbindEvents(),this.layer.remove(this.group),(e=this.tilesRenderer)===null||e===void 0||e.dispose(),this.group=null,this.layer=null,this.statsContainer&&(this.statsContainer.remove(),this.statsContainer=void 0)}}export{L as Layer3DTiles}; //# sourceMappingURL=index-es.js.map