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.
Files changed (236) hide show
  1. package/README.md +373 -0
  2. package/dist/astroviewer.cjs +13941 -0
  3. package/dist/astroviewer.cjs.map +1 -0
  4. package/dist/astroviewer.js +2 -0
  5. package/dist/astroviewer.js.map +1 -0
  6. package/dist/astroviewer.min.js +2 -0
  7. package/dist/astroviewer.min.js.map +1 -0
  8. package/lib-esm/AstroSphere.d.ts +114 -0
  9. package/lib-esm/AstroSphere.d.ts.map +1 -0
  10. package/lib-esm/AstroSphere.js +679 -0
  11. package/lib-esm/AstroSphere.js.map +1 -0
  12. package/lib-esm/AstroViewer.d.ts +81 -0
  13. package/lib-esm/AstroViewer.d.ts.map +1 -0
  14. package/lib-esm/AstroViewer.js +348 -0
  15. package/lib-esm/AstroViewer.js.map +1 -0
  16. package/lib-esm/Camera.d.ts +74 -0
  17. package/lib-esm/Camera.d.ts.map +1 -0
  18. package/lib-esm/Camera.js +334 -0
  19. package/lib-esm/Camera.js.map +1 -0
  20. package/lib-esm/Config.d.ts +20 -0
  21. package/lib-esm/Config.d.ts.map +1 -0
  22. package/lib-esm/Config.js +32 -0
  23. package/lib-esm/Config.js.map +1 -0
  24. package/lib-esm/Global.d.ts +27 -0
  25. package/lib-esm/Global.d.ts.map +1 -0
  26. package/lib-esm/Global.js +52 -0
  27. package/lib-esm/Global.js.map +1 -0
  28. package/lib-esm/index.d.ts +17 -0
  29. package/lib-esm/index.d.ts.map +1 -0
  30. package/lib-esm/index.js +16 -0
  31. package/lib-esm/index.js.map +1 -0
  32. package/lib-esm/model/AbstractSkyEntity.d.ts +55 -0
  33. package/lib-esm/model/AbstractSkyEntity.d.ts.map +1 -0
  34. package/lib-esm/model/AbstractSkyEntity.js +153 -0
  35. package/lib-esm/model/AbstractSkyEntity.js.map +1 -0
  36. package/lib-esm/model/AstroGL.d.ts +11 -0
  37. package/lib-esm/model/AstroGL.d.ts.map +1 -0
  38. package/lib-esm/model/AstroGL.js +2 -0
  39. package/lib-esm/model/AstroGL.js.map +1 -0
  40. package/lib-esm/model/ColorMaps.d.ts +17 -0
  41. package/lib-esm/model/ColorMaps.d.ts.map +1 -0
  42. package/lib-esm/model/ColorMaps.js +1288 -0
  43. package/lib-esm/model/ColorMaps.js.map +1 -0
  44. package/lib-esm/model/FoV.d.ts +63 -0
  45. package/lib-esm/model/FoV.d.ts.map +1 -0
  46. package/lib-esm/model/FoV.js +275 -0
  47. package/lib-esm/model/FoV.js.map +1 -0
  48. package/lib-esm/model/MetadataColumn.d.ts +50 -0
  49. package/lib-esm/model/MetadataColumn.d.ts.map +1 -0
  50. package/lib-esm/model/MetadataColumn.js +95 -0
  51. package/lib-esm/model/MetadataColumn.js.map +1 -0
  52. package/lib-esm/model/MetadataManager.d.ts +43 -0
  53. package/lib-esm/model/MetadataManager.d.ts.map +1 -0
  54. package/lib-esm/model/MetadataManager.js +117 -0
  55. package/lib-esm/model/MetadataManager.js.map +1 -0
  56. package/lib-esm/model/Point.d.ts +53 -0
  57. package/lib-esm/model/Point.d.ts.map +1 -0
  58. package/lib-esm/model/Point.js +133 -0
  59. package/lib-esm/model/Point.js.map +1 -0
  60. package/lib-esm/model/Point2D.d.ts +9 -0
  61. package/lib-esm/model/Point2D.d.ts.map +1 -0
  62. package/lib-esm/model/Point2D.js +16 -0
  63. package/lib-esm/model/Point2D.js.map +1 -0
  64. package/lib-esm/model/Source.d.ts +34 -0
  65. package/lib-esm/model/Source.d.ts.map +1 -0
  66. package/lib-esm/model/Source.js +63 -0
  67. package/lib-esm/model/Source.js.map +1 -0
  68. package/lib-esm/model/catalogues/CatalogueGL.d.ts +91 -0
  69. package/lib-esm/model/catalogues/CatalogueGL.d.ts.map +1 -0
  70. package/lib-esm/model/catalogues/CatalogueGL.js +614 -0
  71. package/lib-esm/model/catalogues/CatalogueGL.js.map +1 -0
  72. package/lib-esm/model/catalogues/CatalogueProps.d.ts +2 -0
  73. package/lib-esm/model/catalogues/CatalogueProps.d.ts.map +1 -0
  74. package/lib-esm/model/catalogues/CatalogueProps.js +156 -0
  75. package/lib-esm/model/catalogues/CatalogueProps.js.map +1 -0
  76. package/lib-esm/model/footprints/Footprint.d.ts +44 -0
  77. package/lib-esm/model/footprints/Footprint.d.ts.map +1 -0
  78. package/lib-esm/model/footprints/Footprint.js +104 -0
  79. package/lib-esm/model/footprints/Footprint.js.map +1 -0
  80. package/lib-esm/model/footprints/FootprintProps.d.ts +2 -0
  81. package/lib-esm/model/footprints/FootprintProps.d.ts.map +1 -0
  82. package/lib-esm/model/footprints/FootprintProps.js +87 -0
  83. package/lib-esm/model/footprints/FootprintProps.js.map +1 -0
  84. package/lib-esm/model/footprints/FootprintSetGL.d.ts +106 -0
  85. package/lib-esm/model/footprints/FootprintSetGL.d.ts.map +1 -0
  86. package/lib-esm/model/footprints/FootprintSetGL.js +592 -0
  87. package/lib-esm/model/footprints/FootprintSetGL.js.map +1 -0
  88. package/lib-esm/model/grid/EquatorialGrid.d.ts +49 -0
  89. package/lib-esm/model/grid/EquatorialGrid.d.ts.map +1 -0
  90. package/lib-esm/model/grid/EquatorialGrid.js +302 -0
  91. package/lib-esm/model/grid/EquatorialGrid.js.map +1 -0
  92. package/lib-esm/model/grid/GridTextHelper.d.ts +26 -0
  93. package/lib-esm/model/grid/GridTextHelper.d.ts.map +1 -0
  94. package/lib-esm/model/grid/GridTextHelper.js +92 -0
  95. package/lib-esm/model/grid/GridTextHelper.js.map +1 -0
  96. package/lib-esm/model/grid/HealpixGrid.d.ts +49 -0
  97. package/lib-esm/model/grid/HealpixGrid.d.ts.map +1 -0
  98. package/lib-esm/model/grid/HealpixGrid.js +306 -0
  99. package/lib-esm/model/grid/HealpixGrid.js.map +1 -0
  100. package/lib-esm/model/hips/AllSky.d.ts +40 -0
  101. package/lib-esm/model/hips/AllSky.d.ts.map +1 -0
  102. package/lib-esm/model/hips/AllSky.js +232 -0
  103. package/lib-esm/model/hips/AllSky.js.map +1 -0
  104. package/lib-esm/model/hips/AncestorTile.d.ts +38 -0
  105. package/lib-esm/model/hips/AncestorTile.d.ts.map +1 -0
  106. package/lib-esm/model/hips/AncestorTile.js +248 -0
  107. package/lib-esm/model/hips/AncestorTile.js.map +1 -0
  108. package/lib-esm/model/hips/FoVHelper.d.ts +11 -0
  109. package/lib-esm/model/hips/FoVHelper.d.ts.map +1 -0
  110. package/lib-esm/model/hips/FoVHelper.js +107 -0
  111. package/lib-esm/model/hips/FoVHelper.js.map +1 -0
  112. package/lib-esm/model/hips/HiPS.d.ts +47 -0
  113. package/lib-esm/model/hips/HiPS.d.ts.map +1 -0
  114. package/lib-esm/model/hips/HiPS.js +222 -0
  115. package/lib-esm/model/hips/HiPS.js.map +1 -0
  116. package/lib-esm/model/hips/HiPSDescriptor.d.ts +37 -0
  117. package/lib-esm/model/hips/HiPSDescriptor.d.ts.map +1 -0
  118. package/lib-esm/model/hips/HiPSDescriptor.js +132 -0
  119. package/lib-esm/model/hips/HiPSDescriptor.js.map +1 -0
  120. package/lib-esm/model/hips/Tile.d.ts +51 -0
  121. package/lib-esm/model/hips/Tile.d.ts.map +1 -0
  122. package/lib-esm/model/hips/Tile.js +355 -0
  123. package/lib-esm/model/hips/Tile.js.map +1 -0
  124. package/lib-esm/model/hips/TileBuffer.d.ts +39 -0
  125. package/lib-esm/model/hips/TileBuffer.d.ts.map +1 -0
  126. package/lib-esm/model/hips/TileBuffer.js +148 -0
  127. package/lib-esm/model/hips/TileBuffer.js.map +1 -0
  128. package/lib-esm/model/hips/VisibleTilesManager.d.ts +35 -0
  129. package/lib-esm/model/hips/VisibleTilesManager.d.ts.map +1 -0
  130. package/lib-esm/model/hips/VisibleTilesManager.js +160 -0
  131. package/lib-esm/model/hips/VisibleTilesManager.js.map +1 -0
  132. package/lib-esm/model/tap/TapMetadata.d.ts +31 -0
  133. package/lib-esm/model/tap/TapMetadata.d.ts.map +1 -0
  134. package/lib-esm/model/tap/TapMetadata.js +55 -0
  135. package/lib-esm/model/tap/TapMetadata.js.map +1 -0
  136. package/lib-esm/model/tap/TapMetadataList.d.ts +23 -0
  137. package/lib-esm/model/tap/TapMetadataList.d.ts.map +1 -0
  138. package/lib-esm/model/tap/TapMetadataList.js +58 -0
  139. package/lib-esm/model/tap/TapMetadataList.js.map +1 -0
  140. package/lib-esm/model/tap/TapRepo.d.ts +27 -0
  141. package/lib-esm/model/tap/TapRepo.d.ts.map +1 -0
  142. package/lib-esm/model/tap/TapRepo.js +51 -0
  143. package/lib-esm/model/tap/TapRepo.js.map +1 -0
  144. package/lib-esm/services/SesameService.d.ts +14 -0
  145. package/lib-esm/services/SesameService.d.ts.map +1 -0
  146. package/lib-esm/services/SesameService.js +54 -0
  147. package/lib-esm/services/SesameService.js.map +1 -0
  148. package/lib-esm/services/helpers.d.ts +5 -0
  149. package/lib-esm/services/helpers.d.ts.map +1 -0
  150. package/lib-esm/services/helpers.js +16 -0
  151. package/lib-esm/services/helpers.js.map +1 -0
  152. package/lib-esm/services/hipsNodeService.d.ts +7 -0
  153. package/lib-esm/services/hipsNodeService.d.ts.map +1 -0
  154. package/lib-esm/services/hipsNodeService.js +65 -0
  155. package/lib-esm/services/hipsNodeService.js.map +1 -0
  156. package/lib-esm/services/parse-hipslist.d.ts +3 -0
  157. package/lib-esm/services/parse-hipslist.d.ts.map +1 -0
  158. package/lib-esm/services/parse-hipslist.js +25 -0
  159. package/lib-esm/services/parse-hipslist.js.map +1 -0
  160. package/lib-esm/services/queryCatalogueByFoV.d.ts +2 -0
  161. package/lib-esm/services/queryCatalogueByFoV.d.ts.map +1 -0
  162. package/lib-esm/services/queryCatalogueByFoV.js +56 -0
  163. package/lib-esm/services/queryCatalogueByFoV.js.map +1 -0
  164. package/lib-esm/services/queryFootprintSetByFov.d.ts +2 -0
  165. package/lib-esm/services/queryFootprintSetByFov.d.ts.map +1 -0
  166. package/lib-esm/services/queryFootprintSetByFov.js +128 -0
  167. package/lib-esm/services/queryFootprintSetByFov.js.map +1 -0
  168. package/lib-esm/services/tapRepoService.d.ts +2 -0
  169. package/lib-esm/services/tapRepoService.d.ts.map +1 -0
  170. package/lib-esm/services/tapRepoService.js +190 -0
  171. package/lib-esm/services/tapRepoService.js.map +1 -0
  172. package/lib-esm/services/types.d.ts +13 -0
  173. package/lib-esm/services/types.d.ts.map +1 -0
  174. package/lib-esm/services/types.js +2 -0
  175. package/lib-esm/services/types.js.map +1 -0
  176. package/lib-esm/shader/CatalogueShaderProgram.d.ts +35 -0
  177. package/lib-esm/shader/CatalogueShaderProgram.d.ts.map +1 -0
  178. package/lib-esm/shader/CatalogueShaderProgram.js +94 -0
  179. package/lib-esm/shader/CatalogueShaderProgram.js.map +1 -0
  180. package/lib-esm/shader/FootprintShaderProgram.d.ts +31 -0
  181. package/lib-esm/shader/FootprintShaderProgram.d.ts.map +1 -0
  182. package/lib-esm/shader/FootprintShaderProgram.js +86 -0
  183. package/lib-esm/shader/FootprintShaderProgram.js.map +1 -0
  184. package/lib-esm/shader/GridShaderManager.d.ts +6 -0
  185. package/lib-esm/shader/GridShaderManager.d.ts.map +1 -0
  186. package/lib-esm/shader/GridShaderManager.js +29 -0
  187. package/lib-esm/shader/GridShaderManager.js.map +1 -0
  188. package/lib-esm/shader/HiPSShaderProgram.d.ts +54 -0
  189. package/lib-esm/shader/HiPSShaderProgram.d.ts.map +1 -0
  190. package/lib-esm/shader/HiPSShaderProgram.js +257 -0
  191. package/lib-esm/shader/HiPSShaderProgram.js.map +1 -0
  192. package/lib-esm/shader/ShaderManager.d.ts +12 -0
  193. package/lib-esm/shader/ShaderManager.d.ts.map +1 -0
  194. package/lib-esm/shader/ShaderManager.js +344 -0
  195. package/lib-esm/shader/ShaderManager.js.map +1 -0
  196. package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts +12 -0
  197. package/lib-esm/shader/ShaderManagerMutliHiPS.d.ts.map +1 -0
  198. package/lib-esm/shader/ShaderManagerMutliHiPS.js +750 -0
  199. package/lib-esm/shader/ShaderManagerMutliHiPS.js.map +1 -0
  200. package/lib-esm/utils/CoordsType.d.ts +10 -0
  201. package/lib-esm/utils/CoordsType.d.ts.map +1 -0
  202. package/lib-esm/utils/CoordsType.js +12 -0
  203. package/lib-esm/utils/CoordsType.js.map +1 -0
  204. package/lib-esm/utils/FoVUtils.d.ts +46 -0
  205. package/lib-esm/utils/FoVUtils.d.ts.map +1 -0
  206. package/lib-esm/utils/FoVUtils.js +217 -0
  207. package/lib-esm/utils/FoVUtils.js.map +1 -0
  208. package/lib-esm/utils/GeomUtils.d.ts +36 -0
  209. package/lib-esm/utils/GeomUtils.d.ts.map +1 -0
  210. package/lib-esm/utils/GeomUtils.js +267 -0
  211. package/lib-esm/utils/GeomUtils.js.map +1 -0
  212. package/lib-esm/utils/MouseHelper.d.ts +36 -0
  213. package/lib-esm/utils/MouseHelper.d.ts.map +1 -0
  214. package/lib-esm/utils/MouseHelper.js +94 -0
  215. package/lib-esm/utils/MouseHelper.js.map +1 -0
  216. package/lib-esm/utils/PerspectiveMatrixManager.d.ts +11 -0
  217. package/lib-esm/utils/PerspectiveMatrixManager.d.ts.map +1 -0
  218. package/lib-esm/utils/PerspectiveMatrixManager.js +37 -0
  219. package/lib-esm/utils/PerspectiveMatrixManager.js.map +1 -0
  220. package/lib-esm/utils/RayPickingUtils.d.ts +30 -0
  221. package/lib-esm/utils/RayPickingUtils.d.ts.map +1 -0
  222. package/lib-esm/utils/RayPickingUtils.js +112 -0
  223. package/lib-esm/utils/RayPickingUtils.js.map +1 -0
  224. package/lib-esm/utils/STCSParser.d.ts +16 -0
  225. package/lib-esm/utils/STCSParser.d.ts.map +1 -0
  226. package/lib-esm/utils/STCSParser.js +96 -0
  227. package/lib-esm/utils/STCSParser.js.map +1 -0
  228. package/lib-esm/utils/ShaderUtility.d.ts +2 -0
  229. package/lib-esm/utils/ShaderUtility.d.ts.map +1 -0
  230. package/lib-esm/utils/ShaderUtility.js +23 -0
  231. package/lib-esm/utils/ShaderUtility.js.map +1 -0
  232. package/lib-esm/utils/Utils.d.ts +32 -0
  233. package/lib-esm/utils/Utils.d.ts.map +1 -0
  234. package/lib-esm/utils/Utils.js +77 -0
  235. package/lib-esm/utils/Utils.js.map +1 -0
  236. package/package.json +82 -0
