@pirireis/webglobeplugins 0.9.9 → 0.9.11

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 (212) hide show
  1. package/Math/angle-calculation.js +15 -0
  2. package/Math/arc.js +65 -0
  3. package/Math/bounds/line-bbox.js +190 -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 +58 -0
  14. package/Math/matrix4.js +1 -0
  15. package/Math/methods.js +206 -0
  16. package/Math/plane.js +62 -0
  17. package/Math/quaternion.js +108 -0
  18. package/Math/types.js +2 -0
  19. package/Math/utils.js +4 -0
  20. package/Math/vec3.js +129 -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 +19 -0
  24. package/altitude-locator/keymethod.js +1 -0
  25. package/altitude-locator/plugin.js +357 -0
  26. package/altitude-locator/types.js +23 -0
  27. package/arrowfield/adaptor.js +15 -0
  28. package/arrowfield/index.js +10 -0
  29. package/arrowfield/plugin.js +89 -0
  30. package/bearing-line/index.js +8 -0
  31. package/bearing-line/plugin.js +474 -0
  32. package/circle-line-chain/chain-list-map.js +211 -0
  33. package/circle-line-chain/init.js +1 -0
  34. package/circle-line-chain/plugin.js +449 -0
  35. package/circle-line-chain/util.js +5 -0
  36. package/compass-rose/compass-rose-padding-flat.js +247 -0
  37. package/compass-rose/compass-text-writer.js +161 -0
  38. package/compass-rose/index.js +7 -0
  39. package/compassrose/compassrose.js +300 -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 +206 -0
  44. package/heatwave/isobar/plugin.js +362 -0
  45. package/heatwave/isobar/quadtreecontours.js +316 -0
  46. package/heatwave/plugins/heatwaveglobeshell.js +224 -0
  47. package/index.js +11 -11
  48. package/jest.config.js +7 -0
  49. package/package.json +4 -4
  50. package/partialrings/buffer-manager.js +113 -0
  51. package/partialrings/index.js +41 -0
  52. package/partialrings/plugin.js +171 -0
  53. package/partialrings/program.js +197 -0
  54. package/pin/pin-object-array.js +308 -0
  55. package/pin/pin-point-totem.js +61 -0
  56. package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
  57. package/point-heat-map/index.js +1 -0
  58. package/point-heat-map/plugin-webworker.js +131 -0
  59. package/point-heat-map/point-to-heat-map-flow.js +129 -0
  60. package/point-tracks/key-methods.js +5 -0
  61. package/point-tracks/plugin.js +353 -0
  62. package/programs/arrowfield/index.js +7 -0
  63. package/programs/arrowfield/logic.js +149 -0
  64. package/programs/arrowfield/object.js +68 -0
  65. package/programs/data2legend/density-to-legend.js +77 -0
  66. package/programs/data2legend/point-to-density-texture.js +75 -0
  67. package/programs/float2legendwithratio/index.js +8 -0
  68. package/programs/float2legendwithratio/logic.js +125 -0
  69. package/programs/float2legendwithratio/object.js +113 -0
  70. package/programs/globe-util/is-globe-moved.js +22 -0
  71. package/programs/globeshell/index.js +8 -0
  72. package/programs/globeshell/noise/noises.js +1 -0
  73. package/programs/globeshell/wiggle/index.js +8 -0
  74. package/programs/globeshell/wiggle/logic.js +252 -0
  75. package/programs/globeshell/wiggle/object.js +74 -0
  76. package/programs/helpers/blender/index.js +1 -0
  77. package/programs/helpers/blender/program.js +62 -0
  78. package/programs/helpers/fadeaway/index.js +7 -0
  79. package/programs/helpers/fadeaway/logic.js +50 -0
  80. package/programs/helpers/fadeaway/object.js +21 -0
  81. package/programs/helpers/index.js +8 -0
  82. package/programs/index.js +58 -0
  83. package/programs/interface.js +1 -0
  84. package/programs/line-on-globe/angled-line.js +117 -0
  85. package/programs/line-on-globe/circle-accurate-3d.js +91 -0
  86. package/programs/line-on-globe/circle-accurate-flat.js +158 -0
  87. package/programs/line-on-globe/circle-accurate.js +108 -0
  88. package/programs/line-on-globe/circle.js +102 -0
  89. package/programs/line-on-globe/degree-padding-around-circle-3d.js +109 -0
  90. package/programs/line-on-globe/index.js +1 -0
  91. package/programs/line-on-globe/lines-color-instanced-flat.js +91 -0
  92. package/programs/line-on-globe/linestrip.js +110 -0
  93. package/programs/line-on-globe/naive-accurate-flexible.js +125 -0
  94. package/programs/line-on-globe/to-the-surface.js +82 -0
  95. package/programs/line-on-globe/util.js +8 -0
  96. package/programs/picking/pickable-renderer.js +104 -0
  97. package/programs/point-on-globe/element-globe-surface-glow.js +102 -0
  98. package/programs/point-on-globe/element-point-glow.js +85 -0
  99. package/programs/point-on-globe/square-pixel-point.js +125 -0
  100. package/programs/programcache.js +131 -0
  101. package/programs/rings/distancering/circleflatprogram.js +114 -0
  102. package/programs/rings/distancering/circlepaddingfreeangleprogram.js +358 -0
  103. package/programs/rings/distancering/circlepaddysharedbuffer.js +433 -0
  104. package/programs/rings/distancering/index.js +14 -0
  105. package/programs/rings/distancering/paddyflatprogram.js +119 -0
  106. package/programs/rings/distancering/paddyflatprogram2d.js +121 -0
  107. package/programs/rings/distancering/paddyflatprogram3d.js +119 -0
  108. package/programs/rings/distancering/shader.js +1 -0
  109. package/programs/rings/index.js +17 -0
  110. package/programs/rings/partial-ring/piece-of-pie.js +173 -0
  111. package/programs/totems/camerauniformblock.js +147 -0
  112. package/programs/totems/canvas-webglobe-info.js +102 -0
  113. package/programs/totems/gpu-selection-uniform-block.js +104 -0
  114. package/programs/totems/index.js +40 -0
  115. package/programs/two-d/pixel-circle.js +1 -0
  116. package/programs/two-d/pixel-padding-for-compass.js +101 -0
  117. package/programs/util.js +18 -0
  118. package/programs/vectorfields/index.js +23 -0
  119. package/programs/vectorfields/logics/drawrectangleparticles.js +66 -0
  120. package/programs/vectorfields/logics/index.js +12 -0
  121. package/programs/vectorfields/logics/pixelbased.js +86 -0
  122. package/programs/vectorfields/logics/ubo.js +57 -0
  123. package/programs/vectorfields/pingpongbuffermanager.js +80 -0
  124. package/rangerings/enum.js +5 -0
  125. package/rangerings/index.js +15 -0
  126. package/rangerings/plugin.js +610 -0
  127. package/rangerings/rangeringangletext.js +341 -0
  128. package/rangerings/ring-account.js +134 -0
  129. package/shaders/fragment-toy/firework.js +4 -0
  130. package/shaders/fragment-toy/singularity.js +5 -0
  131. package/shape-on-terrain/arc/naive/plugin.js +252 -0
  132. package/timetracks/adaptors-line-strip.js +82 -0
  133. package/timetracks/adaptors.js +136 -0
  134. package/timetracks/index.js +19 -0
  135. package/timetracks/plugin-line-strip.js +254 -0
  136. package/timetracks/plugin.js +262 -0
  137. package/timetracks/program-line-strip.js +418 -0
  138. package/timetracks/program.js +466 -0
  139. package/timetracks/programpoint-line-strip.js +101 -0
  140. package/timetracks/programpoint.js +101 -0
  141. package/types.js +15 -0
  142. package/util/account/bufferoffsetmanager.js +202 -0
  143. package/util/account/index.js +23 -0
  144. package/util/account/single-attribute-buffer-management/buffer-manager.js +112 -0
  145. package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +180 -0
  146. package/util/account/single-attribute-buffer-management/index.js +9 -0
  147. package/util/account/single-attribute-buffer-management/object-store.js +53 -0
  148. package/util/account/single-attribute-buffer-management/types.js +2 -0
  149. package/util/account/util.js +24 -0
  150. package/util/algorithms/index.js +1 -0
  151. package/util/algorithms/search-binary.js +28 -0
  152. package/util/check/get.js +18 -0
  153. package/util/check/index.js +1 -0
  154. package/util/check/typecheck.js +51 -0
  155. package/util/geometry/index.js +53 -0
  156. package/util/gl-util/buffer/attribute-loader.js +81 -0
  157. package/util/gl-util/buffer/index.js +6 -0
  158. package/util/gl-util/buffer/types.js +1 -0
  159. package/util/gl-util/draw-options/methods.js +38 -0
  160. package/util/gl-util/draw-options/types.js +15 -0
  161. package/util/gl-util/uniform-block/manager.js +168 -0
  162. package/util/gl-util/uniform-block/shader.js +1 -0
  163. package/util/gl-util/uniform-block/types.js +8 -0
  164. package/util/heatwavedatamanager/datamanager.js +212 -0
  165. package/util/heatwavedatamanager/index.js +10 -0
  166. package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +125 -0
  167. package/util/heatwavedatamanager/pointcoordsmeta.js +21 -0
  168. package/util/index.js +57 -0
  169. package/util/interpolation/index.js +1 -0
  170. package/util/interpolation/timetrack/index.js +5 -0
  171. package/util/interpolation/timetrack/timetrack-interpolator.js +81 -0
  172. package/util/interpolation/timetrack/web-worker-str.js +5 -0
  173. package/util/interpolation/timetrack/web-worker.js +48 -0
  174. package/util/jshelpers/data-filler.js +20 -0
  175. package/util/jshelpers/equality.js +20 -0
  176. package/util/jshelpers/index.js +37 -0
  177. package/util/jshelpers/timefilters.js +32 -0
  178. package/util/picking/fence.js +46 -0
  179. package/util/picking/picker-displayer.js +145 -0
  180. package/util/programs/draw-texture-on-canvas.js +71 -0
  181. package/util/programs/index.js +17 -0
  182. package/util/programs/shapesonglobe.js +174 -0
  183. package/util/programs/supersampletotextures.js +107 -0
  184. package/util/programs/texturetoglobe.js +132 -0
  185. package/util/shaderfunctions/geometrytransformations.js +45 -0
  186. package/util/shaderfunctions/index.js +18 -0
  187. package/util/shaderfunctions/nodata.js +5 -0
  188. package/util/shaderfunctions/noisefunctions.js +13 -0
  189. package/util/surface-line-data/arc-bboxes.js +25 -0
  190. package/util/surface-line-data/arcs-to-cuts.js +53 -0
  191. package/util/surface-line-data/cut-arc.js +1 -0
  192. package/util/surface-line-data/flow.js +28 -0
  193. package/util/surface-line-data/rbush-manager.js +1 -0
  194. package/util/surface-line-data/types.js +1 -0
  195. package/util/surface-line-data/web-worker.js +1 -0
  196. package/util/webglobe/gldefaultstates.js +7 -0
  197. package/util/webglobe/index.js +18 -0
  198. package/util/webglobe/rasteroverlay.js +80 -0
  199. package/util/webglobjectbuilders.js +393 -0
  200. package/util/webglobjectbuilders1.js +238 -0
  201. package/waveparticles/adaptor.js +18 -0
  202. package/waveparticles/index.js +10 -0
  203. package/waveparticles/plugin.js +271 -0
  204. package/wind/imagetovectorfieldandmagnitude.js +35 -0
  205. package/wind/index.js +14 -0
  206. package/wind/plugin.js +724 -0
  207. package/wind/vectorfieldimage.js +25 -0
  208. package/write-text/attached-text-writer.js +93 -0
  209. package/write-text/context-text.js +105 -0
  210. package/write-text/context-text3.js +160 -0
  211. package/write-text/index.js +5 -0
  212. package/write-text/writer-plugin.js +8 -0
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function getVectorField(u, v, width, height, vMin, vMax, uMin, uMax, flip) {
4
+ var data = new Uint8ClampedArray(width * height * 4);
5
+ for (var row = 0; row < height; row++) {
6
+ for (var col = 0; col < width; col++) {
7
+ var k = flip ? ((height - row - 1) * width + col) : row * width + col;
8
+ var idx = (width * row + col) << 2; // Multiply by 4 for RGBA
9
+ if (u[k] === null || v[k] === null || isNaN(u[k]) || !isFinite(u[k]) || isNaN(v[k]) || !isFinite(v[k])) {
10
+ data[idx] = 0; // R
11
+ data[idx + 1] = 0; // G
12
+ data[idx + 2] = 0; // B
13
+ data[idx + 3] = 0; // A
14
+ }
15
+ else {
16
+ data[idx] = Math.floor(255 * (u[k] - uMin) / (uMax - uMin)); // R
17
+ data[idx + 1] = Math.floor(255 * (v[k] - vMin) / (vMax - vMin)); // G
18
+ data[idx + 2] = 0; // B
19
+ data[idx + 3] = 255; // A
20
+ }
21
+ }
22
+ }
23
+ return data;
24
+ }
25
+ exports.default = getVectorField;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AttachedTextWriter = void 0;
4
+ var webglobe_1 = require("@pirireis/webglobe");
5
+ var typecheck_1 = require("../util/check/typecheck");
6
+ /**
7
+ * Light wight version of context text writer.
8
+ * The parameters by text are calculated on user side and inserted as items. (ContextTextWriter3 constructs text data from items)
9
+ *
10
+ * Good side of ContextTextWriters pattern is that there is only one way to create text.
11
+ * The glue is inside the plugin.
12
+ * This makes the code more readable and maintainable.
13
+ *
14
+ * With AttachedTextWriter the glue is created by user.
15
+ * I observed that the users generally uses a wrapper around the plugin logic anyway. This wrapper can be used as the glue for plugin and attacked writer.
16
+ */
17
+ var AttachedTextWriter = /** @class */ (function () {
18
+ function AttachedTextWriter(globe, _a) {
19
+ var _b = _a === void 0 ? {} : _a, _c = _b.style, style = _c === void 0 ? {
20
+ textFont: {
21
+ name: 'Arial',
22
+ textColor: '#FFFFFF', // beyaz
23
+ hollowColor: '#000000', // siyah
24
+ size: 12, // piksel
25
+ hollow: true,
26
+ bold: true,
27
+ italic: false,
28
+ },
29
+ opacity: 1.0,
30
+ zMode: webglobe_1.CSZMode.Z_GROUND_PERVERTEX,
31
+ } : _c, _d = _b.doDraw, doDraw = _d === void 0 ? true : _d, _e = _b.angleOnSphere, angleOnSphere = _e === void 0 ? false : _e, _f = _b.zoomLevelAdaptor, zoomLevelAdaptor = _f === void 0 ? function (zoomLevel) { return function (item) {
32
+ return {
33
+ opacityMultiplier: 1,
34
+ sizeMultiplier: 1
35
+ };
36
+ }; } : _f;
37
+ this.globe = globe;
38
+ this._itemMap = new Map();
39
+ this.doDraw = doDraw;
40
+ this.angleOnSphere = angleOnSphere;
41
+ this.zoomLevelAdaptor = zoomLevelAdaptor;
42
+ this.setStyle(style);
43
+ }
44
+ AttachedTextWriter.prototype.setOpacity = function (opacity) {
45
+ (0, typecheck_1.opacityCheck)(opacity);
46
+ this._style.opacity = opacity;
47
+ this.globe.DrawRender();
48
+ };
49
+ AttachedTextWriter.prototype.setStyle = function (style) {
50
+ (0, typecheck_1.isTextFont)(style.textFont);
51
+ this._style = style;
52
+ this.globe.DrawRender();
53
+ };
54
+ /**
55
+ *
56
+ * @param {{text, long, lat, z = 0, xOffset = 0, yOffset = 0, isAngleOn = false, Angle = 0 }} item
57
+ * @returns
58
+ */
59
+ AttachedTextWriter.prototype.insertItem = function (item) {
60
+ var key = this.keyAdaptor ? this.keyAdaptor(item) : item;
61
+ this._itemMap.set(key, item);
62
+ this.globe.DrawRender();
63
+ };
64
+ // TODO: use item style
65
+ AttachedTextWriter.prototype.draw = function () {
66
+ if (!this.doDraw) {
67
+ return;
68
+ }
69
+ var _a = this, globe = _a.globe, _itemMap = _a._itemMap, _style = _a._style;
70
+ var zMode = _style.zMode, textFont = _style.textFont, opacity = _style.opacity;
71
+ var is3D = globe.api_GetCurrentGeometry() === 0;
72
+ var angleIsOn = is3D ? true : this.angleOnSphere;
73
+ var zoomLevel = globe.api_GetCurrentLODWithDecimal();
74
+ var zoomAdaptor = this.zoomLevelAdaptor(zoomLevel);
75
+ var theSize = textFont.size;
76
+ _itemMap.forEach(function (item, key) {
77
+ var text = item.text, long = item.long, lat = item.lat, _a = item.z, z = _a === void 0 ? 0 : _a, _b = item.xOffset, xOffset = _b === void 0 ? 0 : _b, _c = item.yOffset, yOffset = _c === void 0 ? 0 : _c, _d = item.isAngleOn, isAngleOn = _d === void 0 ? false : _d, _e = item.angle, angle = _e === void 0 ? 0 : _e;
78
+ var _f = globe.api_GetScreenPointFromGeo({
79
+ long: long,
80
+ lat: lat,
81
+ z: z
82
+ }, zMode), x = _f.x, y = _f.y;
83
+ var _g = zoomAdaptor(item), opacityMultiplier = _g.opacityMultiplier, sizeMultiplier = _g.sizeMultiplier;
84
+ textFont.size = sizeMultiplier * theSize;
85
+ if (x !== null && y !== null) {
86
+ globe.api_DrawContextText(text, textFont, opacityMultiplier * opacity, { x: x + xOffset, y: y - yOffset }, (isAngleOn && angleIsOn), angle);
87
+ }
88
+ });
89
+ textFont.size = theSize;
90
+ };
91
+ return AttachedTextWriter;
92
+ }());
93
+ exports.AttachedTextWriter = AttachedTextWriter;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextTextWriter = void 0;
4
+ var webglobe_1 = require("@pirireis/webglobe");
5
+ var defaultStyle = {
6
+ textFont: {
7
+ name: 'Arial',
8
+ textColor: '#FFFFFF', // beyaz
9
+ hollowColor: '#000000', // siyah
10
+ size: 12, // piksel
11
+ hollow: true,
12
+ bold: true,
13
+ italic: false,
14
+ },
15
+ opacity: 1.0,
16
+ zMode: webglobe_1.CSZMode.Z_GROUND_PERVERTEX,
17
+ };
18
+ var ContextTextWriter = /** @class */ (function () {
19
+ function ContextTextWriter(globe, _a) {
20
+ var _b = _a === void 0 ? {} : _a, _c = _b.style, style = _c === void 0 ? null : _c, _d = _b.doDraw, doDraw = _d === void 0 ? true : _d;
21
+ this.globe = globe;
22
+ this.itemMap = new Map();
23
+ this.style = style || defaultStyle;
24
+ this.doDraw = doDraw;
25
+ }
26
+ ContextTextWriter.prototype.setDoDraw = function (bool) {
27
+ this.doDraw = bool;
28
+ };
29
+ ContextTextWriter.prototype.setStyle = function (style) {
30
+ this.style = style;
31
+ };
32
+ ContextTextWriter.prototype.setOpacity = function (opacity) {
33
+ this.style.opacity = opacity;
34
+ };
35
+ // Clean this ask Front dev
36
+ ContextTextWriter.prototype.doDraw = function (boolean) {
37
+ this.doDraw = boolean;
38
+ };
39
+ ContextTextWriter.prototype.draw = function () {
40
+ if (!this.doDraw)
41
+ return;
42
+ var _a = this, globe = _a.globe, style = _a.style, itemMap = _a.itemMap;
43
+ var textFont = style.textFont, opacity_ = style.opacity;
44
+ for (var _i = 0, itemMap_1 = itemMap; _i < itemMap_1.length; _i++) {
45
+ var _b = itemMap_1[_i], key = _b[0], _c = _b[1], lat = _c.lat, long = _c.long, text = _c.text, _d = _c.opacity, opacity = _d === void 0 ? null : _d;
46
+ var _e = globe.api_GetScreenPointFromGeo({
47
+ long: long,
48
+ lat: lat,
49
+ z: 0,
50
+ }, style.zMode === webglobe_1.CSZMode.Z_MSL), x = _e.x, y = _e.y;
51
+ var o = opacity === null ? opacity_ : opacity * opacity_;
52
+ if (x !== null && y !== null)
53
+ globe.api_DrawContextTextMultiLine(text, textFont, o, { x: x, y: y });
54
+ }
55
+ };
56
+ ContextTextWriter.prototype.insertText = function (key, lat, long, text) {
57
+ this.itemMap.set(key, { lat: lat, long: long, text: text });
58
+ };
59
+ ContextTextWriter.prototype.updateOpacityOfItem = function (key, opacity) {
60
+ this.itemMap.get(key).opacity = opacity;
61
+ };
62
+ ContextTextWriter.prototype.updateOpacityBulk = function (items, keyAdaptor, valueAdaptor) {
63
+ for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
64
+ var item = items_1[_i];
65
+ var key = keyAdaptor(item);
66
+ var opacity = valueAdaptor(item);
67
+ var data = this.itemMap.get(key);
68
+ data.opacity = opacity;
69
+ }
70
+ };
71
+ ContextTextWriter.prototype.updateText = function (key, text) {
72
+ var item = this.itemMap.get(key);
73
+ item.text = text;
74
+ };
75
+ ContextTextWriter.prototype.updateCoords = function (key, lat, long) {
76
+ var item = this.itemMap.get(key);
77
+ item.lat = lat;
78
+ item.long = long;
79
+ };
80
+ ContextTextWriter.prototype.insertTextBulk = function (items) {
81
+ for (var _i = 0, items_2 = items; _i < items_2.length; _i++) {
82
+ var item = items_2[_i];
83
+ this.itemMap.set(item.key, item);
84
+ }
85
+ };
86
+ ContextTextWriter.prototype.updateTextCoordsBulk = function (items) {
87
+ for (var _i = 0, items_3 = items; _i < items_3.length; _i++) {
88
+ var _a = items_3[_i], key = _a.key, lat = _a.lat, long = _a.long;
89
+ var item = this.itemMap.get(key);
90
+ item.lat = lat;
91
+ item.long = long;
92
+ }
93
+ };
94
+ ContextTextWriter.prototype.deleteTextBulk = function (keys) {
95
+ for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
96
+ var key = keys_1[_i];
97
+ this.itemMap.delete(key);
98
+ }
99
+ };
100
+ ContextTextWriter.prototype.clear = function () {
101
+ this.itemMap.clear();
102
+ };
103
+ return ContextTextWriter;
104
+ }());
105
+ exports.ContextTextWriter = ContextTextWriter;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextTextWriter3 = void 0;
4
+ var webglobe_1 = require("@pirireis/webglobe");
5
+ var typecheck_1 = require("../util/check/typecheck");
6
+ /**
7
+ * TODOs:
8
+ * 1) update all if initials change (propably need a context and a callback to iterate over zPayload)
9
+ * 2) expose a mechanic to update text on zoom change
10
+ * 3) extend the mechanic on 2 to other events
11
+ *
12
+ * TODO: key check and raise error if doesnt exist
13
+ */
14
+ var ContextTextWriter3 = /** @class */ (function () {
15
+ function ContextTextWriter3(globe, _a) {
16
+ var _b = _a === void 0 ? {} : _a, _c = _b.style, style = _c === void 0 ? {
17
+ textFont: {
18
+ name: 'Arial',
19
+ textColor: '#FFFFFF', // beyaz
20
+ hollowColor: '#000000', // siyah
21
+ size: 12, // piksel
22
+ hollow: true,
23
+ bold: true,
24
+ italic: false,
25
+ },
26
+ opacity: 1.0,
27
+ zMode: webglobe_1.CSZMode.Z_GROUND_PERVERTEX,
28
+ } : _c, _d = _b.xOffset, xOffset = _d === void 0 ? 0 : _d, _e = _b.yOffset, yOffset = _e === void 0 ? 0 : _e, _f = _b.doDraw, doDraw = _f === void 0 ? true : _f, _g = _b.textAdaptor, textAdaptor = _g === void 0 ? null : _g, _h = _b.coordinatesAdaptor, coordinatesAdaptor = _h === void 0 ? null : _h, _j = _b.keyAdaptor, keyAdaptor = _j === void 0 ? null : _j, _k = _b.opacityAdaptor, opacityAdaptor = _k === void 0 ? null : _k, _l = _b.angleAdaptor, angleAdaptor = _l === void 0 ? null : _l, _m = _b.angleOnSphere, angleOnSphere = _m === void 0 ? false : _m, _o = _b.positionAdaptor, positionAdaptor = _o === void 0 ? function (item, i, container, properties) { return "left"; } : _o, _p = _b.zoomLevelAdaptor, zoomLevelAdaptor = _p === void 0 ? function (zoomLevel) { return function (item) {
29
+ return {
30
+ opacityMultiplier: 1,
31
+ sizeMultiplier: 1
32
+ };
33
+ }; } : _p;
34
+ this.globe = globe;
35
+ this.itemMap = new Map();
36
+ this.setStyle(style);
37
+ this.doDraw = doDraw;
38
+ this._checkParameterTypes(textAdaptor, coordinatesAdaptor, keyAdaptor, opacityAdaptor, angleAdaptor, xOffset, yOffset);
39
+ this.textAdaptor = textAdaptor;
40
+ this.coordinatesAdaptor = coordinatesAdaptor;
41
+ this.keyAdaptor = keyAdaptor;
42
+ this.zoomLevelAdaptor = zoomLevelAdaptor;
43
+ this.positionAdaptor = positionAdaptor;
44
+ this.opacityAdaptor = opacityAdaptor ? opacityAdaptor : function () { return 1; };
45
+ this.angleOnSphere = angleOnSphere;
46
+ if (angleAdaptor) {
47
+ this.angleAdaptor = angleAdaptor;
48
+ this.angleAdaptorIsOn = true;
49
+ }
50
+ else {
51
+ this.angleAdaptor = function () { return null; };
52
+ this.angleAdaptorIsOn = false;
53
+ }
54
+ this.xOffset = xOffset;
55
+ this.yOffset = yOffset;
56
+ }
57
+ ContextTextWriter3.prototype._checkParameterTypes = function (textAdaptor, coordinatesAdaptor, keyAdaptor, opacityAdaptor, angleAdaptor, xOffset, yOffset) {
58
+ if (textAdaptor !== null)
59
+ if (!(textAdaptor instanceof Function))
60
+ throw new Error("textAdaptor is not an instance of a Function");
61
+ if (coordinatesAdaptor !== null)
62
+ if (!(coordinatesAdaptor instanceof Function))
63
+ throw new Error("coordinatesAdaptor is not an instance of a Function");
64
+ if (keyAdaptor !== null)
65
+ if (!(keyAdaptor instanceof Function))
66
+ throw new Error("keyAdaptor is not an instance of a Function");
67
+ if (opacityAdaptor !== null)
68
+ if (!(opacityAdaptor instanceof Function))
69
+ throw new Error("opacityAdaptor is not an instance of a Function");
70
+ if (angleAdaptor !== null)
71
+ if (!(angleAdaptor instanceof Function))
72
+ throw new Error("angleAdaptor is not an instance of a Function");
73
+ if (typeof xOffset !== "number")
74
+ throw new Error("xOffset type is not a number");
75
+ if (typeof yOffset !== "number")
76
+ throw new Error("yOffset type is not a number");
77
+ };
78
+ ContextTextWriter3.prototype.setKeyAdaptor = function (adaptor) {
79
+ this.keyAdaptor = adaptor;
80
+ };
81
+ ContextTextWriter3.prototype.setDoDraw = function (bool) {
82
+ this.doDraw = bool;
83
+ this.globe.DrawRender();
84
+ };
85
+ ContextTextWriter3.prototype.setStyle = function (style) {
86
+ (0, typecheck_1.isTextFont)(style.textFont);
87
+ (0, typecheck_1.opacityCheck)(style.opacity); //TODO: use shallow copy
88
+ this.style = style;
89
+ this.globe.DrawRender();
90
+ };
91
+ ContextTextWriter3.prototype.setOpacity = function (opacity) {
92
+ this.style.opacity = opacity;
93
+ this.globe.DrawRender();
94
+ };
95
+ ContextTextWriter3.prototype.draw = function () {
96
+ if (!this.doDraw)
97
+ return;
98
+ var _a = this, globe = _a.globe, style = _a.style, itemMap = _a.itemMap, xOffset = _a.xOffset, yOffset = _a.yOffset;
99
+ var textFont = style.textFont, opacity_ = style.opacity;
100
+ var textSize = textFont.size;
101
+ var is3D = globe.api_GetCurrentGeometry() === 0;
102
+ var angleIsOn = is3D ? (this.angleAdaptorIsOn && this.angleOnSphere) : (this.angleAdaptorIsOn);
103
+ var zoomLevel = globe.api_GetCurrentLODWithDecimal();
104
+ var zoomAdaptor = this.zoomLevelAdaptor(zoomLevel);
105
+ for (var _i = 0, _b = itemMap.values(); _i < _b.length; _i++) {
106
+ var item = _b[_i];
107
+ var lat = item.lat, long = item.long, text = item.text, _c = item.opacity, opacity = _c === void 0 ? null : _c, _d = item.angle, angle = _d === void 0 ? null : _d, zPayload = item.zPayload, position = item.position;
108
+ var _e = globe.api_GetScreenPointFromGeo({
109
+ long: long,
110
+ lat: lat,
111
+ z: 0,
112
+ }, style.zMode === webglobe_1.CSZMode.Z_MSL), x = _e.x, y = _e.y;
113
+ var _f = zoomAdaptor(zPayload), opacityMultiplier = _f.opacityMultiplier, sizeMultiplier = _f.sizeMultiplier;
114
+ var o = (opacity === null ? opacity_ : opacity * opacity_) * opacityMultiplier;
115
+ textFont.size = sizeMultiplier * textSize;
116
+ textFont.position = position;
117
+ if (x !== null && y !== null)
118
+ globe.api_DrawContextTextMultiLine(text, textFont, o, { x: x + xOffset, y: y - yOffset }, angleIsOn, angle);
119
+ }
120
+ textFont.size = textSize;
121
+ };
122
+ ContextTextWriter3.prototype.insertTextBulk = function (container, properties) {
123
+ var _this = this;
124
+ container.forEach(function (v, i, c) {
125
+ _this.insertText(v, i, c, properties);
126
+ });
127
+ };
128
+ ContextTextWriter3.prototype.deleteTextBulk = function (keys) {
129
+ for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
130
+ var key = keys_1[_i];
131
+ this.itemMap.delete(key);
132
+ }
133
+ };
134
+ ContextTextWriter3.prototype.insertText = function (item, id, container, properties) {
135
+ var key = this.keyAdaptor(item, id, container, properties);
136
+ var coords = this.coordinatesAdaptor(item, id, container, properties);
137
+ if (coords == null) {
138
+ this.itemMap.delete(key);
139
+ return;
140
+ }
141
+ var text = this.textAdaptor(item, id, container, properties);
142
+ if (text == null) {
143
+ this.itemMap.delete(key);
144
+ return;
145
+ }
146
+ ;
147
+ var opacity = this.opacityAdaptor(item, id, container, properties);
148
+ var angle = this.angleAdaptor(item, id, container, properties);
149
+ var position = this.positionAdaptor(item, id, container, properties);
150
+ this.itemMap.set(key, { long: coords.long, lat: coords.lat, text: text, opacity: opacity, angle: angle, zPayload: item, position: position });
151
+ };
152
+ ContextTextWriter3.prototype.clear = function () {
153
+ this.itemMap.clear();
154
+ };
155
+ ContextTextWriter3.prototype.free = function () {
156
+ this.itemMap = null;
157
+ };
158
+ return ContextTextWriter3;
159
+ }());
160
+ exports.ContextTextWriter3 = ContextTextWriter3;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextTextWriter = void 0;
4
+ var context_text_1 = require("./context-text");
5
+ Object.defineProperty(exports, "ContextTextWriter", { enumerable: true, get: function () { return context_text_1.ContextTextWriter; } });
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ /**
3
+ * registerMap(id, aMap, textFont)
4
+ * aMap key, object map.
5
+ * aMap is a specifical tem for a use case.
6
+ * The object has { text, long, lat, opacity, angle, zPayload, achor, xOffset, yOffset, ...extraPropertiesForZoomLevelAdaptor } properties.
7
+ * the plugin runs over items in aMap and draw text on the globe.
8
+ */