astro-viewer 1.3.0
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/README.md +373 -0
- package/dist/astroviewer.cjs +13941 -0
- package/dist/astroviewer.cjs.map +1 -0
- package/dist/astroviewer.js +2 -0
- package/dist/astroviewer.js.map +1 -0
- package/dist/astroviewer.min.js +2 -0
- package/dist/astroviewer.min.js.map +1 -0
- package/lib-esm/AstroSphere.d.ts +114 -0
- package/lib-esm/AstroSphere.d.ts.map +1 -0
- package/lib-esm/AstroSphere.js +679 -0
- package/lib-esm/AstroSphere.js.map +1 -0
- package/lib-esm/AstroViewer.d.ts +81 -0
- package/lib-esm/AstroViewer.d.ts.map +1 -0
- package/lib-esm/AstroViewer.js +348 -0
- package/lib-esm/AstroViewer.js.map +1 -0
- package/lib-esm/Camera.d.ts +74 -0
- package/lib-esm/Camera.d.ts.map +1 -0
- package/lib-esm/Camera.js +334 -0
- package/lib-esm/Camera.js.map +1 -0
- package/lib-esm/Config.d.ts +20 -0
- package/lib-esm/Config.d.ts.map +1 -0
- package/lib-esm/Config.js +32 -0
- package/lib-esm/Config.js.map +1 -0
- package/lib-esm/Global.d.ts +27 -0
- package/lib-esm/Global.d.ts.map +1 -0
- package/lib-esm/Global.js +52 -0
- package/lib-esm/Global.js.map +1 -0
- package/lib-esm/index.d.ts +17 -0
- package/lib-esm/index.d.ts.map +1 -0
- package/lib-esm/index.js +16 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/model/AbstractSkyEntity.d.ts +55 -0
- package/lib-esm/model/AbstractSkyEntity.d.ts.map +1 -0
- package/lib-esm/model/AbstractSkyEntity.js +153 -0
- package/lib-esm/model/AbstractSkyEntity.js.map +1 -0
- package/lib-esm/model/AstroGL.d.ts +11 -0
- package/lib-esm/model/AstroGL.d.ts.map +1 -0
- package/lib-esm/model/AstroGL.js +2 -0
- package/lib-esm/model/AstroGL.js.map +1 -0
- package/lib-esm/model/ColorMaps.d.ts +17 -0
- package/lib-esm/model/ColorMaps.d.ts.map +1 -0
- package/lib-esm/model/ColorMaps.js +1288 -0
- package/lib-esm/model/ColorMaps.js.map +1 -0
- package/lib-esm/model/FoV.d.ts +63 -0
- package/lib-esm/model/FoV.d.ts.map +1 -0
- package/lib-esm/model/FoV.js +275 -0
- package/lib-esm/model/FoV.js.map +1 -0
- package/lib-esm/model/MetadataColumn.d.ts +50 -0
- package/lib-esm/model/MetadataColumn.d.ts.map +1 -0
- package/lib-esm/model/MetadataColumn.js +95 -0
- package/lib-esm/model/MetadataColumn.js.map +1 -0
- package/lib-esm/model/MetadataManager.d.ts +43 -0
- package/lib-esm/model/MetadataManager.d.ts.map +1 -0
- package/lib-esm/model/MetadataManager.js +117 -0
- package/lib-esm/model/MetadataManager.js.map +1 -0
- package/lib-esm/model/Point.d.ts +53 -0
- package/lib-esm/model/Point.d.ts.map +1 -0
- package/lib-esm/model/Point.js +133 -0
- package/lib-esm/model/Point.js.map +1 -0
- package/lib-esm/model/Point2D.d.ts +9 -0
- package/lib-esm/model/Point2D.d.ts.map +1 -0
- package/lib-esm/model/Point2D.js +16 -0
- package/lib-esm/model/Point2D.js.map +1 -0
- package/lib-esm/model/Source.d.ts +34 -0
- package/lib-esm/model/Source.d.ts.map +1 -0
- package/lib-esm/model/Source.js +63 -0
- package/lib-esm/model/Source.js.map +1 -0
- package/lib-esm/model/catalogues/CatalogueGL.d.ts +91 -0
- package/lib-esm/model/catalogues/CatalogueGL.d.ts.map +1 -0
- package/lib-esm/model/catalogues/CatalogueGL.js +614 -0
- package/lib-esm/model/catalogues/CatalogueGL.js.map +1 -0
- package/lib-esm/model/catalogues/CatalogueProps.d.ts +2 -0
- package/lib-esm/model/catalogues/CatalogueProps.d.ts.map +1 -0
- package/lib-esm/model/catalogues/CatalogueProps.js +156 -0
- package/lib-esm/model/catalogues/CatalogueProps.js.map +1 -0
- package/lib-esm/model/footprints/Footprint.d.ts +44 -0
- package/lib-esm/model/footprints/Footprint.d.ts.map +1 -0
- package/lib-esm/model/footprints/Footprint.js +104 -0
- package/lib-esm/model/footprints/Footprint.js.map +1 -0
- package/lib-esm/model/footprints/FootprintProps.d.ts +2 -0
- package/lib-esm/model/footprints/FootprintProps.d.ts.map +1 -0
- package/lib-esm/model/footprints/FootprintProps.js +87 -0
- package/lib-esm/model/footprints/FootprintProps.js.map +1 -0
- package/lib-esm/model/footprints/FootprintSetGL.d.ts +106 -0
- package/lib-esm/model/footprints/FootprintSetGL.d.ts.map +1 -0
- package/lib-esm/model/footprints/FootprintSetGL.js +592 -0
- package/lib-esm/model/footprints/FootprintSetGL.js.map +1 -0
- package/lib-esm/model/grid/EquatorialGrid.d.ts +49 -0
- package/lib-esm/model/grid/EquatorialGrid.d.ts.map +1 -0
- package/lib-esm/model/grid/EquatorialGrid.js +302 -0
- package/lib-esm/model/grid/EquatorialGrid.js.map +1 -0
- package/lib-esm/model/grid/GridTextHelper.d.ts +26 -0
- package/lib-esm/model/grid/GridTextHelper.d.ts.map +1 -0
- package/lib-esm/model/grid/GridTextHelper.js +92 -0
- package/lib-esm/model/grid/GridTextHelper.js.map +1 -0
- package/lib-esm/model/grid/HealpixGrid.d.ts +49 -0
- package/lib-esm/model/grid/HealpixGrid.d.ts.map +1 -0
- package/lib-esm/model/grid/HealpixGrid.js +306 -0
- package/lib-esm/model/grid/HealpixGrid.js.map +1 -0
- package/lib-esm/model/hips/AllSky.d.ts +40 -0
- package/lib-esm/model/hips/AllSky.d.ts.map +1 -0
- package/lib-esm/model/hips/AllSky.js +232 -0
- package/lib-esm/model/hips/AllSky.js.map +1 -0
- package/lib-esm/model/hips/AncestorTile.d.ts +38 -0
- package/lib-esm/model/hips/AncestorTile.d.ts.map +1 -0
- package/lib-esm/model/hips/AncestorTile.js +248 -0
- package/lib-esm/model/hips/AncestorTile.js.map +1 -0
- package/lib-esm/model/hips/FoVHelper.d.ts +11 -0
- package/lib-esm/model/hips/FoVHelper.d.ts.map +1 -0
- package/lib-esm/model/hips/FoVHelper.js +107 -0
- package/lib-esm/model/hips/FoVHelper.js.map +1 -0
- package/lib-esm/model/hips/HiPS.d.ts +47 -0
- package/lib-esm/model/hips/HiPS.d.ts.map +1 -0
- package/lib-esm/model/hips/HiPS.js +222 -0
- package/lib-esm/model/hips/HiPS.js.map +1 -0
- package/lib-esm/model/hips/HiPSDescriptor.d.ts +37 -0
- package/lib-esm/model/hips/HiPSDescriptor.d.ts.map +1 -0
- package/lib-esm/model/hips/HiPSDescriptor.js +132 -0
- package/lib-esm/model/hips/HiPSDescriptor.js.map +1 -0
- package/lib-esm/model/hips/Tile.d.ts +51 -0
- package/lib-esm/model/hips/Tile.d.ts.map +1 -0
- package/lib-esm/model/hips/Tile.js +355 -0
- package/lib-esm/model/hips/Tile.js.map +1 -0
- package/lib-esm/model/hips/TileBuffer.d.ts +39 -0
- package/lib-esm/model/hips/TileBuffer.d.ts.map +1 -0
- package/lib-esm/model/hips/TileBuffer.js +148 -0
- package/lib-esm/model/hips/TileBuffer.js.map +1 -0
- package/lib-esm/model/hips/VisibleTilesManager.d.ts +35 -0
- package/lib-esm/model/hips/VisibleTilesManager.d.ts.map +1 -0
- package/lib-esm/model/hips/VisibleTilesManager.js +160 -0
- package/lib-esm/model/hips/VisibleTilesManager.js.map +1 -0
- package/lib-esm/model/tap/TapMetadata.d.ts +31 -0
- package/lib-esm/model/tap/TapMetadata.d.ts.map +1 -0
- package/lib-esm/model/tap/TapMetadata.js +55 -0
- package/lib-esm/model/tap/TapMetadata.js.map +1 -0
- package/lib-esm/model/tap/TapMetadataList.d.ts +23 -0
- package/lib-esm/model/tap/TapMetadataList.d.ts.map +1 -0
- package/lib-esm/model/tap/TapMetadataList.js +58 -0
- package/lib-esm/model/tap/TapMetadataList.js.map +1 -0
- package/lib-esm/model/tap/TapRepo.d.ts +27 -0
- package/lib-esm/model/tap/TapRepo.d.ts.map +1 -0
- package/lib-esm/model/tap/TapRepo.js +51 -0
- package/lib-esm/model/tap/TapRepo.js.map +1 -0
- package/lib-esm/services/SesameService.d.ts +14 -0
- package/lib-esm/services/SesameService.d.ts.map +1 -0
- package/lib-esm/services/SesameService.js +54 -0
- package/lib-esm/services/SesameService.js.map +1 -0
- package/lib-esm/services/helpers.d.ts +5 -0
- package/lib-esm/services/helpers.d.ts.map +1 -0
- package/lib-esm/services/helpers.js +16 -0
- package/lib-esm/services/helpers.js.map +1 -0
- package/lib-esm/services/hipsNodeService.d.ts +7 -0
- package/lib-esm/services/hipsNodeService.d.ts.map +1 -0
- package/lib-esm/services/hipsNodeService.js +65 -0
- package/lib-esm/services/hipsNodeService.js.map +1 -0
- package/lib-esm/services/parse-hipslist.d.ts +3 -0
- package/lib-esm/services/parse-hipslist.d.ts.map +1 -0
- package/lib-esm/services/parse-hipslist.js +25 -0
- package/lib-esm/services/parse-hipslist.js.map +1 -0
- package/lib-esm/services/queryCatalogueByFoV.d.ts +2 -0
- package/lib-esm/services/queryCatalogueByFoV.d.ts.map +1 -0
- package/lib-esm/services/queryCatalogueByFoV.js +56 -0
- package/lib-esm/services/queryCatalogueByFoV.js.map +1 -0
- package/lib-esm/services/queryFootprintSetByFov.d.ts +2 -0
- package/lib-esm/services/queryFootprintSetByFov.d.ts.map +1 -0
- package/lib-esm/services/queryFootprintSetByFov.js +128 -0
- package/lib-esm/services/queryFootprintSetByFov.js.map +1 -0
- package/lib-esm/services/tapRepoService.d.ts +2 -0
- package/lib-esm/services/tapRepoService.d.ts.map +1 -0
- package/lib-esm/services/tapRepoService.js +190 -0
- package/lib-esm/services/tapRepoService.js.map +1 -0
- package/lib-esm/services/types.d.ts +13 -0
- package/lib-esm/services/types.d.ts.map +1 -0
- package/lib-esm/services/types.js +2 -0
- package/lib-esm/services/types.js.map +1 -0
- package/lib-esm/shader/CatalogueShaderProgram.d.ts +35 -0
- package/lib-esm/shader/CatalogueShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/CatalogueShaderProgram.js +94 -0
- package/lib-esm/shader/CatalogueShaderProgram.js.map +1 -0
- package/lib-esm/shader/FootprintShaderProgram.d.ts +31 -0
- package/lib-esm/shader/FootprintShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/FootprintShaderProgram.js +86 -0
- package/lib-esm/shader/FootprintShaderProgram.js.map +1 -0
- package/lib-esm/shader/GridShaderManager.d.ts +6 -0
- package/lib-esm/shader/GridShaderManager.d.ts.map +1 -0
- package/lib-esm/shader/GridShaderManager.js +29 -0
- package/lib-esm/shader/GridShaderManager.js.map +1 -0
- package/lib-esm/shader/HiPSShaderProgram.d.ts +54 -0
- package/lib-esm/shader/HiPSShaderProgram.d.ts.map +1 -0
- package/lib-esm/shader/HiPSShaderProgram.js +257 -0
- package/lib-esm/shader/HiPSShaderProgram.js.map +1 -0
- package/lib-esm/shader/ShaderManager.d.ts +12 -0
- package/lib-esm/shader/ShaderManager.d.ts.map +1 -0
- package/lib-esm/shader/ShaderManager.js +344 -0
- package/lib-esm/shader/ShaderManager.js.map +1 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts +12 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts.map +1 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.js +750 -0
- package/lib-esm/shader/ShaderManagerMutliHiPS.js.map +1 -0
- package/lib-esm/utils/CoordsType.d.ts +10 -0
- package/lib-esm/utils/CoordsType.d.ts.map +1 -0
- package/lib-esm/utils/CoordsType.js +12 -0
- package/lib-esm/utils/CoordsType.js.map +1 -0
- package/lib-esm/utils/FoVUtils.d.ts +46 -0
- package/lib-esm/utils/FoVUtils.d.ts.map +1 -0
- package/lib-esm/utils/FoVUtils.js +217 -0
- package/lib-esm/utils/FoVUtils.js.map +1 -0
- package/lib-esm/utils/GeomUtils.d.ts +36 -0
- package/lib-esm/utils/GeomUtils.d.ts.map +1 -0
- package/lib-esm/utils/GeomUtils.js +267 -0
- package/lib-esm/utils/GeomUtils.js.map +1 -0
- package/lib-esm/utils/MouseHelper.d.ts +36 -0
- package/lib-esm/utils/MouseHelper.d.ts.map +1 -0
- package/lib-esm/utils/MouseHelper.js +94 -0
- package/lib-esm/utils/MouseHelper.js.map +1 -0
- package/lib-esm/utils/PerspectiveMatrixManager.d.ts +11 -0
- package/lib-esm/utils/PerspectiveMatrixManager.d.ts.map +1 -0
- package/lib-esm/utils/PerspectiveMatrixManager.js +37 -0
- package/lib-esm/utils/PerspectiveMatrixManager.js.map +1 -0
- package/lib-esm/utils/RayPickingUtils.d.ts +30 -0
- package/lib-esm/utils/RayPickingUtils.d.ts.map +1 -0
- package/lib-esm/utils/RayPickingUtils.js +112 -0
- package/lib-esm/utils/RayPickingUtils.js.map +1 -0
- package/lib-esm/utils/STCSParser.d.ts +16 -0
- package/lib-esm/utils/STCSParser.d.ts.map +1 -0
- package/lib-esm/utils/STCSParser.js +96 -0
- package/lib-esm/utils/STCSParser.js.map +1 -0
- package/lib-esm/utils/ShaderUtility.d.ts +2 -0
- package/lib-esm/utils/ShaderUtility.d.ts.map +1 -0
- package/lib-esm/utils/ShaderUtility.js +23 -0
- package/lib-esm/utils/ShaderUtility.js.map +1 -0
- package/lib-esm/utils/Utils.d.ts +32 -0
- package/lib-esm/utils/Utils.d.ts.map +1 -0
- package/lib-esm/utils/Utils.js +77 -0
- package/lib-esm/utils/Utils.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* FoV singleton (TypeScript)
|
|
4
|
+
* - Uses computePerspectiveMatrixSingleton.pMatrix
|
|
5
|
+
* - Guards acos domain (numeric safety)
|
|
6
|
+
* - Uses vec3.transformMat4 instead of custom mat4*vec3
|
|
7
|
+
* - Keeps original “insideSphere ? 360 - angle : angle” behavior
|
|
8
|
+
*/
|
|
9
|
+
import { vec3, mat4 } from 'gl-matrix';
|
|
10
|
+
import RayPickingUtils from '../utils/RayPickingUtils.js';
|
|
11
|
+
import { radToDeg } from '../utils/Utils.js';
|
|
12
|
+
export class FoV {
|
|
13
|
+
static MIN_FOV_DEG = 1e-6;
|
|
14
|
+
fovXDeg = 180;
|
|
15
|
+
fovYDeg = 180;
|
|
16
|
+
ratio = +0;
|
|
17
|
+
_minFoV = 180;
|
|
18
|
+
_webgl;
|
|
19
|
+
constructor(webgl) {
|
|
20
|
+
this._webgl = webgl;
|
|
21
|
+
}
|
|
22
|
+
/** Recomputes FoV for current camera + projection */
|
|
23
|
+
getFoV(insideSphere, healpixGridSingleton, camera, pMatrix) {
|
|
24
|
+
// const gl = webgl
|
|
25
|
+
const gl = this._webgl;
|
|
26
|
+
if (!gl || !gl.canvas) {
|
|
27
|
+
// Handle the error or assign default values
|
|
28
|
+
this.fovXDeg = 180;
|
|
29
|
+
this.fovYDeg = 180;
|
|
30
|
+
this._minFoV = this.minFoV;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
// horizontal FoV: ray through (centerY)
|
|
34
|
+
// const xFoVComputed = this.computeAngle(0, gl.canvas.height / 2, insideSphere, healpixGridSingleton, camera)
|
|
35
|
+
const canvas = gl.canvas;
|
|
36
|
+
const rect = canvas.getBoundingClientRect();
|
|
37
|
+
const canvasWidth = rect.width;
|
|
38
|
+
const canvasHeight = rect.height;
|
|
39
|
+
// const xFoVComputed = this.computeAngle(0, gl.canvas.height / 2, insideSphere, healpixGridSingleton, camera, pMatrix)
|
|
40
|
+
const xFoVComputed = this.computeAngle(0, canvasHeight / 2, insideSphere, healpixGridSingleton, camera, pMatrix);
|
|
41
|
+
this.fovXDeg = xFoVComputed.angleDeg;
|
|
42
|
+
// vertical FoV: ray through (centerX)
|
|
43
|
+
// const yFoVComputed = this.computeAngle(gl.canvas.width / 2, 0, insideSphere, healpixGridSingleton, camera, pMatrix)
|
|
44
|
+
const yFoVComputed = this.computeAngle(canvasWidth / 2, 0, insideSphere, healpixGridSingleton, camera, pMatrix);
|
|
45
|
+
this.fovYDeg = yFoVComputed.angleDeg;
|
|
46
|
+
this._minFoV = this.minFoV;
|
|
47
|
+
this.ratio = this.computeRatio(camera);
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
computeRatio(camera) {
|
|
51
|
+
// const camera = global.camera
|
|
52
|
+
if (!camera)
|
|
53
|
+
throw Error("Camera not defined");
|
|
54
|
+
const pos = camera.getCameraPosition();
|
|
55
|
+
const distanceFromCenter = Math.sqrt(pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]);
|
|
56
|
+
// const distanceFromSphere = distanceFromCenter - healpixGridSingleton.RADIUS
|
|
57
|
+
const ratio = distanceFromCenter / this.fovYDeg;
|
|
58
|
+
return ratio;
|
|
59
|
+
}
|
|
60
|
+
changeMinFov(deg) {
|
|
61
|
+
console.log("inside changeMinFov");
|
|
62
|
+
if (this.fovYDeg <= this.fovXDeg) {
|
|
63
|
+
this.fovYDeg = deg;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
this.fovXDeg = deg;
|
|
67
|
+
}
|
|
68
|
+
console.log("changeMinFov: ping");
|
|
69
|
+
this.minFoV;
|
|
70
|
+
// this.fovYDeg <= this.fovXDeg ? this.fovYDeg = deg : this.fovXDeg = deg
|
|
71
|
+
}
|
|
72
|
+
get minFoV() {
|
|
73
|
+
const minFov = this.fovYDeg <= this.fovXDeg ? this.fovYDeg : this.fovXDeg;
|
|
74
|
+
this._minFoV = Math.max(minFov, FoV.MIN_FOV_DEG);
|
|
75
|
+
return this._minFoV;
|
|
76
|
+
}
|
|
77
|
+
get xFoV() {
|
|
78
|
+
return this.fovXDeg;
|
|
79
|
+
}
|
|
80
|
+
get yFoV() {
|
|
81
|
+
return this.fovYDeg;
|
|
82
|
+
}
|
|
83
|
+
computeDistanceFromAngle(angleDeg) {
|
|
84
|
+
const desiredFoV = angleDeg;
|
|
85
|
+
const distance = desiredFoV * this.ratio;
|
|
86
|
+
// return Math.abs(distance)
|
|
87
|
+
return distance;
|
|
88
|
+
}
|
|
89
|
+
/** FoV half-screen chord angle doubled (deg) along a given canvas axis */
|
|
90
|
+
computeAngle(canvasX, canvasY, insideSphere, healpixGridSingleton, camera, pMatrix) {
|
|
91
|
+
// const pMatrix = computePerspectiveMatrixSingleton.pMatrix
|
|
92
|
+
if (!pMatrix) {
|
|
93
|
+
// Handle the error or assign a default value
|
|
94
|
+
console.warn('FoV: projection matrix is null');
|
|
95
|
+
return { angleDeg: 180, distance: 1 };
|
|
96
|
+
}
|
|
97
|
+
const vMatrix = camera.getCameraMatrix();
|
|
98
|
+
if (!camera) {
|
|
99
|
+
// Handle the error or assign a default value
|
|
100
|
+
console.warn('FoV: camera is null');
|
|
101
|
+
return { angleDeg: 180, distance: 1 };
|
|
102
|
+
}
|
|
103
|
+
const rayWorld = RayPickingUtils.getRayFromMouse(canvasX, canvasY, pMatrix, this._webgl, vMatrix);
|
|
104
|
+
const intersectionDistance = RayPickingUtils.raySphere(camera.getCameraPosition(), rayWorld, healpixGridSingleton);
|
|
105
|
+
let angleDeg;
|
|
106
|
+
if (intersectionDistance > 0) {
|
|
107
|
+
// world-space intersection point on the sphere
|
|
108
|
+
const hit = vec3.create();
|
|
109
|
+
vec3.scale(hit, rayWorld, intersectionDistance);
|
|
110
|
+
vec3.add(hit, camera.getCameraPosition(), hit);
|
|
111
|
+
const center = healpixGridSingleton.center;
|
|
112
|
+
// vectors from sphere center
|
|
113
|
+
const vHit = vec3.create();
|
|
114
|
+
vec3.subtract(vHit, hit, center);
|
|
115
|
+
// reference vector: rotate world +Z into current camera orientation, then from center
|
|
116
|
+
const refWorldZ = vec3.fromValues(center[0], center[1], center[2] + healpixGridSingleton.radius);
|
|
117
|
+
const vInv = mat4.create();
|
|
118
|
+
mat4.invert(vInv, camera.getCameraMatrix());
|
|
119
|
+
const refCamZ = vec3.create();
|
|
120
|
+
vec3.transformMat4(refCamZ, refWorldZ, vInv);
|
|
121
|
+
const vRef = vec3.create();
|
|
122
|
+
vec3.subtract(vRef, refCamZ, center);
|
|
123
|
+
// angle between vHit and vRef, doubled
|
|
124
|
+
const dot = vec3.dot(vHit, vRef);
|
|
125
|
+
const n1 = vec3.length(vHit);
|
|
126
|
+
const n2 = vec3.length(vRef);
|
|
127
|
+
// numeric safety for acos
|
|
128
|
+
const c = Math.min(1, Math.max(-1, dot / (n1 * n2)));
|
|
129
|
+
const angleRad = Math.acos(c);
|
|
130
|
+
angleDeg = 2 * radToDeg(angleRad);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
angleDeg = 180;
|
|
134
|
+
}
|
|
135
|
+
const finalAngle = insideSphere ? 360 - angleDeg : angleDeg;
|
|
136
|
+
// return insideSphere ? 360 - angleDeg : angleDeg
|
|
137
|
+
return { angleDeg: finalAngle, distance: intersectionDistance };
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Computes the camera position (x,y,z) along the current view direction that would
|
|
141
|
+
* yield the requested minFoV (in degrees), assuming the camera is OUTSIDE the sphere.
|
|
142
|
+
* This method does NOT mutate the camera; it only returns the suggested position.
|
|
143
|
+
*
|
|
144
|
+
* Geometry: for a sphere of radius R observed from distance d (from center),
|
|
145
|
+
* the apparent angular diameter is 2*arcsin(R/d). Our minFoV is that angular diameter
|
|
146
|
+
* along the tighter axis; we solve for d and place the camera on the current
|
|
147
|
+
* center→camera direction with that distance.
|
|
148
|
+
*
|
|
149
|
+
* @param targetMinFoVDeg Desired min FoV in degrees, 0 < targetMinFoVDeg < 180
|
|
150
|
+
* @returns Tuple [x, y, z] for the recommended camera position in world coordinates.
|
|
151
|
+
*/
|
|
152
|
+
computeCameraPositionForMinFoV(targetMinFoVDeg) {
|
|
153
|
+
// const camera = global.camera
|
|
154
|
+
// const center = healpixGridSingleton.center
|
|
155
|
+
// const R = healpixGridSingleton.radius
|
|
156
|
+
// if (!camera) {
|
|
157
|
+
// console.warn('FoV.computeCameraPositionForMinFoV: camera not available; returning a sensible default.')
|
|
158
|
+
// return [center[0], center[1], center[2] + 2 * R]
|
|
159
|
+
// }
|
|
160
|
+
// // Clamp and validate input
|
|
161
|
+
// const eps = 1e-6
|
|
162
|
+
// const clamped = Math.max(eps, Math.min(180 - eps, targetMinFoVDeg))
|
|
163
|
+
// const halfRad = (clamped * Math.PI / 180) * 0.5
|
|
164
|
+
// // Distance from center needed to achieve the angular diameter
|
|
165
|
+
// // minFoV = 2 * arcsin(R / d) => d = R / sin(minFoV/2)
|
|
166
|
+
// const sinHalf = Math.sin(halfRad)
|
|
167
|
+
// if (sinHalf <= 0) {
|
|
168
|
+
// console.warn('FoV.computeCameraPositionForMinFoV: invalid targetMinFoVDeg, using fallback.')
|
|
169
|
+
// return [center[0], center[1], center[2] + 2 * R]
|
|
170
|
+
// }
|
|
171
|
+
// let d = R / sinHalf
|
|
172
|
+
// // Ensure we remain strictly outside the sphere
|
|
173
|
+
// d = Math.max(d, R + 1e-4)
|
|
174
|
+
// // Use the current center→camera direction to keep orientation
|
|
175
|
+
// const camPos = camera.getCameraPosition()
|
|
176
|
+
// let dirX = camPos[0] - center[0]
|
|
177
|
+
// let dirY = camPos[1] - center[1]
|
|
178
|
+
// let dirZ = camPos[2] - center[2]
|
|
179
|
+
// const len = Math.hypot(dirX, dirY, dirZ)
|
|
180
|
+
// if (len < eps) {
|
|
181
|
+
// // If somehow at the center, use +Z as a default direction
|
|
182
|
+
// dirX = 0; dirY = 0; dirZ = 1;
|
|
183
|
+
// } else {
|
|
184
|
+
// dirX /= len
|
|
185
|
+
// dirY /= len
|
|
186
|
+
// dirZ /= len
|
|
187
|
+
// }
|
|
188
|
+
// const newX = center[0] + dirX * d
|
|
189
|
+
// const newY = center[1] + dirY * d
|
|
190
|
+
// const newZ = center[2] + dirZ * d
|
|
191
|
+
// return [newX, newY, newZ]
|
|
192
|
+
return [0, 0, 0];
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Computes the camera world-space position required to achieve a target FoV (deg),
|
|
196
|
+
* keeping the same viewing direction. Acts as the inverse of computeAngle().
|
|
197
|
+
*
|
|
198
|
+
* @param targetFoVDeg desired full FoV angle in degrees (0 < FoV < 180)
|
|
199
|
+
* @param canvasWidth canvas width in pixels
|
|
200
|
+
* @param canvasHeight canvas height in pixels
|
|
201
|
+
* @returns [x, y, z] coordinates for the new camera position
|
|
202
|
+
*/
|
|
203
|
+
computeCameraPositionForFoV(targetFoVDeg) {
|
|
204
|
+
// const camera = global.camera;
|
|
205
|
+
// const center = healpixGridSingleton.center;
|
|
206
|
+
// const R = healpixGridSingleton.radius;
|
|
207
|
+
// if (!camera) {
|
|
208
|
+
// console.warn("FoV.computeCameraPositionForFoV: camera missing.");
|
|
209
|
+
// return [center[0], center[1], center[2] + 2 * R];
|
|
210
|
+
// }
|
|
211
|
+
// const eps = 1e-6;
|
|
212
|
+
// const clamped = Math.max(eps, Math.min(180 - eps, targetFoVDeg));
|
|
213
|
+
// const halfRad = (clamped * Math.PI) / 360.0; // half-angle in radians
|
|
214
|
+
// // Distance from center that yields this FoV
|
|
215
|
+
// const sinHalf = Math.sin(halfRad);
|
|
216
|
+
// if (sinHalf <= 0) {
|
|
217
|
+
// console.warn("FoV.computeCameraPositionForFoV: invalid FoV.");
|
|
218
|
+
// return [center[0], center[1], center[2] + 2 * R];
|
|
219
|
+
// }
|
|
220
|
+
// let d = R / sinHalf;
|
|
221
|
+
// // Slightly outside sphere to avoid clipping
|
|
222
|
+
// d = Math.max(d, R + 1e-4);
|
|
223
|
+
// // Get current viewing direction
|
|
224
|
+
// const camPos = camera.getCameraPosition();
|
|
225
|
+
// let dirX = camPos[0] - center[0];
|
|
226
|
+
// let dirY = camPos[1] - center[1];
|
|
227
|
+
// let dirZ = camPos[2] - center[2];
|
|
228
|
+
// const len = Math.hypot(dirX, dirY, dirZ);
|
|
229
|
+
// if (len < eps) {
|
|
230
|
+
// dirX = 0; dirY = 0; dirZ = 1;
|
|
231
|
+
// } else {
|
|
232
|
+
// dirX /= len;
|
|
233
|
+
// dirY /= len;
|
|
234
|
+
// dirZ /= len;
|
|
235
|
+
// }
|
|
236
|
+
// const newX = center[0] + dirX * d;
|
|
237
|
+
// const newY = center[1] + dirY * d;
|
|
238
|
+
// const newZ = center[2] + dirZ * d;
|
|
239
|
+
// return [newX, newY, newZ];
|
|
240
|
+
return [0, 0, 0];
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Return a camera position such that the sphere's apparent angular diameter
|
|
244
|
+
* (the silhouette, not the surface coverage) equals targetAngularDiameterDeg.
|
|
245
|
+
* Keeps current view direction; does not mutate the camera.
|
|
246
|
+
*
|
|
247
|
+
* @param targetAngularDiameterDeg desired apparent diameter in degrees (0<α<180)
|
|
248
|
+
* @returns [x,y,z] world position
|
|
249
|
+
*/
|
|
250
|
+
computeCameraPositionForAngularDiameter(targetAngularDiameterDeg) {
|
|
251
|
+
// const camera = global.camera;
|
|
252
|
+
// const center = healpixGridSingleton.center;
|
|
253
|
+
// const R = healpixGridSingleton.radius;
|
|
254
|
+
// if (!camera) {
|
|
255
|
+
// console.warn('computeCameraPositionForAngularDiameter: camera missing.');
|
|
256
|
+
// return [center[0], center[1], center[2] + 2 * R];
|
|
257
|
+
// }
|
|
258
|
+
// const eps = 1e-6;
|
|
259
|
+
// const α = Math.max(eps, Math.min(180 - eps, targetAngularDiameterDeg));
|
|
260
|
+
// const half = (α * Math.PI) / 360.0;
|
|
261
|
+
// const sinHalf = Math.sin(half);
|
|
262
|
+
// // d = R / sin(α/2)
|
|
263
|
+
// let d = R / sinHalf;
|
|
264
|
+
// d = Math.max(d, R + 1e-4); // stay outside
|
|
265
|
+
// // project along current center→camera direction
|
|
266
|
+
// const [cx, cy, cz] = center as [number, number, number];
|
|
267
|
+
// const [px, py, pz] = camera.getCameraPosition();
|
|
268
|
+
// let dx = px - cx, dy = py - cy, dz = pz - cz;
|
|
269
|
+
// const L = Math.hypot(dx, dy, dz);
|
|
270
|
+
// if (L < eps) { dx = 0; dy = 0; dz = 1; } else { dx /= L; dy /= L; dz /= L; }
|
|
271
|
+
// return [cx + dx * d, cy + dy * d, cz + dz * d];
|
|
272
|
+
return [0, 0, 0];
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
//# sourceMappingURL=FoV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FoV.js","sourceRoot":"","sources":["../../src/model/FoV.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Fabrizio Giordano (Fab77)
|
|
3
|
+
*/
|
|
4
|
+
export type DetailValue = string | number;
|
|
5
|
+
export declare enum ColumnType {
|
|
6
|
+
STRING = "STRING",
|
|
7
|
+
NUMBER = "NUMBER",
|
|
8
|
+
GEOM_RA = "GEOM_RA",
|
|
9
|
+
GEOM_DEC = "GEOM_DEC",
|
|
10
|
+
GEOM_FOOTPRINT = "GEOM_FOOTPRINT",
|
|
11
|
+
MAIN_NAME = "MAIN_NAME"
|
|
12
|
+
}
|
|
13
|
+
export interface MetadataInit {
|
|
14
|
+
index: number;
|
|
15
|
+
name: string;
|
|
16
|
+
columnType: ColumnType;
|
|
17
|
+
description?: string;
|
|
18
|
+
unit: string;
|
|
19
|
+
details?: Map<string, DetailValue>;
|
|
20
|
+
}
|
|
21
|
+
export declare class MetadataColumn {
|
|
22
|
+
private _index;
|
|
23
|
+
private _name;
|
|
24
|
+
private _description;
|
|
25
|
+
private _columnType;
|
|
26
|
+
private _unit;
|
|
27
|
+
private _details;
|
|
28
|
+
constructor(init: MetadataInit);
|
|
29
|
+
get details(): ReadonlyMap<string, DetailValue>;
|
|
30
|
+
/** Get any detail; optional fallback. */
|
|
31
|
+
getDetail(key: string, fallback?: DetailValue): DetailValue | undefined;
|
|
32
|
+
/** Type-leaning getters with fallbacks. */
|
|
33
|
+
getString(key: string, fallback?: string): string;
|
|
34
|
+
getNumber(key: string, fallback?: number): number;
|
|
35
|
+
/** Set or update a detail. */
|
|
36
|
+
setDetail(key: string, value: DetailValue): void;
|
|
37
|
+
/** Add many details at once. */
|
|
38
|
+
setDetails(details: Record<string, DetailValue> | Map<string, DetailValue>): void;
|
|
39
|
+
/** Keys, values, entries (as arrays). */
|
|
40
|
+
detailKeys(): string[];
|
|
41
|
+
detailValues(): DetailValue[];
|
|
42
|
+
detailEntries(): [string, DetailValue][];
|
|
43
|
+
get name(): string;
|
|
44
|
+
get description(): string;
|
|
45
|
+
get columnType(): string;
|
|
46
|
+
get index(): number | undefined;
|
|
47
|
+
get unit(): string;
|
|
48
|
+
toJSON(): Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=MetadataColumn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataColumn.d.ts","sourceRoot":"","sources":["../../src/model/MetadataColumn.ts"],"names":[],"mappings":"AACA;;GAEG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,cAAc,mBAAmB;IACjC,SAAS,cAAc;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpC;AAED,qBAAa,cAAc;IAEzB,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAA0C;gBAE9C,IAAI,EAAE,YAAY;IAiB9B,IAAI,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAE9C;IAED,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS;IAIvE,2CAA2C;IAC3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM;IAK7C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,MAAM;IAK9C,8BAA8B;IAC9B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI;IAIhD,gCAAgC;IAChC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;IAKjF,yCAAyC;IACzC,UAAU,IAAI,MAAM,EAAE;IAItB,YAAY,IAAI,WAAW,EAAE;IAI7B,aAAa,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;IAKxC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAGD,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYlC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
export var ColumnType;
|
|
3
|
+
(function (ColumnType) {
|
|
4
|
+
ColumnType["STRING"] = "STRING";
|
|
5
|
+
ColumnType["NUMBER"] = "NUMBER";
|
|
6
|
+
ColumnType["GEOM_RA"] = "GEOM_RA";
|
|
7
|
+
ColumnType["GEOM_DEC"] = "GEOM_DEC";
|
|
8
|
+
ColumnType["GEOM_FOOTPRINT"] = "GEOM_FOOTPRINT";
|
|
9
|
+
ColumnType["MAIN_NAME"] = "MAIN_NAME";
|
|
10
|
+
})(ColumnType || (ColumnType = {}));
|
|
11
|
+
export class MetadataColumn {
|
|
12
|
+
_index; // mandatory
|
|
13
|
+
_name; // mandatory
|
|
14
|
+
_description = ""; // mandatory default ""
|
|
15
|
+
_columnType; // mandatory
|
|
16
|
+
_unit; // mandatory
|
|
17
|
+
_details = new Map();
|
|
18
|
+
constructor(init) {
|
|
19
|
+
if (!init.name)
|
|
20
|
+
throw new Error(`No name column defined.`);
|
|
21
|
+
this._name = init.name;
|
|
22
|
+
if (init.index < 0 || isNaN(init.index))
|
|
23
|
+
throw new Error(`No index column defined.`);
|
|
24
|
+
this._index = init.index;
|
|
25
|
+
this._columnType = init.columnType ?? ColumnType.STRING;
|
|
26
|
+
this._unit = init.unit ?? "";
|
|
27
|
+
this._description = init.description ?? "";
|
|
28
|
+
if (init.details)
|
|
29
|
+
this._details = new Map(init.details);
|
|
30
|
+
}
|
|
31
|
+
get details() {
|
|
32
|
+
return new Map(this._details);
|
|
33
|
+
}
|
|
34
|
+
/** Get any detail; optional fallback. */
|
|
35
|
+
getDetail(key, fallback) {
|
|
36
|
+
return this._details.has(key) ? this._details.get(key) : fallback;
|
|
37
|
+
}
|
|
38
|
+
/** Type-leaning getters with fallbacks. */
|
|
39
|
+
getString(key, fallback = "") {
|
|
40
|
+
const v = this._details.get(key);
|
|
41
|
+
return typeof v === "string" ? v : fallback;
|
|
42
|
+
}
|
|
43
|
+
getNumber(key, fallback = NaN) {
|
|
44
|
+
const v = this._details.get(key);
|
|
45
|
+
return typeof v === "number" ? v : fallback;
|
|
46
|
+
}
|
|
47
|
+
/** Set or update a detail. */
|
|
48
|
+
setDetail(key, value) {
|
|
49
|
+
this._details.set(key, value);
|
|
50
|
+
}
|
|
51
|
+
/** Add many details at once. */
|
|
52
|
+
setDetails(details) {
|
|
53
|
+
const entries = details instanceof Map ? details.entries() : Object.entries(details);
|
|
54
|
+
for (const [k, v] of entries)
|
|
55
|
+
this._details.set(k, v);
|
|
56
|
+
}
|
|
57
|
+
/** Keys, values, entries (as arrays). */
|
|
58
|
+
detailKeys() {
|
|
59
|
+
return Array.from(this._details.keys());
|
|
60
|
+
}
|
|
61
|
+
detailValues() {
|
|
62
|
+
return Array.from(this._details.values());
|
|
63
|
+
}
|
|
64
|
+
detailEntries() {
|
|
65
|
+
return Array.from(this._details.entries());
|
|
66
|
+
}
|
|
67
|
+
// ---------- core getters/setters ----------
|
|
68
|
+
get name() {
|
|
69
|
+
return this._name;
|
|
70
|
+
}
|
|
71
|
+
get description() {
|
|
72
|
+
return this._description;
|
|
73
|
+
}
|
|
74
|
+
get columnType() {
|
|
75
|
+
return this._columnType;
|
|
76
|
+
}
|
|
77
|
+
get index() {
|
|
78
|
+
return this._index;
|
|
79
|
+
}
|
|
80
|
+
get unit() {
|
|
81
|
+
return this._unit;
|
|
82
|
+
}
|
|
83
|
+
// ---------- serialisation ----------
|
|
84
|
+
toJSON() {
|
|
85
|
+
return {
|
|
86
|
+
name: this._name,
|
|
87
|
+
description: this._description,
|
|
88
|
+
columnType: this._columnType,
|
|
89
|
+
index: this._index,
|
|
90
|
+
unit: this._unit,
|
|
91
|
+
details: Object.fromEntries(this._details),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=MetadataColumn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataColumn.js","sourceRoot":"","sources":["../../src/model/MetadataColumn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { MetadataColumn } from "./MetadataColumn.js";
|
|
2
|
+
export declare class MetadataManager {
|
|
3
|
+
static STANDARD_SIZE: string;
|
|
4
|
+
static STANDARD_HUE: string;
|
|
5
|
+
private _outlineColumnList;
|
|
6
|
+
private _raColumnList;
|
|
7
|
+
private _decColumnList;
|
|
8
|
+
private _shapeColumnList;
|
|
9
|
+
private _hueColumnList;
|
|
10
|
+
private _selectedOutlineColumn?;
|
|
11
|
+
private _selectedRaColumn?;
|
|
12
|
+
private _selectedDecColumn?;
|
|
13
|
+
private _selectedShapeColumn?;
|
|
14
|
+
private _selectedHueColumn?;
|
|
15
|
+
private _selectedNameColumn?;
|
|
16
|
+
private _columns;
|
|
17
|
+
constructor(metadataColumns: MetadataColumn[]);
|
|
18
|
+
addOutlineColumn(outlineColumn: MetadataColumn): void;
|
|
19
|
+
addRaColumn(column: MetadataColumn): void;
|
|
20
|
+
addDecColumn(column: MetadataColumn): void;
|
|
21
|
+
addHueColumn(column: MetadataColumn): void;
|
|
22
|
+
addShapeColumn(column: MetadataColumn): void;
|
|
23
|
+
get selectedRaColumn(): MetadataColumn | undefined;
|
|
24
|
+
get selectedDecColumn(): MetadataColumn | undefined;
|
|
25
|
+
get selectedHueColumn(): MetadataColumn | undefined;
|
|
26
|
+
get selectedShapeColumn(): MetadataColumn | undefined;
|
|
27
|
+
get selectedOutlineColumn(): MetadataColumn | undefined;
|
|
28
|
+
get selectedNameColumn(): MetadataColumn | undefined;
|
|
29
|
+
get columns(): MetadataColumn[];
|
|
30
|
+
get raColumnList(): MetadataColumn[];
|
|
31
|
+
get decColumnList(): MetadataColumn[];
|
|
32
|
+
get outlineColumnList(): MetadataColumn[];
|
|
33
|
+
get hueColumnList(): MetadataColumn[];
|
|
34
|
+
get shapeColumnList(): MetadataColumn[];
|
|
35
|
+
set selectedRaColumn(columnName: string);
|
|
36
|
+
set selectedDecColumn(columnName: string);
|
|
37
|
+
set selectedHueColumn(columnName: string);
|
|
38
|
+
set selectedShapeColumn(columnName: string);
|
|
39
|
+
set selectedNameColumn(columnName: string);
|
|
40
|
+
resetShapeColumn(): void;
|
|
41
|
+
resetHueColumn(): void;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=MetadataManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataManager.d.ts","sourceRoot":"","sources":["../../src/model/MetadataManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEhE,qBAAa,eAAe;IAExB,MAAM,CAAC,aAAa,EAAE,MAAM,CAAkB;IAC9C,MAAM,CAAC,YAAY,EAAE,MAAM,CAAiB;IAE5C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,sBAAsB,CAAC,CAAgB;IAC/C,OAAO,CAAC,iBAAiB,CAAC,CAAgB;IAC1C,OAAO,CAAC,kBAAkB,CAAC,CAAgB;IAC3C,OAAO,CAAC,oBAAoB,CAAC,CAAgB;IAC7C,OAAO,CAAC,kBAAkB,CAAC,CAAgB;IAC3C,OAAO,CAAC,mBAAmB,CAAC,CAAgB;IAE5C,OAAO,CAAC,QAAQ,CAAuB;gBAE3B,eAAe,EAAE,cAAc,EAAE;IA2B7C,gBAAgB,CAAC,aAAa,EAAE,cAAc;IAK9C,WAAW,CAAC,MAAM,EAAE,cAAc;IAKlC,YAAY,CAAC,MAAM,EAAE,cAAc;IAKnC,YAAY,CAAC,MAAM,EAAE,cAAc;IAInC,cAAc,CAAC,MAAM,EAAE,cAAc;IAIrC,IAAI,gBAAgB,IAAI,cAAc,GAAG,SAAS,CAEjD;IACD,IAAI,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAElD;IACD,IAAI,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAElD;IACD,IAAI,mBAAmB,IAAI,cAAc,GAAG,SAAS,CAEpD;IACD,IAAI,qBAAqB,IAAI,cAAc,GAAG,SAAS,CAEtD;IACD,IAAI,kBAAkB,IAAI,cAAc,GAAG,SAAS,CAEnD;IACD,IAAI,OAAO,IAAI,cAAc,EAAE,CAE9B;IAED,IAAI,YAAY,qBAEf;IACD,IAAI,aAAa,qBAEhB;IACD,IAAI,iBAAiB,qBAEpB;IACD,IAAI,aAAa,qBAEhB;IACD,IAAI,eAAe,qBAElB;IAED,IAAI,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAEtC;IACD,IAAI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAEvC;IACD,IAAI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAEvC;IACD,IAAI,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAEzC;IACD,IAAI,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAExC;IAED,gBAAgB;IAIhB,cAAc;CAKjB"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { ColumnType } from "./MetadataColumn.js";
|
|
2
|
+
export class MetadataManager {
|
|
3
|
+
static STANDARD_SIZE = "STANDARD_SIZE";
|
|
4
|
+
static STANDARD_HUE = "STANDARD_HUE";
|
|
5
|
+
_outlineColumnList = [];
|
|
6
|
+
_raColumnList = [];
|
|
7
|
+
_decColumnList = [];
|
|
8
|
+
_shapeColumnList = [];
|
|
9
|
+
_hueColumnList = [];
|
|
10
|
+
_selectedOutlineColumn;
|
|
11
|
+
_selectedRaColumn;
|
|
12
|
+
_selectedDecColumn;
|
|
13
|
+
_selectedShapeColumn;
|
|
14
|
+
_selectedHueColumn;
|
|
15
|
+
_selectedNameColumn;
|
|
16
|
+
_columns = [];
|
|
17
|
+
constructor(metadataColumns) {
|
|
18
|
+
metadataColumns.forEach(c => {
|
|
19
|
+
if (c.columnType == ColumnType.NUMBER) {
|
|
20
|
+
this.addHueColumn(c);
|
|
21
|
+
this.addShapeColumn(c);
|
|
22
|
+
}
|
|
23
|
+
if (c.columnType == ColumnType.GEOM_RA) {
|
|
24
|
+
this.addRaColumn(c);
|
|
25
|
+
}
|
|
26
|
+
if (c.columnType == ColumnType.GEOM_DEC) {
|
|
27
|
+
this.addDecColumn(c);
|
|
28
|
+
}
|
|
29
|
+
if (c.columnType == ColumnType.GEOM_FOOTPRINT) {
|
|
30
|
+
this.addOutlineColumn(c);
|
|
31
|
+
}
|
|
32
|
+
if (c.columnType == ColumnType.MAIN_NAME) {
|
|
33
|
+
this._selectedNameColumn = c;
|
|
34
|
+
}
|
|
35
|
+
this._columns.push(c);
|
|
36
|
+
});
|
|
37
|
+
// if (!this._selectedNameColumn) {
|
|
38
|
+
// throw new Error("No name column found")
|
|
39
|
+
// }
|
|
40
|
+
}
|
|
41
|
+
addOutlineColumn(outlineColumn) {
|
|
42
|
+
this._outlineColumnList.push(outlineColumn);
|
|
43
|
+
this._selectedOutlineColumn = outlineColumn;
|
|
44
|
+
}
|
|
45
|
+
addRaColumn(column) {
|
|
46
|
+
this._selectedRaColumn = this._selectedRaColumn || column;
|
|
47
|
+
this._raColumnList.push(column);
|
|
48
|
+
}
|
|
49
|
+
addDecColumn(column) {
|
|
50
|
+
this._selectedDecColumn = this._selectedDecColumn || column;
|
|
51
|
+
this._decColumnList.push(column);
|
|
52
|
+
}
|
|
53
|
+
addHueColumn(column) {
|
|
54
|
+
this._hueColumnList.push(column);
|
|
55
|
+
}
|
|
56
|
+
addShapeColumn(column) {
|
|
57
|
+
this._shapeColumnList.push(column);
|
|
58
|
+
}
|
|
59
|
+
get selectedRaColumn() {
|
|
60
|
+
return this._selectedRaColumn;
|
|
61
|
+
}
|
|
62
|
+
get selectedDecColumn() {
|
|
63
|
+
return this._selectedDecColumn;
|
|
64
|
+
}
|
|
65
|
+
get selectedHueColumn() {
|
|
66
|
+
return this._selectedHueColumn;
|
|
67
|
+
}
|
|
68
|
+
get selectedShapeColumn() {
|
|
69
|
+
return this._selectedShapeColumn;
|
|
70
|
+
}
|
|
71
|
+
get selectedOutlineColumn() {
|
|
72
|
+
return this._selectedOutlineColumn;
|
|
73
|
+
}
|
|
74
|
+
get selectedNameColumn() {
|
|
75
|
+
return this._selectedNameColumn;
|
|
76
|
+
}
|
|
77
|
+
get columns() {
|
|
78
|
+
return this._columns;
|
|
79
|
+
}
|
|
80
|
+
get raColumnList() {
|
|
81
|
+
return this._raColumnList;
|
|
82
|
+
}
|
|
83
|
+
get decColumnList() {
|
|
84
|
+
return this._decColumnList;
|
|
85
|
+
}
|
|
86
|
+
get outlineColumnList() {
|
|
87
|
+
return this._outlineColumnList;
|
|
88
|
+
}
|
|
89
|
+
get hueColumnList() {
|
|
90
|
+
return this._hueColumnList;
|
|
91
|
+
}
|
|
92
|
+
get shapeColumnList() {
|
|
93
|
+
return this._shapeColumnList;
|
|
94
|
+
}
|
|
95
|
+
set selectedRaColumn(columnName) {
|
|
96
|
+
this._selectedRaColumn = this._raColumnList.find(c => c.name === columnName) || this._selectedRaColumn;
|
|
97
|
+
}
|
|
98
|
+
set selectedDecColumn(columnName) {
|
|
99
|
+
this._selectedDecColumn = this._decColumnList.find(c => c.name === columnName) || this._selectedDecColumn;
|
|
100
|
+
}
|
|
101
|
+
set selectedHueColumn(columnName) {
|
|
102
|
+
this._selectedHueColumn = this._hueColumnList.find(c => c.name === columnName);
|
|
103
|
+
}
|
|
104
|
+
set selectedShapeColumn(columnName) {
|
|
105
|
+
this._selectedShapeColumn = this._shapeColumnList.find(c => c.name === columnName);
|
|
106
|
+
}
|
|
107
|
+
set selectedNameColumn(columnName) {
|
|
108
|
+
this._selectedNameColumn = this._shapeColumnList.find(c => c.name === columnName);
|
|
109
|
+
}
|
|
110
|
+
resetShapeColumn() {
|
|
111
|
+
this._selectedShapeColumn = undefined;
|
|
112
|
+
}
|
|
113
|
+
resetHueColumn() {
|
|
114
|
+
this._selectedHueColumn = undefined;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=MetadataManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MetadataManager.js","sourceRoot":"","sources":["../../src/model/MetadataManager.ts"],"names":[],"mappings":"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"}
|