@@ -0,0 +1,592 @@
1
+ import { Footprint } from "./Footprint.js";
2
+ import { colorHex2RGB } from "../../utils/Utils.js";
3
+ import { FootprintShaderProgram } from "../../shader/FootprintShaderProgram.js";
4
+ import { Point } from "../Point.js";
5
+ import GeomUtils from "../../utils/GeomUtils.js";
6
+ import { CoordsType } from "../../utils/CoordsType.js";
7
+ import { MetadataManager } from "../MetadataManager.js";
8
+ export class FootprintSetGL {
9
+ static ELEM_SIZE = 3;
10
+ static BYTES_X_ELEM = new Float32Array().BYTES_PER_ELEMENT;
11
+ static CONVEXPOLY_ELEM_SIZE = 3;
12
+ _kind = "FootprintSetGL";
13
+ _ready;
14
+ // footprintsetProps: FootprintProps
15
+ _name;
16
+ _description;
17
+ // tapRepo: TapRepo
18
+ extHoveredIndexes;
19
+ oldMouseCoords;
20
+ healpixDensityMap;
21
+ totConvexPoints;
22
+ // footprintsInPix256: Map<number, Footprint[]>
23
+ // gl: GL;
24
+ // shaderProgram: WebGLProgram
25
+ vertexCataloguePositionBuffer;
26
+ indexBuffer;
27
+ hoveredVertexPositionBuffer;
28
+ hoveredIndexBuffer;
29
+ selectedVertexPositionBuffer;
30
+ selectedIndexBuffer;
31
+ indexes;
32
+ footprintPolygons = [];
33
+ vertexCataloguePosition;
34
+ totPoints;
35
+ nPrimitiveFlags = 0;
36
+ hoveredIndexes;
37
+ hoveredElementIndexes;
38
+ _hoveredFootprints = [];
39
+ hoveredVertexPosition;
40
+ totHoveredPoints;
41
+ nHoveredPrimitiveFlags = 0;
42
+ selectedIndexes;
43
+ selectedElementIndexes;
44
+ _selectedFootprints = [];
45
+ selectedVertexPosition;
46
+ totSelectedPoints;
47
+ nSlectedPrimitiveFlags = 0;
48
+ _shapeColor = "#00fff2ff";
49
+ _bufferInitialised = false;
50
+ _webgl;
51
+ _isVisible = true;
52
+ _metadataManager;
53
+ _providerUrl;
54
+ _footprintShaderProgram;
55
+ _visibleTilesManager;
56
+ constructor(fsetName, fsetDescription, providerUrl, metadataManager, webgl, visibleTilesManager) {
57
+ this._webgl = webgl;
58
+ this._ready = false;
59
+ this._visibleTilesManager = visibleTilesManager;
60
+ this.TYPE = "FOOTPRINT_SET";
61
+ this._name = fsetName;
62
+ this._description = fsetDescription;
63
+ this._providerUrl = providerUrl;
64
+ this._metadataManager = metadataManager;
65
+ this.initFootprintArrays();
66
+ this.oldMouseCoords = null;
67
+ this._footprintShaderProgram = new FootprintShaderProgram(this._webgl);
68
+ this._footprintShaderProgram.shaderProgram;
69
+ }
70
+ initFootprintArrays() {
71
+ this.footprintPolygons = [];
72
+ this.indexes = new Uint32Array();
73
+ this.vertexCataloguePosition = new Float32Array();
74
+ this.totPoints = 0;
75
+ this.totConvexPoints = 0;
76
+ this.extHoveredIndexes = new Uint32Array();
77
+ this._hoveredFootprints = [];
78
+ this.hoveredVertexPosition = new Float32Array();
79
+ this.totHoveredPoints = 0;
80
+ this.hoveredIndexes = [];
81
+ this.hoveredElementIndexes = new Uint32Array();
82
+ this._selectedFootprints = [];
83
+ this.selectedVertexPosition = new Float32Array();
84
+ this.totSelectedPoints = 0;
85
+ this.selectedIndexes = [];
86
+ this.selectedElementIndexes = new Uint32Array();
87
+ }
88
+ initGLBuffers() {
89
+ if (!this._webgl)
90
+ return;
91
+ this.vertexCataloguePositionBuffer = this._webgl.createBuffer();
92
+ this.indexBuffer = this._webgl.createBuffer();
93
+ this.hoveredVertexPositionBuffer = this._webgl.createBuffer();
94
+ this.hoveredIndexBuffer = this._webgl.createBuffer();
95
+ this.selectedVertexPositionBuffer = this._webgl.createBuffer();
96
+ this.selectedIndexBuffer = this._webgl.createBuffer();
97
+ }
98
+ setIsVisible(visibility) {
99
+ this._isVisible = visibility;
100
+ }
101
+ get isVisible() {
102
+ return this._isVisible;
103
+ }
104
+ get shapeColor() {
105
+ return this._shapeColor;
106
+ }
107
+ get providerUrl() {
108
+ return this._providerUrl;
109
+ }
110
+ get name() {
111
+ return this._name;
112
+ }
113
+ get metadataManager() {
114
+ return this._metadataManager;
115
+ }
116
+ addFootprint(in_footprint) {
117
+ this.footprintPolygons.push(in_footprint);
118
+ }
119
+ // addFootprints(in_data: any[], columnsmeta: TapMetadata[]): void {
120
+ addFootprints(in_data, columnsmeta) {
121
+ this._ready = false;
122
+ this._metadataManager = new MetadataManager(columnsmeta);
123
+ // const geomDataIndex = this.footprintsetProps.geomColumn?.index
124
+ const geomDataIndex = this._metadataManager.selectedOutlineColumn?.index ?? -1;
125
+ if (geomDataIndex < 0) {
126
+ throw new Error("geomColumn or its index is undefined in footprintsetProps");
127
+ }
128
+ for (let j = 0; j < in_data.length; j++) {
129
+ if (in_data[j][0] !== null) {
130
+ const footprint = new Footprint(in_data[j][geomDataIndex], in_data[j]);
131
+ if (footprint._valid) {
132
+ this.addFootprint(footprint);
133
+ this.totPoints += footprint.totPoints;
134
+ this.totConvexPoints += footprint.totConvexPoints;
135
+ }
136
+ }
137
+ }
138
+ // this.initBuffer()
139
+ this._ready = true;
140
+ this._bufferInitialised = false;
141
+ }
142
+ clearFootprints() {
143
+ this.initFootprintArrays();
144
+ }
145
+ initBuffer() {
146
+ // this._webgl = webgl
147
+ if (!this._webgl)
148
+ return;
149
+ this.initGLBuffers();
150
+ const nFootprints = this.footprintPolygons.length;
151
+ let npolygons = nFootprints - 1;
152
+ for (let j = 0; j < nFootprints; j++) {
153
+ npolygons += this.footprintPolygons[j].polygons.length - 1;
154
+ }
155
+ this.indexes = new Uint32Array(this.totPoints + npolygons + 1);
156
+ const MAX_UNSIGNED_INT = 0xffffffff;
157
+ this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexCataloguePositionBuffer);
158
+ this.vertexCataloguePosition = new Float32Array(3 * this.totPoints);
159
+ let positionIndex = 0;
160
+ let vIdx = 0;
161
+ const R = 1.0;
162
+ this.nPrimitiveFlags = 0;
163
+ for (let j = 0; j < nFootprints; j++) {
164
+ const footprint = this.footprintPolygons[j];
165
+ const footprintPoly = footprint.polygons;
166
+ if (j > 0) {
167
+ this.indexes[vIdx++] = MAX_UNSIGNED_INT;
168
+ this.nPrimitiveFlags++;
169
+ }
170
+ for (const poly of footprintPoly) {
171
+ if (poly !== footprintPoly[0]) {
172
+ this.indexes[vIdx++] = MAX_UNSIGNED_INT;
173
+ this.nPrimitiveFlags++;
174
+ }
175
+ for (const point of poly) {
176
+ this.vertexCataloguePosition[positionIndex++] = R * point.x;
177
+ this.vertexCataloguePosition[positionIndex++] = R * point.y;
178
+ this.vertexCataloguePosition[positionIndex++] = R * point.z;
179
+ this.indexes[vIdx++] = Math.floor((positionIndex - 1) / 3);
180
+ }
181
+ }
182
+ }
183
+ this.indexes[this.indexes.length - 1] = MAX_UNSIGNED_INT;
184
+ console.log("Buffer initialized");
185
+ }
186
+ checkSelection(mouseHelper) {
187
+ if (!mouseHelper.x || !mouseHelper.y || !mouseHelper.z)
188
+ return;
189
+ let mousePix = mouseHelper.computeNpix();
190
+ if (!mousePix)
191
+ return;
192
+ this._hoveredFootprints = [];
193
+ this.totHoveredPoints = 0;
194
+ const mousePoint = new Point({ x: mouseHelper.x, y: mouseHelper.y, z: mouseHelper.z }, CoordsType.CARTESIAN);
195
+ for (let i = 0; i < this.footprintPolygons.length; i++) {
196
+ const footprint = this.footprintPolygons[i];
197
+ if (!footprint.selectionObj)
198
+ continue;
199
+ if (GeomUtils.checkPointInsidePolygon5(footprint.selectionObj, mousePoint)) {
200
+ const details = [...footprint.details];
201
+ // const geomDataIndex = this.footprintsetProps.geomColumn?.index
202
+ const geomDataIndex = this._metadataManager.selectedOutlineColumn?.index ?? -1;
203
+ if (geomDataIndex < 0)
204
+ continue;
205
+ details.splice(geomDataIndex, 1);
206
+ this._hoveredFootprints.push(footprint);
207
+ this.totHoveredPoints += footprint.totPoints;
208
+ }
209
+ }
210
+ this.initHoveringBuffer();
211
+ }
212
+ get hoveredFootprints() {
213
+ return {
214
+ // metadata: this.footprintsetProps.tapMetadataList,
215
+ metadata: this._metadataManager,
216
+ footprints: this._hoveredFootprints,
217
+ tableName: this._name,
218
+ description: this._description,
219
+ // provider: this.tapRepo.tapBaseUrl
220
+ provider: this._providerUrl,
221
+ };
222
+ }
223
+ get selectedFootprints() {
224
+ return this._selectedFootprints;
225
+ }
226
+ checkClicking(in_mouseHelper) {
227
+ if (in_mouseHelper.x == null ||
228
+ in_mouseHelper.y == null ||
229
+ in_mouseHelper.z == null) {
230
+ return [];
231
+ }
232
+ const clickedIndexes = [];
233
+ const mousePoint = new Point({ x: in_mouseHelper.x, y: in_mouseHelper.y, z: in_mouseHelper.z }, CoordsType.CARTESIAN);
234
+ for (let i = 0; i < this.footprintPolygons.length; i++) {
235
+ const footprint = this.footprintPolygons[i];
236
+ if (!footprint.selectionObj)
237
+ continue;
238
+ if (GeomUtils.checkPointInsidePolygon5(footprint.selectionObj, mousePoint)) {
239
+ clickedIndexes.push(i);
240
+ }
241
+ }
242
+ return clickedIndexes;
243
+ }
244
+ setSelectedIndexes(selectedIndex) {
245
+ selectedIndex.forEach((idx) => {
246
+ if (idx < 0 || idx >= this.footprintPolygons.length)
247
+ return;
248
+ if (this.selectedIndexes.includes(idx)) {
249
+ this.selectedIndexes.splice(this.selectedIndexes.indexOf(idx), 1);
250
+ }
251
+ else {
252
+ this.selectedIndexes.push(idx);
253
+ }
254
+ });
255
+ this.refreshSelectedFootprints();
256
+ }
257
+ refreshSelectedFootprints() {
258
+ this._selectedFootprints = this.selectedIndexes
259
+ .map((idx) => this.footprintPolygons[idx])
260
+ .filter((footprint) => Boolean(footprint));
261
+ this.totSelectedPoints = this._selectedFootprints.reduce((total, footprint) => total + footprint.totPoints, 0);
262
+ if (this._selectedFootprints.length === 0) {
263
+ this.selectedVertexPosition = new Float32Array();
264
+ this.selectedElementIndexes = new Uint32Array();
265
+ this.nSlectedPrimitiveFlags = 0;
266
+ return;
267
+ }
268
+ this.initSelectionBuffer();
269
+ }
270
+ getFootprintsFromPointer(in_mouseHelper) {
271
+ const pickedIndexes = this.checkClicking(in_mouseHelper);
272
+ if (!pickedIndexes.length) {
273
+ return {
274
+ footprints: [],
275
+ pickedIndexes: [],
276
+ };
277
+ }
278
+ const footprints = [];
279
+ pickedIndexes.forEach((idx) => {
280
+ const footprint = this.footprintPolygons[idx];
281
+ if (footprint)
282
+ footprints.push(footprint);
283
+ });
284
+ return footprints.length ? { footprints, pickedIndexes } : null;
285
+ }
286
+ selectPrimaryFootprintFromClick(in_mouseHelper) {
287
+ const picked = this.getFootprintsFromPointer(in_mouseHelper);
288
+ const clickedIndexes = picked?.pickedIndexes ?? [];
289
+ this.setSelectedIndexes(clickedIndexes);
290
+ if (!clickedIndexes.length) {
291
+ return {
292
+ footprints: [],
293
+ selectionState: [],
294
+ };
295
+ }
296
+ const selectionState = [];
297
+ const selectedFootprints = [];
298
+ clickedIndexes.forEach((idx) => {
299
+ const footprint = this.footprintPolygons[idx];
300
+ if (!footprint)
301
+ return;
302
+ const selected = this.selectedIndexes.includes(idx);
303
+ selectionState.push({ footprint, selected });
304
+ selectedFootprints.push(footprint);
305
+ });
306
+ return selectedFootprints.length
307
+ ? { footprints: selectedFootprints, selectionState }
308
+ : null;
309
+ }
310
+ // highlightFootprint(footprint: Footprint, highlighted: boolean) {
311
+ // if (highlighted) {
312
+ // this._hoveredFootprints.push(footprint)
313
+ // this.totHoveredPoints += footprint.totPoints
314
+ // } else {
315
+ // const indexOfFootprint = this._hoveredFootprints.indexOf(footprint)
316
+ // this._hoveredFootprints.splice(indexOfFootprint, 1)
317
+ // this.totHoveredPoints -= footprint.totPoints
318
+ // }
319
+ // this.initHoveringBuffer()
320
+ // }
321
+ /**
322
+ *
323
+ * @param {Footprint[]} footprints
324
+ */
325
+ // addFootprint2Selected(footprints: Footprint[]) {
326
+ // let refreshBuffer = false
327
+ // for (let f of footprints) {
328
+ // if (!this._selectedFootprints.includes(f)) {
329
+ // this._selectedFootprints.push(f)
330
+ // this.totSelectedPoints += f.totPoints
331
+ // refreshBuffer = true
332
+ // }
333
+ // }
334
+ // if (refreshBuffer) {
335
+ // this.initSelectionBuffer()
336
+ // }
337
+ // }
338
+ /**
339
+ *
340
+ * @param {Footprint} footprint
341
+ */
342
+ // removeFootprintFromSelection(footprint: Footprint) {
343
+ // const indexOfObject = this._selectedFootprints.indexOf(footprint)
344
+ // if (indexOfObject >= 0) {
345
+ // this._selectedFootprints.splice(indexOfObject, 1)
346
+ // this.totSelectedPoints -= footprint.totPoints
347
+ // if (this._selectedFootprints.length > 0) {
348
+ // this.initSelectionBuffer()
349
+ // }
350
+ // }
351
+ // }
352
+ FootprintPolygonMatches(left, right) {
353
+ if (left === right)
354
+ return true;
355
+ const leftConvexPoly = left.convexPolygons;
356
+ const rightConvexPoly = right.convexPolygons;
357
+ if (leftConvexPoly !== rightConvexPoly ||
358
+ leftConvexPoly !== rightConvexPoly) {
359
+ return false;
360
+ }
361
+ if (left.details.length !== right.details.length) {
362
+ return false;
363
+ }
364
+ for (let i = 0; i < left.details.length; i++) {
365
+ if (!Object.is(left.details[i], right.details[i])) {
366
+ return false;
367
+ }
368
+ }
369
+ return true;
370
+ }
371
+ findFootprintPolygonIndex(footprint) {
372
+ const footprintIndex = this.footprintPolygons.indexOf(footprint);
373
+ if (footprintIndex >= 0) {
374
+ return footprintIndex;
375
+ }
376
+ return this.footprintPolygons.findIndex((candidate) => this.FootprintPolygonMatches(candidate, footprint));
377
+ }
378
+ extHighlightFootprint(footprint, highlighted) {
379
+ const sIdx = this.findFootprintPolygonIndex(footprint);
380
+ if (sIdx < 0)
381
+ return;
382
+ const base = sIdx * FootprintSetGL.ELEM_SIZE;
383
+ if (highlighted) {
384
+ if (!this.hoveredIndexes.includes(sIdx)) {
385
+ this.hoveredIndexes.push(sIdx);
386
+ }
387
+ }
388
+ else {
389
+ if (base + 4 >= this.vertexCataloguePosition.length)
390
+ return;
391
+ const i = this.hoveredIndexes.indexOf(sIdx);
392
+ if (i >= 0) {
393
+ this.hoveredIndexes.splice(i, 1);
394
+ }
395
+ }
396
+ }
397
+ extAddPolygons2Selected(footprint) {
398
+ if (!this._bufferInitialised) {
399
+ this.initBuffer();
400
+ }
401
+ const sIdx = this.findFootprintPolygonIndex(footprint);
402
+ if (sIdx < 0)
403
+ return;
404
+ const base = sIdx * FootprintSetGL.ELEM_SIZE;
405
+ if (!this.selectedIndexes.includes(sIdx)) {
406
+ this.selectedIndexes.push(sIdx);
407
+ }
408
+ else {
409
+ if (base + 4 >= this.vertexCataloguePosition.length)
410
+ return;
411
+ const i = this.selectedIndexes.indexOf(sIdx);
412
+ if (i >= 0) {
413
+ this.selectedIndexes.splice(i, 1);
414
+ }
415
+ }
416
+ this.refreshSelectedFootprints();
417
+ }
418
+ initHoveringBuffer() {
419
+ /*
420
+ TODO better approach. when creating the indexbuffer of footprints,
421
+ add 1 extra position for the selection (set to 0 == not selected),
422
+ and save the position "positionIndex" in an array (selectionIndexes).
423
+ When checking the selection, I get the index of the footprint, which
424
+ matches with the index in the selectionIndexes to retrieve the position
425
+ of the flag to be set to 1 in the vertexposition
426
+ This will ease checking the selection in the vertex/fragment shader and
427
+ set the pointsize and shape color.
428
+ */
429
+ if (!this._webgl)
430
+ return;
431
+ if (this._hoveredFootprints.length == 0) {
432
+ return;
433
+ }
434
+ let nFootprints = this._hoveredFootprints.length;
435
+ let npolygons = nFootprints - 1;
436
+ for (let j = 0; j < nFootprints; j++) {
437
+ npolygons += this._hoveredFootprints[j].polygons.length - 1;
438
+ }
439
+ // this._selectedIndex = new Uint16Array(this._totSelectedPoints + npolygons);
440
+ // let MAX_UNSIGNED_SHORT = 65535; // this is used to enable and disable GL_PRIMITIVE_RESTART_FIXED_INDEX
441
+ this.hoveredElementIndexes = new Uint32Array(this.totHoveredPoints + npolygons);
442
+ const MAX_UNSIGNED_INT = 0xffffffff; // this is used to enable and disable GL_PRIMITIVE_RESTART_FIXED_INDEX
443
+ // let MAX_UNSIGNED_SHORT = Number.MAX_SAFE_INTEGER;
444
+ this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.hoveredVertexPositionBuffer);
445
+ this.hoveredVertexPosition = new Float32Array(3 * this.totHoveredPoints);
446
+ let positionIndex = 0;
447
+ let vIdx = 0;
448
+ let R = 1.0;
449
+ this.nHoveredPrimitiveFlags = 0;
450
+ for (let j = 0; j < nFootprints; j++) {
451
+ let hoveredFootprintPoly = this._hoveredFootprints[j].polygons;
452
+ if (j > 0) {
453
+ this.hoveredElementIndexes[vIdx] = MAX_UNSIGNED_INT;
454
+ this.nHoveredPrimitiveFlags += 1;
455
+ vIdx += 1;
456
+ }
457
+ for (let polyIdx = 0; polyIdx < hoveredFootprintPoly.length; polyIdx++) {
458
+ if (polyIdx > 0) {
459
+ this.hoveredElementIndexes[vIdx] = MAX_UNSIGNED_INT;
460
+ this.nHoveredPrimitiveFlags += 1;
461
+ vIdx += 1;
462
+ }
463
+ const poly = hoveredFootprintPoly[polyIdx];
464
+ for (let pointIdx = 0; pointIdx < poly.length; pointIdx++) {
465
+ const p = poly[pointIdx];
466
+ this.hoveredVertexPosition[positionIndex] = R * p.x;
467
+ this.hoveredVertexPosition[positionIndex + 1] = R * p.y;
468
+ this.hoveredVertexPosition[positionIndex + 2] = R * p.z;
469
+ this.hoveredElementIndexes[vIdx] = Math.floor(positionIndex / 3);
470
+ vIdx += 1;
471
+ positionIndex += 3;
472
+ }
473
+ }
474
+ }
475
+ }
476
+ initSelectionBuffer() {
477
+ if (!this._webgl)
478
+ return;
479
+ if (this._selectedFootprints.length == 0) {
480
+ return;
481
+ }
482
+ const nFootprints = this._selectedFootprints.length;
483
+ let npolygons = nFootprints - 1;
484
+ for (let j = 0; j < nFootprints; j++) {
485
+ npolygons += this._selectedFootprints[j].polygons.length - 1;
486
+ }
487
+ this.selectedElementIndexes = new Uint32Array(this.totSelectedPoints + npolygons);
488
+ const MAX_UNSIGNED_INT = 0xffffffff;
489
+ this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.selectedVertexPositionBuffer);
490
+ this.selectedVertexPosition = new Float32Array(3 * this.totSelectedPoints);
491
+ let positionIndex = 0;
492
+ let vIdx = 0;
493
+ const R = 1.0;
494
+ this.nSlectedPrimitiveFlags = 0;
495
+ for (let j = 0; j < nFootprints; j++) {
496
+ const footprintPoly = this._selectedFootprints[j].polygons;
497
+ if (j > 0) {
498
+ this.selectedElementIndexes[vIdx] = MAX_UNSIGNED_INT;
499
+ this.nSlectedPrimitiveFlags += 1;
500
+ vIdx += 1;
501
+ }
502
+ for (let polyIdx = 0; polyIdx < footprintPoly.length; polyIdx++) {
503
+ if (polyIdx > 0) {
504
+ this.selectedElementIndexes[vIdx] = MAX_UNSIGNED_INT;
505
+ this.nSlectedPrimitiveFlags += 1;
506
+ vIdx += 1;
507
+ }
508
+ const poly = footprintPoly[polyIdx];
509
+ for (let pointIdx = 0; pointIdx < poly.length; pointIdx++) {
510
+ const p = poly[pointIdx];
511
+ this.selectedVertexPosition[positionIndex] = R * p.x;
512
+ this.selectedVertexPosition[positionIndex + 1] = R * p.y;
513
+ this.selectedVertexPosition[positionIndex + 2] = R * p.z;
514
+ this.selectedElementIndexes[vIdx] = Math.floor(positionIndex / 3);
515
+ vIdx += 1;
516
+ positionIndex += 3;
517
+ }
518
+ }
519
+ }
520
+ }
521
+ changeColor(color) {
522
+ this._shapeColor = color;
523
+ }
524
+ draw(in_mMatrix, in_mouseHelper, vMatrix, pMatrix) {
525
+ if (!this.isVisible)
526
+ return;
527
+ if (!this._ready)
528
+ return;
529
+ if (!vMatrix)
530
+ return;
531
+ // if (!global.camera) return
532
+ if (!this._bufferInitialised)
533
+ this.initBuffer();
534
+ if (!this._webgl)
535
+ return;
536
+ this._footprintShaderProgram.enableShaders(pMatrix, in_mMatrix, vMatrix);
537
+ // this._footprintShaderProgram.enableShaders(
538
+ // computePerspectiveMatrixSingleton.pMatrix as Float32Array,
539
+ // in_mMatrix,
540
+ // vMatrix
541
+ // )
542
+ if (in_mouseHelper != null && in_mouseHelper.xyz != this.oldMouseCoords) {
543
+ this.checkSelection(in_mouseHelper);
544
+ }
545
+ if (this._hoveredFootprints.length > 0) {
546
+ // TODO POINT_SIZE doesn't have any effect on line thickness!! it only applies to points
547
+ const rgb = colorHex2RGB("#00FF00");
548
+ const alpha = 1.0;
549
+ this._webgl.uniform4f(this._footprintShaderProgram.locations.color, rgb[0], rgb[1], rgb[2], alpha);
550
+ this._webgl.uniform1f(this._footprintShaderProgram.locations.pointSize, 14.0); // <--- POINT_SIZE in LINE_LOOP is not applicable
551
+ this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.hoveredVertexPositionBuffer);
552
+ this._webgl.bufferData(this._webgl.ARRAY_BUFFER, this.hoveredVertexPosition, this._webgl.STATIC_DRAW);
553
+ // setting footprint position
554
+ this._webgl.vertexAttribPointer(this._footprintShaderProgram.locations.position, FootprintSetGL.ELEM_SIZE, this._webgl.FLOAT, false, FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE, 0);
555
+ this._webgl.enableVertexAttribArray(this._footprintShaderProgram.locations.position);
556
+ this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, this.hoveredIndexBuffer);
557
+ this._webgl.bufferData(this._webgl.ELEMENT_ARRAY_BUFFER, this.hoveredElementIndexes, this._webgl.STATIC_DRAW);
558
+ // this._gl.drawElements (this._gl.LINE_LOOP, this._selectedVertexPosition.length / 3 + this._nSlectedPrimitiveFlags,this._gl.UNSIGNED_SHORT, 0);
559
+ this._webgl.drawElements(this._webgl.LINE_LOOP, this.hoveredVertexPosition.length / 3 + this.nHoveredPrimitiveFlags, this._webgl.UNSIGNED_INT, 0);
560
+ }
561
+ if (this._selectedFootprints.length > 0) {
562
+ const rgb = colorHex2RGB("#ECB462");
563
+ const alpha = 1.0;
564
+ this._webgl.uniform4f(this._footprintShaderProgram.locations.color, rgb[0], rgb[1], rgb[2], alpha);
565
+ this._webgl.uniform1f(this._footprintShaderProgram.locations.pointSize, 14.0); // <--- POINT_SIZE in LINE_LOOP is not applicable
566
+ this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.selectedVertexPositionBuffer);
567
+ this._webgl.bufferData(this._webgl.ARRAY_BUFFER, this.selectedVertexPosition, this._webgl.STATIC_DRAW);
568
+ // setting footprint position
569
+ this._webgl.vertexAttribPointer(this._footprintShaderProgram.locations.position, FootprintSetGL.ELEM_SIZE, this._webgl.FLOAT, false, FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE, 0);
570
+ this._webgl.enableVertexAttribArray(this._footprintShaderProgram.locations.position);
571
+ this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, this.selectedIndexBuffer);
572
+ this._webgl.bufferData(this._webgl.ELEMENT_ARRAY_BUFFER, this.selectedElementIndexes, this._webgl.STATIC_DRAW);
573
+ // this._gl.drawElements (this._gl.LINE_LOOP, this._selectedVertexPosition.length / 3 + this._nSlectedPrimitiveFlags,this._gl.UNSIGNED_SHORT, 0);
574
+ this._webgl.drawElements(this._webgl.LINE_LOOP, this.selectedVertexPosition.length / 3 + this.nSlectedPrimitiveFlags, this._webgl.UNSIGNED_INT, 0);
575
+ }
576
+ this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, this.vertexCataloguePositionBuffer);
577
+ this._webgl.bufferData(this._webgl.ARRAY_BUFFER, this.vertexCataloguePosition, this._webgl.STATIC_DRAW);
578
+ this._webgl.vertexAttribPointer(this._footprintShaderProgram.locations.position, FootprintSetGL.ELEM_SIZE, this._webgl.FLOAT, false, FootprintSetGL.BYTES_X_ELEM * FootprintSetGL.ELEM_SIZE, 0);
579
+ this._webgl.enableVertexAttribArray(this._footprintShaderProgram.locations.position);
580
+ this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
581
+ this._webgl.bufferData(this._webgl.ELEMENT_ARRAY_BUFFER, this.indexes, this._webgl.STATIC_DRAW);
582
+ // const shapeColor = [...colorHex2RGB(this.footprintsetProps.shapeColor), 1.0] as [number, number, number, number]
583
+ const shapeColor = [...colorHex2RGB(this._shapeColor), 1.0];
584
+ this._webgl.uniform4f(this._footprintShaderProgram.locations.color, ...shapeColor);
585
+ this._webgl.drawElements(this._webgl.LINE_LOOP, this.indexes.length, this._webgl.UNSIGNED_INT, 0);
586
+ this._webgl.bindBuffer(this._webgl.ARRAY_BUFFER, null);
587
+ this._webgl.bindBuffer(this._webgl.ELEMENT_ARRAY_BUFFER, null);
588
+ this.oldMouseCoords = in_mouseHelper.xyz;
589
+ }
590
+ }
591
+ // export default FootprintSetGL
592
+ //# sourceMappingURL=FootprintSetGL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FootprintSetGL.js","sourceRoot":"","sources":["../../../src/model/footprints/FootprintSetGL.ts"],"names":[],"mappings":"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"}