@openglobus/og 0.12.1 → 0.13.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 (230) hide show
  1. package/README.md +0 -2
  2. package/dist/@openglobus/og.css +1 -0
  3. package/dist/@openglobus/og.esm.js +21 -0
  4. package/dist/@openglobus/og.esm.js.map +1 -0
  5. package/dist/@openglobus/og.umd.js +21 -0
  6. package/dist/@openglobus/og.umd.js.map +1 -0
  7. package/package.json +8 -8
  8. package/src/og/Extent.js +3 -3
  9. package/src/og/Globe.js +277 -275
  10. package/src/og/ImageCanvas.js +3 -3
  11. package/src/og/LonLat.js +9 -9
  12. package/src/og/QueueArray.js +2 -2
  13. package/src/og/Rectangle.js +5 -5
  14. package/src/og/bv/Box.js +1 -1
  15. package/src/og/bv/Sphere.js +2 -2
  16. package/src/og/camera/Camera.js +1 -1
  17. package/src/og/camera/PlanetCamera.js +649 -646
  18. package/src/og/control/LayerSwitcher.js +1 -1
  19. package/src/og/control/MouseNavigation.js +22 -13
  20. package/src/og/control/MouseWheelZoomControl.js +2 -2
  21. package/src/og/control/ScaleControl.js +1 -1
  22. package/src/og/control/TouchNavigation.js +319 -319
  23. package/src/og/control/ZoomControl.js +132 -132
  24. package/src/og/control/visibleExtent/Segment.js +12 -12
  25. package/src/og/ellipsoid/Ellipsoid.js +577 -567
  26. package/src/og/entity/BillboardHandler.js +878 -1051
  27. package/src/og/entity/Entity.js +1 -1
  28. package/src/og/entity/EntityCollection.js +847 -857
  29. package/src/og/entity/GeoObjectHandler.js +37 -18
  30. package/src/og/entity/LabelHandler.js +888 -1040
  31. package/src/og/entity/LabelWorker.js +0 -6
  32. package/src/og/entity/PointCloud.js +495 -495
  33. package/src/og/entity/Polyline.js +2218 -2222
  34. package/src/og/entity/RayHandler.js +1 -1
  35. package/src/og/layer/CanvasTiles.js +6 -3
  36. package/src/og/layer/GeoImage.js +1 -1
  37. package/src/og/layer/KML.js +24 -17
  38. package/src/og/layer/Layer.js +806 -751
  39. package/src/og/layer/Vector.js +997 -1010
  40. package/src/og/layer/XYZ.js +359 -357
  41. package/src/og/math/Line2.js +4 -4
  42. package/src/og/math/Quat.js +2 -2
  43. package/src/og/math/Ray.js +2 -2
  44. package/src/og/math/Vec2.js +524 -524
  45. package/src/og/math/Vec3.js +900 -900
  46. package/src/og/math/Vec4.js +261 -261
  47. package/src/og/math.js +397 -398
  48. package/src/og/quadTree/EntityCollectionNode.js +389 -387
  49. package/src/og/renderer/Renderer.js +14 -20
  50. package/src/og/renderer/RendererEvents.js +1034 -1045
  51. package/src/og/scene/Planet.js +26 -23
  52. package/src/og/scene/RenderNode.js +347 -354
  53. package/src/og/segment/Segment.js +3 -1
  54. package/src/og/segment/SegmentLonLat.js +1 -4
  55. package/src/og/shaders/billboard.js +220 -204
  56. package/src/og/shaders/drawnode.js +603 -603
  57. package/src/og/shaders/geoObject.js +15 -6
  58. package/src/og/shaders/label.js +596 -456
  59. package/src/og/shaders/polyline.js +365 -361
  60. package/src/og/terrain/MapboxTerrain.js +1 -1
  61. package/src/og/utils/FontAtlas.js +209 -200
  62. package/src/og/utils/GeoImageCreator.js +4 -5
  63. package/src/og/utils/TextureAtlas.js +4 -4
  64. package/src/og/utils/VectorTileCreator.js +414 -414
  65. package/src/og/utils/shared.js +1 -1
  66. package/src/og/webgl/Handler.js +28 -60
  67. package/src/og/webgl/Multisample.js +260 -260
  68. package/src/og/webgl/Program.js +411 -396
  69. package/types/Clock.d.ts +94 -0
  70. package/types/Deferred.d.ts +6 -0
  71. package/types/Events.d.ts +77 -0
  72. package/types/Extent.d.ts +166 -0
  73. package/types/Globe.d.ts +85 -0
  74. package/types/ImageCanvas.d.ts +123 -0
  75. package/types/Lock.d.ts +12 -0
  76. package/types/LonLat.d.ts +108 -0
  77. package/types/Popup.d.ts +42 -0
  78. package/types/QueueArray.d.ts +19 -0
  79. package/types/Rectangle.d.ts +80 -0
  80. package/types/Stack.d.ts +19 -0
  81. package/types/ajax.d.ts +24 -0
  82. package/types/arial.d.ts +48 -0
  83. package/types/astro/astro.d.ts +38 -0
  84. package/types/astro/earth.d.ts +7 -0
  85. package/types/astro/jd.d.ts +254 -0
  86. package/types/bv/Box.d.ts +30 -0
  87. package/types/bv/Sphere.d.ts +38 -0
  88. package/types/bv/index.d.ts +3 -0
  89. package/types/camera/Camera.d.ts +312 -0
  90. package/types/camera/Frustum.d.ts +133 -0
  91. package/types/camera/PlanetCamera.d.ts +219 -0
  92. package/types/camera/index.d.ts +3 -0
  93. package/types/cons.d.ts +40 -0
  94. package/types/control/CompassButton.d.ts +17 -0
  95. package/types/control/Control.d.ts +104 -0
  96. package/types/control/DebugInfo.d.ts +15 -0
  97. package/types/control/EarthCoordinates.d.ts +47 -0
  98. package/types/control/EarthNavigation.d.ts +43 -0
  99. package/types/control/GeoImageDragControl.d.ts +6 -0
  100. package/types/control/KeyboardNavigation.d.ts +21 -0
  101. package/types/control/LayerSwitcher.d.ts +21 -0
  102. package/types/control/Lighting.d.ts +16 -0
  103. package/types/control/MouseNavigation.d.ts +48 -0
  104. package/types/control/MouseWheelZoomControl.d.ts +45 -0
  105. package/types/control/ScaleControl.d.ts +22 -0
  106. package/types/control/ShowFps.d.ts +11 -0
  107. package/types/control/SimpleNavigation.d.ts +25 -0
  108. package/types/control/Sun.d.ts +50 -0
  109. package/types/control/ToggleWireframe.d.ts +12 -0
  110. package/types/control/TouchNavigation.d.ts +48 -0
  111. package/types/control/ZoomControl.d.ts +27 -0
  112. package/types/control/index.d.ts +18 -0
  113. package/types/ellipsoid/Ellipsoid.d.ts +153 -0
  114. package/types/ellipsoid/index.d.ts +3 -0
  115. package/types/ellipsoid/wgs84.d.ts +6 -0
  116. package/types/entity/BaseBillboard.d.ts +215 -0
  117. package/types/entity/Billboard.d.ts +94 -0
  118. package/types/entity/BillboardHandler.d.ts +75 -0
  119. package/types/entity/Entity.d.ts +348 -0
  120. package/types/entity/EntityCollection.d.ts +309 -0
  121. package/types/entity/GeoObject.d.ts +111 -0
  122. package/types/entity/GeoObjectHandler.d.ts +81 -0
  123. package/types/entity/Geometry.d.ts +74 -0
  124. package/types/entity/GeometryHandler.d.ts +76 -0
  125. package/types/entity/Label.d.ts +189 -0
  126. package/types/entity/LabelHandler.d.ts +29 -0
  127. package/types/entity/LabelWorker.d.ts +11 -0
  128. package/types/entity/PointCloud.d.ts +174 -0
  129. package/types/entity/PointCloudHandler.d.ts +38 -0
  130. package/types/entity/Polyline.d.ts +306 -0
  131. package/types/entity/PolylineHandler.d.ts +18 -0
  132. package/types/entity/Ray.d.ts +124 -0
  133. package/types/entity/RayHandler.d.ts +67 -0
  134. package/types/entity/ShapeHandler.d.ts +22 -0
  135. package/types/entity/Strip.d.ts +119 -0
  136. package/types/entity/StripHandler.d.ts +38 -0
  137. package/types/entity/index.d.ts +8 -0
  138. package/types/index.core.d.ts +65 -0
  139. package/types/index.d.ts +45 -0
  140. package/types/index.webgl.d.ts +7 -0
  141. package/types/input/KeyboardHandler.d.ts +10 -0
  142. package/types/input/MouseHandler.d.ts +5 -0
  143. package/types/input/TouchHandler.d.ts +5 -0
  144. package/types/input/input.d.ts +34 -0
  145. package/types/layer/BaseGeoImage.d.ts +94 -0
  146. package/types/layer/CanvasTiles.d.ts +67 -0
  147. package/types/layer/GeoImage.d.ts +52 -0
  148. package/types/layer/GeoTexture2d.d.ts +8 -0
  149. package/types/layer/GeoVideo.d.ts +55 -0
  150. package/types/layer/KML.d.ts +68 -0
  151. package/types/layer/Layer.d.ts +315 -0
  152. package/types/layer/Material.d.ts +45 -0
  153. package/types/layer/Vector.d.ts +201 -0
  154. package/types/layer/WMS.d.ts +61 -0
  155. package/types/layer/XYZ.d.ts +119 -0
  156. package/types/layer/index.d.ts +10 -0
  157. package/types/light/LightSource.d.ts +178 -0
  158. package/types/math/Line2.d.ts +11 -0
  159. package/types/math/Line3.d.ts +10 -0
  160. package/types/math/Mat3.d.ts +65 -0
  161. package/types/math/Mat4.d.ts +176 -0
  162. package/types/math/Plane.d.ts +18 -0
  163. package/types/math/Quat.d.ts +379 -0
  164. package/types/math/Ray.d.ts +82 -0
  165. package/types/math/Vec2.d.ts +309 -0
  166. package/types/math/Vec3.d.ts +467 -0
  167. package/types/math/Vec4.d.ts +162 -0
  168. package/types/math/coder.d.ts +43 -0
  169. package/types/math/index.d.ts +11 -0
  170. package/types/math.d.ts +261 -0
  171. package/types/mercator.d.ts +92 -0
  172. package/types/proj/EPSG3857.d.ts +6 -0
  173. package/types/proj/EPSG4326.d.ts +6 -0
  174. package/types/proj/Proj.d.ts +42 -0
  175. package/types/quadTree/EntityCollectionNode.d.ts +34 -0
  176. package/types/quadTree/Node.d.ts +60 -0
  177. package/types/quadTree/quadTree.d.ts +40 -0
  178. package/types/renderer/Renderer.d.ts +290 -0
  179. package/types/renderer/RendererEvents.d.ts +237 -0
  180. package/types/res/images.d.ts +3 -0
  181. package/types/scene/Axes.d.ts +11 -0
  182. package/types/scene/BaseNode.d.ts +60 -0
  183. package/types/scene/Planet.d.ts +576 -0
  184. package/types/scene/RenderNode.d.ts +142 -0
  185. package/types/scene/SkyBox.d.ts +10 -0
  186. package/types/scene/index.d.ts +4 -0
  187. package/types/segment/Segment.d.ts +275 -0
  188. package/types/segment/SegmentLonLat.d.ts +17 -0
  189. package/types/segment/Slice.d.ts +10 -0
  190. package/types/segment/segmentHelper.d.ts +13 -0
  191. package/types/shaders/billboard.d.ts +3 -0
  192. package/types/shaders/depth.d.ts +2 -0
  193. package/types/shaders/drawnode.d.ts +7 -0
  194. package/types/shaders/geoObject.d.ts +3 -0
  195. package/types/shaders/label.d.ts +4 -0
  196. package/types/shaders/pointCloud.d.ts +2 -0
  197. package/types/shaders/polyline.d.ts +3 -0
  198. package/types/shaders/ray.d.ts +2 -0
  199. package/types/shaders/screenFrame.d.ts +2 -0
  200. package/types/shaders/shape.d.ts +4 -0
  201. package/types/shaders/skybox.d.ts +2 -0
  202. package/types/shaders/toneMapping.d.ts +2 -0
  203. package/types/shapes/BaseShape.d.ts +250 -0
  204. package/types/shapes/Sphere.d.ts +41 -0
  205. package/types/terrain/BilTerrain.d.ts +7 -0
  206. package/types/terrain/EmptyTerrain.d.ts +73 -0
  207. package/types/terrain/Geoid.d.ts +26 -0
  208. package/types/terrain/GlobusTerrain.d.ts +116 -0
  209. package/types/terrain/MapboxTerrain.d.ts +7 -0
  210. package/types/terrain/index.d.ts +5 -0
  211. package/types/utils/FontAtlas.d.ts +16 -0
  212. package/types/utils/GeoImageCreator.d.ts +30 -0
  213. package/types/utils/ImagesCacheManager.d.ts +10 -0
  214. package/types/utils/Loader.d.ts +25 -0
  215. package/types/utils/NormalMapCreator.d.ts +39 -0
  216. package/types/utils/PlainSegmentWorker.d.ts +10 -0
  217. package/types/utils/TerrainWorker.d.ts +9 -0
  218. package/types/utils/TextureAtlas.d.ts +111 -0
  219. package/types/utils/VectorTileCreator.d.ts +16 -0
  220. package/types/utils/colorTable.d.ts +143 -0
  221. package/types/utils/earcut.d.ts +6 -0
  222. package/types/utils/shared.d.ts +231 -0
  223. package/types/webgl/Framebuffer.d.ts +135 -0
  224. package/types/webgl/Handler.d.ts +392 -0
  225. package/types/webgl/Multisample.d.ts +89 -0
  226. package/types/webgl/Program.d.ts +163 -0
  227. package/types/webgl/ProgramController.d.ts +89 -0
  228. package/types/webgl/callbacks.d.ts +1 -0
  229. package/types/webgl/index.d.ts +6 -0
  230. package/types/webgl/types.d.ts +2 -0
