three-to-cesium
Version:
A plugin that enables Cesium and Three.js to run in synchronization.
2 lines (1 loc) • 3.41 kB
JavaScript
(function(t,r){typeof exports=="object"&&typeof module!="undefined"?module.exports=r(require("three"),require("cesium")):typeof define=="function"&&define.amd?define(["three","cesium"],r):(t=typeof globalThis!="undefined"?globalThis:t||self,t.ThreeToCesium=r(t.THREE,t.Cesium))})(this,function(t,r){"use strict";var W=t=>{throw TypeError(t)};var T=(t,r,n)=>r.has(t)||W("Cannot "+n);var p=(t,r,n)=>(T(t,r,"read from private field"),n?n.call(t):r.get(t)),w=(t,r,n)=>r.has(t)?W("Cannot add the same private member more than once"):r instanceof WeakSet?r.add(t):r.set(t,n),v=(t,r,n,o)=>(T(t,r,"write to private field"),o?o.call(t,n):r.set(t,n),n),g=(t,r,n)=>(T(t,r,"access private method"),n);var c,u,d,S,M;function n(m){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(m){for(const i in m)if(i!=="default"){const s=Object.getOwnPropertyDescriptor(m,i);Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:()=>m[i]})}}return e.default=m,Object.freeze(e)}const o=n(t),a=n(r);class V{constructor(e,i={}){w(this,d);w(this,c,{});w(this,u,!1);var s,h;this.cesiumViewer=e,v(this,c,{cameraNear:(s=i.cameraNear)!=null?s:.1,cameraFar:(h=i.cameraFar)!=null?h:1e4}),g(this,d,S).call(this)}add(e,i){let s=new o.Group;if(this.threeScene.add(s),s.add(e),i){let h=a.Transforms.eastNorthUpToFixedFrame(i),l=this.convertColumnToRowMajor(h);s.applyMatrix4(new o.Matrix4().set(...l))}return s}static localizePositions(e){let i=a.Rectangle.fromCartesianArray(e),s=a.Rectangle.center(i),h=a.Cartographic.toCartesian(s),l=a.Transforms.eastNorthUpToFixedFrame(h),f=a.Matrix4.inverse(l,new a.Matrix4);return{positions:e.map(x=>{let R=a.Matrix4.multiplyByPoint(f,x,new a.Cartesian3);return new o.Vector3(R.x,R.y,R.z)}),centerInWorld:h}}convertColumnToRowMajor(e){return[e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15]]}remove(e){this.threeScene.remove(e.parent),this.threeScene.remove(e)}update(){p(this,u)||(g(this,d,M).call(this),this.threeRenderer.render(this.threeScene,this.threeCamera))}destroy(){v(this,u,!0),this.threeRenderer.dispose(),this.cesiumViewer.container.removeChild(this.threeRenderer.domElement)}}c=new WeakMap,u=new WeakMap,d=new WeakSet,S=function(){let e=this.cesiumViewer.container,i=e.offsetWidth,s=e.offsetHeight;this.threeScene=new o.Scene,this.threeCamera=new o.PerspectiveCamera(void 0,i/s,p(this,c).cameraNear,p(this,c).cameraFar),this.threeRenderer=new o.WebGLRenderer({alpha:!0}),this.threeRenderer.setClearColor(0,0),this.threeRenderer.domElement.style.position="absolute",this.threeRenderer.domElement.style.top="0",this.threeRenderer.domElement.style.width="100%",this.threeRenderer.domElement.style.height="100%",this.threeRenderer.domElement.style.pointerEvents="none",e.appendChild(this.threeRenderer.domElement)},M=function(){this.threeCamera.matrixAutoUpdate=!1,this.threeCamera.fov=a.Math.toDegrees(this.cesiumViewer.camera.frustum.fovy);let e=this.cesiumViewer.camera.viewMatrix,i=this.cesiumViewer.camera.inverseViewMatrix,s=this.convertColumnToRowMajor(e),h=this.convertColumnToRowMajor(i);this.threeCamera.matrixWorld.set(...h),this.threeCamera.matrixWorldInverse.set(...s);let l=this.cesiumViewer.container,f=l.offsetWidth,C=l.offsetHeight,x=f/C;this.threeCamera.aspect=x,this.threeCamera.updateProjectionMatrix(),this.threeRenderer.setSize(f,C)};function E(...m){return new V(...m)}return E.localizePositions=V.localizePositions,E});