@pirireis/webglobeplugins 0.9.9 → 0.9.10

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 (211) hide show
  1. package/Math/angle-calculation.js +15 -0
  2. package/Math/arc.js +65 -0
  3. package/Math/bounds/line-bbox.js +188 -0
  4. package/Math/constants.js +9 -0
  5. package/Math/frustum/camera.js +24 -0
  6. package/Math/frustum/from-globeinfo.js +48 -0
  7. package/Math/frustum/types.js +2 -0
  8. package/Math/globe-util/horizon-plane.js +112 -0
  9. package/Math/index.js +1 -0
  10. package/Math/juction/arc-plane.js +83 -0
  11. package/Math/juction/line-sphere.js +25 -0
  12. package/Math/juction/plane-plane.js +58 -0
  13. package/Math/line.js +56 -0
  14. package/Math/matrix4.js +1 -0
  15. package/Math/methods.js +201 -0
  16. package/Math/plane.js +60 -0
  17. package/Math/quaternion.js +104 -0
  18. package/Math/types.js +2 -0
  19. package/Math/utils.js +4 -0
  20. package/Math/vec3.js +126 -0
  21. package/algorithms/search-binary.js +19 -0
  22. package/altitude-locator/adaptors.js +1 -0
  23. package/altitude-locator/draw-subset-obj.js +18 -0
  24. package/altitude-locator/keymethod.js +1 -0
  25. package/altitude-locator/plugin.js +341 -0
  26. package/altitude-locator/types.js +23 -0
  27. package/arrowfield/adaptor.js +14 -0
  28. package/arrowfield/index.js +10 -0
  29. package/arrowfield/plugin.js +86 -0
  30. package/bearing-line/index.js +8 -0
  31. package/bearing-line/plugin.js +449 -0
  32. package/circle-line-chain/chain-list-map.js +205 -0
  33. package/circle-line-chain/init.js +1 -0
  34. package/circle-line-chain/plugin.js +424 -0
  35. package/circle-line-chain/util.js +5 -0
  36. package/compass-rose/compass-rose-padding-flat.js +225 -0
  37. package/compass-rose/compass-text-writer.js +153 -0
  38. package/compass-rose/index.js +7 -0
  39. package/compassrose/compassrose.js +296 -0
  40. package/compassrose/index.js +8 -0
  41. package/globe-types.js +1 -0
  42. package/heatwave/index.js +10 -0
  43. package/heatwave/isobar/objectarraylabels.js +202 -0
  44. package/heatwave/isobar/plugin.js +343 -0
  45. package/heatwave/isobar/quadtreecontours.js +300 -0
  46. package/heatwave/plugins/heatwaveglobeshell.js +206 -0
  47. package/jest.config.js +7 -0
  48. package/package.json +4 -4
  49. package/partialrings/buffer-manager.js +81 -0
  50. package/partialrings/index.js +41 -0
  51. package/partialrings/plugin.js +135 -0
  52. package/partialrings/program.js +286 -0
  53. package/pin/pin-object-array.js +305 -0
  54. package/pin/pin-point-totem.js +60 -0
  55. package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
  56. package/point-heat-map/index.js +1 -0
  57. package/point-heat-map/plugin-webworker.js +126 -0
  58. package/point-heat-map/point-to-heat-map-flow.js +127 -0
  59. package/point-tracks/key-methods.js +5 -0
  60. package/point-tracks/plugin.js +338 -0
  61. package/programs/arrowfield/index.js +7 -0
  62. package/programs/arrowfield/logic.js +257 -0
  63. package/programs/arrowfield/object.js +66 -0
  64. package/programs/data2legend/density-to-legend.js +101 -0
  65. package/programs/data2legend/point-to-density-texture.js +100 -0
  66. package/programs/float2legendwithratio/index.js +8 -0
  67. package/programs/float2legendwithratio/logic.js +171 -0
  68. package/programs/float2legendwithratio/object.js +110 -0
  69. package/programs/globe-util/is-globe-moved.js +21 -0
  70. package/programs/globeshell/index.js +8 -0
  71. package/programs/globeshell/noise/noises.js +1 -0
  72. package/programs/globeshell/wiggle/index.js +8 -0
  73. package/programs/globeshell/wiggle/logic.js +345 -0
  74. package/programs/globeshell/wiggle/object.js +72 -0
  75. package/programs/helpers/blender/index.js +1 -0
  76. package/programs/helpers/blender/program.js +79 -0
  77. package/programs/helpers/fadeaway/index.js +7 -0
  78. package/programs/helpers/fadeaway/logic.js +72 -0
  79. package/programs/helpers/fadeaway/object.js +20 -0
  80. package/programs/helpers/index.js +8 -0
  81. package/programs/index.js +58 -0
  82. package/programs/interface.js +1 -0
  83. package/programs/line-on-globe/angled-line.js +176 -0
  84. package/programs/line-on-globe/circle-accurate-3d.js +141 -0
  85. package/programs/line-on-globe/circle-accurate-flat.js +216 -0
  86. package/programs/line-on-globe/circle-accurate.js +178 -0
  87. package/programs/line-on-globe/circle.js +167 -0
  88. package/programs/line-on-globe/degree-padding-around-circle-3d.js +159 -0
  89. package/programs/line-on-globe/index.js +1 -0
  90. package/programs/line-on-globe/lines-color-instanced-flat.js +136 -0
  91. package/programs/line-on-globe/linestrip.js +171 -0
  92. package/programs/line-on-globe/naive-accurate-flexible.js +195 -0
  93. package/programs/line-on-globe/to-the-surface.js +111 -0
  94. package/programs/line-on-globe/util.js +8 -0
  95. package/programs/picking/pickable-renderer.js +188 -0
  96. package/programs/point-on-globe/element-globe-surface-glow.js +142 -0
  97. package/programs/point-on-globe/element-point-glow.js +153 -0
  98. package/programs/point-on-globe/square-pixel-point.js +174 -0
  99. package/programs/programcache.js +131 -0
  100. package/programs/rings/distancering/circleflatprogram.js +156 -0
  101. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +369 -0
  102. package/programs/rings/distancering/circlepaddysharedbuffer.js +357 -0
  103. package/programs/rings/distancering/index.js +14 -0
  104. package/programs/rings/distancering/paddyflatprogram.js +172 -0
  105. package/programs/rings/distancering/paddyflatprogram2d.js +174 -0
  106. package/programs/rings/distancering/paddyflatprogram3d.js +172 -0
  107. package/programs/rings/distancering/shader.js +1 -0
  108. package/programs/rings/index.js +17 -0
  109. package/programs/rings/partial-ring/piece-of-pie.js +275 -0
  110. package/programs/totems/camerauniformblock.js +160 -0
  111. package/programs/totems/canvas-webglobe-info.js +110 -0
  112. package/programs/totems/gpu-selection-uniform-block.js +108 -0
  113. package/programs/totems/index.js +40 -0
  114. package/programs/two-d/pixel-circle.js +1 -0
  115. package/programs/two-d/pixel-padding-for-compass.js +162 -0
  116. package/programs/util.js +17 -0
  117. package/programs/vectorfields/index.js +23 -0
  118. package/programs/vectorfields/logics/drawrectangleparticles.js +107 -0
  119. package/programs/vectorfields/logics/index.js +12 -0
  120. package/programs/vectorfields/logics/pixelbased.js +142 -0
  121. package/programs/vectorfields/logics/ubo.js +63 -0
  122. package/programs/vectorfields/pingpongbuffermanager.js +76 -0
  123. package/rangerings/enum.js +5 -0
  124. package/rangerings/index.js +15 -0
  125. package/rangerings/plugin.js +560 -0
  126. package/rangerings/rangeringangletext.js +329 -0
  127. package/rangerings/ring-account.js +117 -0
  128. package/shaders/fragment-toy/firework.js +58 -0
  129. package/shaders/fragment-toy/singularity.js +59 -0
  130. package/shape-on-terrain/arc/naive/plugin.js +252 -0
  131. package/timetracks/adaptors-line-strip.js +71 -0
  132. package/timetracks/adaptors.js +122 -0
  133. package/timetracks/index.js +19 -0
  134. package/timetracks/plugin-line-strip.js +250 -0
  135. package/timetracks/plugin.js +258 -0
  136. package/timetracks/program-line-strip.js +611 -0
  137. package/timetracks/program.js +772 -0
  138. package/timetracks/programpoint-line-strip.js +154 -0
  139. package/timetracks/programpoint.js +147 -0
  140. package/types.js +15 -0
  141. package/util/account/bufferoffsetmanager.js +179 -0
  142. package/util/account/index.js +23 -0
  143. package/util/account/single-attribute-buffer-management/buffer-manager.js +108 -0
  144. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +150 -0
  145. package/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/util/account/single-attribute-buffer-management/object-store.js +51 -0
  147. package/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/util/account/util.js +22 -0
  149. package/util/algorithms/index.js +1 -0
  150. package/util/algorithms/search-binary.js +28 -0
  151. package/util/check/get.js +18 -0
  152. package/util/check/index.js +1 -0
  153. package/util/check/typecheck.js +49 -0
  154. package/util/geometry/index.js +51 -0
  155. package/util/gl-util/buffer/attribute-loader.js +69 -0
  156. package/util/gl-util/buffer/index.js +6 -0
  157. package/util/gl-util/buffer/types.js +1 -0
  158. package/util/gl-util/draw-options/methods.js +38 -0
  159. package/util/gl-util/draw-options/types.js +15 -0
  160. package/util/gl-util/uniform-block/manager.js +156 -0
  161. package/util/gl-util/uniform-block/shader.js +1 -0
  162. package/util/gl-util/uniform-block/types.js +8 -0
  163. package/util/heatwavedatamanager/datamanager.js +152 -0
  164. package/util/heatwavedatamanager/index.js +10 -0
  165. package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -0
  166. package/util/heatwavedatamanager/pointcoordsmeta.js +20 -0
  167. package/util/index.js +57 -0
  168. package/util/interpolation/index.js +1 -0
  169. package/util/interpolation/timetrack/index.js +5 -0
  170. package/util/interpolation/timetrack/timetrack-interpolator.js +79 -0
  171. package/util/interpolation/timetrack/web-worker-str.js +183 -0
  172. package/util/interpolation/timetrack/web-worker.js +48 -0
  173. package/util/jshelpers/data-filler.js +20 -0
  174. package/util/jshelpers/equality.js +20 -0
  175. package/util/jshelpers/index.js +37 -0
  176. package/util/jshelpers/timefilters.js +32 -0
  177. package/util/picking/fence.js +46 -0
  178. package/util/picking/picker-displayer.js +139 -0
  179. package/util/programs/draw-texture-on-canvas.js +89 -0
  180. package/util/programs/index.js +17 -0
  181. package/util/programs/shapesonglobe.js +214 -0
  182. package/util/programs/supersampletotextures.js +113 -0
  183. package/util/programs/texturetoglobe.js +182 -0
  184. package/util/shaderfunctions/geometrytransformations.js +340 -0
  185. package/util/shaderfunctions/index.js +18 -0
  186. package/util/shaderfunctions/nodata.js +11 -0
  187. package/util/shaderfunctions/noisefunctions.js +43 -0
  188. package/util/surface-line-data/arc-bboxes.js +25 -0
  189. package/util/surface-line-data/arcs-to-cuts.js +50 -0
  190. package/util/surface-line-data/cut-arc.js +1 -0
  191. package/util/surface-line-data/flow.js +28 -0
  192. package/util/surface-line-data/rbush-manager.js +1 -0
  193. package/util/surface-line-data/types.js +1 -0
  194. package/util/surface-line-data/web-worker.js +1 -0
  195. package/util/webglobe/gldefaultstates.js +7 -0
  196. package/util/webglobe/index.js +18 -0
  197. package/util/webglobe/rasteroverlay.js +78 -0
  198. package/util/webglobjectbuilders.js +388 -0
  199. package/util/webglobjectbuilders1.js +237 -0
  200. package/waveparticles/adaptor.js +17 -0
  201. package/waveparticles/index.js +10 -0
  202. package/waveparticles/plugin.js +266 -0
  203. package/wind/imagetovectorfieldandmagnitude.js +35 -0
  204. package/wind/index.js +14 -0
  205. package/wind/plugin.js +926 -0
  206. package/wind/vectorfieldimage.js +25 -0
  207. package/write-text/attached-text-writer.js +91 -0
  208. package/write-text/context-text.js +98 -0
  209. package/write-text/context-text3.js +155 -0
  210. package/write-text/index.js +5 -0
  211. package/write-text/writer-plugin.js +8 -0
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BufferOrchestrator = void 0;
4
+ const EXTRA_SIZE = 10;
5
+ class BufferOrchestrator {
6
+ constructor({ capacity = 10 } = {}) {
7
+ this._capacity = capacity;
8
+ this.offsetMap = new Map();
9
+ this.tombstoneOffsets = [];
10
+ this._length = 0;
11
+ }
12
+ resetWithCapacity(bufferManagersMap, capacity = null) {
13
+ this._capacity = capacity !== null ? capacity : this._capacity;
14
+ for (const [key, { bufferManager }] of bufferManagersMap) {
15
+ bufferManager.resetWithCapacity(this._capacity);
16
+ }
17
+ this.offsetMap.clear();
18
+ this.tombstoneOffsets = [];
19
+ this._length = 0;
20
+ }
21
+ insertBulk(items, bufferManagersMap) {
22
+ this.autoExtendBuffers(items.length, bufferManagersMap);
23
+ const { offsetMap } = this;
24
+ const offsets = [];
25
+ for (const item of items) {
26
+ let o = offsetMap.get(item.key);
27
+ const offset = o !== undefined ? o : this.nextOffset();
28
+ offsetMap.set(item.key, offset);
29
+ offsets.push(offset);
30
+ }
31
+ for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
32
+ bufferManager.insertBulk(items.map(adaptor), offsets);
33
+ }
34
+ }
35
+ // does not assign offset to the new items.
36
+ updateBulk(items, bufferManagersMap, bufferKeys = null) {
37
+ const { offsetMap } = this;
38
+ const offsets = [];
39
+ for (const item of items) {
40
+ const offset = offsetMap.get(item.key);
41
+ if (offset !== undefined) {
42
+ offsets.push(offset);
43
+ }
44
+ else {
45
+ throw new Error("updateBulk item Key does not exist");
46
+ }
47
+ }
48
+ if (bufferKeys) {
49
+ for (const key of bufferKeys) {
50
+ const bufferManagerComp = bufferManagersMap.get(key);
51
+ if (bufferManagerComp === undefined)
52
+ throw new Error("updateBulk bufferKey does not exist");
53
+ const { bufferManager, adaptor } = bufferManagerComp;
54
+ bufferManager.insertBulk(items.map(adaptor), offsets);
55
+ }
56
+ }
57
+ else {
58
+ for (const [key, { bufferManager, adaptor }] of bufferManagersMap) {
59
+ bufferManager.insertBulk(items.map(adaptor), offsets);
60
+ }
61
+ }
62
+ }
63
+ deleteBulk(keys, bufferManagersMap) {
64
+ const offsets = [];
65
+ for (const key of keys) {
66
+ const offset = this.getOffset(key);
67
+ if (offset !== undefined) {
68
+ offsets.push(offset);
69
+ this.offsetMap.delete(key);
70
+ this.tombstoneOffsets.push(offset);
71
+ }
72
+ }
73
+ for (const [key, { bufferManager }] of bufferManagersMap) {
74
+ bufferManager.deleteBulk(offsets);
75
+ }
76
+ }
77
+ getOffset(key) {
78
+ return this.offsetMap.get(key);
79
+ }
80
+ nextOffset() {
81
+ if (this.tombstoneOffsets.length > 0) {
82
+ const offset = this.tombstoneOffsets.pop();
83
+ return offset;
84
+ }
85
+ if (this._length < this._capacity) {
86
+ return this._length++;
87
+ }
88
+ return false;
89
+ }
90
+ autoExtendBuffers(itemsLength, bufferManagersMap) {
91
+ if (itemsLength <= this.emptySpace)
92
+ return;
93
+ const newCapacity = this.length + itemsLength;
94
+ for (const [key, { bufferManager }] of bufferManagersMap) {
95
+ bufferManager.extendBuffer(this.length, newCapacity);
96
+ }
97
+ this._capacity = newCapacity;
98
+ }
99
+ defrag(bufferManagers, bufferKeys) {
100
+ const offsetMap = this.offsetMap;
101
+ const newCapacity = offsetMap.size + EXTRA_SIZE;
102
+ if (bufferKeys) {
103
+ for (const key of bufferKeys) {
104
+ const offset = offsetMap.get(key);
105
+ if (offset !== undefined) {
106
+ for (const [key, { bufferManager }] of bufferManagers) {
107
+ bufferManager.defrag([offset], this.length, newCapacity);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ else {
113
+ for (const [key, { bufferManager }] of bufferManagers) {
114
+ bufferManager.defrag(offsetMap.values(), this.length, newCapacity);
115
+ }
116
+ }
117
+ this._defrag();
118
+ this._length = offsetMap.size;
119
+ this._capacity = newCapacity;
120
+ this.tombstoneOffsets = [];
121
+ }
122
+ /**
123
+ * Flushes metadata and sets length to 0 without actualize change on buffers
124
+ * This method created for cases in which data is loaded on each frame
125
+ */
126
+ flush({ capacity = 10 } = {}) {
127
+ this._length = 0;
128
+ this._capacity = capacity;
129
+ this.tombstoneOffsets = [];
130
+ this.offsetMap.clear();
131
+ }
132
+ _defrag() {
133
+ const newOffsetMap = new Map();
134
+ let newOffset = 0;
135
+ for (const [key, offset] of this.offsetMap) {
136
+ newOffsetMap.set(key, newOffset++);
137
+ }
138
+ this.offsetMap = newOffsetMap;
139
+ }
140
+ get length() {
141
+ return this._length;
142
+ }
143
+ get emptySpace() {
144
+ return this._capacity - this.offsetMap.size;
145
+ }
146
+ get capacity() {
147
+ return this._capacity;
148
+ }
149
+ }
150
+ exports.BufferOrchestrator = BufferOrchestrator;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObjectStore = exports.BufferManager = exports.BufferOrchestrator = void 0;
4
+ const buffer_orchestrator_1 = require("./buffer-orchestrator");
5
+ Object.defineProperty(exports, "BufferOrchestrator", { enumerable: true, get: function () { return buffer_orchestrator_1.BufferOrchestrator; } });
6
+ const buffer_manager_1 = require("./buffer-manager");
7
+ Object.defineProperty(exports, "BufferManager", { enumerable: true, get: function () { return buffer_manager_1.BufferManager; } });
8
+ const object_store_1 = require("./object-store");
9
+ Object.defineProperty(exports, "ObjectStore", { enumerable: true, get: function () { return object_store_1.ObjectStore; } });
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ObjectStore = void 0;
4
+ class ObjectStore {
5
+ constructor({ initialCapcity = 10 } = {}) {
6
+ this._container = this._createEmptyList(initialCapcity);
7
+ }
8
+ resetWithCapacity(capacity) {
9
+ this._container = this._createEmptyList(capacity);
10
+ }
11
+ deleteBulk(offsets) {
12
+ for (let i = 0; i < offsets.length; i++) {
13
+ const offset = offsets[i];
14
+ if (offset !== undefined) {
15
+ this._container[offset] = null;
16
+ }
17
+ }
18
+ }
19
+ insertBulk(objects, offsets) {
20
+ for (let i = 0; i < objects.length; i++) {
21
+ const object = objects[i];
22
+ const offset = offsets[i];
23
+ if (offset !== undefined) {
24
+ this._container[offset] = object;
25
+ }
26
+ }
27
+ }
28
+ defrag(offsetValues, occupiedCapacity, newCapacity) {
29
+ const hold = this._createEmptyList(newCapacity);
30
+ for (let i = 0; i < offsetValues.length; i++) {
31
+ const offset = offsetValues[i];
32
+ if (offset !== undefined) {
33
+ hold[i] = this._container[offset];
34
+ }
35
+ }
36
+ this._container = hold;
37
+ }
38
+ extendBuffer(occupiedCapacity, newCapacity) {
39
+ const oldCapacity = this._container.length;
40
+ this._container = this._container.concat(this._createEmptyList(newCapacity - oldCapacity));
41
+ }
42
+ _createEmptyList(size) {
43
+ return new Array(size).fill(null);
44
+ }
45
+ get(index) {
46
+ return this._container[index];
47
+ }
48
+ free() {
49
+ }
50
+ }
51
+ exports.ObjectStore = ObjectStore;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.vaoAttributeLoader = void 0;
4
+ const vaoAttributeLoader = (gl, buffer, index, size, stride, offset, divisor = null, type = null) => {
5
+ if (!gl || !buffer) {
6
+ throw new Error("Invalid WebGL context or buffer");
7
+ }
8
+ if (index < 0) {
9
+ throw new Error("Attribute index must be non-negative");
10
+ }
11
+ if (stride < 0 || offset < 0) {
12
+ throw new Error("Stride and offset must be non-negative");
13
+ }
14
+ const attribType = type === null ? gl.FLOAT : type;
15
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
16
+ gl.enableVertexAttribArray(index);
17
+ gl.vertexAttribPointer(index, size, attribType, false, stride, offset);
18
+ if (divisor !== null) {
19
+ gl.vertexAttribDivisor(index, divisor);
20
+ }
21
+ };
22
+ exports.vaoAttributeLoader = vaoAttributeLoader;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * @typedef {Array<number>} ListLike
4
+ * @typedef {number || null} Index
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.findFirstIndexInRange = void 0;
8
+ /**
9
+ * @param {ListLike} container
10
+ * @param {number} value
11
+ * @returns {Index}
12
+ */
13
+ const findFirstIndexInRange = (container, value) => {
14
+ let start = 0;
15
+ let end = container.length - 1;
16
+ let mid = 0;
17
+ while (start <= end) {
18
+ mid = Math.floor((start + end) / 2);
19
+ if (container[mid] <= value && value <= container[mid + 1])
20
+ return mid;
21
+ if (container[mid] < value)
22
+ start = mid + 1;
23
+ else
24
+ end = mid - 1;
25
+ }
26
+ return null;
27
+ };
28
+ exports.findFirstIndexInRange = findFirstIndexInRange;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapGetOrThrow = void 0;
4
+ const mapGetOrThrow = (errorNote) => {
5
+ return (mapInstance, ids) => {
6
+ if (!ids)
7
+ throw new Error("There is no map keys to get");
8
+ const result = [];
9
+ for (let i = 0; i < ids.length; i++) {
10
+ const e = mapInstance.get(ids[i]);
11
+ if (e === undefined)
12
+ throw new Error(errorNote + " " + ids[i]);
13
+ result.push(e);
14
+ }
15
+ return result;
16
+ };
17
+ };
18
+ exports.mapGetOrThrow = mapGetOrThrow;
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ // Generic
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isBoolean = exports.constraintFloat = exports.isTextFont = exports.opacityCheck = exports.isHexColorWithOpacity = exports.isHexColor = void 0;
5
+ const doesOwnProperties = (properties, errorMessage) => {
6
+ return (object) => {
7
+ properties.forEach(element => {
8
+ if (!Object.hasOwn(object, element))
9
+ throw new TypeError(errorMessage + ':' + element);
10
+ });
11
+ };
12
+ };
13
+ const isHexColor = (hexColor) => /^#[0-9A-F]{6}$/i.test(hexColor);
14
+ exports.isHexColor = isHexColor;
15
+ const isHexColorWithOpacity = (hexColor) => /^#[0-9A-F]{6}[0-9a-f]{0,2}$/i.test(hexColor);
16
+ exports.isHexColorWithOpacity = isHexColorWithOpacity;
17
+ const opacityCheck = (opacity) => {
18
+ if (typeof opacity !== "number")
19
+ throw new TypeError("style.opacity must a number");
20
+ if (opacity < 0 || 1 < opacity)
21
+ throw new RangeError("Opacity Range Must be 0-1");
22
+ };
23
+ exports.opacityCheck = opacityCheck;
24
+ // Text Related
25
+ const fontCheckTypes = doesOwnProperties(["name", "textColor", "hollowColor", "size", "bold", "italic"], "font does not have");
26
+ const fontCheckColors = (textColor, hollowColor) => (0, exports.isHexColor)(textColor) && (0, exports.isHexColor)(hollowColor);
27
+ const isTextFont = (textFont) => {
28
+ fontCheckTypes(textFont);
29
+ fontCheckColors(textFont.textColor, textFont.hollowColor);
30
+ if (typeof textFont.size !== "number")
31
+ throw new TypeError("textFont size is not a number");
32
+ };
33
+ exports.isTextFont = isTextFont;
34
+ const constraintFloat = (x, lowerBound = null, upperBound = null) => {
35
+ if (typeof x !== "number")
36
+ throw new Error("type must be numberic");
37
+ if (lowerBound === null && upperBound === null)
38
+ return;
39
+ if (lowerBound !== null && lowerBound > x)
40
+ throw new Error(`input must be greater than ${lowerBound}`);
41
+ if (upperBound !== null && x > upperBound)
42
+ throw new Error(`input must be less than ${upperBound}`);
43
+ };
44
+ exports.constraintFloat = constraintFloat;
45
+ const isBoolean = (x) => {
46
+ if (typeof x !== "boolean")
47
+ throw new TypeError("type must be boolean");
48
+ };
49
+ exports.isBoolean = isBoolean;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBBoxMatrix = createBBoxMatrix;
4
+ exports.latLongToPixelXY = latLongToPixelXY;
5
+ exports.latLongBboxtoPixelXYBbox = latLongBboxtoPixelXYBbox;
6
+ exports.sphereCoord = sphereCoord;
7
+ exports.normalize = normalize;
8
+ function latLongToPixelXY(latitude, longitude) {
9
+ return {
10
+ x: (longitude + 180) / 360,
11
+ y: (90 - latitude) / 180
12
+ };
13
+ }
14
+ /**
15
+ * createBBoxMatrix( minX, maxX, minY, maxY)
16
+ * use this matrix to transform a point from 0 to 1 range to the bounding box
17
+ * for example: Transform image coordinates to map coordinates
18
+ * glsl`vec3 pos = u_bbox_matrix * vec3(v_particle_pos.x, v_particle_pos.y, 1.0);`
19
+ */
20
+ function createBBoxMatrix(minX, maxX, minY, maxY) {
21
+ return new Float32Array([
22
+ maxX - minX, 0, 0,
23
+ 0, maxY - minY, 0,
24
+ minX, minY, 1
25
+ ]);
26
+ }
27
+ function latLongBboxtoPixelXYBbox(minX, minY, maxX, maxY) {
28
+ const minXY = latLongToPixelXY(minY, minX);
29
+ const maxXY = latLongToPixelXY(maxY, maxX);
30
+ return createBBoxMatrix(minXY.x, maxXY.x, minXY.y, maxXY.y);
31
+ }
32
+ /**
33
+ *
34
+ * @param {Float32List} array
35
+ * @returns {Float32Array}
36
+ */
37
+ function normalize(array, newLength = 1) {
38
+ let total = 0;
39
+ for (let i = 0; i < array.length; i++) {
40
+ total += array[i] * array[i];
41
+ }
42
+ const len = newLength / Math.sqrt(total);
43
+ const result = new Float32Array(array.length);
44
+ for (let i = 0; i < array.length; i++) {
45
+ result[i] = array[i] * len;
46
+ }
47
+ return result;
48
+ }
49
+ function sphereCoord(long, lat, globe, height = 0) {
50
+ return normalize(globe.api_GetCartesian3DPoint(long, lat, 0, 0), 6378.137 + height);
51
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBufferAndReadInfo = exports.attributeLoader = void 0;
4
+ require("./types");
5
+ /**
6
+ * @typedef BufferAndReadInfo Buffers can be intertwined or interleaved.
7
+ * This object forces user to adapt generic convention of buffer and read information.
8
+ * @type {Object}
9
+ * @property {WebGLBuffer} buffer
10
+ * @property {number} stride
11
+ * @property {number} offset
12
+ */
13
+ /**
14
+ *
15
+ * @param {WebGLBuffer} gl
16
+ * @param {BufferAndReadInfo} bufferAndReadInfo
17
+ * @param {number} index
18
+ * @param {number} size
19
+ * @param {Object} options
20
+ * @param {*} options.type | default gl.FLOAT, gl.UNSIGNED_BYTE, gl.SHORT, gl.UNSIGNED_SHORT, gl.INT, gl.UNSIGNED_INT
21
+ * @param {number} options.divisor
22
+ * @param {Array<number>} options.escapeValues
23
+ * @returns
24
+ */
25
+ const attributeLoader = (gl, bufferAndReadInfo, index, size, { divisor = null, type = null, escapeValues = null, normalized = false } = {}) => {
26
+ if (size < 1 || size > 4)
27
+ throw new Error("Size must be between 1 and 4");
28
+ if (bufferAndReadInfo == null) {
29
+ if (escapeValues !== null)
30
+ constantFunction(gl, index, size, escapeValues);
31
+ return;
32
+ }
33
+ const { buffer, stride, offset } = bufferAndReadInfo;
34
+ if (!gl || !buffer) {
35
+ throw new Error("Invalid WebGL context or buffer");
36
+ }
37
+ if (index < 0) {
38
+ throw new Error("Attribute index must be non-negative");
39
+ }
40
+ if (stride < 0 || offset < 0) {
41
+ throw new Error("Stride and offset must be non-negative");
42
+ }
43
+ const attribType = type === null ? gl.FLOAT : type;
44
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
45
+ gl.enableVertexAttribArray(index);
46
+ gl.vertexAttribPointer(index, size, attribType, normalized, stride, offset);
47
+ if (divisor !== null) {
48
+ gl.vertexAttribDivisor(index, divisor);
49
+ }
50
+ };
51
+ exports.attributeLoader = attributeLoader;
52
+ /**
53
+ *
54
+ * @param {WebGLBuffer} buffer
55
+ * @param {number} stride
56
+ * @param {number} offset
57
+ * @returns {BufferAndReadInfo}
58
+ */
59
+ const createBufferAndReadInfo = (buffer, stride = 0, offset = 0) => {
60
+ if (buffer == null)
61
+ return null;
62
+ return { buffer, stride, offset };
63
+ };
64
+ exports.createBufferAndReadInfo = createBufferAndReadInfo;
65
+ const constantFunction = (gl, index, size, escapeValues) => {
66
+ const func = `vertexAttrib${size}f`;
67
+ // @ts-ignore
68
+ gl[func](index, ...escapeValues);
69
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ // import './types';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.attributeLoader = void 0;
5
+ const attribute_loader_1 = require("./attribute-loader");
6
+ Object.defineProperty(exports, "attributeLoader", { enumerable: true, get: function () { return attribute_loader_1.attributeLoader; } });
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.drawInstanced = exports.drawArrays = void 0;
4
+ require("./types");
5
+ /**
6
+ * Draws instanced geometry using WebGL2.
7
+ */
8
+ const drawInstanced = (gl, mode, drawOptions, vertexCount) => {
9
+ var _a;
10
+ const { drawRange, elementBufferIndexType = gl.UNSIGNED_INT } = drawOptions;
11
+ const { first = 0, count: instanceCount = 1 } = drawRange;
12
+ if (first > 0 || drawOptions.elementBuffer) {
13
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, (_a = drawOptions.elementBuffer) !== null && _a !== void 0 ? _a : null);
14
+ gl.drawElementsInstanced(mode, vertexCount, elementBufferIndexType, first, instanceCount);
15
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
16
+ }
17
+ else {
18
+ gl.drawArraysInstanced(mode, first, vertexCount, instanceCount);
19
+ }
20
+ };
21
+ exports.drawInstanced = drawInstanced;
22
+ /**
23
+ * Draws geometry using WebGL2.
24
+ */
25
+ const drawArrays = (gl, defaultMode, drawOptions) => {
26
+ const { drawRange, elementBuffer, elementBufferIndexType = gl.UNSIGNED_INT, drawMode = null } = drawOptions;
27
+ const { first = 0, count } = drawRange;
28
+ const mode = drawMode !== null && drawMode !== void 0 ? drawMode : defaultMode;
29
+ if (elementBuffer) {
30
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementBuffer);
31
+ gl.drawElements(mode, count, elementBufferIndexType, first);
32
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
33
+ }
34
+ else {
35
+ gl.drawArrays(mode, first, count);
36
+ }
37
+ };
38
+ exports.drawArrays = drawArrays;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ /**
3
+ * @typedef DrawRange
4
+ * @type {Object}
5
+ * @property {int} first
6
+ * @property {int} count
7
+ *
8
+ * @typedef DrawRangeIndexParams
9
+ * @type {Object}
10
+ * @property {null|DrawRange} drawRange
11
+ * @property {null|ElementBuffer} elementBuffer
12
+ * @property {null|indexType} indexType
13
+ * @property {null|int} drawMode
14
+ *
15
+ */