@pirireis/webglobeplugins 0.9.6 → 0.9.8

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 (304) hide show
  1. package/{Math → dist/Math}/angle-calculation.js +15 -14
  2. package/dist/Math/arc.js +65 -0
  3. package/{Math → dist/Math}/bounds/line-bbox.js +188 -225
  4. package/dist/Math/constants.js +9 -0
  5. package/{Math/frustum/camera.ts → dist/Math/frustum/camera.js} +24 -32
  6. package/{Math/frustum/from-globeinfo.ts → dist/Math/frustum/from-globeinfo.js} +48 -63
  7. package/dist/Math/frustum/types.js +2 -0
  8. package/{Math/globe-util/horizon-plane.ts → dist/Math/globe-util/horizon-plane.js} +112 -137
  9. package/dist/Math/index.js +1 -0
  10. package/dist/Math/juction/arc-plane.js +83 -0
  11. package/dist/Math/juction/line-sphere.js +25 -0
  12. package/{Math/juction/plane-plane.ts → dist/Math/juction/plane-plane.js} +58 -66
  13. package/dist/Math/line.js +56 -0
  14. package/dist/Math/matrix4.js +1 -0
  15. package/{Math → dist/Math}/methods.js +201 -237
  16. package/dist/Math/plane.js +60 -0
  17. package/{Math/quaternion.ts → dist/Math/quaternion.js} +104 -120
  18. package/dist/Math/types.js +2 -0
  19. package/dist/Math/utils.js +4 -0
  20. package/{Math/vec3.ts → dist/Math/vec3.js} +126 -155
  21. package/dist/algorithms/search-binary.js +19 -0
  22. package/dist/altitude-locator/adaptors.js +1 -0
  23. package/{altitude-locator → dist/altitude-locator}/draw-subset-obj.js +18 -27
  24. package/dist/altitude-locator/keymethod.js +1 -0
  25. package/{altitude-locator → dist/altitude-locator}/plugin.js +341 -439
  26. package/{altitude-locator → dist/altitude-locator}/types.js +23 -26
  27. package/{arrowfield → dist/arrowfield}/adaptor.js +14 -11
  28. package/dist/arrowfield/index.js +10 -0
  29. package/{arrowfield → dist/arrowfield}/plugin.js +86 -128
  30. package/dist/bearing-line/index.js +8 -0
  31. package/{bearing-line → dist/bearing-line}/plugin.js +449 -512
  32. package/{circle-line-chain → dist/circle-line-chain}/chain-list-map.js +205 -221
  33. package/dist/circle-line-chain/init.js +1 -0
  34. package/{circle-line-chain → dist/circle-line-chain}/plugin.js +424 -469
  35. package/dist/circle-line-chain/util.js +5 -0
  36. package/{compass-rose → dist/compass-rose}/compass-rose-padding-flat.js +225 -266
  37. package/{compass-rose → dist/compass-rose}/compass-text-writer.js +153 -173
  38. package/dist/compass-rose/index.js +7 -0
  39. package/{compassrose → dist/compassrose}/compassrose.js +296 -341
  40. package/dist/compassrose/index.js +8 -0
  41. package/dist/globe-types.js +1 -0
  42. package/dist/heatwave/index.js +10 -0
  43. package/{heatwave → dist/heatwave}/isobar/objectarraylabels.js +202 -247
  44. package/{heatwave → dist/heatwave}/isobar/plugin.js +343 -340
  45. package/{heatwave → dist/heatwave}/isobar/quadtreecontours.js +300 -336
  46. package/{heatwave → dist/heatwave}/plugins/heatwaveglobeshell.js +206 -258
  47. package/dist/index.js +58 -0
  48. package/{jest.config.js → dist/jest.config.js} +7 -6
  49. package/{partialrings → dist/partialrings}/buffer-manager.js +81 -89
  50. package/dist/partialrings/index.js +41 -0
  51. package/{partialrings → dist/partialrings}/plugin.js +135 -160
  52. package/{partialrings → dist/partialrings}/program.js +204 -242
  53. package/{pin → dist/pin}/pin-object-array.js +305 -381
  54. package/{pin → dist/pin}/pin-point-totem.js +60 -77
  55. package/{point-heat-map → dist/point-heat-map}/adaptors/timetracksplugin-format-to-this.js +66 -78
  56. package/dist/point-heat-map/index.js +1 -0
  57. package/{point-heat-map → dist/point-heat-map}/plugin-webworker.js +126 -151
  58. package/{point-heat-map → dist/point-heat-map}/point-to-heat-map-flow.js +127 -150
  59. package/dist/point-tracks/key-methods.js +5 -0
  60. package/{point-tracks → dist/point-tracks}/plugin.js +338 -394
  61. package/dist/programs/arrowfield/index.js +7 -0
  62. package/{programs → dist/programs}/arrowfield/logic.js +144 -173
  63. package/{programs → dist/programs}/arrowfield/object.js +66 -89
  64. package/{programs → dist/programs}/data2legend/density-to-legend.js +76 -90
  65. package/{programs → dist/programs}/data2legend/point-to-density-texture.js +76 -90
  66. package/dist/programs/float2legendwithratio/index.js +8 -0
  67. package/{programs → dist/programs}/float2legendwithratio/logic.js +122 -145
  68. package/{programs → dist/programs}/float2legendwithratio/object.js +110 -141
  69. package/{programs → dist/programs}/globe-util/is-globe-moved.js +21 -27
  70. package/dist/programs/globeshell/index.js +8 -0
  71. package/dist/programs/globeshell/noise/noises.js +1 -0
  72. package/dist/programs/globeshell/wiggle/index.js +8 -0
  73. package/{programs → dist/programs}/globeshell/wiggle/logic.js +246 -272
  74. package/{programs → dist/programs}/globeshell/wiggle/object.js +72 -93
  75. package/dist/programs/helpers/blender/index.js +1 -0
  76. package/{programs → dist/programs}/helpers/blender/program.js +61 -73
  77. package/dist/programs/helpers/fadeaway/index.js +7 -0
  78. package/{programs → dist/programs}/helpers/fadeaway/logic.js +49 -53
  79. package/dist/programs/helpers/fadeaway/object.js +20 -0
  80. package/dist/programs/helpers/index.js +8 -0
  81. package/dist/programs/index.js +58 -0
  82. package/dist/programs/interface.js +1 -0
  83. package/{programs → dist/programs}/line-on-globe/angled-line.js +125 -155
  84. package/{programs → dist/programs}/line-on-globe/circle-accurate-3d.js +95 -121
  85. package/{programs → dist/programs}/line-on-globe/circle-accurate-flat.js +158 -204
  86. package/{programs → dist/programs}/line-on-globe/circle-accurate.js +117 -141
  87. package/{programs → dist/programs}/line-on-globe/circle.js +111 -135
  88. package/{programs → dist/programs}/line-on-globe/degree-padding-around-circle-3d.js +111 -140
  89. package/dist/programs/line-on-globe/index.js +1 -0
  90. package/{programs → dist/programs}/line-on-globe/lines-color-instanced-flat.js +91 -106
  91. package/{programs/line-on-globe/linestrip.ts → dist/programs/line-on-globe/linestrip.js} +108 -165
  92. package/{programs → dist/programs}/line-on-globe/naive-accurate-flexible.js +127 -171
  93. package/{programs → dist/programs}/line-on-globe/to-the-surface.js +83 -101
  94. package/dist/programs/line-on-globe/util.js +8 -0
  95. package/{programs → dist/programs}/picking/pickable-renderer.js +107 -135
  96. package/{programs → dist/programs}/point-on-globe/element-globe-surface-glow.js +101 -127
  97. package/{programs → dist/programs}/point-on-globe/element-point-glow.js +88 -119
  98. package/{programs → dist/programs}/point-on-globe/square-pixel-point.js +126 -141
  99. package/{programs/programcache.ts → dist/programs/programcache.js} +131 -131
  100. package/{programs → dist/programs}/rings/distancering/circleflatprogram.js +115 -95
  101. package/{programs → dist/programs}/rings/distancering/circlepaddingfreeangleprogram.js +320 -329
  102. package/{programs → dist/programs}/rings/distancering/circlepaddysharedbuffer.js +357 -420
  103. package/dist/programs/rings/distancering/index.js +14 -0
  104. package/{programs → dist/programs}/rings/distancering/paddyflatprogram.js +120 -94
  105. package/{programs → dist/programs}/rings/distancering/paddyflatprogram2d.js +122 -98
  106. package/{programs → dist/programs}/rings/distancering/paddyflatprogram3d.js +120 -94
  107. package/dist/programs/rings/distancering/shader.js +1 -0
  108. package/dist/programs/rings/index.js +17 -0
  109. package/{programs → dist/programs}/rings/partial-ring/piece-of-pie.js +181 -221
  110. package/{programs → dist/programs}/totems/camerauniformblock.js +147 -184
  111. package/{programs → dist/programs}/totems/canvas-webglobe-info.js +102 -128
  112. package/{programs → dist/programs}/totems/gpu-selection-uniform-block.js +104 -128
  113. package/dist/programs/totems/index.js +40 -0
  114. package/dist/programs/two-d/pixel-circle.js +1 -0
  115. package/{programs → dist/programs}/two-d/pixel-padding-for-compass.js +101 -113
  116. package/{programs → dist/programs}/util.js +17 -20
  117. package/dist/programs/vectorfields/index.js +23 -0
  118. package/{programs → dist/programs}/vectorfields/logics/drawrectangleparticles.js +65 -83
  119. package/dist/programs/vectorfields/logics/index.js +12 -0
  120. package/{programs → dist/programs}/vectorfields/logics/pixelbased.js +84 -103
  121. package/{programs → dist/programs}/vectorfields/logics/ubo.js +55 -56
  122. package/{programs → dist/programs}/vectorfields/pingpongbuffermanager.js +76 -80
  123. package/dist/rangerings/enum.js +5 -0
  124. package/dist/rangerings/index.js +15 -0
  125. package/{rangerings → dist/rangerings}/plugin.js +560 -649
  126. package/{rangerings → dist/rangerings}/rangeringangletext.js +329 -368
  127. package/{rangerings → dist/rangerings}/ring-account.js +117 -129
  128. package/{shaders → dist/shaders}/fragment-toy/firework.js +5 -2
  129. package/{shaders → dist/shaders}/fragment-toy/singularity.js +5 -5
  130. package/{shape-on-terrain/arc/naive/plugin.ts → dist/shape-on-terrain/arc/naive/plugin.js} +252 -304
  131. package/{timetracks → dist/timetracks}/adaptors-line-strip.js +71 -80
  132. package/{timetracks → dist/timetracks}/adaptors.js +122 -133
  133. package/dist/timetracks/index.js +19 -0
  134. package/{timetracks → dist/timetracks}/plugin-line-strip.js +250 -295
  135. package/{timetracks → dist/timetracks}/plugin.js +258 -304
  136. package/{timetracks → dist/timetracks}/program-line-strip.js +416 -493
  137. package/{timetracks → dist/timetracks}/program.js +464 -542
  138. package/{timetracks → dist/timetracks}/programpoint-line-strip.js +101 -122
  139. package/{timetracks → dist/timetracks}/programpoint.js +101 -122
  140. package/{types.ts → dist/types.js} +15 -17
  141. package/{util → dist/util}/account/bufferoffsetmanager.js +179 -209
  142. package/dist/util/account/index.js +23 -0
  143. package/{util/account/single-attribute-buffer-management/buffer-manager.ts → dist/util/account/single-attribute-buffer-management/buffer-manager.js} +108 -119
  144. package/{util/account/single-attribute-buffer-management/buffer-orchestrator.ts → dist/util/account/single-attribute-buffer-management/buffer-orchestrator.js} +150 -173
  145. package/dist/util/account/single-attribute-buffer-management/index.js +9 -0
  146. package/{util/account/single-attribute-buffer-management/object-store.ts → dist/util/account/single-attribute-buffer-management/object-store.js} +51 -65
  147. package/dist/util/account/single-attribute-buffer-management/types.js +2 -0
  148. package/{util → dist/util}/account/util.js +22 -22
  149. package/dist/util/algorithms/index.js +1 -0
  150. package/{util → dist/util}/algorithms/search-binary.js +28 -26
  151. package/dist/util/check/get.js +18 -0
  152. package/dist/util/check/index.js +1 -0
  153. package/dist/util/check/typecheck.js +49 -0
  154. package/{util → dist/util}/geometry/index.js +51 -53
  155. package/{util/gl-util/buffer/attribute-loader.ts → dist/util/gl-util/buffer/attribute-loader.js} +69 -85
  156. package/dist/util/gl-util/buffer/index.js +6 -0
  157. package/dist/util/gl-util/buffer/types.js +1 -0
  158. package/dist/util/gl-util/draw-options/methods.js +38 -0
  159. package/dist/util/gl-util/draw-options/types.js +15 -0
  160. package/{util/gl-util/uniform-block/manager.ts → dist/util/gl-util/uniform-block/manager.js} +156 -187
  161. package/dist/util/gl-util/uniform-block/shader.js +1 -0
  162. package/dist/util/gl-util/uniform-block/types.js +8 -0
  163. package/{util → dist/util}/heatwavedatamanager/datamanager.js +152 -168
  164. package/dist/util/heatwavedatamanager/index.js +10 -0
  165. package/{util → dist/util}/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -133
  166. package/{util → dist/util}/heatwavedatamanager/pointcoordsmeta.js +20 -22
  167. package/dist/util/index.js +57 -0
  168. package/dist/util/interpolation/index.js +1 -0
  169. package/dist/util/interpolation/timetrack/index.js +5 -0
  170. package/{util → dist/util}/interpolation/timetrack/timetrack-interpolator.js +79 -88
  171. package/{util → dist/util}/interpolation/timetrack/web-worker-str.js +5 -2
  172. package/{util → dist/util}/interpolation/timetrack/web-worker.js +48 -51
  173. package/{util → dist/util}/jshelpers/data-filler.js +20 -19
  174. package/{util → dist/util}/jshelpers/equality.js +20 -17
  175. package/dist/util/jshelpers/index.js +37 -0
  176. package/{util → dist/util}/jshelpers/timefilters.js +32 -32
  177. package/{util → dist/util}/picking/fence.js +46 -46
  178. package/{util → dist/util}/picking/picker-displayer.js +139 -177
  179. package/{util → dist/util}/programs/draw-texture-on-canvas.js +69 -82
  180. package/dist/util/programs/index.js +17 -0
  181. package/{util → dist/util}/programs/shapesonglobe.js +174 -206
  182. package/{util → dist/util}/programs/supersampletotextures.js +103 -132
  183. package/{util → dist/util}/programs/texturetoglobe.js +133 -154
  184. package/{util/shaderfunctions/geometrytransformations.ts → dist/util/shaderfunctions/geometrytransformations.js} +68 -116
  185. package/dist/util/shaderfunctions/index.js +18 -0
  186. package/{util → dist/util}/shaderfunctions/nodata.js +5 -4
  187. package/{util → dist/util}/shaderfunctions/noisefunctions.js +9 -10
  188. package/{util/surface-line-data/arc-bboxes.ts → dist/util/surface-line-data/arc-bboxes.js} +25 -42
  189. package/{util → dist/util}/surface-line-data/arcs-to-cuts.js +50 -74
  190. package/dist/util/surface-line-data/cut-arc.js +1 -0
  191. package/{util/surface-line-data/flow.ts → dist/util/surface-line-data/flow.js} +28 -52
  192. package/dist/util/surface-line-data/rbush-manager.js +1 -0
  193. package/dist/util/surface-line-data/types.js +1 -0
  194. package/dist/util/surface-line-data/web-worker.js +1 -0
  195. package/dist/util/webglobe/gldefaultstates.js +7 -0
  196. package/dist/util/webglobe/index.js +18 -0
  197. package/{util → dist/util}/webglobe/rasteroverlay.js +78 -96
  198. package/{util/webglobjectbuilders.ts → dist/util/webglobjectbuilders.js} +388 -456
  199. package/{util → dist/util}/webglobjectbuilders1.js +237 -271
  200. package/{waveparticles → dist/waveparticles}/adaptor.js +17 -16
  201. package/dist/waveparticles/index.js +10 -0
  202. package/{waveparticles → dist/waveparticles}/plugin.js +266 -313
  203. package/{wind → dist/wind}/imagetovectorfieldandmagnitude.js +35 -39
  204. package/dist/wind/index.js +14 -0
  205. package/{wind → dist/wind}/plugin.js +681 -812
  206. package/{wind → dist/wind}/vectorfieldimage.js +25 -27
  207. package/{write-text → dist/write-text}/attached-text-writer.js +91 -105
  208. package/{write-text → dist/write-text}/context-text.js +98 -125
  209. package/{write-text → dist/write-text}/context-text3.js +155 -178
  210. package/dist/write-text/index.js +5 -0
  211. package/{write-text → dist/write-text}/writer-plugin.js +8 -7
  212. package/package.json +5 -2
  213. package/Math/arc.ts +0 -76
  214. package/Math/constants.ts +0 -11
  215. package/Math/frustum/types.ts +0 -11
  216. package/Math/index.js +0 -0
  217. package/Math/juction/arc-plane.ts +0 -114
  218. package/Math/juction/line-sphere.ts +0 -30
  219. package/Math/line.ts +0 -70
  220. package/Math/matrix4.ts +0 -0
  221. package/Math/plane.ts +0 -86
  222. package/Math/roadmap.md +0 -10
  223. package/Math/types.ts +0 -45
  224. package/Math/utils.js +0 -3
  225. package/algorithms/search-binary.js +0 -14
  226. package/altitude-locator/adaptors.js +0 -0
  227. package/altitude-locator/keymethod.js +0 -0
  228. package/arrowfield/index.js +0 -3
  229. package/bearing-line/index.js +0 -2
  230. package/circle-line-chain/init.js +0 -0
  231. package/circle-line-chain/readme.md +0 -57
  232. package/circle-line-chain/util.js +0 -1
  233. package/compass-rose/index.js +0 -3
  234. package/compassrose/index.js +0 -2
  235. package/depth-locator/readme.md +0 -26
  236. package/globe-types.ts +0 -13
  237. package/heatwave/index.js +0 -4
  238. package/partialrings/goals.md +0 -17
  239. package/partialrings/index.js +0 -3
  240. package/point-heat-map/index.js +0 -0
  241. package/point-heat-map/readme.md +0 -15
  242. package/point-tracks/key-methods.js +0 -3
  243. package/programs/arrowfield/index.js +0 -2
  244. package/programs/float2legendwithratio/index.js +0 -3
  245. package/programs/globeshell/index.js +0 -2
  246. package/programs/globeshell/noise/noises.js +0 -0
  247. package/programs/globeshell/wiggle/index.js +0 -6
  248. package/programs/helpers/blender/index.js +0 -0
  249. package/programs/helpers/fadeaway/index.js +0 -3
  250. package/programs/helpers/fadeaway/object.js +0 -20
  251. package/programs/helpers/index.js +0 -2
  252. package/programs/index.js +0 -21
  253. package/programs/interface.ts +0 -7
  254. package/programs/line-on-globe/index.js +0 -0
  255. package/programs/line-on-globe/util.js +0 -8
  256. package/programs/rings/distancering/index.js +0 -5
  257. package/programs/rings/distancering/shader.js +0 -0
  258. package/programs/rings/index.js +0 -1
  259. package/programs/totems/camerauniformblock.d.ts +0 -48
  260. package/programs/totems/index.ts +0 -2
  261. package/programs/two-d/pixel-circle.js +0 -0
  262. package/programs/vectorfields/index.js +0 -3
  263. package/programs/vectorfields/logics/index.js +0 -5
  264. package/publish.bat +0 -60
  265. package/rangerings/enum.js +0 -3
  266. package/rangerings/index.js +0 -5
  267. package/shape-on-terrain/goal.md +0 -12
  268. package/tests/Math/junction/arc-plane.test.ts +0 -133
  269. package/tests/Math/junction/plane-plane.test.ts +0 -82
  270. package/tests/Math/plane.test.ts +0 -43
  271. package/tests/Math/vec3.test.ts +0 -14
  272. package/timetracks/index.js +0 -6
  273. package/timetracks/readme.md +0 -1
  274. package/tsconfig.json +0 -22
  275. package/util/account/index.js +0 -6
  276. package/util/account/single-attribute-buffer-management/index.ts +0 -13
  277. package/util/account/single-attribute-buffer-management/types.ts +0 -39
  278. package/util/algorithms/index.js +0 -0
  279. package/util/check/get.js +0 -13
  280. package/util/check/index.js +0 -0
  281. package/util/check/typecheck.js +0 -39
  282. package/util/gl-util/buffer/index.ts +0 -6
  283. package/util/gl-util/buffer/types.ts +0 -13
  284. package/util/gl-util/draw-options/methods.ts +0 -66
  285. package/util/gl-util/draw-options/types.ts +0 -28
  286. package/util/gl-util/uniform-block/roadmap.md +0 -70
  287. package/util/gl-util/uniform-block/shader.js +0 -0
  288. package/util/gl-util/uniform-block/types.ts +0 -27
  289. package/util/heatwavedatamanager/index.js +0 -3
  290. package/util/index.js +0 -13
  291. package/util/interpolation/index.js +0 -0
  292. package/util/interpolation/timetrack/index.js +0 -9
  293. package/util/jshelpers/index.js +0 -1
  294. package/util/programs/index.js +0 -1
  295. package/util/shaderfunctions/index.js +0 -2
  296. package/util/surface-line-data/cut-arc.js +0 -0
  297. package/util/surface-line-data/rbush-manager.js +0 -0
  298. package/util/surface-line-data/types.ts +0 -27
  299. package/util/surface-line-data/web-worker.js +0 -0
  300. package/util/webglobe/gldefaultstates.js +0 -5
  301. package/util/webglobe/index.js +0 -2
  302. package/waveparticles/index.js +0 -3
  303. package/wind/index.js +0 -5
  304. package/write-text/index.js +0 -1
