@openglobus/og 0.11.5 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/css/og.css +5 -2
  2. package/package.json +12 -14
  3. package/src/og/Clock.js +6 -10
  4. package/src/og/Events.js +5 -7
  5. package/src/og/Extent.js +73 -32
  6. package/src/og/Globe.js +25 -10
  7. package/src/og/ImageCanvas.js +18 -15
  8. package/src/og/LonLat.js +13 -10
  9. package/src/og/Popup.js +19 -17
  10. package/src/og/QueueArray.js +3 -4
  11. package/src/og/Rectangle.js +4 -6
  12. package/src/og/Stack.js +2 -4
  13. package/src/og/ajax.js +20 -14
  14. package/src/og/astro/earth.js +21 -15
  15. package/src/og/bv/Box.js +2 -3
  16. package/src/og/bv/Sphere.js +10 -7
  17. package/src/og/camera/Camera.js +70 -79
  18. package/src/og/camera/Frustum.js +19 -12
  19. package/src/og/camera/PlanetCamera.js +33 -34
  20. package/src/og/control/CompassButton.js +1 -2
  21. package/src/og/control/Control.js +7 -9
  22. package/src/og/control/DebugInfo.js +2 -3
  23. package/src/og/control/EarthNavigation.js +26 -17
  24. package/src/og/control/KeyboardNavigation.js +9 -9
  25. package/src/og/control/LayerSwitcher.js +21 -20
  26. package/src/og/control/Lighting.js +74 -64
  27. package/src/og/control/MouseNavigation.js +30 -29
  28. package/src/og/control/MouseWheelZoomControl.js +257 -0
  29. package/src/og/control/SegmentBoundVisualization.js +5 -6
  30. package/src/og/control/ShowFps.js +12 -7
  31. package/src/og/control/SimpleNavigation.js +5 -7
  32. package/src/og/control/Sun.js +24 -14
  33. package/src/og/control/ToggleWireframe.js +3 -3
  34. package/src/og/control/TouchNavigation.js +43 -32
  35. package/src/og/control/ZoomControl.js +40 -24
  36. package/src/og/control/index.js +2 -0
  37. package/src/og/control/visibleExtent/Segment.js +1862 -0
  38. package/src/og/control/visibleExtent/VisibleExtent.js +80 -0
  39. package/src/og/control/visibleExtent/drawnode.js +751 -0
  40. package/src/og/ellipsoid/Ellipsoid.js +149 -57
  41. package/src/og/ellipsoid/wgs84.js +3 -3
  42. package/src/og/entity/BaseBillboard.js +72 -30
  43. package/src/og/entity/Billboard.js +9 -5
  44. package/src/og/entity/BillboardHandler.js +315 -62
  45. package/src/og/entity/Entity.js +742 -704
  46. package/src/og/entity/EntityCollection.js +47 -24
  47. package/src/og/entity/GeoObject.js +228 -0
  48. package/src/og/entity/GeoObjectHandler.js +895 -0
  49. package/src/og/entity/GeometryHandler.js +595 -123
  50. package/src/og/entity/Label.js +62 -30
  51. package/src/og/entity/LabelHandler.js +42 -243
  52. package/src/og/entity/LabelWorker.js +218 -0
  53. package/src/og/entity/Object3d.js +504 -0
  54. package/src/og/entity/PointCloud.js +76 -28
  55. package/src/og/entity/PointCloudHandler.js +5 -5
  56. package/src/og/entity/Ray.js +49 -16
  57. package/src/og/entity/Strip.js +72 -43
  58. package/src/og/entity/StripHandler.js +23 -23
  59. package/src/og/layer/BaseGeoImage.js +50 -19
  60. package/src/og/layer/CanvasTiles.js +16 -17
  61. package/src/og/layer/GeoImage.js +8 -16
  62. package/src/og/layer/GeoTexture2d.js +2 -10
  63. package/src/og/layer/GeoVideo.js +2 -10
  64. package/src/og/layer/KML.js +55 -33
  65. package/src/og/layer/Layer.js +24 -33
  66. package/src/og/layer/Material.js +1 -1
  67. package/src/og/layer/Vector.js +94 -48
  68. package/src/og/layer/WMS.js +33 -18
  69. package/src/og/layer/XYZ.js +24 -26
  70. package/src/og/light/LightSource.js +19 -12
  71. package/src/og/math/Mat3.js +24 -12
  72. package/src/og/math/Mat4.js +603 -603
  73. package/src/og/math/Plane.js +19 -18
  74. package/src/og/math/Ray.js +17 -12
  75. package/src/og/math/Vec2.js +24 -14
  76. package/src/og/math/Vec3.js +78 -32
  77. package/src/og/math/coder.js +7 -7
  78. package/src/og/proj/EPSG3857.js +3 -3
  79. package/src/og/proj/EPSG4326.js +3 -3
  80. package/src/og/proj/Proj.js +2 -4
  81. package/src/og/quadTree/Node.js +50 -95
  82. package/src/og/quadTree/quadTree.js +1 -1
  83. package/src/og/renderer/Renderer.js +106 -126
  84. package/src/og/renderer/RendererEvents.js +45 -23
  85. package/src/og/scene/BaseNode.js +2 -3
  86. package/src/og/scene/Planet.js +139 -191
  87. package/src/og/scene/RenderNode.js +15 -8
  88. package/src/og/segment/Segment.js +93 -268
  89. package/src/og/segment/Slice.js +45 -0
  90. package/src/og/shaders/drawnode.js +174 -360
  91. package/src/og/shaders/geoObject.js +211 -0
  92. package/src/og/shaders/pointCloud.js +41 -41
  93. package/src/og/shaders/shape.js +12 -18
  94. package/src/og/shaders/skybox.js +36 -36
  95. package/src/og/shaders/toneMapping.js +1 -0
  96. package/src/og/shapes/BaseShape.js +108 -36
  97. package/src/og/shapes/Icosphere.js +25 -10
  98. package/src/og/shapes/Sphere.js +8 -11
  99. package/src/og/terrain/EmptyTerrain.js +3 -2
  100. package/src/og/terrain/GlobusTerrain.js +2 -0
  101. package/src/og/utils/FontAtlas.js +6 -2
  102. package/src/og/utils/GeoImageCreator.js +5 -1
  103. package/src/og/utils/Loader.js +1 -1
  104. package/src/og/utils/PlainSegmentWorker.js +0 -13
  105. package/src/og/utils/TextureAtlas.js +18 -20
  106. package/src/og/utils/VectorTileCreator.js +1 -3
  107. package/src/og/utils/shared.js +2 -2
  108. package/src/og/webgl/Handler.js +219 -162
  109. package/src/og/webgl/Multisample.js +44 -16
  110. package/src/og/webgl/Program.js +78 -33
  111. package/src/og/webgl/callbacks.js +3 -3
  112. package/types/Clock.d.ts +0 -94
  113. package/types/Deferred.d.ts +0 -6
  114. package/types/Events.d.ts +0 -77
  115. package/types/Extent.d.ts +0 -166
  116. package/types/Globe.d.ts +0 -82
  117. package/types/ImageCanvas.d.ts +0 -123
  118. package/types/Lock.d.ts +0 -12
  119. package/types/LonLat.d.ts +0 -108
  120. package/types/Popup.d.ts +0 -42
  121. package/types/QueueArray.d.ts +0 -19
  122. package/types/Rectangle.d.ts +0 -80
  123. package/types/Stack.d.ts +0 -19
  124. package/types/ajax.d.ts +0 -24
  125. package/types/arial.d.ts +0 -48
  126. package/types/astro/astro.d.ts +0 -38
  127. package/types/astro/earth.d.ts +0 -7
  128. package/types/astro/jd.d.ts +0 -254
  129. package/types/bv/Box.d.ts +0 -30
  130. package/types/bv/Sphere.d.ts +0 -38
  131. package/types/bv/index.d.ts +0 -3
  132. package/types/camera/Camera.d.ts +0 -312
  133. package/types/camera/Frustum.d.ts +0 -133
  134. package/types/camera/PlanetCamera.d.ts +0 -218
  135. package/types/camera/index.d.ts +0 -3
  136. package/types/cons.d.ts +0 -40
  137. package/types/control/CompassButton.d.ts +0 -17
  138. package/types/control/Control.d.ts +0 -104
  139. package/types/control/DebugInfo.d.ts +0 -15
  140. package/types/control/EarthCoordinates.d.ts +0 -47
  141. package/types/control/EarthNavigation.d.ts +0 -42
  142. package/types/control/GeoImageDragControl.d.ts +0 -6
  143. package/types/control/KeyboardNavigation.d.ts +0 -21
  144. package/types/control/LayerSwitcher.d.ts +0 -21
  145. package/types/control/Lighting.d.ts +0 -16
  146. package/types/control/MouseNavigation.d.ts +0 -47
  147. package/types/control/ScaleControl.d.ts +0 -22
  148. package/types/control/ShowFps.d.ts +0 -11
  149. package/types/control/SimpleNavigation.d.ts +0 -25
  150. package/types/control/Sun.d.ts +0 -50
  151. package/types/control/ToggleWireframe.d.ts +0 -12
  152. package/types/control/TouchNavigation.d.ts +0 -48
  153. package/types/control/ZoomControl.d.ts +0 -27
  154. package/types/control/index.d.ts +0 -17
  155. package/types/ellipsoid/Ellipsoid.d.ts +0 -146
  156. package/types/ellipsoid/index.d.ts +0 -3
  157. package/types/ellipsoid/wgs84.d.ts +0 -6
  158. package/types/entity/BaseBillboard.d.ts +0 -208
  159. package/types/entity/Billboard.d.ts +0 -94
  160. package/types/entity/BillboardHandler.d.ts +0 -78
  161. package/types/entity/Entity.d.ts +0 -333
  162. package/types/entity/EntityCollection.d.ts +0 -311
  163. package/types/entity/Geometry.d.ts +0 -74
  164. package/types/entity/GeometryHandler.d.ts +0 -76
  165. package/types/entity/Label.d.ts +0 -189
  166. package/types/entity/LabelHandler.d.ts +0 -29
  167. package/types/entity/PointCloud.d.ts +0 -174
  168. package/types/entity/PointCloudHandler.d.ts +0 -38
  169. package/types/entity/Polyline.d.ts +0 -306
  170. package/types/entity/PolylineHandler.d.ts +0 -18
  171. package/types/entity/Ray.d.ts +0 -124
  172. package/types/entity/RayHandler.d.ts +0 -67
  173. package/types/entity/ShapeHandler.d.ts +0 -22
  174. package/types/entity/Strip.d.ts +0 -119
  175. package/types/entity/StripHandler.d.ts +0 -38
  176. package/types/entity/index.d.ts +0 -8
  177. package/types/index.core.d.ts +0 -65
  178. package/types/index.d.ts +0 -45
  179. package/types/index.webgl.d.ts +0 -7
  180. package/types/input/KeyboardHandler.d.ts +0 -10
  181. package/types/input/MouseHandler.d.ts +0 -5
  182. package/types/input/TouchHandler.d.ts +0 -5
  183. package/types/input/input.d.ts +0 -34
  184. package/types/layer/BaseGeoImage.d.ts +0 -94
  185. package/types/layer/CanvasTiles.d.ts +0 -68
  186. package/types/layer/GeoImage.d.ts +0 -52
  187. package/types/layer/GeoTexture2d.d.ts +0 -8
  188. package/types/layer/GeoVideo.d.ts +0 -55
  189. package/types/layer/KML.d.ts +0 -63
  190. package/types/layer/Layer.d.ts +0 -326
  191. package/types/layer/Material.d.ts +0 -45
  192. package/types/layer/Vector.d.ts +0 -208
  193. package/types/layer/WMS.d.ts +0 -63
  194. package/types/layer/XYZ.d.ts +0 -120
  195. package/types/layer/index.d.ts +0 -10
  196. package/types/light/LightSource.d.ts +0 -178
  197. package/types/math/Line2.d.ts +0 -11
  198. package/types/math/Line3.d.ts +0 -10
  199. package/types/math/Mat3.d.ts +0 -65
  200. package/types/math/Mat4.d.ts +0 -176
  201. package/types/math/Plane.d.ts +0 -18
  202. package/types/math/Quat.d.ts +0 -379
  203. package/types/math/Ray.d.ts +0 -82
  204. package/types/math/Vec2.d.ts +0 -309
  205. package/types/math/Vec3.d.ts +0 -460
  206. package/types/math/Vec4.d.ts +0 -162
  207. package/types/math/coder.d.ts +0 -43
  208. package/types/math/index.d.ts +0 -11
  209. package/types/math.d.ts +0 -261
  210. package/types/mercator.d.ts +0 -92
  211. package/types/proj/EPSG3857.d.ts +0 -6
  212. package/types/proj/EPSG4326.d.ts +0 -6
  213. package/types/proj/Proj.d.ts +0 -42
  214. package/types/quadTree/EntityCollectionNode.d.ts +0 -34
  215. package/types/quadTree/Node.d.ts +0 -61
  216. package/types/quadTree/quadTree.d.ts +0 -40
  217. package/types/renderer/Renderer.d.ts +0 -298
  218. package/types/renderer/RendererEvents.d.ts +0 -233
  219. package/types/res/images.d.ts +0 -3
  220. package/types/scene/Axes.d.ts +0 -11
  221. package/types/scene/BaseNode.d.ts +0 -60
  222. package/types/scene/Planet.d.ts +0 -577
  223. package/types/scene/RenderNode.d.ts +0 -142
  224. package/types/scene/SkyBox.d.ts +0 -10
  225. package/types/scene/index.d.ts +0 -4
  226. package/types/segment/Segment.d.ts +0 -279
  227. package/types/segment/SegmentLonLat.d.ts +0 -16
  228. package/types/segment/segmentHelper.d.ts +0 -13
  229. package/types/shaders/billboard.d.ts +0 -3
  230. package/types/shaders/depth.d.ts +0 -2
  231. package/types/shaders/drawnode.d.ts +0 -7
  232. package/types/shaders/label.d.ts +0 -4
  233. package/types/shaders/pointCloud.d.ts +0 -2
  234. package/types/shaders/polyline.d.ts +0 -3
  235. package/types/shaders/ray.d.ts +0 -2
  236. package/types/shaders/screenFrame.d.ts +0 -2
  237. package/types/shaders/shape.d.ts +0 -4
  238. package/types/shaders/skybox.d.ts +0 -2
  239. package/types/shaders/toneMapping.d.ts +0 -2
  240. package/types/shapes/BaseShape.d.ts +0 -250
  241. package/types/shapes/Sphere.d.ts +0 -41
  242. package/types/terrain/BilTerrain.d.ts +0 -7
  243. package/types/terrain/EmptyTerrain.d.ts +0 -72
  244. package/types/terrain/Geoid.d.ts +0 -26
  245. package/types/terrain/GlobusTerrain.d.ts +0 -116
  246. package/types/terrain/MapboxTerrain.d.ts +0 -7
  247. package/types/terrain/index.d.ts +0 -5
  248. package/types/utils/FontAtlas.d.ts +0 -14
  249. package/types/utils/GeoImageCreator.d.ts +0 -30
  250. package/types/utils/ImagesCacheManager.d.ts +0 -10
  251. package/types/utils/Loader.d.ts +0 -25
  252. package/types/utils/NormalMapCreator.d.ts +0 -39
  253. package/types/utils/PlainSegmentWorker.d.ts +0 -10
  254. package/types/utils/TerrainWorker.d.ts +0 -9
  255. package/types/utils/TextureAtlas.d.ts +0 -111
  256. package/types/utils/VectorTileCreator.d.ts +0 -16
  257. package/types/utils/colorTable.d.ts +0 -143
  258. package/types/utils/earcut.d.ts +0 -6
  259. package/types/utils/shared.d.ts +0 -231
  260. package/types/webgl/Framebuffer.d.ts +0 -135
  261. package/types/webgl/Handler.d.ts +0 -388
  262. package/types/webgl/Multisample.d.ts +0 -89
  263. package/types/webgl/Program.d.ts +0 -155
  264. package/types/webgl/ProgramController.d.ts +0 -89
  265. package/types/webgl/callbacks.d.ts +0 -1
  266. package/types/webgl/index.d.ts +0 -6
  267. package/types/webgl/types.d.ts +0 -2
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+
3
+ // import { QueueArray } from '../QueueArray.js';
4
+
5
+ export const LOCK_UPDATE = -2;
6
+ export const LOCK_FREE = -1;
7
+
8
+ class LabelWorker {
9
+ constructor(numWorkers = 4) {
10
+ this._id = 0;
11
+ this._source = {};
12
+
13
+ this._freeWorkerQueue = []; //new QueueArray(numWorkers);
14
+ var labelProgramm = new Blob([_programm], { type: "application/javascript" });
15
+
16
+ var that = this;
17
+
18
+ for (let i = 0; i < numWorkers; i++) {
19
+ var w = new Worker(URL.createObjectURL(labelProgramm));
20
+ w.onmessage = function (e) {
21
+
22
+ let s = that._source[e.data.id];
23
+
24
+ if (s.label._lockId === LOCK_UPDATE) {
25
+ that.make(s.handler, s.label);
26
+ } else {
27
+ s.handler.workerCallback(e.data, s.label);
28
+ }
29
+
30
+ that._source[e.data.id] = null;
31
+ delete that._source[e.data.id];
32
+ that._freeWorkerQueue.unshift(this);
33
+
34
+ that.check();
35
+ };
36
+
37
+ this._freeWorkerQueue.push(w);
38
+ }
39
+
40
+ this._pendingQueue = []; //new QueueArray(512);
41
+ }
42
+
43
+ check() {
44
+ if (this._pendingQueue.length) {
45
+ var p = this._pendingQueue.pop();
46
+ this.make(p.handler, p.label);
47
+ }
48
+ }
49
+
50
+ make(handler, label) {
51
+
52
+ if (handler._entityCollection) {
53
+ let source = { handler: handler, label: label };
54
+
55
+ if (this._freeWorkerQueue.length) {
56
+ var w = this._freeWorkerQueue.pop();
57
+
58
+ this._source[this._id] = source;
59
+
60
+ let labelData = new Float32Array([
61
+ /*0*/this._id++,
62
+ /*1*/handler._maxLetters,
63
+ /*2*/label.getVisibility() ? 1 : 0,
64
+ /*3, 4, 5*/label._positionHigh.x, label._positionHigh.y, label._positionHigh.z,
65
+ /*6, 7, 8*/label._positionLow.x, label._positionLow.y, label._positionLow.z,
66
+ /*9*/label._size,
67
+ /*10, 11, 12*/label._offset.x, label._offset.y, label._offset.z,
68
+ /*13, 14, 15, 16*/label._color.x, label._color.y, label._color.z, label._color.w,
69
+ /*17*/label._rotation,
70
+ /*18, 19, 20*/label._alignedAxis.x, label._alignedAxis.y, label._alignedAxis.z,
71
+ /*21*/label._fontIndex,
72
+ /*22*/label._outline,
73
+ /*23, 24, 25, 26*/label._outlineColor.x, label._outlineColor.y, label._outlineColor.z, label._outlineColor.w,
74
+ /*27, 28, 29*/label._entity._pickingColor.x, label._entity._pickingColor.y, label._entity._pickingColor.z
75
+ ]);
76
+
77
+ label._lockId = this._id;
78
+
79
+ w.postMessage({
80
+ labelData: labelData
81
+ }, [
82
+ labelData.buffer,
83
+ ]);
84
+ } else {
85
+ this._pendingQueue.push(source);
86
+ }
87
+ }
88
+ }
89
+ }
90
+
91
+ const _programm = `'use strict';
92
+
93
+ function concatTypedArrays(dest, index, source) {
94
+ let len = source.length,
95
+ offset = index * len;
96
+ for(let i = 0; i < len; i++) {
97
+ dest[offset + i] = source[i];
98
+ }
99
+ }
100
+
101
+ self.onmessage = function (e) {
102
+ var labelData = e.data.labelData,
103
+ id = labelData[0],
104
+ maxLetters = labelData[1],
105
+ isVisible = labelData[2],
106
+ /*3, 4, 5*/_positionHigh_x = labelData[3], _positionHigh_y = labelData[4], _positionHigh_z = labelData[5],
107
+ /*6, 7, 8*/_positionLow_x = labelData[6], _positionLow_y = labelData[7], _positionLow_z = labelData[8],
108
+ /*9*/_size = labelData[9],
109
+ /*10, 11, 12*/_offset_x = labelData[10], _offset_y = labelData[11], _offset_z = labelData[12],
110
+ /*13, 14, 15, 16*/_color_x = labelData[13], _color_y = labelData[14], _color_z = labelData[15], _color_w = labelData[16],
111
+ /*17*/_rotation = labelData[17],
112
+ /*18, 19, 20*/_alignedAxis_x = labelData[18], _alignedAxis_y = labelData[19], _alignedAxis_z = labelData[20],
113
+ /*21*/_fontIndex = labelData[21],
114
+ /*22*/_outline = labelData[22],
115
+ /*23, 24, 25, 26*/_outlineColor_x = labelData[23], _outlineColor_y = labelData[24], _outlineColor_z = labelData[25], _outlineColor_w = labelData[26],
116
+ /*27, 28, 29*/_pickingColor_x = labelData[27], _pickingColor_y = labelData[28], _pickingColor_z = labelData[29]
117
+
118
+
119
+ let _vertexArr = new Float32Array(maxLetters * 12),
120
+ _texCoordArr = new Float32Array(maxLetters * 24),
121
+ _gliphParamArr = new Float32Array(maxLetters * 24),
122
+ _positionHighArr = new Float32Array(maxLetters * 18),
123
+ _positionLowArr = new Float32Array(maxLetters * 18),
124
+ _sizeArr = new Float32Array(maxLetters * 6),
125
+ _offsetArr = new Float32Array(maxLetters * 18),
126
+ _rgbaArr = new Float32Array(maxLetters * 24),
127
+ _rotationArr = new Float32Array(maxLetters * 6),
128
+ _alignedAxisArr = new Float32Array(maxLetters * 18),
129
+ _fontIndexArr = new Float32Array(maxLetters * 6),
130
+ _outlineArr = new Float32Array(maxLetters * 6),
131
+ _noOutlineArr = new Float32Array(maxLetters * 6),
132
+ _outlineColorArr = new Float32Array(maxLetters * 24),
133
+ _pickingColorArr = new Float32Array(maxLetters * 18);
134
+
135
+ for (var i = 0; i < maxLetters; i++) {
136
+ if (isVisible !== 0) {
137
+ concatTypedArrays(_vertexArr, i, [0, 0, 0, -1, 1, -1, 1, -1, 1, 0, 0, 0]);
138
+ } else {
139
+ concatTypedArrays(_vertexArr, i, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
140
+ }
141
+
142
+ concatTypedArrays(_texCoordArr, i, [0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0]);
143
+ concatTypedArrays(_gliphParamArr, i, [1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0]);
144
+
145
+ var x = _positionHigh_x, y = _positionHigh_y, z = _positionHigh_z, w;
146
+ concatTypedArrays(_positionHighArr, i, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
147
+
148
+ x = _positionLow_x; y = _positionLow_y; z = _positionLow_z;
149
+ concatTypedArrays(_positionLowArr, i, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
150
+
151
+ x = _size;
152
+ concatTypedArrays(_sizeArr, i, [x, x, x, x, x, x]);
153
+
154
+ x = _offset_x; y = _offset_y; z = _offset_z;
155
+ concatTypedArrays(_offsetArr, i, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
156
+
157
+ x = _color_x; y = _color_y; z = _color_z; w = _color_w;
158
+ concatTypedArrays(_rgbaArr, i, [x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w]);
159
+
160
+ x = _rotation;
161
+ concatTypedArrays(_rotationArr, i, [x, x, x, x, x, x]);
162
+
163
+ x = _alignedAxis_x; y = _alignedAxis_y; z = _alignedAxis_z;
164
+ concatTypedArrays(_alignedAxisArr, i, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
165
+
166
+ x = _fontIndex;
167
+ concatTypedArrays(_fontIndexArr, i, [x, x, x, x, x, x]);
168
+
169
+ x = _outline;
170
+ concatTypedArrays(_outlineArr, i, [x, x, x, x, x, x]);
171
+
172
+ w = 0.001;
173
+ concatTypedArrays(_noOutlineArr, i, [w, w, w, w, w, w]);
174
+
175
+ x = _outlineColor_x; y = _outlineColor_y; z = _outlineColor_z; w = _outlineColor_w;
176
+ concatTypedArrays(_outlineColorArr, i, [x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w, x, y, z, w]);
177
+
178
+ x = _pickingColor_x / 255; y = _pickingColor_y / 255; z = _pickingColor_z / 255;
179
+ concatTypedArrays(_pickingColorArr, i, [x, y, z, x, y, z, x, y, z, x, y, z, x, y, z, x, y, z]);
180
+ }
181
+
182
+ self.postMessage({
183
+ id: id,
184
+ vertexArr: _vertexArr,
185
+ texCoordArr: _texCoordArr,
186
+ gliphParamArr: _gliphParamArr,
187
+ positionHighArr: _positionHighArr,
188
+ positionLowArr: _positionLowArr,
189
+ sizeArr: _sizeArr,
190
+ offsetArr: _offsetArr,
191
+ rgbaArr: _rgbaArr,
192
+ rotationArr: _rotationArr,
193
+ alignedAxisArr: _alignedAxisArr,
194
+ fontIndexArr: _fontIndexArr,
195
+ outlineArr: _outlineArr,
196
+ noOutlineArr: _noOutlineArr,
197
+ outlineColorArr: _outlineColorArr,
198
+ pickingColorArr: _pickingColorArr
199
+ }, [
200
+ _vertexArr.buffer,
201
+ _texCoordArr.buffer,
202
+ _gliphParamArr.buffer,
203
+ _positionHighArr.buffer,
204
+ _positionLowArr.buffer,
205
+ _sizeArr.buffer,
206
+ _offsetArr.buffer,
207
+ _rgbaArr.buffer,
208
+ _rotationArr.buffer,
209
+ _alignedAxisArr.buffer,
210
+ _fontIndexArr.buffer,
211
+ _outlineArr.buffer,
212
+ _noOutlineArr.buffer,
213
+ _outlineColorArr.buffer,
214
+ _pickingColorArr.buffer
215
+ ]);
216
+ }`;
217
+
218
+ export { LabelWorker };
@@ -0,0 +1,504 @@
1
+ /* eslint-disable no-param-reassign */
2
+ "use strict";
3
+
4
+ import { htmlColorToFloat32Array } from "../utils/shared.js";
5
+ import { Vec3 } from "../math/Vec3.js";
6
+
7
+ function getColor(color) {
8
+ if (color instanceof Array) {
9
+ return color;
10
+ } else if (typeof color === "string") {
11
+ return htmlColorToFloat32Array(color);
12
+ }
13
+ return [1.0, 1.0, 1.0, 1.0];
14
+ }
15
+
16
+ class Object3d {
17
+ constructor(data) {
18
+ this._name = data.name || "noname";
19
+ this._vertices = data.vertices || [];
20
+ this._texCoords = [];
21
+
22
+ this.color = getColor(data.color);
23
+
24
+ if (data.scale) {
25
+ Object3d.scale(this._vertices, data.scale);
26
+ }
27
+
28
+ if (data.indexes) {
29
+ this._indexes = data.indexes || [];
30
+ this._normals = data.normals || [];
31
+ } else {
32
+ this._normals = Object3d.getNormals(this._vertices);
33
+ }
34
+ }
35
+
36
+ get name() {
37
+ return this._name;
38
+ }
39
+
40
+ get vertices() {
41
+ return this._vertices;
42
+ }
43
+
44
+ get normals() {
45
+ return this._normals;
46
+ }
47
+
48
+ get indexes() {
49
+ return this._indexes;
50
+ }
51
+
52
+ get indices() {
53
+ return this._indexes;
54
+ }
55
+
56
+ static scale(vertices, s) {
57
+ for (let i = 0; i < vertices.length; i++) {
58
+ vertices[i] *= s;
59
+ }
60
+ }
61
+
62
+ static centroid(vertices) {
63
+ let minX = 1000.0,
64
+ minY = 1000.0,
65
+ minZ = 1000.0,
66
+ maxX = -1000.0,
67
+ maxY = -1000.0,
68
+ maxZ = -1000.0;
69
+
70
+ for (let i = 0; i < vertices.length; i += 3) {
71
+ let x = vertices[i],
72
+ y = vertices[i + 1],
73
+ z = vertices[i + 2];
74
+ if (x < minX) minX = x;
75
+ if (y < minY) minY = y;
76
+ if (z < minZ) minZ = z;
77
+ if (x > maxX) maxX = x;
78
+ if (y > maxY) maxY = y;
79
+ if (z > maxZ) maxZ = z;
80
+ }
81
+
82
+ return [minX + (maxX - minX) * 0.5, minY + (maxY - minY) * 0.5, minZ + (maxZ - minZ) * 0.5];
83
+ }
84
+
85
+ static translate(vertices, v) {
86
+ for (let i = 0; i < vertices.length; i += 3) {
87
+ vertices[i] -= v[0];
88
+ vertices[i + 1] -= v[1];
89
+ vertices[i + 2] -= v[2];
90
+ }
91
+ }
92
+
93
+ static getNormals(vertices) {
94
+ let res = new Array(vertices.length);
95
+
96
+ for (var i = 0; i < vertices.length; i += 9) {
97
+ let t03 = i,
98
+ t13 = i + 3,
99
+ t23 = i + 6,
100
+ v0_x = vertices[t03],
101
+ v0_y = vertices[t03 + 1],
102
+ v0_z = vertices[t03 + 2],
103
+ v1_x = vertices[t13],
104
+ v1_y = vertices[t13 + 1],
105
+ v1_z = vertices[t13 + 2],
106
+ v2_x = vertices[t23],
107
+ v2_y = vertices[t23 + 1],
108
+ v2_z = vertices[t23 + 2],
109
+ vv0_x = v1_x - v0_x,
110
+ vv0_y = v1_y - v0_y,
111
+ vv0_z = v1_z - v0_z,
112
+ vv1_x = v2_x - v0_x,
113
+ vv1_y = v2_y - v0_y,
114
+ vv1_z = v2_z - v0_z,
115
+ n_x = vv0_y * vv1_z - vv0_z * vv1_y,
116
+ n_y = vv0_z * vv1_x - vv0_x * vv1_z,
117
+ n_z = vv0_x * vv1_y - vv0_y * vv1_x;
118
+
119
+ let l = Math.sqrt(n_x * n_x + n_y * n_y + n_z * n_z);
120
+
121
+ n_x /= l;
122
+ n_y /= l;
123
+ n_z /= l;
124
+
125
+ res[t03] = n_x;
126
+ res[t03 + 1] = n_y;
127
+ res[t03 + 2] = n_z;
128
+
129
+ res[t13] = n_x;
130
+ res[t13 + 1] = n_y;
131
+ res[t13 + 2] = n_z;
132
+
133
+ res[t23] = n_x;
134
+ res[t23 + 1] = n_y;
135
+ res[t23 + 2] = n_z;
136
+ }
137
+
138
+ return res;
139
+ }
140
+
141
+ static createSphere(
142
+ lonBands = 16,
143
+ latBands = 16,
144
+ radius = 1.0,
145
+ offsetX = 0,
146
+ offsetY = 0,
147
+ offsetZ = 0
148
+ ) {
149
+ let vertices = [],
150
+ indexes = [],
151
+ normals = [];
152
+
153
+ for (let latNumber = 0; latNumber <= latBands; latNumber++) {
154
+ var theta = (latNumber * Math.PI) / latBands;
155
+ var sinTheta = Math.sin(theta);
156
+ var cosTheta = Math.cos(theta);
157
+
158
+ for (let longNumber = 0; longNumber <= lonBands; longNumber++) {
159
+ var phi = (longNumber * 2 * Math.PI) / lonBands;
160
+ var sinPhi = Math.sin(phi);
161
+ var cosPhi = Math.cos(phi);
162
+ var x = cosPhi * sinTheta + offsetX;
163
+ var y = cosTheta + offsetY;
164
+ var z = sinPhi * sinTheta + offsetZ;
165
+ //var u = 1 - (longNumber / lonBands);
166
+ //var v = latNumber / latBands;
167
+ normals.push(x);
168
+ normals.push(y);
169
+ normals.push(z);
170
+ //texCoords.push(u);
171
+ //texCoords.push(v);
172
+ vertices.push(radius * x);
173
+ vertices.push(radius * y);
174
+ vertices.push(radius * z);
175
+ }
176
+ }
177
+
178
+ for (let latNumber = 0; latNumber < latBands; latNumber++) {
179
+ for (let longNumber = 0; longNumber < lonBands; longNumber++) {
180
+ var first = latNumber * (lonBands + 1) + longNumber;
181
+ var second = first + lonBands + 1;
182
+
183
+ indexes.push(first);
184
+ indexes.push(first + 1);
185
+ indexes.push(second);
186
+
187
+ indexes.push(second);
188
+ indexes.push(first + 1);
189
+ indexes.push(second + 1);
190
+ }
191
+ }
192
+
193
+ return new Object3d({
194
+ vertices: vertices,
195
+ normals: normals,
196
+ indexes: indexes
197
+ });
198
+ }
199
+
200
+ static createDisc(
201
+ radius = 1.0,
202
+ height = 0.0,
203
+ radialSegments = 8,
204
+ isTop = true,
205
+ startIndex = 0,
206
+ offsetX = 0,
207
+ offsetY,
208
+ offsetZ = 0
209
+ ) {
210
+ let vertices = [],
211
+ indexes = [],
212
+ normals = [];
213
+
214
+ let thetaStart = 0.0,
215
+ thetaLength = Math.PI * 2;
216
+
217
+ let sign = isTop === true ? 1.0 : -1.0;
218
+
219
+ let centerIndexStart = startIndex;
220
+
221
+ for (let x = 1; x <= radialSegments; x++) {
222
+ vertices.push(0 + offsetX, height * sign + offsetY, 0 + offsetZ);
223
+ normals.push(0, sign, 0);
224
+ //texCoords.push(0.5, 0.5);
225
+ startIndex++;
226
+ }
227
+
228
+ let centerIndexEnd = startIndex;
229
+
230
+ for (let x = 0; x <= radialSegments; x++) {
231
+ let u = x / radialSegments;
232
+ let theta = u * thetaLength + thetaStart;
233
+
234
+ let cosTheta = Math.cos(theta);
235
+ let sinTheta = Math.sin(theta);
236
+
237
+ vertices.push(
238
+ radius * sinTheta + offsetX,
239
+ height * sign + offsetY,
240
+ radius * cosTheta + offsetZ
241
+ );
242
+ normals.push(0, sign, 0);
243
+ //texCoords.push((cosTheta * 0.5) + 0.5, (sinTheta * 0.5 * sign) + 0.5);
244
+
245
+ startIndex++;
246
+ }
247
+
248
+ for (let x = 0; x < radialSegments; x++) {
249
+ let c = centerIndexStart + x,
250
+ i = centerIndexEnd + x;
251
+ if (isTop === true) {
252
+ indexes.push(i, i + 1, c);
253
+ } else {
254
+ indexes.push(i + 1, i, c);
255
+ }
256
+ }
257
+
258
+ return new Object3d({
259
+ vertices: vertices,
260
+ normals: normals,
261
+ indexes: indexes
262
+ });
263
+ }
264
+
265
+ static createCylinder(
266
+ radiusTop = 1.0,
267
+ radiusBottom = 1.0,
268
+ height = 1.0,
269
+ radialSegments = 32,
270
+ heightSegments = 1.0,
271
+ isTop = true,
272
+ isBottom = true,
273
+ offsetX = 0,
274
+ offsetY = 0,
275
+ offsetZ = 0
276
+ ) {
277
+ let vertices = [],
278
+ indexes = [],
279
+ normals = [];
280
+
281
+ let thetaStart = 0.0,
282
+ thetaLength = Math.PI * 2;
283
+
284
+ let index = 0;
285
+ let indexArray = [];
286
+
287
+ let normal = new Vec3();
288
+
289
+ var slope = (radiusBottom - radiusTop) / height;
290
+
291
+ for (let y = 0; y <= heightSegments; y++) {
292
+ let indexRow = [];
293
+
294
+ let v = y / heightSegments;
295
+
296
+ let radius = v * (radiusBottom - radiusTop) + radiusTop;
297
+
298
+ for (let x = 0; x <= radialSegments; x++) {
299
+ let u = x / radialSegments;
300
+
301
+ let theta = u * thetaLength + thetaStart;
302
+
303
+ let sinTheta = Math.sin(theta),
304
+ cosTheta = Math.cos(theta);
305
+
306
+ vertices.push(
307
+ radius * sinTheta + offsetX,
308
+ -v * height + height + offsetY,
309
+ radius * cosTheta + offsetZ
310
+ );
311
+
312
+ normal.set(sinTheta, slope, cosTheta).normalize();
313
+ normals.push(normal.x, normal.y, normal.z);
314
+
315
+ //texCoords.push(u, 1 - v);
316
+
317
+ indexRow.push(index++);
318
+ }
319
+ indexArray.push(indexRow);
320
+ }
321
+
322
+ for (let x = 0; x < radialSegments; x++) {
323
+ for (let y = 0; y < heightSegments; y++) {
324
+ let a = indexArray[y][x],
325
+ b = indexArray[y + 1][x],
326
+ c = indexArray[y + 1][x + 1],
327
+ d = indexArray[y][x + 1];
328
+
329
+ indexes.push(a, b, d);
330
+ indexes.push(b, c, d);
331
+ }
332
+ }
333
+
334
+ if (radiusTop !== 0.0 && isTop) {
335
+ let cap = Object3d.createDisc(
336
+ radiusTop,
337
+ height,
338
+ radialSegments,
339
+ true,
340
+ index,
341
+ offsetX,
342
+ offsetY,
343
+ offsetZ
344
+ );
345
+ vertices.push(...cap.vertices);
346
+ normals.push(...cap.normals);
347
+ indexes.push(...cap.indexes);
348
+ }
349
+
350
+ if (radiusBottom !== 0.0 && isBottom) {
351
+ let cap = Object3d.createDisc(
352
+ radiusBottom,
353
+ 0,
354
+ radialSegments,
355
+ false,
356
+ index + (isTop ? 1 + 2 * radialSegments : 0),
357
+ offsetX,
358
+ offsetY,
359
+ offsetZ
360
+ );
361
+ vertices.push(...cap.vertices);
362
+ normals.push(...cap.normals);
363
+ indexes.push(...cap.indexes);
364
+ }
365
+
366
+ return new Object3d({
367
+ vertices: vertices,
368
+ normals: normals,
369
+ indexes: indexes
370
+ });
371
+ }
372
+
373
+ static createCube(length = 1, height = 1, depth = 1, xOffset = 0, yOffset = 0, zOffset = 0) {
374
+ let l = length * 0.5 + xOffset,
375
+ h = height * 0.5 + yOffset,
376
+ d = depth * 0.5 + zOffset;
377
+
378
+ return new Object3d({
379
+ vertices: [
380
+ //bottom
381
+ -l,
382
+ -h,
383
+ d,
384
+ l,
385
+ -h,
386
+ -d,
387
+ l,
388
+ -h,
389
+ d,
390
+ -l,
391
+ -h,
392
+ d,
393
+ -l,
394
+ -h,
395
+ -d,
396
+ l,
397
+ -h,
398
+ -d,
399
+
400
+ //top
401
+ -l,
402
+ h,
403
+ d,
404
+ l,
405
+ h,
406
+ d,
407
+ l,
408
+ h,
409
+ -d,
410
+ -l,
411
+ h,
412
+ d,
413
+ l,
414
+ h,
415
+ -d,
416
+ -l,
417
+ h,
418
+ -d,
419
+
420
+ //front
421
+ -l,
422
+ -h,
423
+ d,
424
+ l,
425
+ -h,
426
+ d,
427
+ -l,
428
+ h,
429
+ d,
430
+ -l,
431
+ h,
432
+ d,
433
+ l,
434
+ -h,
435
+ d,
436
+ l,
437
+ h,
438
+ d,
439
+
440
+ //back
441
+ -l,
442
+ -h,
443
+ -d,
444
+ -l,
445
+ h,
446
+ -d,
447
+ l,
448
+ -h,
449
+ -d,
450
+ -l,
451
+ h,
452
+ -d,
453
+ l,
454
+ h,
455
+ -d,
456
+ l,
457
+ -h,
458
+ -d,
459
+
460
+ //left
461
+ l,
462
+ -h,
463
+ d,
464
+ l,
465
+ -h,
466
+ -d,
467
+ l,
468
+ h,
469
+ d,
470
+ l,
471
+ h,
472
+ d,
473
+ l,
474
+ -h,
475
+ -d,
476
+ l,
477
+ h,
478
+ -d,
479
+
480
+ //right
481
+ -l,
482
+ -h,
483
+ d,
484
+ -l,
485
+ h,
486
+ d,
487
+ -l,
488
+ -h,
489
+ -d,
490
+ -l,
491
+ h,
492
+ d,
493
+ -l,
494
+ h,
495
+ -d,
496
+ -l,
497
+ -h,
498
+ -d
499
+ ]
500
+ });
501
+ }
502
+ }
503
+
504
+ export { Object3d };