@@ -1,495 +1,495 @@
1
- /**
2
- * @module og/entity/PointCloud
3
- */
4
-
5
- "use strict";
6
-
7
- import { Vec3 } from "../math/Vec3.js";
8
- import { Vec4 } from "../math/Vec4.js";
9
-
10
- const COORDINATES_BUFFER = 0;
11
- const COLOR_BUFFER = 1;
12
- const PICKING_COLOR_BUFFER = 2;
13
-
14
- /**
15
- * PointCloud object.
16
- * @class
17
- * @param {*} [options] - Point cloud options:
18
- * @param {Array.<Array.<number>>} [options.points] - Points cartesian coordinates array,
19
- * where first three is cartesian coordinates, next fourth is a RGBA color, and last is an point properties.
20
- * @param {number} [options.pointSize] - Point screen size in pixels.
21
- * @param {number} [options.pickingDistance] - Point border picking size in screen pixels.
22
- * @param {boolean} [options.visibility] - Point cloud visibility.
23
- * @example <caption>Creates point cloud with two ten pixel size points</caption>
24
- * new og.Entity({
25
- * pointCloud: {
26
- * pointSize: 10,
27
- * points: [
28
- * [0, 0, 0, 255, 255, 255, 255, { 'name': 'White point' }],
29
- * [100, 100, 0, 255, 0, 0, 255, { 'name': 'Red point' }]
30
- * ]
31
- * }
32
- * });
33
- */
34
- class PointCloud {
35
- constructor(options) {
36
- options = options || {};
37
-
38
- /**
39
- * Object unic identifier.
40
- * @public
41
- * @readonly
42
- * @type {number}
43
- */
44
- this.id = PointCloud._staticCounter++;
45
-
46
- /**
47
- * Cloud visibility.
48
- * @public
49
- * @type {boolean}
50
- */
51
- this.visibility = options.visibility != undefined ? options.visibility : true;
52
-
53
- /**
54
- * Point screen size in pixels.
55
- * @public
56
- * @type {number}
57
- */
58
- this.pointSize = options.pointSize || 3;
59
-
60
- /**
61
- * Point picking border size in pixels.
62
- * @public
63
- * @type {number}
64
- */
65
- this.pickingDistance = options.pickingDistance || 0;
66
-
67
- /**
68
- * Parent collection render node.
69
- * @private
70
- * @type {RenderNode}
71
- */
72
- this._renderNode = null;
73
-
74
- /**
75
- * Entity instance that holds this point cloud.
76
- * @private
77
- * @type {Entity}
78
- */
79
- this._entity = null;
80
-
81
- /**
82
- * Points properties.
83
- * @private
84
- * @type {Array.<*>}
85
- */
86
- this._points = [];
87
-
88
- /**
89
- * Coordinates array.
90
- * @private
91
- * @type {Array.<number>}
92
- */
93
- this._coordinatesData = [];
94
-
95
- /**
96
- * Color array.
97
- * @private
98
- * @type {Array.<number>}
99
- */
100
- this._colorData = [];
101
-
102
- /**
103
- * Picking color array.
104
- * @private
105
- * @type {Array.<number>}
106
- */
107
- this._pickingColorData = [];
108
-
109
- this._coordinatesBuffer = null;
110
- this._colorBuffer = null;
111
- this._pickingColorBuffer = null;
112
-
113
- /**
114
- * Handler that stores and renders this object.
115
- * @private
116
- * @type {PointCloudHandler}
117
- */
118
- this._handler = null;
119
- this._handlerIndex = -1;
120
-
121
- this._buffersUpdateCallbacks = [];
122
- this._buffersUpdateCallbacks[COORDINATES_BUFFER] = this._createCoordinatesBuffer;
123
- this._buffersUpdateCallbacks[COLOR_BUFFER] = this._createColorBuffer;
124
- this._buffersUpdateCallbacks[PICKING_COLOR_BUFFER] = this._createPickingColorBuffer;
125
-
126
- this._changedBuffers = new Array(this._buffersUpdateCallbacks.length);
127
-
128
- this.setPoints(options.points);
129
- }
130
-
131
- static get _staticCounter() {
132
- if (!this._counter && this._counter !== 0) {
133
- this._counter = 0;
134
- }
135
- return this._counter;
136
- }
137
-
138
- static set _staticCounter(n) {
139
- this._counter = n;
140
- }
141
-
142
- /**
143
- * Clears point cloud data
144
- * @public
145
- */
146
- clear() {
147
- this._points.length = 0;
148
- this._points = [];
149
-
150
- this._coordinatesData.length = 0;
151
- this._coordinatesData = [];
152
-
153
- this._colorData.length = 0;
154
- this._colorData = [];
155
-
156
- this._pickingColorData.length = 0;
157
- this._pickingColorData = [];
158
-
159
- this._deleteBuffers();
160
- }
161
-
162
- /**
163
- * Set point cloud opacity.
164
- * @public
165
- * @param {number} opacity - Cloud opacity.
166
- */
167
- setOpacity(opacity) {
168
- this.opacity = opacity;
169
- }
170
-
171
- /**
172
- * Sets cloud visibility.
173
- * @public
174
- * @param {number} visibility - Visibility flag.
175
- */
176
- setVisibility(visibility) {
177
- this.visibility = visibility;
178
- }
179
-
180
- /**
181
- * @return {boolean} Point cloud visibily.
182
- */
183
- getVisibility() {
184
- return this.visibility;
185
- }
186
-
187
- /**
188
- * Assign rendering scene node.
189
- * @public
190
- * @param {RenderNode} renderNode - Assigned render node.
191
- */
192
- setRenderNode(renderNode) {
193
- this._renderNode = renderNode;
194
- this._setPickingColors();
195
- }
196
-
197
- /**
198
- * Removes from entity.
199
- * @public
200
- */
201
- remove() {
202
- this._entity = null;
203
- this._handler && this._handler.remove(this);
204
- }
205
-
206
- /**
207
- * Adds points to render.
208
- * @public
209
- * @param {Array.<Array<number>>} points - Point cloud array.
210
- * @example
211
- * var points = [[0, 0, 0, 255, 255, 255, 255, { 'name': 'White point' }], [100, 100, 0, 255, 0, 0, 255, { 'name': 'Red point' }]];
212
- */
213
- setPoints(points) {
214
- this.clear();
215
- for (var i = 0; i < points.length; i++) {
216
- var pi = points[i];
217
- var pos = new Vec3(pi[0], pi[1], pi[2]),
218
- col = new Vec4(pi[3], pi[4], pi[5], pi[6] == undefined ? 255.0 : pi[6]);
219
- this._coordinatesData.push(pos.x, pos.y, pos.z);
220
- this._colorData.push(col.x / 255.0, col.y / 255.0, col.z / 255.0, col.w / 255.0);
221
- var p = {
222
- _pickingColor: new Vec3(),
223
- _entityCollection: this._entity && this._entity._entityCollection,
224
- index: i,
225
- position: pos,
226
- color: col,
227
- pointCloud: this,
228
- properties: pi[7] || {}
229
- };
230
- this._points.push(p);
231
-
232
- if (this._renderNode) {
233
- this._renderNode.renderer.assignPickingColor(p);
234
- this._pickingColorData.push(
235
- p._pickingColor.x / 255.0,
236
- p._pickingColor.y / 255.0,
237
- p._pickingColor.z / 255.0,
238
- 1.0
239
- );
240
- }
241
- }
242
-
243
- this._changedBuffers[COORDINATES_BUFFER] = true;
244
- this._changedBuffers[COLOR_BUFFER] = true;
245
- this._changedBuffers[PICKING_COLOR_BUFFER] = true;
246
- }
247
-
248
- setPointPosition(index, x, y, z) {
249
- // TODO: ...
250
-
251
- this._changedBuffers[COORDINATES_BUFFER] = true;
252
- }
253
-
254
- setPointColor(index, r, g, b, a) {
255
- // TODO: ...
256
-
257
- this._changedBuffers[COLOR_BUFFER] = true;
258
- }
259
-
260
- addPoints(points) {
261
- // TODO: ...
262
-
263
- this._changedBuffers[COORDINATES_BUFFER] = true;
264
- this._changedBuffers[COLOR_BUFFER] = true;
265
- this._changedBuffers[PICKING_COLOR_BUFFER] = true;
266
- }
267
-
268
- addPoint(index, point) {
269
- // TODO: ...
270
-
271
- this._changedBuffers[COORDINATES_BUFFER] = true;
272
- this._changedBuffers[COLOR_BUFFER] = true;
273
- this._changedBuffers[PICKING_COLOR_BUFFER] = true;
274
- }
275
-
276
- /**
277
- * Returns specific point by index.
278
- * @public
279
- * @param {number} index - Point index.
280
- * @return {*} Specific point
281
- */
282
- getPoint(index) {
283
- return this._points[index];
284
- }
285
-
286
- removePoint(index) {
287
- // TODO: ...
288
-
289
- this._changedBuffers[COORDINATES_BUFFER] = true;
290
- this._changedBuffers[COLOR_BUFFER] = true;
291
- this._changedBuffers[PICKING_COLOR_BUFFER] = true;
292
- }
293
-
294
- insertPoint(index, point) {
295
- // TODO: ...
296
-
297
- this._changedBuffers[COORDINATES_BUFFER] = true;
298
- this._changedBuffers[COLOR_BUFFER] = true;
299
- this._changedBuffers[PICKING_COLOR_BUFFER] = true;
300
- }
301
-
302
- /**
303
- * Each point iterator.
304
- * @public
305
- * @param {callback} callback -
306
- */
307
- each(callback) {
308
- var i = this._points.length;
309
- while (i--) {
310
- callback && callback(this._points[i]);
311
- }
312
- }
313
-
314
- draw() {
315
- if (this.visibility && this._coordinatesData.length) {
316
- this._update();
317
-
318
- var rn = this._renderNode;
319
- var r = rn.renderer;
320
- var sh = r.handler.programs.pointCloud;
321
- var p = sh._program;
322
- var gl = r.handler.gl,
323
- sha = p.attributes,
324
- shu = p.uniforms;
325
-
326
- gl.polygonOffset(
327
- this._handler._entityCollection.polygonOffsetFactor,
328
- this._handler._entityCollection.polygonOffsetUnits
329
- );
330
-
331
- sh.activate();
332
-
333
- gl.uniformMatrix4fv(
334
- shu.projectionViewMatrix,
335
- false,
336
- r.activeCamera._projectionViewMatrix._m
337
- );
338
-
339
- gl.uniform1f(shu.opacity, this._handler._entityCollection._fadingOpacity);
340
-
341
- gl.uniform1f(shu.pointSize, this.pointSize);
342
-
343
- gl.bindBuffer(gl.ARRAY_BUFFER, this._coordinatesBuffer);
344
- gl.vertexAttribPointer(
345
- sha.coordinates,
346
- this._coordinatesBuffer.itemSize,
347
- gl.FLOAT,
348
- false,
349
- 0,
350
- 0
351
- );
352
-
353
- gl.bindBuffer(gl.ARRAY_BUFFER, this._colorBuffer);
354
- gl.vertexAttribPointer(sha.colors, this._colorBuffer.itemSize, gl.FLOAT, false, 0, 0);
355
-
356
- gl.drawArrays(gl.POINTS, 0, this._coordinatesBuffer.numItems);
357
- }
358
- }
359
-
360
- drawPicking() {
361
- if (this.visibility && this._coordinatesData.length) {
362
- var rn = this._renderNode;
363
- var r = rn.renderer;
364
- var sh = r.handler.programs.pointCloud;
365
- var p = sh._program;
366
- var gl = r.handler.gl,
367
- sha = p.attributes,
368
- shu = p.uniforms;
369
-
370
- sh.activate();
371
-
372
- gl.polygonOffset(
373
- this._handler._entityCollection.polygonOffsetFactor,
374
- this._handler._entityCollection.polygonOffsetUnits
375
- );
376
-
377
- gl.uniformMatrix4fv(
378
- shu.projectionViewMatrix,
379
- false,
380
- r.activeCamera._projectionViewMatrix._m
381
- );
382
-
383
- gl.uniform1f(shu.opacity, this._handler._entityCollection._fadingOpacity);
384
-
385
- gl.uniform1f(shu.pointSize, this.pointSize + this.pickingDistance);
386
-
387
- gl.bindBuffer(gl.ARRAY_BUFFER, this._coordinatesBuffer);
388
- gl.vertexAttribPointer(
389
- sha.coordinates,
390
- this._coordinatesBuffer.itemSize,
391
- gl.FLOAT,
392
- false,
393
- 0,
394
- 0
395
- );
396
-
397
- gl.bindBuffer(gl.ARRAY_BUFFER, this._pickingColorBuffer);
398
- gl.vertexAttribPointer(
399
- sha.colors,
400
- this._pickingColorBuffer.itemSize,
401
- gl.FLOAT,
402
- false,
403
- 0,
404
- 0
405
- );
406
-
407
- gl.drawArrays(gl.POINTS, 0, this._coordinatesBuffer.numItems);
408
- }
409
- }
410
-
411
- /**
412
- * Update gl buffers.
413
- * @private
414
- */
415
- _update() {
416
- if (this._renderNode) {
417
- var i = this._changedBuffers.length;
418
- while (i--) {
419
- if (this._changedBuffers[i]) {
420
- this._buffersUpdateCallbacks[i].call(this);
421
- this._changedBuffers[i] = false;
422
- }
423
- }
424
- }
425
- }
426
-
427
- /**
428
- * Delete buffers
429
- * @private
430
- */
431
- _deleteBuffers() {
432
- if (this._renderNode) {
433
- var r = this._renderNode.renderer,
434
- gl = r.handler.gl;
435
-
436
- gl.deleteBuffer(this._coordinatesBuffer);
437
- gl.deleteBuffer(this._colorBuffer);
438
- gl.deleteBuffer(this._pickingColorBuffer);
439
- }
440
-
441
- this._coordinatesBuffer = null;
442
- this._colorBuffer = null;
443
- this._pickingColorBuffer = null;
444
- }
445
-
446
- _createCoordinatesBuffer() {
447
- var h = this._renderNode.renderer.handler;
448
- h.gl.deleteBuffer(this._coordinatesBuffer);
449
- this._coordinatesBuffer = h.createArrayBuffer(
450
- new Float32Array(this._coordinatesData),
451
- 3,
452
- this._coordinatesData.length / 3
453
- );
454
- }
455
-
456
- _createColorBuffer() {
457
- var h = this._renderNode.renderer.handler;
458
- h.gl.deleteBuffer(this._colorBuffer);
459
- this._colorBuffer = h.createArrayBuffer(
460
- new Float32Array(this._colorData),
461
- 4,
462
- this._colorData.length / 4
463
- );
464
- }
465
-
466
- _createPickingColorBuffer() {
467
- var h = this._renderNode.renderer.handler;
468
- h.gl.deleteBuffer(this._pickingColorBuffer);
469
- this._pickingColorBuffer = h.createArrayBuffer(
470
- new Float32Array(this._pickingColorData),
471
- 4,
472
- this._pickingColorData.length / 4
473
- );
474
- }
475
-
476
- _setPickingColors() {
477
- if (this._renderNode) {
478
- for (var i = 0; i < this._points.length; i++) {
479
- var p = this._points[i];
480
- p._entity = this._entity;
481
- p._entityCollection = this._entity._entityCollection;
482
- this._renderNode.renderer.assignPickingColor(p);
483
- this._pickingColorData.push(
484
- p._pickingColor.x / 255.0,
485
- p._pickingColor.y / 255.0,
486
- p._pickingColor.z / 255.0,
487
- 1.0
488
- );
489
- }
490
- this._changedBuffers[PICKING_COLOR_BUFFER] = true;
491
- }
492
- }
493
- }
494
-
495
- export { PointCloud };
1
+ /**
2
+ * @module og/entity/PointCloud
3
+ */
4
+
5
+ "use strict";
6
+
7
+ import { Vec3 } from "../math/Vec3.js";
8
+ import { Vec4 } from "../math/Vec4.js";
9
+
10
+ const COORDINATES_BUFFER = 0;
11
+ const COLOR_BUFFER = 1;
12
+ const PICKING_COLOR_BUFFER = 2;
13
+
14
+ /**
15
+ * PointCloud object.
16
+ * @class
17
+ * @param {*} [options] - Point cloud options:
18
+ * @param {Array.<Array.<number>>} [options.points] - Points cartesian coordinates array,
19
+ * where first three is cartesian coordinates, next fourth is a RGBA color, and last is an point properties.
20
+ * @param {number} [options.pointSize] - Point screen size in pixels.
21
+ * @param {number} [options.pickingDistance] - Point border picking size in screen pixels.
22
+ * @param {boolean} [options.visibility] - Point cloud visibility.
23
+ * @example <caption>Creates point cloud with two ten pixel size points</caption>
24
+ * new og.Entity({
25
+ * pointCloud: {
26
+ * pointSize: 10,
27
+ * points: [
28
+ * [0, 0, 0, 255, 255, 255, 255, { 'name': 'White point' }],
29
+ * [100, 100, 0, 255, 0, 0, 255, { 'name': 'Red point' }]
30
+ * ]
31
+ * }
32
+ * });
33
+ */
34
+ class PointCloud {
35
+ constructor(options) {
36
+ options = options || {};
37
+
38
+ /**
39
+ * Object unic identifier.
40
+ * @public
41
+ * @readonly
42
+ * @type {number}
43
+ */
44
+ this.id = PointCloud._staticCounter++;
45
+
46
+ /**
47
+ * Cloud visibility.
48
+ * @public
49
+ * @type {boolean}
50
+ */
51
+ this.visibility = options.visibility != undefined ? options.visibility : true;
52
+
53
+ /**
54
+ * Point screen size in pixels.
55
+ * @public
56
+ * @type {number}
57
+ */
58
+ this.pointSize = options.pointSize || 3;
59
+
60
+ /**
61
+ * Point picking border size in pixels.
62
+ * @public
63
+ * @type {number}
64
+ */
65
+ this.pickingDistance = options.pickingDistance || 0;
66
+
67
+ /**
68
+ * Parent collection render node.
69
+ * @private
70
+ * @type {RenderNode}
71
+ */
72
+ this._renderNode = null;
73
+
74
+ /**
75
+ * Entity instance that holds this point cloud.
76
+ * @private
77
+ * @type {Entity}
78
+ */
79
+ this._entity = null;
80
+
81
+ /**
82
+ * Points properties.
83
+ * @private
84
+ * @type {Array.<*>}
85
+ */
86
+ this._points = [];
87
+
88
+ /**
89
+ * Coordinates array.
90
+ * @private
91
+ * @type {Array.<number>}
92
+ */
93
+ this._coordinatesData = [];
94
+
95
+ /**
96
+ * Color array.
97
+ * @private
98
+ * @type {Array.<number>}
99
+ */
100
+ this._colorData = [];
101
+
102
+ /**
103
+ * Picking color array.
104
+ * @private
105
+ * @type {Array.<number>}
106
+ */
107
+ this._pickingColorData = [];
108
+
109
+ this._coordinatesBuffer = null;
110
+ this._colorBuffer = null;
111
+ this._pickingColorBuffer = null;
112
+
113
+ /**
114
+ * Handler that stores and renders this object.
115
+ * @private
116
+ * @type {PointCloudHandler}
117
+ */
118
+ this._handler = null;
119
+ this._handlerIndex = -1;
120
+
121
+ this._buffersUpdateCallbacks = [];
122
+ this._buffersUpdateCallbacks[COORDINATES_BUFFER] = this._createCoordinatesBuffer;
123
+ this._buffersUpdateCallbacks[COLOR_BUFFER] = this._createColorBuffer;
124
+ this._buffersUpdateCallbacks[PICKING_COLOR_BUFFER] = this._createPickingColorBuffer;
125
+
126
+ this._changedBuffers = new Array(this._buffersUpdateCallbacks.length);
127
+
128
+ this.setPoints(options.points);
129
+ }
130
+
131
+ static get _staticCounter() {
132
+ if (!this._counter && this._counter !== 0) {
133
+ this._counter = 0;
134
+ }
135
+ return this._counter;
136
+ }
137
+
138
+ static set _staticCounter(n) {
139
+ this._counter = n;
140
+ }
141
+
142
+ /**
143
+ * Clears point cloud data
144
+ * @public
145
+ */
146
+ clear() {
147
+ this._points.length = 0;
148
+ this._points = [];
149
+
150
+ this._coordinatesData.length = 0;
151
+ this._coordinatesData = [];
152
+
153
+ this._colorData.length = 0;
154
+ this._colorData = [];
155
+
156
+ this._pickingColorData.length = 0;
157
+ this._pickingColorData = [];
158
+
159
+ this._deleteBuffers();
160
+ }
161
+
162
+ /**
163
+ * Set point cloud opacity.
164
+ * @public
165
+ * @param {number} opacity - Cloud opacity.
166
+ */
167
+ setOpacity(opacity) {
168
+ this.opacity = opacity;
169
+ }
170
+
171
+ /**
172
+ * Sets cloud visibility.
173
+ * @public
174
+ * @param {number} visibility - Visibility flag.
175
+ */
176
+ setVisibility(visibility) {
177
+ this.visibility = visibility;
178
+ }
179
+
180
+ /**
181
+ * @return {boolean} Point cloud visibily.
182
+ */
183
+ getVisibility() {
184
+ return this.visibility;
185
+ }
186
+
187
+ /**
188
+ * Assign rendering scene node.
189
+ * @public
190
+ * @param {RenderNode} renderNode - Assigned render node.
191
+ */
192
+ setRenderNode(renderNode) {
193
+ this._renderNode = renderNode;
194
+ this._setPickingColors();
195
+ }
196
+
197
+ /**
198
+ * Removes from entity.
199
+ * @public
200
+ */
201
+ remove() {
202
+ this._entity = null;
203
+ this._handler && this._handler.remove(this);
204
+ }
205
+
206
+ /**
207
+ * Adds points to render.
208
+ * @public
209
+ * @param {Array.<Array<number>>} points - Point cloud array.
210
+ * @example
211
+ * var points = [[0, 0, 0, 255, 255, 255, 255, { 'name': 'White point' }], [100, 100, 0, 255, 0, 0, 255, { 'name': 'Red point' }]];
212
+ */
213
+ setPoints(points) {
214
+ this.clear();
215
+ for (var i = 0; i < points.length; i++) {
216
+ var pi = points[i];
217
+ var pos = new Vec3(pi[0], pi[1], pi[2]),
218
+ col = new Vec4(pi[3], pi[4], pi[5], pi[6] == undefined ? 255.0 : pi[6]);
219
+ this._coordinatesData.push(pos.x, pos.y, pos.z);
220
+ this._colorData.push(col.x / 255.0, col.y / 255.0, col.z / 255.0, col.w / 255.0);
221
+ var p = {
222
+ _pickingColor: new Vec3(),
223
+ _entityCollection: this._entity && this._entity._entityCollection,
224
+ index: i,
225
+ position: pos,
226
+ color: col,
227
+ pointCloud: this,
228
+ properties: pi[7] || {}
229
+ };
230
+ this._points.push(p);
231
+
232
+ if (this._renderNode) {
233
+ this._renderNode.renderer.assignPickingColor(p);
234
+ this._pickingColorData.push(
235
+ p._pickingColor.x / 255.0,
236
+ p._pickingColor.y / 255.0,
237
+ p._pickingColor.z / 255.0,
238
+ 1.0
239
+ );
240
+ }
241
+ }
242
+
243
+ this._changedBuffers[COORDINATES_BUFFER] = true;
244
+ this._changedBuffers[COLOR_BUFFER] = true;
245
+ this._changedBuffers[PICKING_COLOR_BUFFER] = true;
246
+ }
247
+
248
+ setPointPosition(index, x, y, z) {
249
+ // TODO: ...
250
+
251
+ this._changedBuffers[COORDINATES_BUFFER] = true;
252
+ }
253
+
254
+ setPointColor(index, r, g, b, a) {
255
+ // TODO: ...
256
+
257
+ this._changedBuffers[COLOR_BUFFER] = true;
258
+ }
259
+
260
+ addPoints(points) {
261
+ // TODO: ...
262
+
263
+ this._changedBuffers[COORDINATES_BUFFER] = true;
264
+ this._changedBuffers[COLOR_BUFFER] = true;
265
+ this._changedBuffers[PICKING_COLOR_BUFFER] = true;
266
+ }
267
+
268
+ addPoint(index, point) {
269
+ // TODO: ...
270
+
271
+ this._changedBuffers[COORDINATES_BUFFER] = true;
272
+ this._changedBuffers[COLOR_BUFFER] = true;
273
+ this._changedBuffers[PICKING_COLOR_BUFFER] = true;
274
+ }
275
+
276
+ /**
277
+ * Returns specific point by index.
278
+ * @public
279
+ * @param {number} index - Point index.
280
+ * @return {*} Specific point
281
+ */
282
+ getPoint(index) {
283
+ return this._points[index];
284
+ }
285
+
286
+ removePoint(index) {
287
+ // TODO: ...
288
+
289
+ this._changedBuffers[COORDINATES_BUFFER] = true;
290
+ this._changedBuffers[COLOR_BUFFER] = true;
291
+ this._changedBuffers[PICKING_COLOR_BUFFER] = true;
292
+ }
293
+
294
+ insertPoint(index, point) {
295
+ // TODO: ...
296
+
297
+ this._changedBuffers[COORDINATES_BUFFER] = true;
298
+ this._changedBuffers[COLOR_BUFFER] = true;
299
+ this._changedBuffers[PICKING_COLOR_BUFFER] = true;
300
+ }
301
+
302
+ /**
303
+ * Each point iterator.
304
+ * @public
305
+ * @param {callback} callback -
306
+ */
307
+ each(callback) {
308
+ var i = this._points.length;
309
+ while (i--) {
310
+ callback && callback(this._points[i]);
311
+ }
312
+ }
313
+
314
+ draw() {
315
+ if (this.visibility && this._coordinatesData.length) {
316
+ this._update();
317
+
318
+ var rn = this._renderNode;
319
+ var r = rn.renderer;
320
+ var sh = r.handler.programs.pointCloud;
321
+ var p = sh._program;
322
+ var gl = r.handler.gl,
323
+ sha = p.attributes,
324
+ shu = p.uniforms;
325
+
326
+ // gl.polygonOffset(
327
+ // this._handler._entityCollection.polygonOffsetFactor,
328
+ // this._handler._entityCollection.polygonOffsetUnits
329
+ // );
330
+
331
+ sh.activate();
332
+
333
+ gl.uniformMatrix4fv(
334
+ shu.projectionViewMatrix,
335
+ false,
336
+ r.activeCamera._projectionViewMatrix._m
337
+ );
338
+
339
+ gl.uniform1f(shu.opacity, this._handler._entityCollection._fadingOpacity);
340
+
341
+ gl.uniform1f(shu.pointSize, this.pointSize);
342
+
343
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._coordinatesBuffer);
344
+ gl.vertexAttribPointer(
345
+ sha.coordinates,
346
+ this._coordinatesBuffer.itemSize,
347
+ gl.FLOAT,
348
+ false,
349
+ 0,
350
+ 0
351
+ );
352
+
353
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._colorBuffer);
354
+ gl.vertexAttribPointer(sha.colors, this._colorBuffer.itemSize, gl.FLOAT, false, 0, 0);
355
+
356
+ gl.drawArrays(gl.POINTS, 0, this._coordinatesBuffer.numItems);
357
+ }
358
+ }
359
+
360
+ drawPicking() {
361
+ if (this.visibility && this._coordinatesData.length) {
362
+ var rn = this._renderNode;
363
+ var r = rn.renderer;
364
+ var sh = r.handler.programs.pointCloud;
365
+ var p = sh._program;
366
+ var gl = r.handler.gl,
367
+ sha = p.attributes,
368
+ shu = p.uniforms;
369
+
370
+ sh.activate();
371
+
372
+ // gl.polygonOffset(
373
+ // this._handler._entityCollection.polygonOffsetFactor,
374
+ // this._handler._entityCollection.polygonOffsetUnits
375
+ // );
376
+
377
+ gl.uniformMatrix4fv(
378
+ shu.projectionViewMatrix,
379
+ false,
380
+ r.activeCamera._projectionViewMatrix._m
381
+ );
382
+
383
+ gl.uniform1f(shu.opacity, this._handler._entityCollection._fadingOpacity);
384
+
385
+ gl.uniform1f(shu.pointSize, this.pointSize + this.pickingDistance);
386
+
387
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._coordinatesBuffer);
388
+ gl.vertexAttribPointer(
389
+ sha.coordinates,
390
+ this._coordinatesBuffer.itemSize,
391
+ gl.FLOAT,
392
+ false,
393
+ 0,
394
+ 0
395
+ );
396
+
397
+ gl.bindBuffer(gl.ARRAY_BUFFER, this._pickingColorBuffer);
398
+ gl.vertexAttribPointer(
399
+ sha.colors,
400
+ this._pickingColorBuffer.itemSize,
401
+ gl.FLOAT,
402
+ false,
403
+ 0,
404
+ 0
405
+ );
406
+
407
+ gl.drawArrays(gl.POINTS, 0, this._coordinatesBuffer.numItems);
408
+ }
409
+ }
410
+
411
+ /**
412
+ * Update gl buffers.
413
+ * @private
414
+ */
415
+ _update() {
416
+ if (this._renderNode) {
417
+ var i = this._changedBuffers.length;
418
+ while (i--) {
419
+ if (this._changedBuffers[i]) {
420
+ this._buffersUpdateCallbacks[i].call(this);
421
+ this._changedBuffers[i] = false;
422
+ }
423
+ }
424
+ }
425
+ }
426
+
427
+ /**
428
+ * Delete buffers
429
+ * @private
430
+ */
431
+ _deleteBuffers() {
432
+ if (this._renderNode) {
433
+ var r = this._renderNode.renderer,
434
+ gl = r.handler.gl;
435
+
436
+ gl.deleteBuffer(this._coordinatesBuffer);
437
+ gl.deleteBuffer(this._colorBuffer);
438
+ gl.deleteBuffer(this._pickingColorBuffer);
439
+ }
440
+
441
+ this._coordinatesBuffer = null;
442
+ this._colorBuffer = null;
443
+ this._pickingColorBuffer = null;
444
+ }
445
+
446
+ _createCoordinatesBuffer() {
447
+ var h = this._renderNode.renderer.handler;
448
+ h.gl.deleteBuffer(this._coordinatesBuffer);
449
+ this._coordinatesBuffer = h.createArrayBuffer(
450
+ new Float32Array(this._coordinatesData),
451
+ 3,
452
+ this._coordinatesData.length / 3
453
+ );
454
+ }
455
+
456
+ _createColorBuffer() {
457
+ var h = this._renderNode.renderer.handler;
458
+ h.gl.deleteBuffer(this._colorBuffer);
459
+ this._colorBuffer = h.createArrayBuffer(
460
+ new Float32Array(this._colorData),
461
+ 4,
462
+ this._colorData.length / 4
463
+ );
464
+ }
465
+
466
+ _createPickingColorBuffer() {
467
+ var h = this._renderNode.renderer.handler;
468
+ h.gl.deleteBuffer(this._pickingColorBuffer);
469
+ this._pickingColorBuffer = h.createArrayBuffer(
470
+ new Float32Array(this._pickingColorData),
471
+ 4,
472
+ this._pickingColorData.length / 4
473
+ );
474
+ }
475
+
476
+ _setPickingColors() {
477
+ if (this._renderNode) {
478
+ for (var i = 0; i < this._points.length; i++) {
479
+ var p = this._points[i];
480
+ p._entity = this._entity;
481
+ p._entityCollection = this._entity._entityCollection;
482
+ this._renderNode.renderer.assignPickingColor(p);
483
+ this._pickingColorData.push(
484
+ p._pickingColor.x / 255.0,
485
+ p._pickingColor.y / 255.0,
486
+ p._pickingColor.z / 255.0,
487
+ 1.0
488
+ );
489
+ }
490
+ this._changedBuffers[PICKING_COLOR_BUFFER] = true;
491
+ }
492
+ }
493
+ }
494
+
495
+ export { PointCloud };