bruce-cesium 2.1.7 → 2.1.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.
@@ -0,0 +1,602 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PointClustering = void 0;
4
+ var bruce_models_1 = require("bruce-models");
5
+ var Cesium = require("cesium");
6
+ function GetValue(viewer, obj) {
7
+ if (obj === null || obj === void 0 ? void 0 : obj.getValue) {
8
+ return obj.getValue(viewer.scene.lastRenderTime);
9
+ }
10
+ return obj;
11
+ }
12
+ var Point = /** @class */ (function () {
13
+ function Point(lon, lat, id) {
14
+ this.lon = lon;
15
+ this.lat = lat;
16
+ this.id = id;
17
+ }
18
+ return Point;
19
+ }());
20
+ var Circle = /** @class */ (function () {
21
+ function Circle(x, y, radius) {
22
+ this.x = x;
23
+ this.y = y;
24
+ this.radius = radius;
25
+ this.width = 2 * radius;
26
+ this.height = 2 * radius;
27
+ }
28
+ Circle.prototype.Intersects = function (range) {
29
+ var xDist = Math.abs(range.x - this.x);
30
+ var yDist = Math.abs(range.y - this.y);
31
+ var r = this.radius;
32
+ var w = range.width;
33
+ var h = range.height;
34
+ if (xDist > (w + r) || yDist > (h + r)) {
35
+ return false;
36
+ }
37
+ if (xDist <= w || yDist <= h) {
38
+ return true;
39
+ }
40
+ var dx = xDist - w;
41
+ var dy = yDist - h;
42
+ return (dx * dx + dy * dy <= this.radius * this.radius);
43
+ };
44
+ Circle.prototype.Contains = function (point) {
45
+ var dx = this.x - point.lon;
46
+ var dy = this.y - point.lat;
47
+ var distance = Math.sqrt(dx * dx + dy * dy);
48
+ return distance <= this.radius;
49
+ };
50
+ return Circle;
51
+ }());
52
+ var Rectangle = /** @class */ (function () {
53
+ function Rectangle(x, y, w, h) {
54
+ this.x = x;
55
+ this.y = y;
56
+ this.w = w;
57
+ this.h = h;
58
+ this.width = 2 * w;
59
+ this.height = 2 * h;
60
+ }
61
+ Rectangle.prototype.Contains = function (point) {
62
+ return (point.lon >= this.x - this.w &&
63
+ point.lon < this.x + this.w &&
64
+ point.lat >= this.y - this.h &&
65
+ point.lat < this.y + this.h);
66
+ };
67
+ Rectangle.prototype.Intersects = function (range) {
68
+ return !(range.x - range.w > this.x + this.w ||
69
+ range.x + range.w < this.x - this.w ||
70
+ range.y - range.h > this.y + this.h ||
71
+ range.y + range.h < this.y - this.h);
72
+ };
73
+ return Rectangle;
74
+ }());
75
+ var Quad = /** @class */ (function () {
76
+ function Quad(boundary, capacity) {
77
+ this.boundary = boundary;
78
+ this.capacity = capacity;
79
+ this.points = [];
80
+ this.divided = false;
81
+ }
82
+ Quad.prototype.Subdivide = function () {
83
+ var x = this.boundary.x;
84
+ var y = this.boundary.y;
85
+ var w = this.boundary.w / 2;
86
+ var h = this.boundary.h / 2;
87
+ var ne = new Rectangle(x + w / 2, y - h / 2, w, h);
88
+ this.northeast = new Quad(ne, this.capacity);
89
+ var nw = new Rectangle(x - w / 2, y - h / 2, w, h);
90
+ this.northwest = new Quad(nw, this.capacity);
91
+ var se = new Rectangle(x + w / 2, y + h / 2, w, h);
92
+ this.southeast = new Quad(se, this.capacity);
93
+ var sw = new Rectangle(x - w / 2, y + h / 2, w, h);
94
+ this.southwest = new Quad(sw, this.capacity);
95
+ this.divided = true;
96
+ };
97
+ Quad.prototype.Insert = function (point) {
98
+ if (!this.boundary.Contains(point)) {
99
+ return false;
100
+ }
101
+ if (this.points.length < this.capacity) {
102
+ this.points.push(point);
103
+ return true;
104
+ }
105
+ if (!this.divided) {
106
+ this.Subdivide();
107
+ }
108
+ return (this.northeast.Insert(point) || this.northwest.Insert(point) ||
109
+ this.southeast.Insert(point) || this.southwest.Insert(point));
110
+ };
111
+ Quad.prototype.Query = function (range, found) {
112
+ if (!found) {
113
+ found = [];
114
+ }
115
+ if (!range.Intersects(this.boundary)) {
116
+ return found;
117
+ }
118
+ for (var _i = 0, _a = this.points; _i < _a.length; _i++) {
119
+ var p = _a[_i];
120
+ if (range.Contains(p)) {
121
+ found.push(p);
122
+ }
123
+ }
124
+ if (this.divided) {
125
+ this.northwest.Query(range, found);
126
+ this.northeast.Query(range, found);
127
+ this.southwest.Query(range, found);
128
+ this.southeast.Query(range, found);
129
+ }
130
+ return found;
131
+ };
132
+ Quad.prototype.Find = function (id) {
133
+ for (var _i = 0, _a = this.points; _i < _a.length; _i++) {
134
+ var point = _a[_i];
135
+ if (point.id === id) {
136
+ return point;
137
+ }
138
+ }
139
+ if (this.divided) {
140
+ return this.northwest.Find(id) || this.northeast.Find(id) ||
141
+ this.southwest.Find(id) || this.southeast.Find(id);
142
+ }
143
+ return null;
144
+ };
145
+ Quad.prototype.Remove = function (point) {
146
+ var index = this.points.indexOf(point);
147
+ if (index !== -1) {
148
+ this.points.splice(index, 1);
149
+ }
150
+ if (this.divided) {
151
+ this.northwest.Remove(point);
152
+ this.northeast.Remove(point);
153
+ this.southwest.Remove(point);
154
+ this.southeast.Remove(point);
155
+ }
156
+ };
157
+ return Quad;
158
+ }());
159
+ var PointClustering = /** @class */ (function () {
160
+ function PointClustering(register, menuItemId) {
161
+ var _this = this;
162
+ this.disposed = false;
163
+ this.registeredEntityIds = new Set();
164
+ this.register = register;
165
+ this.viewer = register.Viewer;
166
+ this.menuItemId = menuItemId;
167
+ this.updateClusterSpacing(0);
168
+ var boundary = new Rectangle(0, 0, 360, 180);
169
+ this.quadTree = new Quad(boundary, 4);
170
+ this.prevClusteredEntities = new Set();
171
+ this.currClusteredEntities = new Set();
172
+ this.clusterEntities = new Map();
173
+ this.updateQueue = new bruce_models_1.DelayQueue(function () {
174
+ _this.doUpdate();
175
+ }, 1000);
176
+ this.listenCamera();
177
+ }
178
+ /**
179
+ * Starts listening to camera changes.
180
+ * This will trigger the clustering update whenever camera is moved.
181
+ */
182
+ PointClustering.prototype.listenCamera = function () {
183
+ var _this = this;
184
+ var viewer = this.viewer;
185
+ var lastPos3d;
186
+ var hasMoved = function () {
187
+ var _a;
188
+ var cameraPos = (_a = viewer === null || viewer === void 0 ? void 0 : viewer.camera) === null || _a === void 0 ? void 0 : _a.positionCartographic;
189
+ if (!cameraPos) {
190
+ return false;
191
+ }
192
+ var pos3d = Cesium.Cartographic.toCartesian(cameraPos);
193
+ if (!lastPos3d) {
194
+ lastPos3d = pos3d;
195
+ return false;
196
+ }
197
+ var distance = Cesium.Cartesian3.distance(pos3d, lastPos3d);
198
+ lastPos3d = pos3d;
199
+ // 50 meter movement at least.
200
+ return distance > 50;
201
+ };
202
+ this.listenCameraRemoval = viewer.scene.camera.changed.addEventListener(function () {
203
+ if (hasMoved()) {
204
+ _this.updateQueue.Call();
205
+ }
206
+ });
207
+ };
208
+ /**
209
+ * Stops listening to camera changes.
210
+ */
211
+ PointClustering.prototype.unlistenCamera = function () {
212
+ if (this.listenCameraRemoval) {
213
+ this.listenCameraRemoval();
214
+ this.listenCameraRemoval = null;
215
+ }
216
+ };
217
+ /**
218
+ * Removes all clusters and updates entities to no longer be suppressed.
219
+ * @returns
220
+ */
221
+ PointClustering.prototype.Dispose = function () {
222
+ if (this.disposed) {
223
+ return;
224
+ }
225
+ for (var _i = 0, _a = Array.from(this.clusterEntities); _i < _a.length; _i++) {
226
+ var _b = _a[_i], entity = _b[1];
227
+ this.viewer.entities.remove(entity);
228
+ }
229
+ this.clusterEntities.clear();
230
+ this.unlistenCamera();
231
+ this.disposed = true;
232
+ // Restore entities.
233
+ var toUpdateIds = [];
234
+ for (var _c = 0, _d = Array.from(this.registeredEntityIds); _c < _d.length; _c++) {
235
+ var id = _d[_c];
236
+ var rego = this.register.GetRego({
237
+ entityId: id,
238
+ menuItemId: this.menuItemId
239
+ });
240
+ if (rego && rego.suppressShow) {
241
+ rego.suppressShow = false;
242
+ toUpdateIds.push(id);
243
+ }
244
+ }
245
+ if (toUpdateIds.length) {
246
+ this.register.ForceUpdate({
247
+ entityIds: toUpdateIds,
248
+ });
249
+ }
250
+ };
251
+ /**
252
+ * Calculates center of given points.
253
+ * @param points
254
+ * @returns
255
+ */
256
+ PointClustering.prototype.calculateCentroid = function (points) {
257
+ var lonSum = 0;
258
+ var latSum = 0;
259
+ for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {
260
+ var point = points_1[_i];
261
+ lonSum += point.lon;
262
+ latSum += point.lat;
263
+ }
264
+ var lonAvg = lonSum / points.length;
265
+ var latAvg = latSum / points.length;
266
+ return new Point(lonAvg, latAvg, "");
267
+ };
268
+ /**
269
+ * Gathers current clusters and renders them.
270
+ * @returns
271
+ */
272
+ PointClustering.prototype.doUpdate = function () {
273
+ var _this = this;
274
+ if (this.disposed) {
275
+ return;
276
+ }
277
+ // 1: Update precision.
278
+ // This defines how far apart these clusters can be.
279
+ var cameraHeight = this.viewer.camera.positionCartographic.height;
280
+ this.updateClusterSpacing(cameraHeight);
281
+ // 2: Get clusters.
282
+ var _a = this.getClusters(), clusters = _a.clusters, noLongerClustered = _a.noLongerClustered;
283
+ // 3: Remove all cesium cluster entities that are no longer clustered.
284
+ for (var _i = 0, _b = Array.from(noLongerClustered); _i < _b.length; _i++) {
285
+ var id = _b[_i];
286
+ this.removeClusterEntity(id);
287
+ }
288
+ // 4: Stop hiding entities that are no longer clustered.
289
+ var previousEntityIds = new Set(this.registeredEntityIds);
290
+ for (var _c = 0, _d = Array.from(previousEntityIds); _c < _d.length; _c++) {
291
+ var id = _d[_c];
292
+ if (!this.currClusteredEntities.has(id)) {
293
+ var rego = this.register.GetRego({
294
+ entityId: id,
295
+ menuItemId: this.menuItemId
296
+ });
297
+ if (rego && rego.suppressShow) {
298
+ rego.suppressShow = false;
299
+ this.register.ForceUpdate({
300
+ entityIds: [id],
301
+ });
302
+ }
303
+ }
304
+ }
305
+ var getScale = function (count) {
306
+ var baseSize = 20;
307
+ var scalingFactor = 2;
308
+ var scale = baseSize + scalingFactor * (count - 1);
309
+ scale = Math.min(scale, 120);
310
+ return scale;
311
+ };
312
+ var getLabel = function (count) {
313
+ var color = _this.pointColorTxt ? _this.pointColorTxt : "white";
314
+ var canvas = document.createElement("canvas");
315
+ var ctx = canvas.getContext("2d");
316
+ var size = getScale(count);
317
+ canvas.width = size;
318
+ canvas.height = size;
319
+ ctx.font = "bold 20px Arial";
320
+ ctx.fillStyle = color;
321
+ ctx.textAlign = "center";
322
+ ctx.textBaseline = "middle";
323
+ ctx.fillText(String(count), size / 2, size / 2);
324
+ return canvas;
325
+ };
326
+ // 5: iterate over clusters and add/update them as Cesium entities.
327
+ for (var _e = 0, clusters_1 = clusters; _e < clusters_1.length; _e++) {
328
+ var cluster = clusters_1[_e];
329
+ var clusterId = cluster.center.id;
330
+ var clusterEntity = this.clusterEntities.get(clusterId);
331
+ var centroid = this.calculateCentroid(cluster.points);
332
+ var count = cluster.points.length;
333
+ if (clusterEntity) {
334
+ clusterEntity.position = Cesium.Cartesian3.fromDegrees(centroid.lon, centroid.lat, 150);
335
+ clusterEntity.point.pixelSize = getScale(cluster.points.length);
336
+ clusterEntity.billboard.image = getLabel(cluster.points.length);
337
+ clusterEntity.billboard.width = getScale(cluster.points.length);
338
+ clusterEntity.billboard.height = getScale(cluster.points.length);
339
+ }
340
+ else {
341
+ clusterEntity = this.viewer.entities.add({
342
+ position: Cesium.Cartesian3.fromDegrees(centroid.lon, centroid.lat, 150),
343
+ point: {
344
+ heightReference: Cesium.HeightReference.NONE,
345
+ pixelSize: getScale(count),
346
+ color: this.pointColorBg ? this.pointColorBg : Cesium.Color.fromCssColorString("#4287f5")
347
+ },
348
+ billboard: {
349
+ heightReference: Cesium.HeightReference.NONE,
350
+ image: getLabel(count),
351
+ width: getScale(count),
352
+ height: getScale(count),
353
+ verticalOrigin: Cesium.VerticalOrigin.CENTER,
354
+ horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
355
+ disableDepthTestDistance: Number.POSITIVE_INFINITY
356
+ }
357
+ });
358
+ this.clusterEntities.set(clusterId, clusterEntity);
359
+ }
360
+ for (var i = 0; i < cluster.points.length; i++) {
361
+ var entityId = cluster.points[i].id;
362
+ var rego = this.register.GetRego({
363
+ entityId: entityId,
364
+ menuItemId: this.menuItemId
365
+ });
366
+ if (rego && !rego.suppressShow) {
367
+ rego.suppressShow = true;
368
+ this.register.ForceUpdate({
369
+ entityIds: [entityId],
370
+ });
371
+ }
372
+ }
373
+ }
374
+ var _loop_1 = function (clusterId, clusterEntity) {
375
+ if (!clusters.find(function (x) { return x.center.id == clusterId; })) {
376
+ this_1.viewer.entities.remove(clusterEntity);
377
+ this_1.clusterEntities.delete(clusterId);
378
+ }
379
+ };
380
+ var this_1 = this;
381
+ // 6: Iterate over existing cluster entities and remove those that are no longer clustered.
382
+ for (var _f = 0, _g = Array.from(this.clusterEntities); _f < _g.length; _f++) {
383
+ var _h = _g[_f], clusterId = _h[0], clusterEntity = _h[1];
384
+ _loop_1(clusterId, clusterEntity);
385
+ }
386
+ };
387
+ /**
388
+ * Updates how apart clusters can be based on camera distance.
389
+ * @param cameraHeight
390
+ */
391
+ PointClustering.prototype.updateClusterSpacing = function (cameraHeight) {
392
+ // Camera height thresholds in meters.
393
+ var cameraHeightThresholds = [2000, 5000, 8000, 13000, 25000, 40000];
394
+ // Distance increments in degrees.
395
+ var distanceIncrements = [0.005, 0.01, 0.02, 0.04, 0.1, 0.5];
396
+ // Find the appropriate spacing based on the camera height.
397
+ var spacing = 0;
398
+ for (var i = 0; i < cameraHeightThresholds.length; i++) {
399
+ if (cameraHeight && cameraHeight < cameraHeightThresholds[i]) {
400
+ spacing += distanceIncrements[i];
401
+ break;
402
+ }
403
+ spacing += distanceIncrements[i];
404
+ }
405
+ this.distanceBetweenClusters = spacing;
406
+ };
407
+ /**
408
+ * Gathers clusters.
409
+ * @returns
410
+ */
411
+ PointClustering.prototype.getClusters = function () {
412
+ var _this = this;
413
+ this.currClusteredEntities.clear();
414
+ var clusters = [];
415
+ var processedPoints = new Set();
416
+ var cameraPosition = this.viewer.camera.position;
417
+ for (var _i = 0, _a = this.quadTree.points; _i < _a.length; _i++) {
418
+ var point = _a[_i];
419
+ // Skip points already processed in previous clusters.
420
+ if (processedPoints.has(point.id)) {
421
+ continue;
422
+ }
423
+ // Skip points closer than 2000 meters to the camera.
424
+ var cartesian3 = Cesium.Cartesian3.fromDegrees(point.lon, point.lat);
425
+ if (Cesium.Cartesian3.distance(cartesian3, cameraPosition) <= 2000) {
426
+ continue;
427
+ }
428
+ var found = [];
429
+ var nearbyPoints = this.quadTree.Query(new Circle(point.lon, point.lat, this.distanceBetweenClusters), found);
430
+ if (nearbyPoints.length > 1) {
431
+ var cluster = { center: point, points: [] };
432
+ for (var _b = 0, nearbyPoints_1 = nearbyPoints; _b < nearbyPoints_1.length; _b++) {
433
+ var nearby = nearbyPoints_1[_b];
434
+ if (!cluster.points.includes(nearby)) {
435
+ cluster.points.push(nearby);
436
+ processedPoints.add(nearby.id);
437
+ this.currClusteredEntities.add(nearby.id);
438
+ }
439
+ }
440
+ clusters.push(cluster);
441
+ }
442
+ }
443
+ // Filter out clusters with only one point.
444
+ var validClusters = clusters.filter(function (cluster) { return cluster.points.length > 1; });
445
+ // Merge adjacent clusters.
446
+ var mergedClusters = this.mergeClusters(validClusters);
447
+ // Get the entity IDs that are no longer clustered
448
+ var noLongerClustered = new Set(Array.from(this.prevClusteredEntities).filter(function (id) { return !_this.currClusteredEntities.has(id); }));
449
+ // Update the previous clustered entities ref.
450
+ this.prevClusteredEntities = new Set(this.currClusteredEntities);
451
+ return { clusters: mergedClusters, noLongerClustered: noLongerClustered };
452
+ };
453
+ /**
454
+ * Merges clusters that are nearby based on the distanceBetweenClusters value.
455
+ * @param clusters
456
+ * @returns
457
+ */
458
+ PointClustering.prototype.mergeClusters = function (clusters) {
459
+ var _a;
460
+ var mergedClusters = [].concat(clusters);
461
+ // Keep looping while merges keep happening.
462
+ var mergeOccurred = true;
463
+ while (mergeOccurred) {
464
+ mergeOccurred = false;
465
+ for (var i = 0; i < mergedClusters.length - 1; i++) {
466
+ for (var j = i + 1; j < mergedClusters.length; j++) {
467
+ var cluster1 = mergedClusters[i];
468
+ var cluster2 = mergedClusters[j];
469
+ var centerDistance = this.calculateDistance(cluster1.center.lon, cluster1.center.lat, cluster2.center.lon, cluster2.center.lat);
470
+ var distanceThreshold = this.distanceBetweenClusters;
471
+ if (centerDistance <= distanceThreshold) {
472
+ // Merge clusters.
473
+ (_a = cluster1.points).push.apply(_a, cluster2.points);
474
+ mergedClusters.splice(j, 1);
475
+ this.removeClusterEntity(cluster2.center.id);
476
+ mergeOccurred = true;
477
+ break;
478
+ }
479
+ }
480
+ if (mergeOccurred) {
481
+ break;
482
+ }
483
+ }
484
+ }
485
+ return mergedClusters;
486
+ };
487
+ /**
488
+ * Removes Cesium cluster entity.
489
+ * @param clusterId
490
+ */
491
+ PointClustering.prototype.removeClusterEntity = function (clusterId) {
492
+ var clusterEntity = this.clusterEntities.get(clusterId);
493
+ if (clusterEntity) {
494
+ this.viewer.entities.remove(clusterEntity);
495
+ this.clusterEntities.delete(clusterId);
496
+ }
497
+ };
498
+ PointClustering.prototype.convertCartesianToCartographic = function (cartesian3) {
499
+ var carto = Cesium.Cartographic.fromCartesian(cartesian3);
500
+ var lon = Cesium.Math.toDegrees(carto.longitude);
501
+ var lat = Cesium.Math.toDegrees(carto.latitude);
502
+ var id = lon + ',' + lat;
503
+ return new Point(lon, lat, id);
504
+ };
505
+ /**
506
+ * Adds new entity to the clustering logic.
507
+ * @param id Bruce entity ID.
508
+ * @param cartesian3 entity's position.
509
+ */
510
+ PointClustering.prototype.addPoint = function (id, cartesian3) {
511
+ var point = this.convertCartesianToCartographic(cartesian3);
512
+ point.id = id;
513
+ this.quadTree.Insert(point);
514
+ };
515
+ /**
516
+ * Calculates rough distance across earth between two points.
517
+ * @param lon1
518
+ * @param lat1
519
+ * @param lon2
520
+ * @param lat2
521
+ * @returns
522
+ */
523
+ PointClustering.prototype.calculateDistance = function (lon1, lat1, lon2, lat2) {
524
+ var lonDelta = Math.abs(lon1 - lon2);
525
+ var latDelta = Math.abs(lat1 - lat2);
526
+ // Approximate radius of the Earth in kilometers
527
+ var earthRadius = 6371;
528
+ var distance = 2 * Math.asin(Math.sqrt(Math.sin(latDelta / 2) * Math.sin(latDelta / 2) +
529
+ Math.cos(lat1) * Math.cos(lat2) * Math.sin(lonDelta / 2) * Math.sin(lonDelta / 2))) * earthRadius;
530
+ return distance;
531
+ };
532
+ /**
533
+ * Adds entity to clustering logic.
534
+ * Will return false if entity could not be clustered and therefor should not be hidden.
535
+ * @param id
536
+ * @param entity
537
+ * @returns
538
+ */
539
+ PointClustering.prototype.AddEntity = function (id, entity) {
540
+ if (this.disposed) {
541
+ return false;
542
+ }
543
+ if (!entity) {
544
+ return false;
545
+ }
546
+ if (entity.polygon || entity.polyline) {
547
+ return false;
548
+ }
549
+ var pos3d = GetValue(this.viewer, entity.position);
550
+ if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
551
+ return false;
552
+ }
553
+ if (!this.pointColorBg && entity.point) {
554
+ this.pointColorBg = GetValue(this.viewer, entity.point.color);
555
+ if (this.pointColorBg) {
556
+ var cColor = null;
557
+ if (this.pointColorBg instanceof Object) {
558
+ cColor = new Cesium.Color(this.pointColorBg.red, this.pointColorBg.green, this.pointColorBg.blue, this.pointColorBg.alpha);
559
+ }
560
+ else if (typeof this.pointColorBg === "string") {
561
+ cColor = Cesium.Color.fromCssColorString(this.pointColorBg);
562
+ }
563
+ // Determine if text color should instead be black based on background.
564
+ // cColor contains r,g,b,a values where r,g,b are in the range [0,1].
565
+ if (cColor) {
566
+ var brightness = (cColor.red * 299 + cColor.green * 587 + cColor.blue * 114) / 1000;
567
+ if (brightness > 0.5) {
568
+ this.pointColorTxt = "black";
569
+ }
570
+ else {
571
+ this.pointColorTxt = "white";
572
+ }
573
+ }
574
+ }
575
+ }
576
+ this.registeredEntityIds.add(id);
577
+ this.addPoint(id, pos3d);
578
+ this.updateQueue.Call();
579
+ return true;
580
+ };
581
+ /**
582
+ * Removes entity from clustering logic.
583
+ * Warning: This will not reveal the entity, suppressShow will remain true.
584
+ * This is made with the assumption that the entity is being removed from viewer.
585
+ * @param id
586
+ * @returns
587
+ */
588
+ PointClustering.prototype.RemoveEntity = function (id) {
589
+ if (this.disposed) {
590
+ return;
591
+ }
592
+ var pointToRemove = this.quadTree.Find(id);
593
+ if (pointToRemove) {
594
+ this.quadTree.Remove(pointToRemove);
595
+ this.updateQueue.Call();
596
+ }
597
+ this.registeredEntityIds.delete(id);
598
+ };
599
+ return PointClustering;
600
+ }());
601
+ exports.PointClustering = PointClustering;
602
+ //# sourceMappingURL=point-clustering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"point-clustering.js","sourceRoot":"","sources":["../../../../../src/rendering/render-managers/common/point-clustering.ts"],"names":[],"mappings":"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"}