"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var M=require("three/examples/jsm/loaders/GLTFLoader.js"),x=require("three/examples/jsm/loaders/DRACOLoader.js"),l=require("three"),b=require("lodash-es"),C=require("3d-tiles-renderer");class F{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 r=0;r0)for(let r=0;r{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 T extends F{constructor(e,t){super(),this.animationFrame=-1,this.mouse=new l.Vector2,this.layer=e;const s=new k(t.url);s.setCamera(this.layer.getCamera()),s.setResolutionFromRenderer(this.layer.getCamera(),this.layer.getRender());const r=t.fetchOptions||{},a=new M.GLTFLoader(s.manager);r.credentials==="include"&&r.mode==="cors"&&a.setCrossOrigin("use-credentials"),"credentials"in r&&a.setWithCredentials(r.credentials==="include"),r.headers&&a.setRequestHeader(r.headers);const h=new x.DRACOLoader,c=t.dracoDecoderPath||"https://cdn.jsdelivr.net/npm/three@0.143/examples/js/libs/draco/";if(h.setDecoderPath(c),a.setDRACOLoader(h),s.manager.addHandler(/\.gltf$/i,a),s.onLoadTileSet=n=>{this.emit("loadTileSet",n)},s.onLoadModel=(n,o)=>{this.emit("loadModel",{scene:n,tile:o})},s.onDisposeModel=(n,o)=>{this.emit("disposeModel",{scene:n,tile:o})},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 l.Raycaster,this.raycaster.firstHitOnly=!0;const t=this.layer.getMap();this.clickMapFn=b.bind(this.clickMap,this),t.on("click",this.clickMapFn),this.mousemoveMapFn=b.bind(this.mousemoveMap,this),t.on("mousemove",this.mousemoveMapFn),this.rightClickMapFn=b.bind(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 r=this.layer.getMap().getContainer().getBoundingClientRect(),a=this.mouse;a.x=e.originEvent.clientX-r.x,a.y=e.originEvent.clientY-r.y,a.x=a.x/r.width*2-1,a.y=-(a.y/r.height)*2+1;const h=this.layer.getCamera();(t=this.raycaster)===null||t===void 0||t.setFromCamera(a,h);const c=(s=this.raycaster)===null||s===void 0?void 0:s.intersectObject(this.group,!0);if(c!=null&&c.length){const n=c[0].object,o={},g=this.getBatchTable(n);return g&&g.getKeys().forEach(i=>{o[i]=g.getData(i)}),{object:n,batchData:o}}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),r=Math.PI/180*(e.z||0);this.group.rotation.set(t,s,r),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)}}exports.Layer3DTiles=T; //# sourceMappingURL=index-cjs.js.map