@twinmatrix/spatialverse-sdk-web 0.0.3 → 0.0.5
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/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js +293 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js +35 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js +33 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js +307 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
- package/lib/cjs/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js +202 -198
- package/lib/cjs/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/focustree.json +121 -0
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -13
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/MetaAtlasCore/whatTaxonomies.json +170 -0
- package/lib/cjs/meta-atlas-sdk/combined_style.json +2313 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js +166 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js +229 -0
- package/lib/cjs/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js.map +1 -0
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js +73 -69
- package/lib/cjs/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js +6 -1
- package/lib/cjs/meta-atlas-sdk/utils/local-storage.js.map +1 -1
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -103
- package/lib/cjs/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/cjs/react/MetaAtlasMap.js +4 -4
- package/lib/cjs/react/MetaAtlasMap.js.map +1 -1
- package/lib/cjs/react/hooks/useMapEvents/index.js +6 -3
- package/lib/cjs/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/index.js +7 -5
- package/lib/cjs/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/cjs/react/hooks/useStampRally/utils.js +1 -1
- package/lib/cjs/react/hooks/useStampRally/utils.js.map +1 -1
- package/lib/cjs/react/stores/useMapDataStore.js +17 -21
- package/lib/cjs/react/stores/useMapDataStore.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js +2 -2
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/CustomThreeJsWrapper.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js +286 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js +27 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js +27 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js +305 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js +4 -3
- package/lib/esm/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js +202 -198
- package/lib/esm/meta-atlas-sdk/3DMap/MainMap.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js +3 -3
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/fetch-published-json.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/focustree.json +121 -0
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js +32 -29
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/meta-atlas-sdk-core.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js +10 -8
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/index.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js +55 -68
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/routing-helpers.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js +12 -12
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/routing-core/utils.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/MetaAtlasCore/whatTaxonomies.json +170 -0
- package/lib/esm/meta-atlas-sdk/combined_style.json +2313 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js +158 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js +221 -0
- package/lib/esm/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.js.map +1 -0
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js +73 -68
- package/lib/esm/meta-atlas-sdk/meta-atlas-sdk.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js +1 -1
- package/lib/esm/meta-atlas-sdk/utils/helpers.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/local-storage.js +6 -1
- package/lib/esm/meta-atlas-sdk/utils/local-storage.js.map +1 -1
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js +103 -101
- package/lib/esm/meta-atlas-sdk/utils/routing-visualizer/index.js.map +1 -1
- package/lib/esm/react/MetaAtlasMap.js +4 -4
- package/lib/esm/react/MetaAtlasMap.js.map +1 -1
- package/lib/esm/react/hooks/useMapEvents/index.js +6 -3
- package/lib/esm/react/hooks/useMapEvents/index.js.map +1 -1
- package/lib/esm/react/hooks/useStampRally/index.js +7 -5
- package/lib/esm/react/hooks/useStampRally/index.js.map +1 -1
- package/lib/esm/react/hooks/useStampRally/utils.js +1 -1
- package/lib/esm/react/hooks/useStampRally/utils.js.map +1 -1
- package/lib/esm/react/stores/useMapDataStore.js +17 -21
- package/lib/esm/react/stores/useMapDataStore.js.map +1 -1
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts +30 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts +5 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts +21 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts +27 -0
- package/lib/types/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts +18 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/draw_marker.d.ts.map +1 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts +37 -0
- package/lib/types/meta-atlas-sdk/mapbox_draw_custom_modes/marker_select.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CameraSync.js","names":["Group","Matrix4","Vector3","OrthographicCamera","Quaternion","constants","CameraSync","constructor","map","camera","world","active","matrixAutoUpdate","position","x","y","WORLD_SIZE","state","translateCenter","makeTranslation","worldSizeRatio","TILE_SIZE","worldSize","transform","scale","_this","on","updateCamera","setupCamera","t","aspect","width","height","halfFov","_fov","cameraToCenterDistance","Math","tan","maxPitch","_maxPitch","PI","acuteAngle","ev","offset","centerOffset","farZ","furthestDistance","groundAngle","_pitch","pitchAngle","cos","topHalfSurfaceDistance","sin","cameraTranslateZ","nz","nearZ","max","h","w","projectionMatrix","makeOrthographicMatrix","makePerspectiveMatrix","elements","cameraWorldMatrix","calcCameraMatrix","angle","elevation","_camera","matrixWorld","copy","zoomPow","translateMap","rotateMap","makeScale","point","makeRotationZ","matrix","premultiply","fire","detail","pitch","tbProjMatrix","tbWorldMatrix","cameraSyn","tileSize","worldSizeFromZoom","pow","zoom","mercatorZfromAltitude","altitude","lat","circumferenceAtLatitude","mercatorZfromZoom","latitude","EARTH_CIRCUMFERENCE","trz","undefined","_angle","_trz","makeRotationX","updateCameraState","dir","forward","distance","center","_centerAltitude","updatedWorldSize","_center","getWorldToCamera","pixelsPerMeter","matrixT","o","_orientation","p","invPosition","quat","set","invOrientation","conjugate","multiplyScalar","z","makeRotationFromQuaternion","translate","out","a","v","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","left","right","top","bottom","near","far","newMatrix","fovy","f","nf"],"sources":["../../../../../../src/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraSync.js"],"sourcesContent":["/**\n * @author peterqliu / https://github.com/peterqliu\n * @author jscastro / https://github.com/jscastro76\n * \n * This code file is based on the CameraSync module from the ThreeBox project.\n * Source: https://github.com/jscastro76/threebox/blob/master/src/camera/CameraSync.js\n */\n\nimport { Group, Matrix4, Vector3, OrthographicCamera, Quaternion } from \"three\";\nimport constants from './constants.js';\n\nclass CameraSync {\n constructor(map, camera, world) {\n this.map = map;\n this.camera = camera;\n this.active = true;\n\n this.camera.matrixAutoUpdate = false; // We're in charge of the camera now!\n\n\n // Postion and configure the world group so we can scale it appropriately when the camera zooms\n this.world = world || new Group();\n this.world.position.x = this.world.position.y = constants.WORLD_SIZE / 2;\n this.world.matrixAutoUpdate = false;\n\n // set up basic camera state\n this.state = {\n translateCenter: new Matrix4().makeTranslation(constants.WORLD_SIZE / 2, -constants.WORLD_SIZE / 2, 0),\n worldSizeRatio: constants.TILE_SIZE / constants.WORLD_SIZE,\n worldSize: constants.TILE_SIZE * this.map.transform.scale\n };\n\n\n\n // Listen for move events from the map and update the Three.js camera\n let _this = this; // keep the function on _this\n this.map\n .on('move', function () {\n _this.updateCamera();\n })\n this.map.on('resize', function () {\n _this.setupCamera();\n });\n this.setupCamera();\n }\n setupCamera() {\n const t = this.map.transform;\n this.camera.aspect = t.width / t.height; //bug fixed, if aspect is not reset raycast will fail on map resize\n this.halfFov = t._fov / 2;\n this.cameraToCenterDistance = 0.5 / Math.tan(this.halfFov) * t.height;\n const maxPitch = t._maxPitch * Math.PI / 180;\n this.acuteAngle = Math.PI / 2 - maxPitch;\n this.updateCamera();\n }\n\n updateCamera(ev) {\n if (!this.camera) {\n return;\n }\n\n\n const t = this.map.transform;\n this.camera.aspect = t.width / t.height; //bug fixed, if aspect is not reset raycast will fail on map resize\n const offset = t.centerOffset || new Vector3(); //{ x: t.width / 2, y: t.height / 2 };\n let farZ = 0;\n let furthestDistance = 0;\n this.halfFov = t._fov / 2;\n const groundAngle = Math.PI / 2 + t._pitch;\n const pitchAngle = Math.cos((Math.PI / 2) - t._pitch); //pitch seems to influence heavily the depth calculation and cannot be more than 60 = PI/3 < v1 and 85 > v2\n this.cameraToCenterDistance = 0.5 / Math.tan(this.halfFov) * t.height;\n // let pixelsPerMeter = 1;\n const worldSize = this.worldSize();\n\n // if (this.map.tb.mapboxVersion >= 2.0) {\n // mapbox version >= 2.0\n // pixelsPerMeter = this.mercatorZfromAltitude(1, t.center.lat) * worldSize;\n // const fovAboveCenter = t._fov * (0.5 + t.centerOffset.y / t.height);\n // // Adjust distance to MSL by the minimum possible elevation visible on screen,\n // // this way the far plane is pushed further in the case of negative elevation.\n // const minElevationInPixels = t.elevation ? t.elevation.getMinElevationBelowMSL() * pixelsPerMeter : 0;\n // const cameraToSeaLevelDistance = ((t._camera.position[2] * worldSize) - minElevationInPixels) / Math.cos(t._pitch);\n // const topHalfSurfaceDistance = Math.sin(fovAboveCenter) * cameraToSeaLevelDistance / Math.sin(clamp(Math.PI - groundAngle - fovAboveCenter, 0.01, Math.PI - 0.01));\n // // Calculate z distance of the farthest fragment that should be rendered.\n // furthestDistance = pitchAngle * topHalfSurfaceDistance + cameraToSeaLevelDistance;\n // // Add a bit extra to avoid precision problems when a fragment's distance is exactly `furthestDistance`\n // const horizonDistance = cameraToSeaLevelDistance * (1 / t._horizonShift);\n // farZ = Math.min(furthestDistance * 1.01, horizonDistance);\n // } else {\n // // mapbox version < 2.0 or azure maps\n // Furthest distance optimized by @jscastro76\n const topHalfSurfaceDistance = Math.sin(this.halfFov) * this.cameraToCenterDistance / Math.sin(Math.PI - groundAngle - this.halfFov);\n\n // Calculate z distance of the farthest fragment that should be rendered. \n furthestDistance = pitchAngle * topHalfSurfaceDistance + this.cameraToCenterDistance;\n\n // Add a bit extra to avoid precision problems when a fragment's distance is exactly `furthestDistance`\n farZ = furthestDistance * 1.01;\n // }\n this.cameraTranslateZ = new Matrix4().makeTranslation(0, 0, this.cameraToCenterDistance);\n\n // someday @ansis set further near plane to fix precision for deckgl,so we should fix it to use mapbox-gl v1.3+ correctly\n // https://github.com/mapbox/mapbox-gl-js/commit/5cf6e5f523611bea61dae155db19a7cb19eb825c#diff-5dddfe9d7b5b4413ee54284bc1f7966d\n const nz = (t.height / 50); //min near z as coded by @ansis\n const nearZ = Math.max(nz * pitchAngle, nz); //on changes in the pitch nz could be too low\n\n const h = t.height;\n const w = t.width;\n if (this.camera instanceof OrthographicCamera) {\n this.camera.projectionMatrix = makeOrthographicMatrix(w / -2, w / 2, h / 2, h / -2, nearZ, farZ);\n } else {\n this.camera.projectionMatrix = makePerspectiveMatrix(t._fov, w / h, nearZ, farZ);\n }\n this.camera.projectionMatrix.elements[8] = -offset.x * 2 / t.width;\n this.camera.projectionMatrix.elements[9] = offset.y * 2 / t.height;\n\n // Unlike the Mapbox GL JS camera, separate camera translation and rotation out into its world matrix\n // If this is applied directly to the projection matrix, it will work OK but break raycasting\n let cameraWorldMatrix = this.calcCameraMatrix(t._pitch, t.angle);\n // When terrain layers are included, height of 3D layers must be modified from t_camera.z * worldSize\n if (t.elevation) cameraWorldMatrix.elements[14] = t._camera.position[2] * worldSize;\n //this.camera.matrixWorld.elements is equivalent to t._camera._transform\n this.camera.matrixWorld.copy(cameraWorldMatrix);\n\n let zoomPow = t.scale * this.state.worldSizeRatio;\n // Handle scaling and translation of objects in the map in the world's matrix transform, not the camera\n let scale = new Matrix4();\n let translateMap = new Matrix4();\n let rotateMap = new Matrix4();\n\n scale.makeScale(zoomPow, zoomPow, zoomPow);\n\n let x = t.x || t.point.x;\n let y = t.y || t.point.y;\n translateMap.makeTranslation(-x, y, 0);\n rotateMap.makeRotationZ(Math.PI);\n\n this.world.matrix = new Matrix4()\n .premultiply(rotateMap)\n .premultiply(this.state.translateCenter)\n .premultiply(scale)\n .premultiply(translateMap);\n\n // utils.prettyPrintMatrix(this.camera.projectionMatrix.elements);\n this.map.fire('CameraSynced', { detail: { nearZ: nearZ, farZ: farZ, pitch: t._pitch, angle: t.angle, furthestDistance: furthestDistance, cameraToCenterDistance: this.cameraToCenterDistance, t: this.map.transform, tbProjMatrix: this.camera.projectionMatrix.elements, tbWorldMatrix: this.world.matrix.elements, cameraSyn: CameraSync } });\n\n }\n worldSize() {\n let t = this.map.transform;\n return t.tileSize * t.scale;\n }\n\n worldSizeFromZoom() {\n let t = this.map.transform;\n return Math.pow(2.0, t.zoom) * t.tileSize;\n }\n\n mercatorZfromAltitude(altitude, lat) {\n return altitude / this.circumferenceAtLatitude(lat);\n }\n\n mercatorZfromZoom() {\n return this.cameraToCenterDistance / this.worldSizeFromZoom();\n }\n\n circumferenceAtLatitude(latitude) {\n return constants.EARTH_CIRCUMFERENCE * Math.cos(latitude * Math.PI / 180);\n }\n\n calcCameraMatrix(pitch, angle, trz) {\n const t = this.map.transform;\n const _pitch = (pitch === undefined) ? t._pitch : pitch;\n const _angle = (angle === undefined) ? t.angle : angle;\n const _trz = (trz === undefined) ? this.cameraTranslateZ : trz;\n\n return new Matrix4()\n .premultiply(_trz)\n .premultiply(new Matrix4().makeRotationX(_pitch))\n .premultiply(new Matrix4().makeRotationZ(_angle));\n }\n\n updateCameraState() {\n let t = this.map.transform;\n if (!t.height) return;\n\n // Set camera orientation and move it to a proper distance from the map\n // t._camera.setPitchBearing(t._pitch, t.angle);\n const dir = t._camera.forward();\n const distance = t.cameraToCenterDistance;\n const center = t.point;\n\n // Use camera zoom (if terrain is enabled) to maintain constant altitude to sea level\n const altitude = this.mercatorZfromZoom(t);\n const height = altitude - this.mercatorZfromAltitude(t._centerAltitude, t.center.lat);\n\n // simplified version of: this._worldSizeFromZoom(this._zoomFromMercatorZ(height))\n const updatedWorldSize = t.cameraToCenterDistance / height;\n return [\n center.x / this.worldSize() - (dir[0] * distance) / updatedWorldSize,\n center.y / this.worldSize() - (dir[1] * distance) / updatedWorldSize,\n this.mercatorZfromAltitude(t._centerAltitude, t._center.lat) + (-dir[2] * distance) / updatedWorldSize\n ];\n\n }\n\n getWorldToCamera(worldSize, pixelsPerMeter) {\n // transformation chain from world space to camera space:\n // 1. Height value (z) of renderables is in meters. Scale z coordinate by pixelsPerMeter\n // 2. Transform from pixel coordinates to camera space with cameraMatrix^-1\n // 3. flip Y if required\n // worldToCamera: flip * cam^-1 * zScale\n // cameraToWorld: (flip * cam^-1 * zScale)^-1 => (zScale^-1 * cam * flip^-1)\n let t = this.map.transform;\n const matrix = new Matrix4();\n const matrixT = new Matrix4();\n\n // Compute inverse of camera matrix and post-multiply negated translation\n const o = t._camera._orientation;\n const p = t._camera.position;\n const invPosition = new Vector3(p[0], p[1], p[2]);\n\n const quat = new Quaternion();\n quat.set(o[0], o[1], o[2], o[3]);\n const invOrientation = quat.conjugate();\n invPosition.multiplyScalar(-worldSize);\n\n matrixT.makeTranslation(invPosition.x, invPosition.y, invPosition.z);\n matrix\n .makeRotationFromQuaternion(invOrientation)\n .premultiply(matrixT);\n //this would make the matrix exact to getWorldToCamera but breaks\n //this.translate(matrix.elements, matrix.elements, invPosition);\n // Pre-multiply y (2nd row)\n matrix.elements[1] *= -1.0;\n matrix.elements[5] *= -1.0;\n matrix.elements[9] *= -1.0;\n matrix.elements[13] *= -1.0;\n\n // Post-multiply z (3rd column)\n matrix.elements[8] *= pixelsPerMeter;\n matrix.elements[9] *= pixelsPerMeter;\n matrix.elements[10] *= pixelsPerMeter;\n matrix.elements[11] *= pixelsPerMeter;\n\n return matrix;\n }\n\n translate(out, a, v) {\n let x = v[0] || v.x, y = v[1] || v.y, z = v[2] || v.z;\n let a00, a01, a02, a03;\n let a10, a11, a12, a13;\n let a20, a21, a22, a23;\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0];\n a01 = a[1];\n a02 = a[2];\n a03 = a[3];\n a10 = a[4];\n a11 = a[5];\n a12 = a[6];\n a13 = a[7];\n a20 = a[8];\n a21 = a[9];\n a22 = a[10];\n a23 = a[11];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a03;\n out[4] = a10;\n out[5] = a11;\n out[6] = a12;\n out[7] = a13;\n out[8] = a20;\n out[9] = a21;\n out[10] = a22;\n out[11] = a23;\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n return out;\n }\n}\n\nfunction makeOrthographicMatrix(left, right, top, bottom, near, far) {\n var out = new Matrix4();\n\n const w = 1.0 / (right - left);\n const h = 1.0 / (top - bottom);\n const p = 1.0 / (far - near);\n\n const x = (right + left) * w;\n const y = (top + bottom) * h;\n const z = near * p;\n\n var newMatrix = [\n 2 * w, 0, 0, 0,\n 0, 2 * h, 0, 0,\n 0, 0, - 1 * p, 0,\n - x, -y, -z, 1\n ]\n\n out.elements = newMatrix\n return out;\n}\n\nfunction makePerspectiveMatrix(fovy, aspect, near, far) {\n\n var out = new Matrix4();\n var f = 1.0 / Math.tan(fovy / 2),\n nf = 1 / (near - far);\n\n var newMatrix = [\n f / aspect, 0, 0, 0,\n 0, f, 0, 0,\n 0, 0, (far + near) * nf, -1,\n 0, 0, (2 * far * near) * nf, 0\n ]\n\n out.elements = newMatrix\n return out;\n}\n\nexport default CameraSync;"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,KAAK,EAAEC,OAAO,EAAEC,OAAO,EAAEC,kBAAkB,EAAEC,UAAU,QAAQ,OAAO;AAC/E,OAAOC,SAAS,MAAO,gBAAgB;AAEvC,MAAMC,UAAU,CAAC;EACbC,WAAWA,CAACC,GAAG,EAAEC,MAAM,EAAEC,KAAK,EAAE;IAC5B,IAAI,CAACF,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACE,MAAM,GAAG,IAAI;IAElB,IAAI,CAACF,MAAM,CAACG,gBAAgB,GAAG,KAAK,CAAC,CAAC;;IAGtC;IACA,IAAI,CAACF,KAAK,GAAGA,KAAK,IAAI,IAAIV,KAAK,CAAC,CAAC;IACjC,IAAI,CAACU,KAAK,CAACG,QAAQ,CAACC,CAAC,GAAG,IAAI,CAACJ,KAAK,CAACG,QAAQ,CAACE,CAAC,GAAGV,SAAS,CAACW,UAAU,GAAG,CAAC;IACxE,IAAI,CAACN,KAAK,CAACE,gBAAgB,GAAG,KAAK;;IAEnC;IACA,IAAI,CAACK,KAAK,GAAG;MACTC,eAAe,EAAE,IAAIjB,OAAO,CAAC,CAAC,CAACkB,eAAe,CAACd,SAAS,CAACW,UAAU,GAAG,CAAC,EAAE,CAACX,SAAS,CAACW,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;MACtGI,cAAc,EAAEf,SAAS,CAACgB,SAAS,GAAGhB,SAAS,CAACW,UAAU;MAC1DM,SAAS,EAAEjB,SAAS,CAACgB,SAAS,GAAG,IAAI,CAACb,GAAG,CAACe,SAAS,CAACC;IACxD,CAAC;;IAID;IACA,IAAIC,KAAK,GAAG,IAAI,CAAC,CAAC;IAClB,IAAI,CAACjB,GAAG,CACHkB,EAAE,CAAC,MAAM,EAAE,YAAY;MACpBD,KAAK,CAACE,YAAY,CAAC,CAAC;IACxB,CAAC,CAAC;IACN,IAAI,CAACnB,GAAG,CAACkB,EAAE,CAAC,QAAQ,EAAE,YAAY;MAC9BD,KAAK,CAACG,WAAW,CAAC,CAAC;IACvB,CAAC,CAAC;IACF,IAAI,CAACA,WAAW,CAAC,CAAC;EACtB;EACAA,WAAWA,CAAA,EAAG;IACV,MAAMC,CAAC,GAAG,IAAI,CAACrB,GAAG,CAACe,SAAS;IAC5B,IAAI,CAACd,MAAM,CAACqB,MAAM,GAAGD,CAAC,CAACE,KAAK,GAAGF,CAAC,CAACG,MAAM,CAAC,CAAC;IACzC,IAAI,CAACC,OAAO,GAAGJ,CAAC,CAACK,IAAI,GAAG,CAAC;IACzB,IAAI,CAACC,sBAAsB,GAAG,GAAG,GAAGC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACJ,OAAO,CAAC,GAAGJ,CAAC,CAACG,MAAM;IACrE,MAAMM,QAAQ,GAAGT,CAAC,CAACU,SAAS,GAAGH,IAAI,CAACI,EAAE,GAAG,GAAG;IAC5C,IAAI,CAACC,UAAU,GAAGL,IAAI,CAACI,EAAE,GAAG,CAAC,GAAGF,QAAQ;IACxC,IAAI,CAACX,YAAY,CAAC,CAAC;EACvB;EAEAA,YAAYA,CAACe,EAAE,EAAE;IACb,IAAI,CAAC,IAAI,CAACjC,MAAM,EAAE;MACd;IACJ;IAGA,MAAMoB,CAAC,GAAG,IAAI,CAACrB,GAAG,CAACe,SAAS;IAC5B,IAAI,CAACd,MAAM,CAACqB,MAAM,GAAGD,CAAC,CAACE,KAAK,GAAGF,CAAC,CAACG,MAAM,CAAC,CAAC;IACzC,MAAMW,MAAM,GAAGd,CAAC,CAACe,YAAY,IAAI,IAAI1C,OAAO,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI2C,IAAI,GAAG,CAAC;IACZ,IAAIC,gBAAgB,GAAG,CAAC;IACxB,IAAI,CAACb,OAAO,GAAGJ,CAAC,CAACK,IAAI,GAAG,CAAC;IACzB,MAAMa,WAAW,GAAGX,IAAI,CAACI,EAAE,GAAG,CAAC,GAAGX,CAAC,CAACmB,MAAM;IAC1C,MAAMC,UAAU,GAAGb,IAAI,CAACc,GAAG,CAAEd,IAAI,CAACI,EAAE,GAAG,CAAC,GAAIX,CAAC,CAACmB,MAAM,CAAC,CAAC,CAAC;IACvD,IAAI,CAACb,sBAAsB,GAAG,GAAG,GAAGC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACJ,OAAO,CAAC,GAAGJ,CAAC,CAACG,MAAM;IACrE;IACA,MAAMV,SAAS,GAAG,IAAI,CAACA,SAAS,CAAC,CAAC;;IAElC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,MAAM6B,sBAAsB,GAAGf,IAAI,CAACgB,GAAG,CAAC,IAAI,CAACnB,OAAO,CAAC,GAAG,IAAI,CAACE,sBAAsB,GAAGC,IAAI,CAACgB,GAAG,CAAChB,IAAI,CAACI,EAAE,GAAGO,WAAW,GAAG,IAAI,CAACd,OAAO,CAAC;;IAEpI;IACAa,gBAAgB,GAAGG,UAAU,GAAGE,sBAAsB,GAAG,IAAI,CAAChB,sBAAsB;;IAEpF;IACAU,IAAI,GAAGC,gBAAgB,GAAG,IAAI;IAC9B;IACA,IAAI,CAACO,gBAAgB,GAAG,IAAIpD,OAAO,CAAC,CAAC,CAACkB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAACgB,sBAAsB,CAAC;;IAExF;IACA;IACA,MAAMmB,EAAE,GAAIzB,CAAC,CAACG,MAAM,GAAG,EAAG,CAAC,CAAC;IAC5B,MAAMuB,KAAK,GAAGnB,IAAI,CAACoB,GAAG,CAACF,EAAE,GAAGL,UAAU,EAAEK,EAAE,CAAC,CAAC,CAAC;;IAE7C,MAAMG,CAAC,GAAG5B,CAAC,CAACG,MAAM;IAClB,MAAM0B,CAAC,GAAG7B,CAAC,CAACE,KAAK;IACjB,IAAI,IAAI,CAACtB,MAAM,YAAYN,kBAAkB,EAAE;MAC3C,IAAI,CAACM,MAAM,CAACkD,gBAAgB,GAAGC,sBAAsB,CAACF,CAAC,GAAG,CAAC,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAED,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,CAAC,EAAEF,KAAK,EAAEV,IAAI,CAAC;IACpG,CAAC,MAAM;MACH,IAAI,CAACpC,MAAM,CAACkD,gBAAgB,GAAGE,qBAAqB,CAAChC,CAAC,CAACK,IAAI,EAAEwB,CAAC,GAAGD,CAAC,EAAEF,KAAK,EAAEV,IAAI,CAAC;IACpF;IACA,IAAI,CAACpC,MAAM,CAACkD,gBAAgB,CAACG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAACnB,MAAM,CAAC7B,CAAC,GAAG,CAAC,GAAGe,CAAC,CAACE,KAAK;IAClE,IAAI,CAACtB,MAAM,CAACkD,gBAAgB,CAACG,QAAQ,CAAC,CAAC,CAAC,GAAGnB,MAAM,CAAC5B,CAAC,GAAG,CAAC,GAAGc,CAAC,CAACG,MAAM;;IAElE;IACA;IACA,IAAI+B,iBAAiB,GAAG,IAAI,CAACC,gBAAgB,CAACnC,CAAC,CAACmB,MAAM,EAAEnB,CAAC,CAACoC,KAAK,CAAC;IAChE;IACA,IAAIpC,CAAC,CAACqC,SAAS,EAAEH,iBAAiB,CAACD,QAAQ,CAAC,EAAE,CAAC,GAAGjC,CAAC,CAACsC,OAAO,CAACtD,QAAQ,CAAC,CAAC,CAAC,GAAGS,SAAS;IACnF;IACA,IAAI,CAACb,MAAM,CAAC2D,WAAW,CAACC,IAAI,CAACN,iBAAiB,CAAC;IAE/C,IAAIO,OAAO,GAAGzC,CAAC,CAACL,KAAK,GAAG,IAAI,CAACP,KAAK,CAACG,cAAc;IACjD;IACA,IAAII,KAAK,GAAG,IAAIvB,OAAO,CAAC,CAAC;IACzB,IAAIsE,YAAY,GAAG,IAAItE,OAAO,CAAC,CAAC;IAChC,IAAIuE,SAAS,GAAG,IAAIvE,OAAO,CAAC,CAAC;IAE7BuB,KAAK,CAACiD,SAAS,CAACH,OAAO,EAAEA,OAAO,EAAEA,OAAO,CAAC;IAE1C,IAAIxD,CAAC,GAAGe,CAAC,CAACf,CAAC,IAAIe,CAAC,CAAC6C,KAAK,CAAC5D,CAAC;IACxB,IAAIC,CAAC,GAAGc,CAAC,CAACd,CAAC,IAAIc,CAAC,CAAC6C,KAAK,CAAC3D,CAAC;IACxBwD,YAAY,CAACpD,eAAe,CAAC,CAACL,CAAC,EAAEC,CAAC,EAAE,CAAC,CAAC;IACtCyD,SAAS,CAACG,aAAa,CAACvC,IAAI,CAACI,EAAE,CAAC;IAEhC,IAAI,CAAC9B,KAAK,CAACkE,MAAM,GAAG,IAAI3E,OAAO,CAAC,CAAC,CAC5B4E,WAAW,CAACL,SAAS,CAAC,CACtBK,WAAW,CAAC,IAAI,CAAC5D,KAAK,CAACC,eAAe,CAAC,CACvC2D,WAAW,CAACrD,KAAK,CAAC,CAClBqD,WAAW,CAACN,YAAY,CAAC;;IAE9B;IACA,IAAI,CAAC/D,GAAG,CAACsE,IAAI,CAAC,cAAc,EAAE;MAAEC,MAAM,EAAE;QAAExB,KAAK,EAAEA,KAAK;QAAEV,IAAI,EAAEA,IAAI;QAAEmC,KAAK,EAAEnD,CAAC,CAACmB,MAAM;QAAEiB,KAAK,EAAEpC,CAAC,CAACoC,KAAK;QAAEnB,gBAAgB,EAAEA,gBAAgB;QAAEX,sBAAsB,EAAE,IAAI,CAACA,sBAAsB;QAAEN,CAAC,EAAE,IAAI,CAACrB,GAAG,CAACe,SAAS;QAAE0D,YAAY,EAAE,IAAI,CAACxE,MAAM,CAACkD,gBAAgB,CAACG,QAAQ;QAAEoB,aAAa,EAAE,IAAI,CAACxE,KAAK,CAACkE,MAAM,CAACd,QAAQ;QAAEqB,SAAS,EAAE7E;MAAW;IAAE,CAAC,CAAC;EAEnV;EACAgB,SAASA,CAAA,EAAG;IACR,IAAIO,CAAC,GAAG,IAAI,CAACrB,GAAG,CAACe,SAAS;IAC1B,OAAOM,CAAC,CAACuD,QAAQ,GAAGvD,CAAC,CAACL,KAAK;EAC/B;EAEA6D,iBAAiBA,CAAA,EAAG;IAChB,IAAIxD,CAAC,GAAG,IAAI,CAACrB,GAAG,CAACe,SAAS;IAC1B,OAAOa,IAAI,CAACkD,GAAG,CAAC,GAAG,EAAEzD,CAAC,CAAC0D,IAAI,CAAC,GAAG1D,CAAC,CAACuD,QAAQ;EAC7C;EAEAI,qBAAqBA,CAACC,QAAQ,EAAEC,GAAG,EAAE;IACjC,OAAOD,QAAQ,GAAG,IAAI,CAACE,uBAAuB,CAACD,GAAG,CAAC;EACvD;EAEAE,iBAAiBA,CAAA,EAAG;IAChB,OAAO,IAAI,CAACzD,sBAAsB,GAAG,IAAI,CAACkD,iBAAiB,CAAC,CAAC;EACjE;EAEAM,uBAAuBA,CAACE,QAAQ,EAAE;IAC9B,OAAOxF,SAAS,CAACyF,mBAAmB,GAAG1D,IAAI,CAACc,GAAG,CAAC2C,QAAQ,GAAGzD,IAAI,CAACI,EAAE,GAAG,GAAG,CAAC;EAC7E;EAEAwB,gBAAgBA,CAACgB,KAAK,EAAEf,KAAK,EAAE8B,GAAG,EAAE;IAChC,MAAMlE,CAAC,GAAG,IAAI,CAACrB,GAAG,CAACe,SAAS;IAC5B,MAAMyB,MAAM,GAAIgC,KAAK,KAAKgB,SAAS,GAAInE,CAAC,CAACmB,MAAM,GAAGgC,KAAK;IACvD,MAAMiB,MAAM,GAAIhC,KAAK,KAAK+B,SAAS,GAAInE,CAAC,CAACoC,KAAK,GAAGA,KAAK;IACtD,MAAMiC,IAAI,GAAIH,GAAG,KAAKC,SAAS,GAAI,IAAI,CAAC3C,gBAAgB,GAAG0C,GAAG;IAE9D,OAAO,IAAI9F,OAAO,CAAC,CAAC,CACf4E,WAAW,CAACqB,IAAI,CAAC,CACjBrB,WAAW,CAAC,IAAI5E,OAAO,CAAC,CAAC,CAACkG,aAAa,CAACnD,MAAM,CAAC,CAAC,CAChD6B,WAAW,CAAC,IAAI5E,OAAO,CAAC,CAAC,CAAC0E,aAAa,CAACsB,MAAM,CAAC,CAAC;EACzD;EAEAG,iBAAiBA,CAAA,EAAG;IAChB,IAAIvE,CAAC,GAAG,IAAI,CAACrB,GAAG,CAACe,SAAS;IAC1B,IAAI,CAACM,CAAC,CAACG,MAAM,EAAE;;IAEf;IACA;IACA,MAAMqE,GAAG,GAAGxE,CAAC,CAACsC,OAAO,CAACmC,OAAO,CAAC,CAAC;IAC/B,MAAMC,QAAQ,GAAG1E,CAAC,CAACM,sBAAsB;IACzC,MAAMqE,MAAM,GAAG3E,CAAC,CAAC6C,KAAK;;IAEtB;IACA,MAAMe,QAAQ,GAAG,IAAI,CAACG,iBAAiB,CAAC/D,CAAC,CAAC;IAC1C,MAAMG,MAAM,GAAGyD,QAAQ,GAAG,IAAI,CAACD,qBAAqB,CAAC3D,CAAC,CAAC4E,eAAe,EAAE5E,CAAC,CAAC2E,MAAM,CAACd,GAAG,CAAC;;IAErF;IACA,MAAMgB,gBAAgB,GAAG7E,CAAC,CAACM,sBAAsB,GAAGH,MAAM;IAC1D,OAAO,CACHwE,MAAM,CAAC1F,CAAC,GAAG,IAAI,CAACQ,SAAS,CAAC,CAAC,GAAI+E,GAAG,CAAC,CAAC,CAAC,GAAGE,QAAQ,GAAIG,gBAAgB,EACpEF,MAAM,CAACzF,CAAC,GAAG,IAAI,CAACO,SAAS,CAAC,CAAC,GAAI+E,GAAG,CAAC,CAAC,CAAC,GAAGE,QAAQ,GAAIG,gBAAgB,EACpE,IAAI,CAAClB,qBAAqB,CAAC3D,CAAC,CAAC4E,eAAe,EAAE5E,CAAC,CAAC8E,OAAO,CAACjB,GAAG,CAAC,GAAI,CAACW,GAAG,CAAC,CAAC,CAAC,GAAGE,QAAQ,GAAIG,gBAAgB,CACzG;EAEL;EAEAE,gBAAgBA,CAACtF,SAAS,EAAEuF,cAAc,EAAE;IACxC;IACA;IACA;IACA;IACA;IACA;IACA,IAAIhF,CAAC,GAAG,IAAI,CAACrB,GAAG,CAACe,SAAS;IAC1B,MAAMqD,MAAM,GAAG,IAAI3E,OAAO,CAAC,CAAC;IAC5B,MAAM6G,OAAO,GAAG,IAAI7G,OAAO,CAAC,CAAC;;IAE7B;IACA,MAAM8G,CAAC,GAAGlF,CAAC,CAACsC,OAAO,CAAC6C,YAAY;IAChC,MAAMC,CAAC,GAAGpF,CAAC,CAACsC,OAAO,CAACtD,QAAQ;IAC5B,MAAMqG,WAAW,GAAG,IAAIhH,OAAO,CAAC+G,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjD,MAAME,IAAI,GAAG,IAAI/G,UAAU,CAAC,CAAC;IAC7B+G,IAAI,CAACC,GAAG,CAACL,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,EAAEA,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAMM,cAAc,GAAGF,IAAI,CAACG,SAAS,CAAC,CAAC;IACvCJ,WAAW,CAACK,cAAc,CAAC,CAACjG,SAAS,CAAC;IAEtCwF,OAAO,CAAC3F,eAAe,CAAC+F,WAAW,CAACpG,CAAC,EAAEoG,WAAW,CAACnG,CAAC,EAAEmG,WAAW,CAACM,CAAC,CAAC;IACpE5C,MAAM,CACD6C,0BAA0B,CAACJ,cAAc,CAAC,CAC1CxC,WAAW,CAACiC,OAAO,CAAC;IACzB;IACA;IACA;IACAlC,MAAM,CAACd,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;IAC1Bc,MAAM,CAACd,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;IAC1Bc,MAAM,CAACd,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;IAC1Bc,MAAM,CAACd,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;;IAE3B;IACAc,MAAM,CAACd,QAAQ,CAAC,CAAC,CAAC,IAAI+C,cAAc;IACpCjC,MAAM,CAACd,QAAQ,CAAC,CAAC,CAAC,IAAI+C,cAAc;IACpCjC,MAAM,CAACd,QAAQ,CAAC,EAAE,CAAC,IAAI+C,cAAc;IACrCjC,MAAM,CAACd,QAAQ,CAAC,EAAE,CAAC,IAAI+C,cAAc;IAErC,OAAOjC,MAAM;EACjB;EAEA8C,SAASA,CAACC,GAAG,EAAEC,CAAC,EAAEC,CAAC,EAAE;IACjB,IAAI/G,CAAC,GAAG+G,CAAC,CAAC,CAAC,CAAC,IAAIA,CAAC,CAAC/G,CAAC;MAAEC,CAAC,GAAG8G,CAAC,CAAC,CAAC,CAAC,IAAIA,CAAC,CAAC9G,CAAC;MAAEyG,CAAC,GAAGK,CAAC,CAAC,CAAC,CAAC,IAAIA,CAAC,CAACL,CAAC;IACrD,IAAIM,GAAG,EAAEC,GAAG,EAAEC,GAAG,EAAEC,GAAG;IACtB,IAAIC,GAAG,EAAEC,GAAG,EAAEC,GAAG,EAAEC,GAAG;IACtB,IAAIC,GAAG,EAAEC,GAAG,EAAEC,GAAG,EAAEC,GAAG;IACtB,IAAIb,CAAC,KAAKD,GAAG,EAAE;MACXA,GAAG,CAAC,EAAE,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAG9G,CAAC,GAAG8G,CAAC,CAAC,CAAC,CAAC,GAAG7G,CAAC,GAAG6G,CAAC,CAAC,CAAC,CAAC,GAAGJ,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;MAChDD,GAAG,CAAC,EAAE,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAG9G,CAAC,GAAG8G,CAAC,CAAC,CAAC,CAAC,GAAG7G,CAAC,GAAG6G,CAAC,CAAC,CAAC,CAAC,GAAGJ,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;MAChDD,GAAG,CAAC,EAAE,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAG9G,CAAC,GAAG8G,CAAC,CAAC,CAAC,CAAC,GAAG7G,CAAC,GAAG6G,CAAC,CAAC,EAAE,CAAC,GAAGJ,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;MACjDD,GAAG,CAAC,EAAE,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,GAAG9G,CAAC,GAAG8G,CAAC,CAAC,CAAC,CAAC,GAAG7G,CAAC,GAAG6G,CAAC,CAAC,EAAE,CAAC,GAAGJ,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;IACrD,CAAC,MAAM;MACHE,GAAG,GAAGF,CAAC,CAAC,CAAC,CAAC;MACVG,GAAG,GAAGH,CAAC,CAAC,CAAC,CAAC;MACVI,GAAG,GAAGJ,CAAC,CAAC,CAAC,CAAC;MACVK,GAAG,GAAGL,CAAC,CAAC,CAAC,CAAC;MACVM,GAAG,GAAGN,CAAC,CAAC,CAAC,CAAC;MACVO,GAAG,GAAGP,CAAC,CAAC,CAAC,CAAC;MACVQ,GAAG,GAAGR,CAAC,CAAC,CAAC,CAAC;MACVS,GAAG,GAAGT,CAAC,CAAC,CAAC,CAAC;MACVU,GAAG,GAAGV,CAAC,CAAC,CAAC,CAAC;MACVW,GAAG,GAAGX,CAAC,CAAC,CAAC,CAAC;MACVY,GAAG,GAAGZ,CAAC,CAAC,EAAE,CAAC;MACXa,GAAG,GAAGb,CAAC,CAAC,EAAE,CAAC;MACXD,GAAG,CAAC,CAAC,CAAC,GAAGG,GAAG;MACZH,GAAG,CAAC,CAAC,CAAC,GAAGI,GAAG;MACZJ,GAAG,CAAC,CAAC,CAAC,GAAGK,GAAG;MACZL,GAAG,CAAC,CAAC,CAAC,GAAGM,GAAG;MACZN,GAAG,CAAC,CAAC,CAAC,GAAGO,GAAG;MACZP,GAAG,CAAC,CAAC,CAAC,GAAGQ,GAAG;MACZR,GAAG,CAAC,CAAC,CAAC,GAAGS,GAAG;MACZT,GAAG,CAAC,CAAC,CAAC,GAAGU,GAAG;MACZV,GAAG,CAAC,CAAC,CAAC,GAAGW,GAAG;MACZX,GAAG,CAAC,CAAC,CAAC,GAAGY,GAAG;MACZZ,GAAG,CAAC,EAAE,CAAC,GAAGa,GAAG;MACbb,GAAG,CAAC,EAAE,CAAC,GAAGc,GAAG;MACbd,GAAG,CAAC,EAAE,CAAC,GAAGG,GAAG,GAAGhH,CAAC,GAAGoH,GAAG,GAAGnH,CAAC,GAAGuH,GAAG,GAAGd,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;MAC7CD,GAAG,CAAC,EAAE,CAAC,GAAGI,GAAG,GAAGjH,CAAC,GAAGqH,GAAG,GAAGpH,CAAC,GAAGwH,GAAG,GAAGf,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;MAC7CD,GAAG,CAAC,EAAE,CAAC,GAAGK,GAAG,GAAGlH,CAAC,GAAGsH,GAAG,GAAGrH,CAAC,GAAGyH,GAAG,GAAGhB,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;MAC7CD,GAAG,CAAC,EAAE,CAAC,GAAGM,GAAG,GAAGnH,CAAC,GAAGuH,GAAG,GAAGtH,CAAC,GAAG0H,GAAG,GAAGjB,CAAC,GAAGI,CAAC,CAAC,EAAE,CAAC;IACjD;IACA,OAAOD,GAAG;EACd;AACJ;AAEA,SAAS/D,sBAAsBA,CAAC8E,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,MAAM,EAAEC,IAAI,EAAEC,GAAG,EAAE;EACjE,IAAIpB,GAAG,GAAG,IAAI1H,OAAO,CAAC,CAAC;EAEvB,MAAMyD,CAAC,GAAG,GAAG,IAAIiF,KAAK,GAAGD,IAAI,CAAC;EAC9B,MAAMjF,CAAC,GAAG,GAAG,IAAImF,GAAG,GAAGC,MAAM,CAAC;EAC9B,MAAM5B,CAAC,GAAG,GAAG,IAAI8B,GAAG,GAAGD,IAAI,CAAC;EAE5B,MAAMhI,CAAC,GAAG,CAAC6H,KAAK,GAAGD,IAAI,IAAIhF,CAAC;EAC5B,MAAM3C,CAAC,GAAG,CAAC6H,GAAG,GAAGC,MAAM,IAAIpF,CAAC;EAC5B,MAAM+D,CAAC,GAAGsB,IAAI,GAAG7B,CAAC;EAElB,IAAI+B,SAAS,GAAG,CACZ,CAAC,GAAGtF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACd,CAAC,EAAE,CAAC,GAAGD,CAAC,EAAE,CAAC,EAAE,CAAC,EACd,CAAC,EAAE,CAAC,EAAE,CAAE,CAAC,GAAGwD,CAAC,EAAE,CAAC,EAChB,CAAEnG,CAAC,EAAE,CAACC,CAAC,EAAE,CAACyG,CAAC,EAAE,CAAC,CACjB;EAEDG,GAAG,CAAC7D,QAAQ,GAAGkF,SAAS;EACxB,OAAOrB,GAAG;AACd;AAEA,SAAS9D,qBAAqBA,CAACoF,IAAI,EAAEnH,MAAM,EAAEgH,IAAI,EAAEC,GAAG,EAAE;EAEpD,IAAIpB,GAAG,GAAG,IAAI1H,OAAO,CAAC,CAAC;EACvB,IAAIiJ,CAAC,GAAG,GAAG,GAAG9G,IAAI,CAACC,GAAG,CAAC4G,IAAI,GAAG,CAAC,CAAC;IAC5BE,EAAE,GAAG,CAAC,IAAIL,IAAI,GAAGC,GAAG,CAAC;EAEzB,IAAIC,SAAS,GAAG,CACZE,CAAC,GAAGpH,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnB,CAAC,EAAEoH,CAAC,EAAE,CAAC,EAAE,CAAC,EACV,CAAC,EAAE,CAAC,EAAE,CAACH,GAAG,GAAGD,IAAI,IAAIK,EAAE,EAAE,CAAC,CAAC,EAC3B,CAAC,EAAE,CAAC,EAAG,CAAC,GAAGJ,GAAG,GAAGD,IAAI,GAAIK,EAAE,EAAE,CAAC,CACjC;EAEDxB,GAAG,CAAC7D,QAAQ,GAAGkF,SAAS;EACxB,OAAOrB,GAAG;AACd;AAEA,eAAerH,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Matrix4 } from "three";
|
|
2
|
+
export function makePerspectiveMatrix(fovy, aspect, near, far) {
|
|
3
|
+
var out = new Matrix4();
|
|
4
|
+
var f = 1.0 / Math.tan(fovy / 2),
|
|
5
|
+
nf = 1 / (near - far);
|
|
6
|
+
var newMatrix = [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, (far + near) * nf, -1, 0, 0, 2 * far * near * nf, 0];
|
|
7
|
+
out.elements = newMatrix;
|
|
8
|
+
return out;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//[jscastro] new orthographic matrix calculations https://en.wikipedia.org/wiki/Orthographic_projection and validated with https://bit.ly/3rPvB9Y
|
|
12
|
+
export function makeOrthographicMatrix(left, right, top, bottom, near, far) {
|
|
13
|
+
var out = new Matrix4();
|
|
14
|
+
const w = 1.0 / (right - left);
|
|
15
|
+
const h = 1.0 / (top - bottom);
|
|
16
|
+
const p = 1.0 / (far - near);
|
|
17
|
+
const x = (right + left) * w;
|
|
18
|
+
const y = (top + bottom) * h;
|
|
19
|
+
const z = near * p;
|
|
20
|
+
var newMatrix = [2 * w, 0, 0, 0, 0, 2 * h, 0, 0, 0, 0, -1 * p, 0, -x, -y, -z, 1];
|
|
21
|
+
out.elements = newMatrix;
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
export function clamp(n, min, max) {
|
|
25
|
+
return Math.min(max, Math.max(min, n));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=CameraUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CameraUtils.js","names":["Matrix4","makePerspectiveMatrix","fovy","aspect","near","far","out","f","Math","tan","nf","newMatrix","elements","makeOrthographicMatrix","left","right","top","bottom","w","h","p","x","y","z","clamp","n","min","max"],"sources":["../../../../../../src/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/CameraUtils.js"],"sourcesContent":["import { Matrix4 } from \"three\";\n\n\nexport function makePerspectiveMatrix(fovy, aspect, near, far) {\n\n var out = new Matrix4();\n var f = 1.0 / Math.tan(fovy / 2),\n nf = 1 / (near - far);\n\n var newMatrix = [\n f / aspect, 0, 0, 0,\n 0, f, 0, 0,\n 0, 0, (far + near) * nf, -1,\n 0, 0, (2 * far * near) * nf, 0\n ]\n\n out.elements = newMatrix\n return out;\n}\n\n//[jscastro] new orthographic matrix calculations https://en.wikipedia.org/wiki/Orthographic_projection and validated with https://bit.ly/3rPvB9Y\nexport function makeOrthographicMatrix(left, right, top, bottom, near, far) {\n var out = new Matrix4();\n\n const w = 1.0 / (right - left);\n const h = 1.0 / (top - bottom);\n const p = 1.0 / (far - near);\n\n const x = (right + left) * w;\n const y = (top + bottom) * h;\n const z = near * p;\n\n var newMatrix = [\n 2 * w, 0, 0, 0,\n 0, 2 * h, 0, 0,\n 0, 0, - 1 * p, 0,\n - x, -y, -z, 1\n ]\n\n out.elements = newMatrix\n return out;\n}\n\nexport function clamp(n, min, max) {\n return Math.min(max, Math.max(min, n));\n}"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAG/B,OAAO,SAASC,qBAAqBA,CAACC,IAAI,EAAEC,MAAM,EAAEC,IAAI,EAAEC,GAAG,EAAE;EAE3D,IAAIC,GAAG,GAAG,IAAIN,OAAO,CAAC,CAAC;EACvB,IAAIO,CAAC,GAAG,GAAG,GAAGC,IAAI,CAACC,GAAG,CAACP,IAAI,GAAG,CAAC,CAAC;IAC5BQ,EAAE,GAAG,CAAC,IAAIN,IAAI,GAAGC,GAAG,CAAC;EAEzB,IAAIM,SAAS,GAAG,CACZJ,CAAC,GAAGJ,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACnB,CAAC,EAAEI,CAAC,EAAE,CAAC,EAAE,CAAC,EACV,CAAC,EAAE,CAAC,EAAE,CAACF,GAAG,GAAGD,IAAI,IAAIM,EAAE,EAAE,CAAC,CAAC,EAC3B,CAAC,EAAE,CAAC,EAAG,CAAC,GAAGL,GAAG,GAAGD,IAAI,GAAIM,EAAE,EAAE,CAAC,CACjC;EAEDJ,GAAG,CAACM,QAAQ,GAAGD,SAAS;EACxB,OAAOL,GAAG;AACd;;AAEA;AACA,OAAO,SAASO,sBAAsBA,CAACC,IAAI,EAAEC,KAAK,EAAEC,GAAG,EAAEC,MAAM,EAAEb,IAAI,EAAEC,GAAG,EAAE;EACxE,IAAIC,GAAG,GAAG,IAAIN,OAAO,CAAC,CAAC;EAEvB,MAAMkB,CAAC,GAAG,GAAG,IAAIH,KAAK,GAAGD,IAAI,CAAC;EAC9B,MAAMK,CAAC,GAAG,GAAG,IAAIH,GAAG,GAAGC,MAAM,CAAC;EAC9B,MAAMG,CAAC,GAAG,GAAG,IAAIf,GAAG,GAAGD,IAAI,CAAC;EAE5B,MAAMiB,CAAC,GAAG,CAACN,KAAK,GAAGD,IAAI,IAAII,CAAC;EAC5B,MAAMI,CAAC,GAAG,CAACN,GAAG,GAAGC,MAAM,IAAIE,CAAC;EAC5B,MAAMI,CAAC,GAAGnB,IAAI,GAAGgB,CAAC;EAElB,IAAIT,SAAS,GAAG,CACZ,CAAC,GAAGO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EACd,CAAC,EAAE,CAAC,GAAGC,CAAC,EAAE,CAAC,EAAE,CAAC,EACd,CAAC,EAAE,CAAC,EAAE,CAAE,CAAC,GAAGC,CAAC,EAAE,CAAC,EAChB,CAAEC,CAAC,EAAE,CAACC,CAAC,EAAE,CAACC,CAAC,EAAE,CAAC,CACjB;EAEDjB,GAAG,CAACM,QAAQ,GAAGD,SAAS;EACxB,OAAOL,GAAG;AACd;AAEA,OAAO,SAASkB,KAAKA,CAACC,CAAC,EAAEC,GAAG,EAAEC,GAAG,EAAE;EAC/B,OAAOnB,IAAI,CAACkB,GAAG,CAACC,GAAG,EAAEnB,IAAI,CAACmB,GAAG,CAACD,GAAG,EAAED,CAAC,CAAC,CAAC;AAC1C","ignoreList":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const WORLD_SIZE = 1024000; //TILE_SIZE * 2000
|
|
2
|
+
const MERCATOR_A = 6378137.0; // 900913 projection property. (Deprecated) Replaced by EARTH_RADIUS
|
|
3
|
+
const FOV_ORTHO = 0.1 / 180 * Math.PI; //Mapbox doesn't accept 0 as FOV
|
|
4
|
+
const FOV = Math.atan(3 / 4); //from Mapbox https://github.com/mapbox/mapbox-gl-js/blob/main/src/geo/transform.js#L93
|
|
5
|
+
const EARTH_RADIUS = 6371008.8; //from Mapbox https://github.com/mapbox/mapbox-gl-js/blob/0063cbd10a97218fb6a0f64c99bf18609b918f4c/src/geo/lng_lat.js#L11
|
|
6
|
+
const EARTH_CIRCUMFERENCE_EQUATOR = 40075017; //from Mapbox https://github.com/mapbox/mapbox-gl-js/blob/0063cbd10a97218fb6a0f64c99bf18609b918f4c/src/geo/lng_lat.js#L117
|
|
7
|
+
|
|
8
|
+
const constants = {
|
|
9
|
+
WORLD_SIZE: WORLD_SIZE,
|
|
10
|
+
PROJECTION_WORLD_SIZE: WORLD_SIZE / (EARTH_RADIUS * Math.PI * 2),
|
|
11
|
+
MERCATOR_A: EARTH_RADIUS,
|
|
12
|
+
DEG2RAD: Math.PI / 180,
|
|
13
|
+
RAD2DEG: 180 / Math.PI,
|
|
14
|
+
EARTH_RADIUS: EARTH_RADIUS,
|
|
15
|
+
EARTH_CIRCUMFERENCE: 2 * Math.PI * EARTH_RADIUS,
|
|
16
|
+
//40075000, // In meters
|
|
17
|
+
EARTH_CIRCUMFERENCE_EQUATOR: EARTH_CIRCUMFERENCE_EQUATOR,
|
|
18
|
+
FOV_ORTHO: FOV_ORTHO,
|
|
19
|
+
// closest to 0
|
|
20
|
+
FOV: FOV,
|
|
21
|
+
// Math.atan(3/4) radians. If this value is changed, FOV_DEGREES must be calculated
|
|
22
|
+
FOV_DEGREES: FOV * 180 / Math.PI,
|
|
23
|
+
// Math.atan(3/4) in degrees
|
|
24
|
+
TILE_SIZE: 512
|
|
25
|
+
};
|
|
26
|
+
export default constants;
|
|
27
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["WORLD_SIZE","MERCATOR_A","FOV_ORTHO","Math","PI","FOV","atan","EARTH_RADIUS","EARTH_CIRCUMFERENCE_EQUATOR","constants","PROJECTION_WORLD_SIZE","DEG2RAD","RAD2DEG","EARTH_CIRCUMFERENCE","FOV_DEGREES","TILE_SIZE"],"sources":["../../../../../../src/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/constants.js"],"sourcesContent":["const WORLD_SIZE = 1024000; //TILE_SIZE * 2000\nconst MERCATOR_A = 6378137.0; // 900913 projection property. (Deprecated) Replaced by EARTH_RADIUS\nconst FOV_ORTHO = 0.1 / 180 * Math.PI; //Mapbox doesn't accept 0 as FOV\nconst FOV = Math.atan(3 / 4); //from Mapbox https://github.com/mapbox/mapbox-gl-js/blob/main/src/geo/transform.js#L93\nconst EARTH_RADIUS = 6371008.8; //from Mapbox https://github.com/mapbox/mapbox-gl-js/blob/0063cbd10a97218fb6a0f64c99bf18609b918f4c/src/geo/lng_lat.js#L11\nconst EARTH_CIRCUMFERENCE_EQUATOR = 40075017 //from Mapbox https://github.com/mapbox/mapbox-gl-js/blob/0063cbd10a97218fb6a0f64c99bf18609b918f4c/src/geo/lng_lat.js#L117\n\nconst constants = {\n WORLD_SIZE: WORLD_SIZE,\n PROJECTION_WORLD_SIZE: WORLD_SIZE / (EARTH_RADIUS * Math.PI * 2),\n MERCATOR_A: EARTH_RADIUS,\n DEG2RAD: Math.PI / 180,\n RAD2DEG: 180 / Math.PI,\n EARTH_RADIUS: EARTH_RADIUS,\n EARTH_CIRCUMFERENCE: 2 * Math.PI * EARTH_RADIUS, //40075000, // In meters\n EARTH_CIRCUMFERENCE_EQUATOR: EARTH_CIRCUMFERENCE_EQUATOR,\n FOV_ORTHO: FOV_ORTHO, // closest to 0\n FOV: FOV, // Math.atan(3/4) radians. If this value is changed, FOV_DEGREES must be calculated\n FOV_DEGREES: FOV * 180 / Math.PI, // Math.atan(3/4) in degrees\n TILE_SIZE: 512\n}\n\nexport default constants;\n"],"mappings":"AAAA,MAAMA,UAAU,GAAG,OAAO,CAAC,CAAC;AAC5B,MAAMC,UAAU,GAAG,SAAS,CAAC,CAAC;AAC9B,MAAMC,SAAS,GAAG,GAAG,GAAG,GAAG,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;AACvC,MAAMC,GAAG,GAAGF,IAAI,CAACG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9B,MAAMC,YAAY,GAAG,SAAS,CAAC,CAAC;AAChC,MAAMC,2BAA2B,GAAG,QAAQ,EAAC;;AAE7C,MAAMC,SAAS,GAAG;EACdT,UAAU,EAAEA,UAAU;EACtBU,qBAAqB,EAAEV,UAAU,IAAIO,YAAY,GAAGJ,IAAI,CAACC,EAAE,GAAG,CAAC,CAAC;EAChEH,UAAU,EAAEM,YAAY;EACxBI,OAAO,EAAER,IAAI,CAACC,EAAE,GAAG,GAAG;EACtBQ,OAAO,EAAE,GAAG,GAAGT,IAAI,CAACC,EAAE;EACtBG,YAAY,EAAEA,YAAY;EAC1BM,mBAAmB,EAAE,CAAC,GAAGV,IAAI,CAACC,EAAE,GAAGG,YAAY;EAAE;EACjDC,2BAA2B,EAAEA,2BAA2B;EACxDN,SAAS,EAAEA,SAAS;EAAE;EACtBG,GAAG,EAAEA,GAAG;EAAE;EACVS,WAAW,EAAET,GAAG,GAAG,GAAG,GAAGF,IAAI,CAACC,EAAE;EAAE;EAClCW,SAAS,EAAE;AACf,CAAC;AAED,eAAeN,SAAS","ignoreList":[]}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/*
|
|
2
|
+
(c) 2011-2015, Vladimir Agafonkin
|
|
3
|
+
SunCalc is a JavaScript library for calculating sun/moon position and light phases.
|
|
4
|
+
https://github.com/mourner/suncalc
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
(function () {
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
// shortcuts for easier to read formulas
|
|
11
|
+
var PI = Math.PI,
|
|
12
|
+
sin = Math.sin,
|
|
13
|
+
cos = Math.cos,
|
|
14
|
+
tan = Math.tan,
|
|
15
|
+
asin = Math.asin,
|
|
16
|
+
atan = Math.atan2,
|
|
17
|
+
acos = Math.acos,
|
|
18
|
+
rad = PI / 180;
|
|
19
|
+
|
|
20
|
+
// sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas
|
|
21
|
+
|
|
22
|
+
// date/time constants and conversions
|
|
23
|
+
|
|
24
|
+
var dayMs = 1000 * 60 * 60 * 24,
|
|
25
|
+
J1970 = 2440588,
|
|
26
|
+
J2000 = 2451545;
|
|
27
|
+
function toJulian(date) {
|
|
28
|
+
return date.valueOf() / dayMs - 0.5 + J1970;
|
|
29
|
+
}
|
|
30
|
+
function fromJulian(j) {
|
|
31
|
+
return new Date((j + 0.5 - J1970) * dayMs);
|
|
32
|
+
}
|
|
33
|
+
function toDays(date) {
|
|
34
|
+
return toJulian(date) - J2000;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// general calculations for position
|
|
38
|
+
|
|
39
|
+
var e = rad * 23.4397; // obliquity of the Earth
|
|
40
|
+
|
|
41
|
+
function rightAscension(l, b) {
|
|
42
|
+
return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l));
|
|
43
|
+
}
|
|
44
|
+
function declination(l, b) {
|
|
45
|
+
return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l));
|
|
46
|
+
}
|
|
47
|
+
function azimuth(H, phi, dec) {
|
|
48
|
+
return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi));
|
|
49
|
+
}
|
|
50
|
+
function altitude(H, phi, dec) {
|
|
51
|
+
return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H));
|
|
52
|
+
}
|
|
53
|
+
function siderealTime(d, lw) {
|
|
54
|
+
return rad * (280.16 + 360.9856235 * d) - lw;
|
|
55
|
+
}
|
|
56
|
+
function astroRefraction(h) {
|
|
57
|
+
if (h < 0)
|
|
58
|
+
// the following formula works for positive altitudes only.
|
|
59
|
+
h = 0; // if h = -0.08901179 a div/0 would occur.
|
|
60
|
+
|
|
61
|
+
// formula 16.4 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.
|
|
62
|
+
// 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad:
|
|
63
|
+
return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// general sun calculations
|
|
67
|
+
|
|
68
|
+
function solarMeanAnomaly(d) {
|
|
69
|
+
return rad * (357.5291 + 0.98560028 * d);
|
|
70
|
+
}
|
|
71
|
+
function eclipticLongitude(M) {
|
|
72
|
+
var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)),
|
|
73
|
+
// equation of center
|
|
74
|
+
P = rad * 102.9372; // perihelion of the Earth
|
|
75
|
+
|
|
76
|
+
return M + C + P + PI;
|
|
77
|
+
}
|
|
78
|
+
function sunCoords(d) {
|
|
79
|
+
var M = solarMeanAnomaly(d),
|
|
80
|
+
L = eclipticLongitude(M);
|
|
81
|
+
return {
|
|
82
|
+
dec: declination(L, 0),
|
|
83
|
+
ra: rightAscension(L, 0)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
var SunCalc = {};
|
|
87
|
+
|
|
88
|
+
// calculates sun position for a given date and latitude/longitude
|
|
89
|
+
|
|
90
|
+
SunCalc.getPosition = function (date, lat, lng) {
|
|
91
|
+
var lw = rad * -lng,
|
|
92
|
+
phi = rad * lat,
|
|
93
|
+
d = toDays(date),
|
|
94
|
+
c = sunCoords(d),
|
|
95
|
+
H = siderealTime(d, lw) - c.ra;
|
|
96
|
+
return {
|
|
97
|
+
azimuth: azimuth(H, phi, c.dec),
|
|
98
|
+
altitude: altitude(H, phi, c.dec)
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
SunCalc.toJulian = function (date) {
|
|
102
|
+
return toJulian(date);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// sun times configuration (angle, morning name, evening name)
|
|
106
|
+
|
|
107
|
+
var times = SunCalc.times = [[-0.833, 'sunrise', 'sunset'], [-0.3, 'sunriseEnd', 'sunsetStart'], [-6, 'dawn', 'dusk'], [-12, 'nauticalDawn', 'nauticalDusk'], [-18, 'nightEnd', 'night'], [6, 'goldenHourEnd', 'goldenHour']];
|
|
108
|
+
|
|
109
|
+
// adds a custom time to the times config
|
|
110
|
+
|
|
111
|
+
SunCalc.addTime = function (angle, riseName, setName) {
|
|
112
|
+
times.push([angle, riseName, setName]);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// calculations for sun times
|
|
116
|
+
|
|
117
|
+
var J0 = 0.0009;
|
|
118
|
+
function julianCycle(d, lw) {
|
|
119
|
+
return Math.round(d - J0 - lw / (2 * PI));
|
|
120
|
+
}
|
|
121
|
+
function approxTransit(Ht, lw, n) {
|
|
122
|
+
return J0 + (Ht + lw) / (2 * PI) + n;
|
|
123
|
+
}
|
|
124
|
+
function solarTransitJ(ds, M, L) {
|
|
125
|
+
return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L);
|
|
126
|
+
}
|
|
127
|
+
function hourAngle(h, phi, d) {
|
|
128
|
+
return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d)));
|
|
129
|
+
}
|
|
130
|
+
function observerAngle(height) {
|
|
131
|
+
return -2.076 * Math.sqrt(height) / 60;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// returns set time for the given sun altitude
|
|
135
|
+
function getSetJ(h, lw, phi, dec, n, M, L) {
|
|
136
|
+
var w = hourAngle(h, phi, dec),
|
|
137
|
+
a = approxTransit(w, lw, n);
|
|
138
|
+
return solarTransitJ(a, M, L);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// calculates sun times for a given date, latitude/longitude, and, optionally,
|
|
142
|
+
// the observer height (in meters) relative to the horizon
|
|
143
|
+
|
|
144
|
+
SunCalc.getTimes = function (date, lat, lng, height) {
|
|
145
|
+
height = height || 0;
|
|
146
|
+
var lw = rad * -lng,
|
|
147
|
+
phi = rad * lat,
|
|
148
|
+
dh = observerAngle(height),
|
|
149
|
+
d = toDays(date),
|
|
150
|
+
n = julianCycle(d, lw),
|
|
151
|
+
ds = approxTransit(0, lw, n),
|
|
152
|
+
M = solarMeanAnomaly(ds),
|
|
153
|
+
L = eclipticLongitude(M),
|
|
154
|
+
dec = declination(L, 0),
|
|
155
|
+
Jnoon = solarTransitJ(ds, M, L),
|
|
156
|
+
i,
|
|
157
|
+
len,
|
|
158
|
+
time,
|
|
159
|
+
h0,
|
|
160
|
+
Jset,
|
|
161
|
+
Jrise;
|
|
162
|
+
var result = {
|
|
163
|
+
solarNoon: fromJulian(Jnoon),
|
|
164
|
+
nadir: fromJulian(Jnoon - 0.5)
|
|
165
|
+
};
|
|
166
|
+
for (i = 0, len = times.length; i < len; i += 1) {
|
|
167
|
+
time = times[i];
|
|
168
|
+
h0 = (time[0] + dh) * rad;
|
|
169
|
+
Jset = getSetJ(h0, lw, phi, dec, n, M, L);
|
|
170
|
+
Jrise = Jnoon - (Jset - Jnoon);
|
|
171
|
+
result[time[1]] = fromJulian(Jrise);
|
|
172
|
+
result[time[2]] = fromJulian(Jset);
|
|
173
|
+
}
|
|
174
|
+
return result;
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
// moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas
|
|
178
|
+
|
|
179
|
+
function moonCoords(d) {
|
|
180
|
+
// geocentric ecliptic coordinates of the moon
|
|
181
|
+
|
|
182
|
+
var L = rad * (218.316 + 13.176396 * d),
|
|
183
|
+
// ecliptic longitude
|
|
184
|
+
M = rad * (134.963 + 13.064993 * d),
|
|
185
|
+
// mean anomaly
|
|
186
|
+
F = rad * (93.272 + 13.229350 * d),
|
|
187
|
+
// mean distance
|
|
188
|
+
|
|
189
|
+
l = L + rad * 6.289 * sin(M),
|
|
190
|
+
// longitude
|
|
191
|
+
b = rad * 5.128 * sin(F),
|
|
192
|
+
// latitude
|
|
193
|
+
dt = 385001 - 20905 * cos(M); // distance to the moon in km
|
|
194
|
+
|
|
195
|
+
return {
|
|
196
|
+
ra: rightAscension(l, b),
|
|
197
|
+
dec: declination(l, b),
|
|
198
|
+
dist: dt
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
SunCalc.getMoonPosition = function (date, lat, lng) {
|
|
202
|
+
var lw = rad * -lng,
|
|
203
|
+
phi = rad * lat,
|
|
204
|
+
d = toDays(date),
|
|
205
|
+
c = moonCoords(d),
|
|
206
|
+
H = siderealTime(d, lw) - c.ra,
|
|
207
|
+
h = altitude(H, phi, c.dec),
|
|
208
|
+
// formula 14.1 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.
|
|
209
|
+
pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H));
|
|
210
|
+
h = h + astroRefraction(h); // altitude correction for refraction
|
|
211
|
+
|
|
212
|
+
return {
|
|
213
|
+
azimuth: azimuth(H, phi, c.dec),
|
|
214
|
+
altitude: h,
|
|
215
|
+
distance: c.dist,
|
|
216
|
+
parallacticAngle: pa
|
|
217
|
+
};
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
// calculations for illumination parameters of the moon,
|
|
221
|
+
// based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and
|
|
222
|
+
// Chapter 48 of "Astronomical Algorithms" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.
|
|
223
|
+
|
|
224
|
+
SunCalc.getMoonIllumination = function (date) {
|
|
225
|
+
var d = toDays(date || new Date()),
|
|
226
|
+
s = sunCoords(d),
|
|
227
|
+
m = moonCoords(d),
|
|
228
|
+
sdist = 149598000,
|
|
229
|
+
// distance from Earth to Sun in km
|
|
230
|
+
|
|
231
|
+
phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)),
|
|
232
|
+
inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)),
|
|
233
|
+
angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) - cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra));
|
|
234
|
+
return {
|
|
235
|
+
fraction: (1 + cos(inc)) / 2,
|
|
236
|
+
phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI,
|
|
237
|
+
angle: angle
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
function hoursLater(date, h) {
|
|
241
|
+
return new Date(date.valueOf() + h * dayMs / 24);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article
|
|
245
|
+
|
|
246
|
+
SunCalc.getMoonTimes = function (date, lat, lng, inUTC) {
|
|
247
|
+
var t = new Date(date);
|
|
248
|
+
if (inUTC) t.setUTCHours(0, 0, 0, 0);else t.setHours(0, 0, 0, 0);
|
|
249
|
+
var hc = 0.133 * rad,
|
|
250
|
+
h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc,
|
|
251
|
+
h1,
|
|
252
|
+
h2,
|
|
253
|
+
rise,
|
|
254
|
+
set,
|
|
255
|
+
a,
|
|
256
|
+
b,
|
|
257
|
+
xe,
|
|
258
|
+
ye,
|
|
259
|
+
d,
|
|
260
|
+
roots,
|
|
261
|
+
x1,
|
|
262
|
+
x2,
|
|
263
|
+
dx;
|
|
264
|
+
|
|
265
|
+
// go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set)
|
|
266
|
+
for (var i = 1; i <= 24; i += 2) {
|
|
267
|
+
h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc;
|
|
268
|
+
h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc;
|
|
269
|
+
a = (h0 + h2) / 2 - h1;
|
|
270
|
+
b = (h2 - h0) / 2;
|
|
271
|
+
xe = -b / (2 * a);
|
|
272
|
+
ye = (a * xe + b) * xe + h1;
|
|
273
|
+
d = b * b - 4 * a * h1;
|
|
274
|
+
roots = 0;
|
|
275
|
+
if (d >= 0) {
|
|
276
|
+
dx = Math.sqrt(d) / (Math.abs(a) * 2);
|
|
277
|
+
x1 = xe - dx;
|
|
278
|
+
x2 = xe + dx;
|
|
279
|
+
if (Math.abs(x1) <= 1) roots++;
|
|
280
|
+
if (Math.abs(x2) <= 1) roots++;
|
|
281
|
+
if (x1 < -1) x1 = x2;
|
|
282
|
+
}
|
|
283
|
+
if (roots === 1) {
|
|
284
|
+
if (h0 < 0) rise = i + x1;else set = i + x1;
|
|
285
|
+
} else if (roots === 2) {
|
|
286
|
+
rise = i + (ye < 0 ? x2 : x1);
|
|
287
|
+
set = i + (ye < 0 ? x1 : x2);
|
|
288
|
+
}
|
|
289
|
+
if (rise && set) break;
|
|
290
|
+
h0 = h2;
|
|
291
|
+
}
|
|
292
|
+
var result = {};
|
|
293
|
+
if (rise) result.rise = hoursLater(t, rise);
|
|
294
|
+
if (set) result.set = hoursLater(t, set);
|
|
295
|
+
if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true;
|
|
296
|
+
return result;
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
//// export as Node module / AMD module / browser variable
|
|
300
|
+
//if (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc;
|
|
301
|
+
//else if (typeof define === 'function' && define.amd) define(SunCalc);
|
|
302
|
+
//else window.SunCalc = SunCalc;
|
|
303
|
+
module.exports = exports = SunCalc;
|
|
304
|
+
})();
|
|
305
|
+
//# sourceMappingURL=suncalc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suncalc.js","names":["PI","Math","sin","cos","tan","asin","atan","atan2","acos","rad","dayMs","J1970","J2000","toJulian","date","valueOf","fromJulian","j","Date","toDays","e","rightAscension","l","b","declination","azimuth","H","phi","dec","altitude","siderealTime","d","lw","astroRefraction","h","solarMeanAnomaly","eclipticLongitude","M","C","P","sunCoords","L","ra","SunCalc","getPosition","lat","lng","c","times","addTime","angle","riseName","setName","push","J0","julianCycle","round","approxTransit","Ht","n","solarTransitJ","ds","hourAngle","observerAngle","height","sqrt","getSetJ","w","a","getTimes","dh","Jnoon","i","len","time","h0","Jset","Jrise","result","solarNoon","nadir","length","moonCoords","F","dt","dist","getMoonPosition","pa","distance","parallacticAngle","getMoonIllumination","s","m","sdist","inc","fraction","phase","hoursLater","getMoonTimes","inUTC","t","setUTCHours","setHours","hc","h1","h2","rise","set","xe","ye","roots","x1","x2","dx","abs","module","exports"],"sources":["../../../../../../src/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/suncalc.js"],"sourcesContent":["/*\n (c) 2011-2015, Vladimir Agafonkin\n SunCalc is a JavaScript library for calculating sun/moon position and light phases.\n https://github.com/mourner/suncalc\n*/\n\n(function () {\n 'use strict';\n\n // shortcuts for easier to read formulas\n\n var PI = Math.PI,\n sin = Math.sin,\n cos = Math.cos,\n tan = Math.tan,\n asin = Math.asin,\n atan = Math.atan2,\n acos = Math.acos,\n rad = PI / 180;\n\n // sun calculations are based on http://aa.quae.nl/en/reken/zonpositie.html formulas\n\n\n // date/time constants and conversions\n\n var dayMs = 1000 * 60 * 60 * 24,\n J1970 = 2440588,\n J2000 = 2451545;\n\n function toJulian(date) { return date.valueOf() / dayMs - 0.5 + J1970; }\n function fromJulian(j) { return new Date((j + 0.5 - J1970) * dayMs); }\n function toDays(date) { return toJulian(date) - J2000; }\n\n // general calculations for position\n\n var e = rad * 23.4397; // obliquity of the Earth\n\n function rightAscension(l, b) { return atan(sin(l) * cos(e) - tan(b) * sin(e), cos(l)); }\n function declination(l, b) { return asin(sin(b) * cos(e) + cos(b) * sin(e) * sin(l)); }\n\n function azimuth(H, phi, dec) { return atan(sin(H), cos(H) * sin(phi) - tan(dec) * cos(phi)); }\n function altitude(H, phi, dec) { return asin(sin(phi) * sin(dec) + cos(phi) * cos(dec) * cos(H)); }\n\n function siderealTime(d, lw) { return rad * (280.16 + 360.9856235 * d) - lw; }\n\n function astroRefraction(h) {\n if (h < 0) // the following formula works for positive altitudes only.\n h = 0; // if h = -0.08901179 a div/0 would occur.\n\n // formula 16.4 of \"Astronomical Algorithms\" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.\n // 1.02 / tan(h + 10.26 / (h + 5.10)) h in degrees, result in arc minutes -> converted to rad:\n return 0.0002967 / Math.tan(h + 0.00312536 / (h + 0.08901179));\n }\n\n // general sun calculations\n\n function solarMeanAnomaly(d) { return rad * (357.5291 + 0.98560028 * d); }\n\n function eclipticLongitude(M) {\n\n var C = rad * (1.9148 * sin(M) + 0.02 * sin(2 * M) + 0.0003 * sin(3 * M)), // equation of center\n P = rad * 102.9372; // perihelion of the Earth\n\n return M + C + P + PI;\n }\n\n function sunCoords(d) {\n\n var M = solarMeanAnomaly(d),\n L = eclipticLongitude(M);\n\n return {\n dec: declination(L, 0),\n ra: rightAscension(L, 0)\n };\n }\n\n\n var SunCalc = {};\n\n\n // calculates sun position for a given date and latitude/longitude\n\n SunCalc.getPosition = function (date, lat, lng) {\n\n var lw = rad * -lng,\n phi = rad * lat,\n d = toDays(date),\n\n c = sunCoords(d),\n H = siderealTime(d, lw) - c.ra;\n\n return {\n azimuth: azimuth(H, phi, c.dec),\n altitude: altitude(H, phi, c.dec)\n };\n };\n\n SunCalc.toJulian = function (date) {\n return toJulian(date);\n };\n\n // sun times configuration (angle, morning name, evening name)\n\n var times = SunCalc.times = [\n [-0.833, 'sunrise', 'sunset'],\n [-0.3, 'sunriseEnd', 'sunsetStart'],\n [-6, 'dawn', 'dusk'],\n [-12, 'nauticalDawn', 'nauticalDusk'],\n [-18, 'nightEnd', 'night'],\n [6, 'goldenHourEnd', 'goldenHour']\n ];\n\n // adds a custom time to the times config\n\n SunCalc.addTime = function (angle, riseName, setName) {\n times.push([angle, riseName, setName]);\n };\n\n\n // calculations for sun times\n\n var J0 = 0.0009;\n\n function julianCycle(d, lw) { return Math.round(d - J0 - lw / (2 * PI)); }\n\n function approxTransit(Ht, lw, n) { return J0 + (Ht + lw) / (2 * PI) + n; }\n function solarTransitJ(ds, M, L) { return J2000 + ds + 0.0053 * sin(M) - 0.0069 * sin(2 * L); }\n\n function hourAngle(h, phi, d) { return acos((sin(h) - sin(phi) * sin(d)) / (cos(phi) * cos(d))); }\n function observerAngle(height) { return -2.076 * Math.sqrt(height) / 60; }\n\n // returns set time for the given sun altitude\n function getSetJ(h, lw, phi, dec, n, M, L) {\n\n var w = hourAngle(h, phi, dec),\n a = approxTransit(w, lw, n);\n return solarTransitJ(a, M, L);\n }\n\n\n // calculates sun times for a given date, latitude/longitude, and, optionally,\n // the observer height (in meters) relative to the horizon\n\n SunCalc.getTimes = function (date, lat, lng, height) {\n\n height = height || 0;\n\n var lw = rad * -lng,\n phi = rad * lat,\n\n dh = observerAngle(height),\n\n d = toDays(date),\n n = julianCycle(d, lw),\n ds = approxTransit(0, lw, n),\n\n M = solarMeanAnomaly(ds),\n L = eclipticLongitude(M),\n dec = declination(L, 0),\n\n Jnoon = solarTransitJ(ds, M, L),\n\n i, len, time, h0, Jset, Jrise;\n\n\n var result = {\n solarNoon: fromJulian(Jnoon),\n nadir: fromJulian(Jnoon - 0.5)\n };\n\n for (i = 0, len = times.length; i < len; i += 1) {\n time = times[i];\n h0 = (time[0] + dh) * rad;\n\n Jset = getSetJ(h0, lw, phi, dec, n, M, L);\n Jrise = Jnoon - (Jset - Jnoon);\n\n result[time[1]] = fromJulian(Jrise);\n result[time[2]] = fromJulian(Jset);\n }\n\n return result;\n };\n\n\n // moon calculations, based on http://aa.quae.nl/en/reken/hemelpositie.html formulas\n\n function moonCoords(d) { // geocentric ecliptic coordinates of the moon\n\n var L = rad * (218.316 + 13.176396 * d), // ecliptic longitude\n M = rad * (134.963 + 13.064993 * d), // mean anomaly\n F = rad * (93.272 + 13.229350 * d), // mean distance\n\n l = L + rad * 6.289 * sin(M), // longitude\n b = rad * 5.128 * sin(F), // latitude\n dt = 385001 - 20905 * cos(M); // distance to the moon in km\n\n return {\n ra: rightAscension(l, b),\n dec: declination(l, b),\n dist: dt\n };\n }\n\n SunCalc.getMoonPosition = function (date, lat, lng) {\n\n var lw = rad * -lng,\n phi = rad * lat,\n d = toDays(date),\n\n c = moonCoords(d),\n H = siderealTime(d, lw) - c.ra,\n h = altitude(H, phi, c.dec),\n // formula 14.1 of \"Astronomical Algorithms\" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.\n pa = atan(sin(H), tan(phi) * cos(c.dec) - sin(c.dec) * cos(H));\n\n h = h + astroRefraction(h); // altitude correction for refraction\n\n return {\n azimuth: azimuth(H, phi, c.dec),\n altitude: h,\n distance: c.dist,\n parallacticAngle: pa\n };\n };\n\n\n // calculations for illumination parameters of the moon,\n // based on http://idlastro.gsfc.nasa.gov/ftp/pro/astro/mphase.pro formulas and\n // Chapter 48 of \"Astronomical Algorithms\" 2nd edition by Jean Meeus (Willmann-Bell, Richmond) 1998.\n\n SunCalc.getMoonIllumination = function (date) {\n\n var d = toDays(date || new Date()),\n s = sunCoords(d),\n m = moonCoords(d),\n\n sdist = 149598000, // distance from Earth to Sun in km\n\n phi = acos(sin(s.dec) * sin(m.dec) + cos(s.dec) * cos(m.dec) * cos(s.ra - m.ra)),\n inc = atan(sdist * sin(phi), m.dist - sdist * cos(phi)),\n angle = atan(cos(s.dec) * sin(s.ra - m.ra), sin(s.dec) * cos(m.dec) -\n cos(s.dec) * sin(m.dec) * cos(s.ra - m.ra));\n\n return {\n fraction: (1 + cos(inc)) / 2,\n phase: 0.5 + 0.5 * inc * (angle < 0 ? -1 : 1) / Math.PI,\n angle: angle\n };\n };\n\n\n function hoursLater(date, h) {\n return new Date(date.valueOf() + h * dayMs / 24);\n }\n\n // calculations for moon rise/set times are based on http://www.stargazing.net/kepler/moonrise.html article\n\n SunCalc.getMoonTimes = function (date, lat, lng, inUTC) {\n var t = new Date(date);\n if (inUTC) t.setUTCHours(0, 0, 0, 0);\n else t.setHours(0, 0, 0, 0);\n\n var hc = 0.133 * rad,\n h0 = SunCalc.getMoonPosition(t, lat, lng).altitude - hc,\n h1, h2, rise, set, a, b, xe, ye, d, roots, x1, x2, dx;\n\n // go in 2-hour chunks, each time seeing if a 3-point quadratic curve crosses zero (which means rise or set)\n for (var i = 1; i <= 24; i += 2) {\n h1 = SunCalc.getMoonPosition(hoursLater(t, i), lat, lng).altitude - hc;\n h2 = SunCalc.getMoonPosition(hoursLater(t, i + 1), lat, lng).altitude - hc;\n\n a = (h0 + h2) / 2 - h1;\n b = (h2 - h0) / 2;\n xe = -b / (2 * a);\n ye = (a * xe + b) * xe + h1;\n d = b * b - 4 * a * h1;\n roots = 0;\n\n if (d >= 0) {\n dx = Math.sqrt(d) / (Math.abs(a) * 2);\n x1 = xe - dx;\n x2 = xe + dx;\n if (Math.abs(x1) <= 1) roots++;\n if (Math.abs(x2) <= 1) roots++;\n if (x1 < -1) x1 = x2;\n }\n\n if (roots === 1) {\n if (h0 < 0) rise = i + x1;\n else set = i + x1;\n\n } else if (roots === 2) {\n rise = i + (ye < 0 ? x2 : x1);\n set = i + (ye < 0 ? x1 : x2);\n }\n\n if (rise && set) break;\n\n h0 = h2;\n }\n\n var result = {};\n\n if (rise) result.rise = hoursLater(t, rise);\n if (set) result.set = hoursLater(t, set);\n\n if (!rise && !set) result[ye > 0 ? 'alwaysUp' : 'alwaysDown'] = true;\n\n return result;\n };\n\n\n //// export as Node module / AMD module / browser variable\n //if (typeof exports === 'object' && typeof module !== 'undefined') module.exports = SunCalc;\n //else if (typeof define === 'function' && define.amd) define(SunCalc);\n //else window.SunCalc = SunCalc;\n module.exports = exports = SunCalc\n}());\n\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,6 +44,7 @@ export function addModelsToMap(wrapper, map, models, modelMap, onModelsLoaded) {
|
|
|
44
44
|
return new Promise((modelResolve, modelReject) => {
|
|
45
45
|
const loader = new GLTFLoader();
|
|
46
46
|
loader.load(modelUrl, gltf => {
|
|
47
|
+
var _modelMap$get$visible, _modelMap$get;
|
|
47
48
|
const model = gltf.scene;
|
|
48
49
|
model.traverse(child => {
|
|
49
50
|
if (child instanceof THREE.Mesh) {
|
|
@@ -63,12 +64,12 @@ export function addModelsToMap(wrapper, map, models, modelMap, onModelsLoaded) {
|
|
|
63
64
|
model.up.set(0, 0, 1);
|
|
64
65
|
model.rotation.set(rotation[0], rotation[1], rotation[2]);
|
|
65
66
|
model.scale.set(scale[0], scale[1], scale[2]);
|
|
66
|
-
model.visible = modelMap.get(id)
|
|
67
|
+
model.visible = (_modelMap$get$visible = (_modelMap$get = modelMap.get(id)) === null || _modelMap$get === void 0 ? void 0 : _modelMap$get.visible) !== null && _modelMap$get$visible !== void 0 ? _modelMap$get$visible : true;
|
|
67
68
|
wrapper.add(model);
|
|
68
69
|
modelMap.set(id, model);
|
|
69
70
|
modelResolve(modelMap);
|
|
70
71
|
}, undefined, error => {
|
|
71
|
-
console.error(
|
|
72
|
+
console.error("Error loading model ".concat(id, ":"), error);
|
|
72
73
|
modelReject(error);
|
|
73
74
|
});
|
|
74
75
|
});
|
|
@@ -110,7 +111,7 @@ export function toggleModelVisibility(modelMap, modelId, isVisible) {
|
|
|
110
111
|
}
|
|
111
112
|
});
|
|
112
113
|
} else if (child.isMesh) {
|
|
113
|
-
console.error(
|
|
114
|
+
console.error("GSAP Animation already running for child id ".concat(id, "!"));
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
117
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["THREE","Euler","Vector3","constants","gsap","GLTFLoader","projectToWorld","coords","projected","MERCATOR_A","DEG2RAD","PROJECTION_WORLD_SIZE","Math","log","tan","PI","push","pixelsPerMeter","projectedUnitsPerMeter","result","latitude","abs","WORLD_SIZE","cos","EARTH_CIRCUMFERENCE","unprojectFromWorld","worldUnits","unprojected","x","atan","exp","y","height","z","toDecimal","n","d","Number","toFixed","addModelsToMap","wrapper","map","models","modelMap","onModelsLoaded","Promise","resolve","reject","modelLoadPromises","_ref","id","modelUrl","rotation","scale","instanced","modelResolve","modelReject","loader","load","gltf","model","scene","traverse","child","Mesh","Array","isArray","material","forEach","mat","side","DoubleSide","needsUpdate","worldPosition","position","set","up","visible","get","add","undefined","error","console","addLayer","type","renderingMode","onAdd","all","then","res","catch","render","toggleModelVisibility","modelId","isVisible","isAnimating","isMesh","transparent","to","opacity","duration","ease","onComplete","bearingToRotation","bearing","threeRotation","rotationToBearing","quaternion","euler","setFromQuaternion","objectDirectionToBearing","object","forward","getWorldDirection","atan2"],"sources":["../../../../../../src/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.ts"],"sourcesContent":["import * as THREE from 'three';\nimport {Quaternion, Euler, Vector3, InstancedMesh, Object3D} from 'three';\nimport constants from './constants';\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\nimport { LngLatLike } from 'maplibre-gl';\nimport { Position } from 'geojson';\nimport gsap from 'gsap';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { AmbientLight, DirectionalLight } from 'three';\nimport CustomThreeJSWrapper from '../CustomThreeJsWrapper.js';\n\nexport function projectToWorld(coords: Position) {\n var projected = [\n -constants.MERCATOR_A *\n constants.DEG2RAD *\n coords[0] *\n constants.PROJECTION_WORLD_SIZE,\n -constants.MERCATOR_A *\n Math.log(Math.tan(Math.PI * 0.25 + 0.5 * constants.DEG2RAD * coords[1])) *\n constants.PROJECTION_WORLD_SIZE,\n ];\n\n if (!coords[2]) projected.push(0);\n else {\n var pixelsPerMeter = projectedUnitsPerMeter(coords[1]);\n projected.push(coords[2] * pixelsPerMeter);\n }\n\n var result = new Vector3(projected[0], projected[1], projected[2]);\n\n return result;\n}\n\nfunction projectedUnitsPerMeter(latitude: number) {\n return Math.abs(\n constants.WORLD_SIZE /\n Math.cos(constants.DEG2RAD * latitude) /\n constants.EARTH_CIRCUMFERENCE\n );\n}\n\nexport function unprojectFromWorld(worldUnits: Vector3) {\n var unprojected = [\n -worldUnits.x /\n (constants.MERCATOR_A *\n constants.DEG2RAD *\n constants.PROJECTION_WORLD_SIZE),\n (2 *\n (Math.atan(\n Math.exp(\n worldUnits.y /\n (constants.PROJECTION_WORLD_SIZE * -constants.MERCATOR_A)\n )\n ) -\n Math.PI / 4)) /\n constants.DEG2RAD,\n ];\n\n var pixelsPerMeter = projectedUnitsPerMeter(unprojected[1]);\n\n // z dimension\n var height = worldUnits.z || 0;\n unprojected.push(height / pixelsPerMeter);\n\n return unprojected as LngLatLike;\n}\n\nexport function toDecimal (n, d) {\n return Number(n.toFixed(d));\n}\n\n// RF: TO BE REMOVED. ModelLoader component can be used to load 3D models.\nexport function addModelsToMap(wrapper, map, models, modelMap, onModelsLoaded) {\n return new Promise((resolve, reject) => {\n try {\n const modelLoadPromises = models.map(({ id, modelUrl, coords, rotation, scale, instanced }) => {\n return new Promise((modelResolve, modelReject) => {\n const loader = new GLTFLoader();\n loader.load(\n modelUrl,\n (gltf) => {\n const model = gltf.scene;\n model.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n if (Array.isArray(child.material)) {\n child.material.forEach((mat) => {\n mat.side = THREE.DoubleSide;\n mat.needsUpdate = true;\n });\n } else {\n child.material.side = THREE.DoubleSide;\n child.material.needsUpdate = true;\n }\n }\n });\n \n const worldPosition = projectToWorld(coords);\n model.position.set(worldPosition.x, worldPosition.y, 0);\n model.up.set(0, 0, 1);\n model.rotation.set(rotation[0], rotation[1], rotation[2]);\n model.scale.set(scale[0], scale[1], scale[2]);\n model.visible = modelMap.get(id)?.visible ?? true;\n wrapper.add(model);\n modelMap.set(id, model);\n modelResolve(modelMap);\n },\n undefined,\n (error) => {\n console.error(`Error loading model ${id}:`, error);\n modelReject(error);\n }\n );\n });\n });\n\n map.addLayer({\n id: '3d-model-layer2',\n type: 'custom',\n renderingMode: '3d',\n onAdd: () => Promise.all(modelLoadPromises).then((res)=>{\n resolve(res);\n onModelsLoaded(true);\n }).catch(reject),\n render: () => {},\n });\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport function toggleModelVisibility(modelMap, modelId, isVisible) {\n const model = modelMap.get(modelId);\n if (!model) return;\n console.log('toggleModelVisibility_model', model);\n const isAnimating = {}; // Object to track animations\n model.traverse((child) => {\n if (child.isMesh) {\n const id = child.id; // Use unique child.id as the key\n child.material.transparent = true;\n if (!isAnimating[id]) {\n isAnimating[id] = true; // Set animation flag\n gsap.to(child.material, {\n opacity: isVisible ? 1 : 0,\n duration: 0.5, // Smooth fade animation\n ease: 'power2.inOut',\n onComplete: () => {\n isAnimating[id] = false; // Reset animation flag\n model.visible = isVisible;\n },\n });\n } else if (child.isMesh) {\n console.error(`GSAP Animation already running for child id ${id}!`);\n }\n }\n });\n if (isVisible) {\n model.visible = true;\n }\n}\n\nexport function bearingToRotation(bearing: number) {\n // Mapbox bearing is clockwise from north, Three.js rotation is counterclockwise from east\n const threeRotation = -((bearing - 90) * Math.PI / 180);\n return threeRotation;\n}\n\nexport function rotationToBearing(quaternion: Quaternion) {\n const euler = new Euler().setFromQuaternion(quaternion);\n // Convert from radians to degrees and adjust coordinate systems\n const bearing = (360 - (euler.y * 180 / Math.PI - 90)) % 360;\n return bearing;\n}\n\nexport function objectDirectionToBearing(object) {\n const forward = new Vector3();\n object.getWorldDirection(forward);\n\n // Project onto the map's X-Z plane (ignore Y)\n const bearing = Math.atan2(forward.x, forward.z) * (180 / Math.PI);\n \n return bearing;\n}"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SAAoBC,KAAK,EAAEC,OAAO,QAAgC,OAAO;AAAC,OACnEC,SAAS;AAIhB,OAAOC,IAAI,MAAM,MAAM;AACvB,SAASC,UAAU,QAAQ,uCAAuC;AAIlE,OAAO,SAASC,cAAcA,CAACC,MAAgB,EAAE;EAC/C,IAAIC,SAAS,GAAG,CACd,CAACL,SAAS,CAACM,UAAU,GACnBN,SAAS,CAACO,OAAO,GACjBH,MAAM,CAAC,CAAC,CAAC,GACTJ,SAAS,CAACQ,qBAAqB,EACjC,CAACR,SAAS,CAACM,UAAU,GACnBG,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACF,IAAI,CAACG,EAAE,GAAG,IAAI,GAAG,GAAG,GAAGZ,SAAS,CAACO,OAAO,GAAGH,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GACxEJ,SAAS,CAACQ,qBAAqB,CAClC;EAED,IAAI,CAACJ,MAAM,CAAC,CAAC,CAAC,EAAEC,SAAS,CAACQ,IAAI,CAAC,CAAC,CAAC,CAAC,KAC7B;IACH,IAAIC,cAAc,GAAGC,sBAAsB,CAACX,MAAM,CAAC,CAAC,CAAC,CAAC;IACtDC,SAAS,CAACQ,IAAI,CAACT,MAAM,CAAC,CAAC,CAAC,GAAGU,cAAc,CAAC;EAC5C;EAEA,IAAIE,MAAM,GAAG,IAAIjB,OAAO,CAACM,SAAS,CAAC,CAAC,CAAC,EAAEA,SAAS,CAAC,CAAC,CAAC,EAAEA,SAAS,CAAC,CAAC,CAAC,CAAC;EAElE,OAAOW,MAAM;AACf;AAEA,SAASD,sBAAsBA,CAACE,QAAgB,EAAE;EAChD,OAAOR,IAAI,CAACS,GAAG,CACblB,SAAS,CAACmB,UAAU,GAClBV,IAAI,CAACW,GAAG,CAACpB,SAAS,CAACO,OAAO,GAAGU,QAAQ,CAAC,GACtCjB,SAAS,CAACqB,mBACd,CAAC;AACH;AAEA,OAAO,SAASC,kBAAkBA,CAACC,UAAmB,EAAE;EACtD,IAAIC,WAAW,GAAG,CAChB,CAACD,UAAU,CAACE,CAAC,IACVzB,SAAS,CAACM,UAAU,GACnBN,SAAS,CAACO,OAAO,GACjBP,SAAS,CAACQ,qBAAqB,CAAC,EACnC,CAAC,IACCC,IAAI,CAACiB,IAAI,CACRjB,IAAI,CAACkB,GAAG,CACNJ,UAAU,CAACK,CAAC,IACT5B,SAAS,CAACQ,qBAAqB,GAAG,CAACR,SAAS,CAACM,UAAU,CAC5D,CACF,CAAC,GACCG,IAAI,CAACG,EAAE,GAAG,CAAC,CAAC,GACdZ,SAAS,CAACO,OAAO,CACpB;EAED,IAAIO,cAAc,GAAGC,sBAAsB,CAACS,WAAW,CAAC,CAAC,CAAC,CAAC;;EAE3D;EACA,IAAIK,MAAM,GAAGN,UAAU,CAACO,CAAC,IAAI,CAAC;EAC9BN,WAAW,CAACX,IAAI,CAACgB,MAAM,GAAGf,cAAc,CAAC;EAEzC,OAAOU,WAAW;AACpB;AAEA,OAAO,SAASO,SAASA,CAAEC,CAAC,EAAEC,CAAC,EAAE;EAC/B,OAAOC,MAAM,CAACF,CAAC,CAACG,OAAO,CAACF,CAAC,CAAC,CAAC;AAC7B;;AAEA;AACA,OAAO,SAASG,cAAcA,CAACC,OAAO,EAAEC,GAAG,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,cAAc,EAAE;EAC7E,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAI;MACF,MAAMC,iBAAiB,GAAGN,MAAM,CAACD,GAAG,CAACQ,IAAA,IAA0D;QAAA,IAAzD;UAAEC,EAAE;UAAEC,QAAQ;UAAE5C,MAAM;UAAE6C,QAAQ;UAAEC,KAAK;UAAEC;QAAU,CAAC,GAAAL,IAAA;QACxF,OAAO,IAAIJ,OAAO,CAAC,CAACU,YAAY,EAAEC,WAAW,KAAK;UAChD,MAAMC,MAAM,GAAG,IAAIpD,UAAU,CAAC,CAAC;UAC/BoD,MAAM,CAACC,IAAI,CACTP,QAAQ,EACPQ,IAAI,IAAK;YACR,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK;YACxBD,KAAK,CAACE,QAAQ,CAAEC,KAAK,IAAK;cACxB,IAAIA,KAAK,YAAY/D,KAAK,CAACgE,IAAI,EAAE;gBAC/B,IAAIC,KAAK,CAACC,OAAO,CAACH,KAAK,CAACI,QAAQ,CAAC,EAAE;kBACjCJ,KAAK,CAACI,QAAQ,CAACC,OAAO,CAAEC,GAAG,IAAK;oBAC9BA,GAAG,CAACC,IAAI,GAAGtE,KAAK,CAACuE,UAAU;oBAC3BF,GAAG,CAACG,WAAW,GAAG,IAAI;kBACxB,CAAC,CAAC;gBACJ,CAAC,MAAM;kBACLT,KAAK,CAACI,QAAQ,CAACG,IAAI,GAAGtE,KAAK,CAACuE,UAAU;kBACtCR,KAAK,CAACI,QAAQ,CAACK,WAAW,GAAG,IAAI;gBACnC;cACF;YACF,CAAC,CAAC;YAEF,MAAMC,aAAa,GAAGnE,cAAc,CAACC,MAAM,CAAC;YAC5CqD,KAAK,CAACc,QAAQ,CAACC,GAAG,CAACF,aAAa,CAAC7C,CAAC,EAAE6C,aAAa,CAAC1C,CAAC,EAAE,CAAC,CAAC;YACvD6B,KAAK,CAACgB,EAAE,CAACD,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrBf,KAAK,CAACR,QAAQ,CAACuB,GAAG,CAACvB,QAAQ,CAAC,CAAC,CAAC,EAAEA,QAAQ,CAAC,CAAC,CAAC,EAAEA,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzDQ,KAAK,CAACP,KAAK,CAACsB,GAAG,CAACtB,KAAK,CAAC,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC,CAAC,EAAEA,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7CO,KAAK,CAACiB,OAAO,GAAGlC,QAAQ,CAACmC,GAAG,CAAC5B,EAAE,CAAC,EAAE2B,OAAO,IAAI,IAAI;YACjDrC,OAAO,CAACuC,GAAG,CAACnB,KAAK,CAAC;YAClBjB,QAAQ,CAACgC,GAAG,CAACzB,EAAE,EAAEU,KAAK,CAAC;YACvBL,YAAY,CAACZ,QAAQ,CAAC;UACxB,CAAC,EACDqC,SAAS,EACRC,KAAK,IAAK;YACTC,OAAO,CAACD,KAAK,CAAC,uBAAuB/B,EAAE,GAAG,EAAE+B,KAAK,CAAC;YAClDzB,WAAW,CAACyB,KAAK,CAAC;UACpB,CACF,CAAC;QACH,CAAC,CAAC;MACJ,CAAC,CAAC;MAEFxC,GAAG,CAAC0C,QAAQ,CAAC;QACXjC,EAAE,EAAE,iBAAiB;QACrBkC,IAAI,EAAE,QAAQ;QACdC,aAAa,EAAE,IAAI;QACnBC,KAAK,EAAEA,CAAA,KAAMzC,OAAO,CAAC0C,GAAG,CAACvC,iBAAiB,CAAC,CAACwC,IAAI,CAAEC,GAAG,IAAG;UACtD3C,OAAO,CAAC2C,GAAG,CAAC;UACZ7C,cAAc,CAAC,IAAI,CAAC;QACtB,CAAC,CAAC,CAAC8C,KAAK,CAAC3C,MAAM,CAAC;QAChB4C,MAAM,EAAEA,CAAA,KAAM,CAAC;MACjB,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOV,KAAK,EAAE;MACdlC,MAAM,CAACkC,KAAK,CAAC;IACf;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAASW,qBAAqBA,CAACjD,QAAQ,EAAEkD,OAAO,EAAEC,SAAS,EAAE;EAClE,MAAMlC,KAAK,GAAGjB,QAAQ,CAACmC,GAAG,CAACe,OAAO,CAAC;EACnC,IAAI,CAACjC,KAAK,EAAE;EACZsB,OAAO,CAACrE,GAAG,CAAC,6BAA6B,EAAE+C,KAAK,CAAC;EACjD,MAAMmC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;EACxBnC,KAAK,CAACE,QAAQ,CAAEC,KAAK,IAAK;IACxB,IAAIA,KAAK,CAACiC,MAAM,EAAE;MAChB,MAAM9C,EAAE,GAAGa,KAAK,CAACb,EAAE,CAAC,CAAC;MACrBa,KAAK,CAACI,QAAQ,CAAC8B,WAAW,GAAG,IAAI;MACjC,IAAI,CAACF,WAAW,CAAC7C,EAAE,CAAC,EAAE;QACpB6C,WAAW,CAAC7C,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB9C,IAAI,CAAC8F,EAAE,CAACnC,KAAK,CAACI,QAAQ,EAAE;UACtBgC,OAAO,EAAEL,SAAS,GAAG,CAAC,GAAG,CAAC;UAC1BM,QAAQ,EAAE,GAAG;UAAE;UACfC,IAAI,EAAE,cAAc;UACpBC,UAAU,EAAEA,CAAA,KAAM;YAChBP,WAAW,CAAC7C,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YACzBU,KAAK,CAACiB,OAAO,GAAGiB,SAAS;UAC3B;QACF,CAAC,CAAC;MACJ,CAAC,MAAM,IAAI/B,KAAK,CAACiC,MAAM,EAAE;QACvBd,OAAO,CAACD,KAAK,CAAC,+CAA+C/B,EAAE,GAAG,CAAC;MACrE;IACF;EACF,CAAC,CAAC;EACF,IAAI4C,SAAS,EAAE;IACblC,KAAK,CAACiB,OAAO,GAAG,IAAI;EACtB;AACF;AAEA,OAAO,SAAS0B,iBAAiBA,CAACC,OAAe,EAAE;EACjD;EACA,MAAMC,aAAa,GAAG,EAAE,CAACD,OAAO,GAAG,EAAE,IAAI5F,IAAI,CAACG,EAAE,GAAG,GAAG,CAAC;EACvD,OAAO0F,aAAa;AACtB;AAEA,OAAO,SAASC,iBAAiBA,CAACC,UAAsB,EAAE;EACxD,MAAMC,KAAK,GAAG,IAAI3G,KAAK,CAAC,CAAC,CAAC4G,iBAAiB,CAACF,UAAU,CAAC;EACvD;EACA,MAAMH,OAAO,GAAG,CAAC,GAAG,IAAII,KAAK,CAAC7E,CAAC,GAAG,GAAG,GAAGnB,IAAI,CAACG,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG;EAC5D,OAAOyF,OAAO;AAChB;AAEA,OAAO,SAASM,wBAAwBA,CAACC,MAAM,EAAE;EAC/C,MAAMC,OAAO,GAAG,IAAI9G,OAAO,CAAC,CAAC;EAC7B6G,MAAM,CAACE,iBAAiB,CAACD,OAAO,CAAC;;EAEjC;EACA,MAAMR,OAAO,GAAG5F,IAAI,CAACsG,KAAK,CAACF,OAAO,CAACpF,CAAC,EAAEoF,OAAO,CAAC/E,CAAC,CAAC,IAAI,GAAG,GAAGrB,IAAI,CAACG,EAAE,CAAC;EAElE,OAAOyF,OAAO;AAChB","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["THREE","Euler","Vector3","constants","gsap","GLTFLoader","projectToWorld","coords","projected","MERCATOR_A","DEG2RAD","PROJECTION_WORLD_SIZE","Math","log","tan","PI","push","pixelsPerMeter","projectedUnitsPerMeter","result","latitude","abs","WORLD_SIZE","cos","EARTH_CIRCUMFERENCE","unprojectFromWorld","worldUnits","unprojected","x","atan","exp","y","height","z","toDecimal","n","d","Number","toFixed","addModelsToMap","wrapper","map","models","modelMap","onModelsLoaded","Promise","resolve","reject","modelLoadPromises","_ref","id","modelUrl","rotation","scale","instanced","modelResolve","modelReject","loader","load","gltf","_modelMap$get$visible","_modelMap$get","model","scene","traverse","child","Mesh","Array","isArray","material","forEach","mat","side","DoubleSide","needsUpdate","worldPosition","position","set","up","visible","get","add","undefined","error","console","concat","addLayer","type","renderingMode","onAdd","all","then","res","catch","render","toggleModelVisibility","modelId","isVisible","isAnimating","isMesh","transparent","to","opacity","duration","ease","onComplete","bearingToRotation","bearing","threeRotation","rotationToBearing","quaternion","euler","setFromQuaternion","objectDirectionToBearing","object","forward","getWorldDirection","atan2"],"sources":["../../../../../../src/meta-atlas-sdk/3DMap/CustomThreeJsWrapper/utility/utils.ts"],"sourcesContent":["import * as THREE from 'three';\nimport {Quaternion, Euler, Vector3, InstancedMesh, Object3D} from 'three';\nimport constants from './constants';\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\nimport { LngLatLike } from 'maplibre-gl';\nimport { Position } from 'geojson';\nimport gsap from 'gsap';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { AmbientLight, DirectionalLight } from 'three';\nimport CustomThreeJSWrapper from '../CustomThreeJsWrapper.js';\n\nexport function projectToWorld(coords: Position) {\n var projected = [\n -constants.MERCATOR_A *\n constants.DEG2RAD *\n coords[0] *\n constants.PROJECTION_WORLD_SIZE,\n -constants.MERCATOR_A *\n Math.log(Math.tan(Math.PI * 0.25 + 0.5 * constants.DEG2RAD * coords[1])) *\n constants.PROJECTION_WORLD_SIZE,\n ];\n\n if (!coords[2]) projected.push(0);\n else {\n var pixelsPerMeter = projectedUnitsPerMeter(coords[1]);\n projected.push(coords[2] * pixelsPerMeter);\n }\n\n var result = new Vector3(projected[0], projected[1], projected[2]);\n\n return result;\n}\n\nfunction projectedUnitsPerMeter(latitude: number) {\n return Math.abs(\n constants.WORLD_SIZE /\n Math.cos(constants.DEG2RAD * latitude) /\n constants.EARTH_CIRCUMFERENCE\n );\n}\n\nexport function unprojectFromWorld(worldUnits: Vector3) {\n var unprojected = [\n -worldUnits.x /\n (constants.MERCATOR_A *\n constants.DEG2RAD *\n constants.PROJECTION_WORLD_SIZE),\n (2 *\n (Math.atan(\n Math.exp(\n worldUnits.y /\n (constants.PROJECTION_WORLD_SIZE * -constants.MERCATOR_A)\n )\n ) -\n Math.PI / 4)) /\n constants.DEG2RAD,\n ];\n\n var pixelsPerMeter = projectedUnitsPerMeter(unprojected[1]);\n\n // z dimension\n var height = worldUnits.z || 0;\n unprojected.push(height / pixelsPerMeter);\n\n return unprojected as LngLatLike;\n}\n\nexport function toDecimal (n, d) {\n return Number(n.toFixed(d));\n}\n\n// RF: TO BE REMOVED. ModelLoader component can be used to load 3D models.\nexport function addModelsToMap(wrapper, map, models, modelMap, onModelsLoaded) {\n return new Promise((resolve, reject) => {\n try {\n const modelLoadPromises = models.map(({ id, modelUrl, coords, rotation, scale, instanced }) => {\n return new Promise((modelResolve, modelReject) => {\n const loader = new GLTFLoader();\n loader.load(\n modelUrl,\n (gltf) => {\n const model = gltf.scene;\n model.traverse((child) => {\n if (child instanceof THREE.Mesh) {\n if (Array.isArray(child.material)) {\n child.material.forEach((mat) => {\n mat.side = THREE.DoubleSide;\n mat.needsUpdate = true;\n });\n } else {\n child.material.side = THREE.DoubleSide;\n child.material.needsUpdate = true;\n }\n }\n });\n \n const worldPosition = projectToWorld(coords);\n model.position.set(worldPosition.x, worldPosition.y, 0);\n model.up.set(0, 0, 1);\n model.rotation.set(rotation[0], rotation[1], rotation[2]);\n model.scale.set(scale[0], scale[1], scale[2]);\n model.visible = modelMap.get(id)?.visible ?? true;\n wrapper.add(model);\n modelMap.set(id, model);\n modelResolve(modelMap);\n },\n undefined,\n (error) => {\n console.error(`Error loading model ${id}:`, error);\n modelReject(error);\n }\n );\n });\n });\n\n map.addLayer({\n id: '3d-model-layer2',\n type: 'custom',\n renderingMode: '3d',\n onAdd: () => Promise.all(modelLoadPromises).then((res)=>{\n resolve(res);\n onModelsLoaded(true);\n }).catch(reject),\n render: () => {},\n });\n } catch (error) {\n reject(error);\n }\n });\n}\n\nexport function toggleModelVisibility(modelMap, modelId, isVisible) {\n const model = modelMap.get(modelId);\n if (!model) return;\n console.log('toggleModelVisibility_model', model);\n const isAnimating = {}; // Object to track animations\n model.traverse((child) => {\n if (child.isMesh) {\n const id = child.id; // Use unique child.id as the key\n child.material.transparent = true;\n if (!isAnimating[id]) {\n isAnimating[id] = true; // Set animation flag\n gsap.to(child.material, {\n opacity: isVisible ? 1 : 0,\n duration: 0.5, // Smooth fade animation\n ease: 'power2.inOut',\n onComplete: () => {\n isAnimating[id] = false; // Reset animation flag\n model.visible = isVisible;\n },\n });\n } else if (child.isMesh) {\n console.error(`GSAP Animation already running for child id ${id}!`);\n }\n }\n });\n if (isVisible) {\n model.visible = true;\n }\n}\n\nexport function bearingToRotation(bearing: number) {\n // Mapbox bearing is clockwise from north, Three.js rotation is counterclockwise from east\n const threeRotation = -((bearing - 90) * Math.PI / 180);\n return threeRotation;\n}\n\nexport function rotationToBearing(quaternion: Quaternion) {\n const euler = new Euler().setFromQuaternion(quaternion);\n // Convert from radians to degrees and adjust coordinate systems\n const bearing = (360 - (euler.y * 180 / Math.PI - 90)) % 360;\n return bearing;\n}\n\nexport function objectDirectionToBearing(object) {\n const forward = new Vector3();\n object.getWorldDirection(forward);\n\n // Project onto the map's X-Z plane (ignore Y)\n const bearing = Math.atan2(forward.x, forward.z) * (180 / Math.PI);\n \n return bearing;\n}"],"mappings":"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","ignoreList":[]}
|