@@ -1,178 +1,155 @@
1
- import { CSZMode } from "@pirireis/webglobe";
2
- import { isTextFont, opacityCheck } from "../util/check/typecheck";
3
-
4
- /**
5
- * TODOs:
6
- * 1) update all if initials change (propably need a context and a callback to iterate over zPayload)
7
- * 2) expose a mechanic to update text on zoom change
8
- * 3) extend the mechanic on 2 to other events
9
- *
10
- * TODO: key check and raise error if doesnt exist
11
- */
12
- export class ContextTextWriter3 {
13
- constructor(globe, {
14
- style = {
15
- textFont: {
16
- name: 'Arial',
17
- textColor: '#FFFFFF', // beyaz
18
- hollowColor: '#000000', // siyah
19
- size: 12, // piksel
20
- hollow: true,
21
- bold: true,
22
- italic: false,
23
- },
24
- opacity: 1.0,
25
- zMode: CSZMode.Z_GROUND_PERVERTEX,
26
- },
27
- xOffset = 0,
28
- yOffset = 0,
29
- doDraw = true,
30
- textAdaptor = null,
31
- coordinatesAdaptor = null,
32
- keyAdaptor = null,
33
- opacityAdaptor = null,
34
- angleAdaptor = null,
35
- angleOnSphere = false,
36
- positionAdaptor = (item, i, container, properties) => "left",
37
- zoomLevelAdaptor = (zoomLevel) => (item) => {
38
- return {
39
- opacityMultiplier: 1,
40
- sizeMultiplier: 1
41
- }
42
- }
43
- } = {}) {
44
- this.globe = globe;
45
- this.itemMap = new Map();
46
- this.setStyle(style);
47
- this.doDraw = doDraw;
48
- this._checkParameterTypes(textAdaptor, coordinatesAdaptor, keyAdaptor, opacityAdaptor, angleAdaptor, xOffset, yOffset);
49
-
50
- this.textAdaptor = textAdaptor;
51
- this.coordinatesAdaptor = coordinatesAdaptor;
52
- this.keyAdaptor = keyAdaptor;
53
-
54
- this.zoomLevelAdaptor = zoomLevelAdaptor;
55
- this.positionAdaptor = positionAdaptor;
56
- this.opacityAdaptor = opacityAdaptor ? opacityAdaptor : () => 1;
57
- this.angleOnSphere = angleOnSphere;
58
- if (angleAdaptor) {
59
- this.angleAdaptor = angleAdaptor
60
- this.angleAdaptorIsOn = true;
61
- } else {
62
- this.angleAdaptor = () => null
63
- this.angleAdaptorIsOn = false
64
- }
65
-
66
- this.xOffset = xOffset;
67
- this.yOffset = yOffset;
68
- }
69
-
70
- _checkParameterTypes(textAdaptor, coordinatesAdaptor, keyAdaptor, opacityAdaptor, angleAdaptor, xOffset, yOffset) {
71
- if (textAdaptor !== null) if (!(textAdaptor instanceof Function)) throw new Error("textAdaptor is not an instance of a Function");
72
- if (coordinatesAdaptor !== null) if (!(coordinatesAdaptor instanceof Function)) throw new Error("coordinatesAdaptor is not an instance of a Function");
73
- if (keyAdaptor !== null) if (!(keyAdaptor instanceof Function)) throw new Error("keyAdaptor is not an instance of a Function");
74
- if (opacityAdaptor !== null) if (!(opacityAdaptor instanceof Function)) throw new Error("opacityAdaptor is not an instance of a Function");
75
- if (angleAdaptor !== null) if (!(angleAdaptor instanceof Function)) throw new Error("angleAdaptor is not an instance of a Function");
76
- if (typeof xOffset !== "number") throw new Error("xOffset type is not a number");
77
- if (typeof yOffset !== "number") throw new Error("yOffset type is not a number");
78
- }
79
-
80
- setKeyAdaptor(adaptor) {
81
- this.keyAdaptor = adaptor;
82
- }
83
-
84
- setDoDraw(bool) {
85
- this.doDraw = bool;
86
- this.globe.DrawRender();
87
- }
88
-
89
- setStyle(style) {
90
- isTextFont(style.textFont);
91
- opacityCheck(style.opacity); //TODO: use shallow copy
92
- this.style = style;
93
- this.globe.DrawRender();
94
- }
95
-
96
- setOpacity(opacity) {
97
- this.style.opacity = opacity;
98
- this.globe.DrawRender();
99
- }
100
-
101
-
102
-
103
- draw() {
104
- if (!this.doDraw) return;
105
- const { globe, style, itemMap, xOffset, yOffset } = this;
106
- const { textFont, opacity: opacity_ } = style;
107
- const textSize = textFont.size;
108
- const is3D = globe.api_GetCurrentGeometry() === 0;
109
- const angleIsOn = is3D ? (this.angleAdaptorIsOn && this.angleOnSphere) : (this.angleAdaptorIsOn)
110
- const zoomLevel = globe.api_GetCurrentLODWithDecimal();
111
- const zoomAdaptor = this.zoomLevelAdaptor(zoomLevel);
112
- for (const item of itemMap.values()) {
113
- const { lat, long, text, opacity = null, angle = null, zPayload, position } = item;
114
- const { x, y } = globe.api_GetScreenPointFromGeo(
115
- {
116
- long: long,
117
- lat: lat,
118
- z: 0,
119
- },
120
- style.zMode === CSZMode.Z_MSL,
121
- );
122
- const { opacityMultiplier, sizeMultiplier } = zoomAdaptor(zPayload);
123
- const o = (opacity === null ? opacity_ : opacity * opacity_) * opacityMultiplier;
124
- textFont.size = sizeMultiplier * textSize;
125
- textFont.position = position;
126
- if (x !== null && y !== null) globe.api_DrawContextTextMultiLine(text, textFont, o, { x: x + xOffset, y: y - yOffset }, angleIsOn, angle);
127
- }
128
- textFont.size = textSize;
129
- }
130
-
131
-
132
-
133
-
134
- insertTextBulk(container, properties) {
135
- container.forEach((v, i, c) => {
136
- this.insertText(v, i, c, properties);
137
- });
138
- }
139
-
140
-
141
-
142
- deleteTextBulk(keys) {
143
- for (const key of keys) {
144
- this.itemMap.delete(key);
145
- }
146
- }
147
-
148
-
149
- insertText(item, id, container, properties) {
150
- const key = this.keyAdaptor(item, id, container, properties)
151
- const coords = this.coordinatesAdaptor(item, id, container, properties)
152
- if (coords == null) {
153
- this.itemMap.delete(key);
154
- return;
155
- }
156
- const text = this.textAdaptor(item, id, container, properties)
157
- if (text == null) {
158
- this.itemMap.delete(key);
159
- return
160
- };
161
- const opacity = this.opacityAdaptor(item, id, container, properties);
162
- const angle = this.angleAdaptor(item, id, container, properties);
163
- const position = this.positionAdaptor(item, id, container, properties);
164
- this.itemMap.set(key, { long: coords.long, lat: coords.lat, text, opacity, angle, zPayload: item, position });
165
- }
166
-
167
-
168
- clear() {
169
- this.itemMap.clear();
170
- }
171
-
172
-
173
- free() {
174
- this.itemMap = null;
175
- }
176
- }
177
-
178
-
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextTextWriter3 = void 0;
4
+ const webglobe_1 = require("@pirireis/webglobe");
5
+ const 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
+ class ContextTextWriter3 {
15
+ constructor(globe, { style = {
16
+ textFont: {
17
+ name: 'Arial',
18
+ textColor: '#FFFFFF', // beyaz
19
+ hollowColor: '#000000', // siyah
20
+ size: 12, // piksel
21
+ hollow: true,
22
+ bold: true,
23
+ italic: false,
24
+ },
25
+ opacity: 1.0,
26
+ zMode: webglobe_1.CSZMode.Z_GROUND_PERVERTEX,
27
+ }, xOffset = 0, yOffset = 0, doDraw = true, textAdaptor = null, coordinatesAdaptor = null, keyAdaptor = null, opacityAdaptor = null, angleAdaptor = null, angleOnSphere = false, positionAdaptor = (item, i, container, properties) => "left", zoomLevelAdaptor = (zoomLevel) => (item) => {
28
+ return {
29
+ opacityMultiplier: 1,
30
+ sizeMultiplier: 1
31
+ };
32
+ } } = {}) {
33
+ this.globe = globe;
34
+ this.itemMap = new Map();
35
+ this.setStyle(style);
36
+ this.doDraw = doDraw;
37
+ this._checkParameterTypes(textAdaptor, coordinatesAdaptor, keyAdaptor, opacityAdaptor, angleAdaptor, xOffset, yOffset);
38
+ this.textAdaptor = textAdaptor;
39
+ this.coordinatesAdaptor = coordinatesAdaptor;
40
+ this.keyAdaptor = keyAdaptor;
41
+ this.zoomLevelAdaptor = zoomLevelAdaptor;
42
+ this.positionAdaptor = positionAdaptor;
43
+ this.opacityAdaptor = opacityAdaptor ? opacityAdaptor : () => 1;
44
+ this.angleOnSphere = angleOnSphere;
45
+ if (angleAdaptor) {
46
+ this.angleAdaptor = angleAdaptor;
47
+ this.angleAdaptorIsOn = true;
48
+ }
49
+ else {
50
+ this.angleAdaptor = () => null;
51
+ this.angleAdaptorIsOn = false;
52
+ }
53
+ this.xOffset = xOffset;
54
+ this.yOffset = yOffset;
55
+ }
56
+ _checkParameterTypes(textAdaptor, coordinatesAdaptor, keyAdaptor, opacityAdaptor, angleAdaptor, xOffset, yOffset) {
57
+ if (textAdaptor !== null)
58
+ if (!(textAdaptor instanceof Function))
59
+ throw new Error("textAdaptor is not an instance of a Function");
60
+ if (coordinatesAdaptor !== null)
61
+ if (!(coordinatesAdaptor instanceof Function))
62
+ throw new Error("coordinatesAdaptor is not an instance of a Function");
63
+ if (keyAdaptor !== null)
64
+ if (!(keyAdaptor instanceof Function))
65
+ throw new Error("keyAdaptor is not an instance of a Function");
66
+ if (opacityAdaptor !== null)
67
+ if (!(opacityAdaptor instanceof Function))
68
+ throw new Error("opacityAdaptor is not an instance of a Function");
69
+ if (angleAdaptor !== null)
70
+ if (!(angleAdaptor instanceof Function))
71
+ throw new Error("angleAdaptor is not an instance of a Function");
72
+ if (typeof xOffset !== "number")
73
+ throw new Error("xOffset type is not a number");
74
+ if (typeof yOffset !== "number")
75
+ throw new Error("yOffset type is not a number");
76
+ }
77
+ setKeyAdaptor(adaptor) {
78
+ this.keyAdaptor = adaptor;
79
+ }
80
+ setDoDraw(bool) {
81
+ this.doDraw = bool;
82
+ this.globe.DrawRender();
83
+ }
84
+ setStyle(style) {
85
+ (0, typecheck_1.isTextFont)(style.textFont);
86
+ (0, typecheck_1.opacityCheck)(style.opacity); //TODO: use shallow copy
87
+ this.style = style;
88
+ this.globe.DrawRender();
89
+ }
90
+ setOpacity(opacity) {
91
+ this.style.opacity = opacity;
92
+ this.globe.DrawRender();
93
+ }
94
+ draw() {
95
+ if (!this.doDraw)
96
+ return;
97
+ const { globe, style, itemMap, xOffset, yOffset } = this;
98
+ const { textFont, opacity: opacity_ } = style;
99
+ const textSize = textFont.size;
100
+ const is3D = globe.api_GetCurrentGeometry() === 0;
101
+ const angleIsOn = is3D ? (this.angleAdaptorIsOn && this.angleOnSphere) : (this.angleAdaptorIsOn);
102
+ const zoomLevel = globe.api_GetCurrentLODWithDecimal();
103
+ const zoomAdaptor = this.zoomLevelAdaptor(zoomLevel);
104
+ for (const item of itemMap.values()) {
105
+ const { lat, long, text, opacity = null, angle = null, zPayload, position } = item;
106
+ const { x, y } = globe.api_GetScreenPointFromGeo({
107
+ long: long,
108
+ lat: lat,
109
+ z: 0,
110
+ }, style.zMode === webglobe_1.CSZMode.Z_MSL);
111
+ const { opacityMultiplier, sizeMultiplier } = zoomAdaptor(zPayload);
112
+ const o = (opacity === null ? opacity_ : opacity * opacity_) * opacityMultiplier;
113
+ textFont.size = sizeMultiplier * textSize;
114
+ textFont.position = position;
115
+ if (x !== null && y !== null)
116
+ globe.api_DrawContextTextMultiLine(text, textFont, o, { x: x + xOffset, y: y - yOffset }, angleIsOn, angle);
117
+ }
118
+ textFont.size = textSize;
119
+ }
120
+ insertTextBulk(container, properties) {
121
+ container.forEach((v, i, c) => {
122
+ this.insertText(v, i, c, properties);
123
+ });
124
+ }
125
+ deleteTextBulk(keys) {
126
+ for (const key of keys) {
127
+ this.itemMap.delete(key);
128
+ }
129
+ }
130
+ insertText(item, id, container, properties) {
131
+ const key = this.keyAdaptor(item, id, container, properties);
132
+ const coords = this.coordinatesAdaptor(item, id, container, properties);
133
+ if (coords == null) {
134
+ this.itemMap.delete(key);
135
+ return;
136
+ }
137
+ const text = this.textAdaptor(item, id, container, properties);
138
+ if (text == null) {
139
+ this.itemMap.delete(key);
140
+ return;
141
+ }
142
+ ;
143
+ const opacity = this.opacityAdaptor(item, id, container, properties);
144
+ const angle = this.angleAdaptor(item, id, container, properties);
145
+ const position = this.positionAdaptor(item, id, container, properties);
146
+ this.itemMap.set(key, { long: coords.long, lat: coords.lat, text, opacity, angle, zPayload: item, position });
147
+ }
148
+ clear() {
149
+ this.itemMap.clear();
150
+ }
151
+ free() {
152
+ this.itemMap = null;
153
+ }
154
+ }
155
+ 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; } });
@@ -1,7 +1,8 @@
1
- /**
2
- * registerMap(id, aMap, textFont)
3
- * aMap key, object map.
4
- * aMap is a specifical tem for a use case.
5
- * The object has { text, long, lat, opacity, angle, zPayload, achor, xOffset, yOffset, ...extraPropertiesForZoomLevelAdaptor } properties.
6
- * the plugin runs over items in aMap and draw text on the globe.
7
- */
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
+ */
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@pirireis/webglobeplugins",
3
- "version": "0.9.6",
3
+ "version": "0.9.8",
4
4
  "main": "index.js",
5
5
  "author": "Toprak Nihat Deniz Ozturk",
6
6
  "license": "MIT",
7
7
  "scripts": {
8
8
  "build": "tsc"
9
- }
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ]
10
13
  }
package/Math/arc.ts DELETED
@@ -1,76 +0,0 @@
1
- import { Vec3, Plane, Arc } from "./types";
2
-
3
- import { vec3 } from "./vec3";
4
- import { EPSILON } from "./constants";
5
-
6
- const _0vector = /*@__PURE__*/ vec3.create(0, 0, 0);
7
- const _1vector = /*@__PURE__*/ vec3.create(1, 1, 1);
8
-
9
- export const arc = Object.freeze({
10
- create(p0: Vec3, p1: Vec3): Arc {
11
- const normal = vec3.create(0, 0, 0);
12
- vec3.cross(normal, p0, p1);
13
- const coverPlaneNormal = [p0[0] + p1[0], p0[1] + p1[1], p0[2] + p1[2]] as Vec3;
14
- vec3.normalize(coverPlaneNormal, coverPlaneNormal);
15
- const dot = vec3.dot(coverPlaneNormal, p0);
16
- return {
17
- p0: vec3.clone(p0),
18
- p1: vec3.clone(p1),
19
- normal: vec3.clone(normal),
20
- coverPlane: {
21
- normal: coverPlaneNormal,
22
- distance: dot
23
- } as Plane
24
- }
25
- },
26
-
27
- set(out: Arc, p0: Vec3, p1: Vec3) {
28
- vec3.copy(out.p0, p0);
29
- vec3.copy(out.p1, p1);
30
- vec3.cross(out.normal, p0, p1);
31
- const coverPlaneNormal = [p0[0] + p1[0], p0[1] + p1[1], p0[2] + p1[2]] as Vec3;
32
- vec3.normalize(coverPlaneNormal, coverPlaneNormal);
33
- out.coverPlane.normal = coverPlaneNormal;
34
- out.coverPlane.distance = vec3.dot(coverPlaneNormal, p0);
35
- },
36
-
37
-
38
- copy(out: Arc, a: Arc) {
39
- vec3.copy(out.p0, a.p0);
40
- vec3.copy(out.p1, a.p1);
41
- vec3.copy(out.normal, a.normal);
42
- out.coverPlane.normal = vec3.clone(a.coverPlane.normal);
43
- out.coverPlane.distance = a.coverPlane.distance;
44
- },
45
-
46
- clone(a: Arc): Arc {
47
- return {
48
- p0: vec3.clone(a.p0),
49
- p1: vec3.clone(a.p1),
50
- normal: vec3.clone(a.normal),
51
- coverPlane: {
52
- normal: vec3.clone(a.coverPlane.normal),
53
- distance: a.coverPlane.distance
54
- } as Plane
55
- };
56
- },
57
-
58
-
59
-
60
- isPointOn(arc: Arc, point: Vec3): boolean {
61
- const alignment = Math.abs(vec3.dot(point, arc.normal)) < EPSILON;
62
- const distance = Math.abs(vec3.lengthSquared(point) - 1) < EPSILON;
63
- const cover = vec3.dot(arc.coverPlane.normal, point) >= arc.coverPlane.distance;
64
- return alignment || distance || cover;
65
- },
66
-
67
-
68
- equals(a: Arc, b: Arc): boolean {
69
- return vec3.equals(a.p0, b.p0) && vec3.equals(a.p1, b.p1)
70
- },
71
-
72
- populatePoints(out: Float32Array, arc: Arc, count: number) {
73
- // rotate p0 around normal vector with a quaternion
74
- // calculate angle
75
- }
76
- });
package/Math/constants.ts DELETED
@@ -1,11 +0,0 @@
1
- const WORLD_RADIUS_3D = 6378.137;
2
- const WORLD_RADIUS_MERCATOR = 6378136.99911;
3
-
4
- const EPSILON = 1e-10; // Used for floating point comparisons
5
-
6
- export {
7
- WORLD_RADIUS_3D,
8
- WORLD_RADIUS_MERCATOR,
9
- EPSILON
10
- }
11
-
@@ -1,11 +0,0 @@
1
- import { Plane } from "../types";
2
-
3
- export type FrustumPlanes =
4
- {
5
- top: Plane,
6
- bottom: Plane,
7
- left: Plane,
8
- right: Plane,
9
- near: Plane | null,
10
- far: Plane
11
- };
package/Math/index.js DELETED
File without changes
@@ -1,114 +0,0 @@
1
- import { Vec3, Plane, Line, Sphere, Arc } from "../types";
2
- import { EPSILON } from "../constants";
3
- import { vec3 } from "../vec3";
4
- import { line } from "../line";
5
- import { plane } from "../plane";
6
- import { arc } from "../arc";
7
- import { planePlaneJuction } from "./plane-plane";
8
- import { lineSphereIntersection } from "./line-sphere";
9
-
10
- const _intersectionLine = /*@__PURE__*/ line.create();
11
- const _originPlane = /*@__PURE__*/ plane.create();
12
- _originPlane.distance = 0;
13
- const _originSphere = /*@__PURE__*/ { center: vec3.create(0, 0, 0), radius: 1 } as Sphere;
14
-
15
- const _intersectionPoints: [Vec3, Vec3] = /*@__PURE__*/[vec3.create(), vec3.create()];
16
-
17
- // TODO: out must be [Arc, Arc] there is a case where split into three arcs, visible by points or arcs but middle is not visible
18
-
19
-
20
-
21
- /**
22
- *
23
- * @param out \
24
- * @param inArc
25
- * @param juctionPlane
26
- * @returns number of arcs segments in the junction divided by the junction plane.
27
- */
28
- export function arcSlice(out: [Arc, Arc], inArc: Arc, juctionPlane: Plane): number {
29
-
30
- // arc coverPlane and junctionPlane intersection exist in the range of unit sphere
31
- const coverRadiusAngle = plane.getUnitSphereRadiusAngle(inArc.coverPlane);
32
- const visibleRadiusAngle = plane.getUnitSphereRadiusAngle(juctionPlane);
33
- // TODO: RESEARCH efficient approach --
34
- const angleBetween_Cover_Visible = Math.acos(vec3.dot(inArc.coverPlane.normal, juctionPlane.normal));
35
-
36
- if (coverRadiusAngle + visibleRadiusAngle < angleBetween_Cover_Visible - EPSILON) { // case A: out of range
37
- return 0; // No intersection
38
- }
39
- // ------------------------------------
40
-
41
- // the case when the arc is completely covered by the juction plane
42
-
43
- if (visibleRadiusAngle + EPSILON >= angleBetween_Cover_Visible + coverRadiusAngle) { // case B: fully visible
44
- arc.copy(out[0], inArc);
45
- return 1;
46
- }
47
- // plane-plane intersection line should be calculated for the rest of the calculations
48
-
49
- vec3.copy(_originPlane.normal, inArc.normal);
50
- const isPlaneJunctions = planePlaneJuction(_intersectionLine, _originPlane, juctionPlane);
51
-
52
- if (!isPlaneJunctions) { // case C: planes are parallel.
53
- // case A covers opposite directions
54
- // case B Covers they face each other
55
- throw new Error("Unexpected case: planes are parallel, case A and B should Cover it");
56
- }
57
- // --- read until here ---
58
-
59
- // calculate the intersection points
60
-
61
- const isSphereIntersection = lineSphereIntersection(_intersectionPoints, _intersectionLine, _originSphere);
62
-
63
- if (!isSphereIntersection) {
64
- // other edge caes should be covered by now
65
- return 0; // No intersection
66
- }
67
-
68
-
69
- const i0IsCovered = plane.distanceToPoint(inArc.coverPlane, _intersectionPoints[0]) > -EPSILON;
70
- const i1IsCovered = plane.distanceToPoint(inArc.coverPlane, _intersectionPoints[1]) > -EPSILON;
71
-
72
-
73
- const p0IsVisible = plane.distanceToPoint(juctionPlane, inArc.p0) > -EPSILON;
74
- const p1IsVisible = plane.distanceToPoint(juctionPlane, inArc.p1) > -EPSILON;
75
-
76
- if (!p0IsVisible && !p1IsVisible && !i0IsCovered && !i1IsCovered) {
77
- return 0; // No intersection
78
- }
79
-
80
- if (i0IsCovered && i1IsCovered && p0IsVisible && p1IsVisible) {
81
- // calculate which points are closer
82
- const p0i0DistanceSquared = vec3.distanceSquared(inArc.p0, _intersectionPoints[0]);
83
- const p0i1DistanceSquared = vec3.distanceSquared(inArc.p0, _intersectionPoints[1]);
84
- const case0 = p0i0DistanceSquared < p0i1DistanceSquared;
85
- arc.set(out[0], inArc.p0, case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
86
- arc.set(out[1], inArc.p1, !case0 ? _intersectionPoints[0] : _intersectionPoints[1]);
87
- return 2;
88
- }
89
-
90
-
91
- if (i0IsCovered && i1IsCovered) {
92
- arc.set(out[0], _intersectionPoints[0], _intersectionPoints[1]);
93
- return 1;
94
- }
95
-
96
-
97
- if (p0IsVisible && p1IsVisible) {
98
- arc.copy(out[0], inArc);
99
- return 1;
100
- }
101
-
102
- if ((p0IsVisible || p1IsVisible) !== (i0IsCovered || i1IsCovered)) {
103
- throw new Error("Unexpected case: one covered and one visible point must be present");
104
- }
105
-
106
- arc.set(
107
- out[0],
108
- p0IsVisible ? inArc.p0 : inArc.p1,
109
- i0IsCovered ? _intersectionPoints[0] : _intersectionPoints[1]
110
- );
111
-
112
- return 1;
113
- }
114
-
@@ -1,30 +0,0 @@
1
- import { Vec3, Line, Sphere } from "../types";
2
-
3
- import { vec3 } from "../vec3";
4
- import { line } from "../line";
5
-
6
- const _0vector = /*@__PURE__*/ vec3.create(0, 0, 0);
7
-
8
-
9
- export function lineSphereIntersection(out: [Vec3, Vec3], inLine: Line, inSphere: Sphere): boolean {
10
-
11
- vec3.subtract(_0vector, inLine.origin, inSphere.center);
12
- const distanceSquared = vec3.lengthSquared(_0vector);
13
- const radiusSquared = inSphere.radius * inSphere.radius;
14
- const dot = vec3.dot(_0vector, inLine.direction);
15
- const dotSquared = dot * dot;
16
-
17
- const _a = dotSquared + radiusSquared - distanceSquared;
18
- if (_a < 0) {
19
- return false; // no intersection
20
- } else {
21
- const a = Math.sqrt(_a);
22
- const t1 = dot - a;
23
- const t2 = dot + a;
24
-
25
- line.at(out[0], inLine, t1);
26
- line.at(out[1], inLine, t2);
27
-
28
- return true;
29
- }
30
- }