bruce-cesium 0.3.6 → 0.3.7
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.
- package/dist/bruce-cesium.es5.js +1018 -559
- package/dist/bruce-cesium.es5.js.map +1 -1
- package/dist/bruce-cesium.umd.js +1015 -556
- package/dist/bruce-cesium.umd.js.map +1 -1
- package/dist/lib/bruce-cesium.js +30 -30
- package/dist/lib/rendering/entity-render-engine.js +848 -848
- package/dist/lib/rendering/entity-render-engine.js.map +1 -1
- package/dist/lib/rendering/menu-item-manager.js +252 -252
- package/dist/lib/rendering/render-addons/measure-addon.js +186 -186
- package/dist/lib/rendering/render-addons/render-addon.js +2 -2
- package/dist/lib/rendering/render-helper.js +296 -279
- package/dist/lib/rendering/render-helper.js.map +1 -1
- package/dist/lib/rendering/render-managers/common/shared-getters.js +31 -31
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +146 -146
- package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +143 -143
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +234 -234
- package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +139 -139
- package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/render-manager.js +50 -50
- package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +236 -236
- package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
- package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +320 -320
- package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -1
- package/dist/lib/rendering/tile-render-engine.js +822 -542
- package/dist/lib/rendering/tile-render-engine.js.map +1 -1
- package/dist/lib/rendering/tileset-render-engine.js +499 -499
- package/dist/lib/rendering/tileset-render-engine.js.map +1 -1
- package/dist/lib/rendering/view-render-engine.js +300 -138
- package/dist/lib/rendering/view-render-engine.js.map +1 -1
- package/dist/lib/rendering/visuals-register.js +394 -394
- package/dist/lib/utils/drawing-utils.js +42 -42
- package/dist/lib/utils/entity-utils.js +99 -99
- package/dist/lib/utils/measure-utils.js +34 -34
- package/dist/lib/utils/view-utils.js +34 -34
- package/dist/lib/utils/view-utils.js.map +1 -1
- package/dist/lib/viewer/cesium-view-monitor.js +231 -231
- package/dist/lib/viewer/viewer-utils.js +85 -85
- package/dist/types/rendering/render-helper.d.ts +1 -1
- package/dist/types/rendering/tile-render-engine.d.ts +60 -44
- package/dist/types/utils/view-utils.d.ts +1 -1
- package/package.json +76 -73
|
@@ -1,395 +1,395 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.VisualsRegister = void 0;
|
|
4
|
-
var bruce_models_1 = require("bruce-models");
|
|
5
|
-
var Cesium = require("cesium");
|
|
6
|
-
var entity_utils_1 = require("../utils/entity-utils");
|
|
7
|
-
var entity_render_engine_1 = require("./entity-render-engine");
|
|
8
|
-
function removeEntity(viewer, visual) {
|
|
9
|
-
unmarkEntity(visual);
|
|
10
|
-
if (visual instanceof Cesium.Entity) {
|
|
11
|
-
entity_render_engine_1.EntityRenderEngine.Remove(viewer, visual);
|
|
12
|
-
}
|
|
13
|
-
else if (visual instanceof Cesium.Primitive) {
|
|
14
|
-
if (viewer.scene.primitives.contains(visual)) {
|
|
15
|
-
viewer.scene.primitives.remove(visual);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
19
|
-
// No way to tell if changing show will crash it!
|
|
20
|
-
try {
|
|
21
|
-
visual.show = false;
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
console.error(e);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function updateCEntityShow(viewer, visual, show) {
|
|
29
|
-
if (visual._parentEntity) {
|
|
30
|
-
updateCEntityShow(viewer, visual._parentEntity, show);
|
|
31
|
-
}
|
|
32
|
-
if (visual._siblingGraphics) {
|
|
33
|
-
for (var i = 0; i < visual._siblingGraphics.length; i++) {
|
|
34
|
-
var sibling = visual._siblingGraphics[i];
|
|
35
|
-
updateCEntityShow(viewer, sibling, show);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (viewer.entities.contains(visual)) {
|
|
39
|
-
visual.show = show;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function updateEntityShow(viewer, visual, show) {
|
|
43
|
-
if (visual instanceof Cesium.Entity) {
|
|
44
|
-
updateCEntityShow(viewer, visual, show);
|
|
45
|
-
}
|
|
46
|
-
else if (visual instanceof Cesium.Primitive) {
|
|
47
|
-
if (viewer.scene.primitives.contains(visual)) {
|
|
48
|
-
visual.show = show;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
52
|
-
// No way to tell if changing show will crash it!
|
|
53
|
-
try {
|
|
54
|
-
visual.show = show;
|
|
55
|
-
}
|
|
56
|
-
catch (e) {
|
|
57
|
-
console.error(e);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
function updateEntity(viewer, entityRegos, addons) {
|
|
62
|
-
var highestPriority = null;
|
|
63
|
-
for (var i = 0; i < entityRegos.length; i++) {
|
|
64
|
-
var rego = entityRegos[i];
|
|
65
|
-
if (highestPriority === null || rego.priority > highestPriority.priority) {
|
|
66
|
-
highestPriority = rego;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
for (var i = 0; i < entityRegos.length; i++) {
|
|
70
|
-
var rego = entityRegos[i];
|
|
71
|
-
var show = rego === highestPriority;
|
|
72
|
-
updateEntityShow(viewer, rego.visual, show);
|
|
73
|
-
}
|
|
74
|
-
if (addons) {
|
|
75
|
-
for (var j = 0; j < addons.length; j++) {
|
|
76
|
-
var addon = addons[j];
|
|
77
|
-
addon.Render(entityRegos.map(function (x) { return x.visual; }));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
function markEntity(register, rego, visual) {
|
|
82
|
-
var vis = visual;
|
|
83
|
-
vis._register = register;
|
|
84
|
-
vis._rego = rego;
|
|
85
|
-
if (visual instanceof Cesium.Entity) {
|
|
86
|
-
var visEnt = visual;
|
|
87
|
-
if (visEnt._parentEntity) {
|
|
88
|
-
markEntity(register, rego, visEnt._parentEntity);
|
|
89
|
-
}
|
|
90
|
-
if (visEnt._siblingGraphics) {
|
|
91
|
-
for (var i = 0; i < visEnt._siblingGraphics.length; i++) {
|
|
92
|
-
markEntity(register, rego, visEnt._siblingGraphics[i]);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
function unmarkEntity(visual) {
|
|
98
|
-
var vis = visual;
|
|
99
|
-
vis._register = null;
|
|
100
|
-
if (visual instanceof Cesium.Entity) {
|
|
101
|
-
var visEnt = visual;
|
|
102
|
-
if (visEnt._parentEntity) {
|
|
103
|
-
unmarkEntity(visEnt._parentEntity);
|
|
104
|
-
}
|
|
105
|
-
if (visEnt._siblingGraphics) {
|
|
106
|
-
for (var i = 0; i < visEnt._siblingGraphics.length; i++) {
|
|
107
|
-
unmarkEntity(visEnt._siblingGraphics[i]);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
function select(visual) {
|
|
113
|
-
var color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);
|
|
114
|
-
if (visual instanceof Cesium.Entity) {
|
|
115
|
-
var entities = entity_utils_1.EntityUtils.GatherEntity(visual);
|
|
116
|
-
for (var i = 0; i < entities.length; i++) {
|
|
117
|
-
var cEntity = entities[i];
|
|
118
|
-
if (cEntity.point) {
|
|
119
|
-
cEntity.point._orgColor = cEntity.point.color;
|
|
120
|
-
cEntity.point.color = color.clone();
|
|
121
|
-
}
|
|
122
|
-
if (cEntity.polyline) {
|
|
123
|
-
cEntity.polyline._orgColor = cEntity.polyline.material;
|
|
124
|
-
cEntity.polyline.material = color.clone();
|
|
125
|
-
}
|
|
126
|
-
if (cEntity.polygon) {
|
|
127
|
-
cEntity.polygon._orgColor = cEntity.polygon.material;
|
|
128
|
-
cEntity.polygon.material = color.clone();
|
|
129
|
-
}
|
|
130
|
-
if (cEntity.model) {
|
|
131
|
-
cEntity.model._orgColor = cEntity.model.color;
|
|
132
|
-
cEntity.model.color = color.clone();
|
|
133
|
-
}
|
|
134
|
-
if (cEntity.billboard) {
|
|
135
|
-
cEntity.billboard._orgColor = cEntity.billboard.color;
|
|
136
|
-
cEntity.billboard.color = color.clone();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
else if (visual instanceof Cesium.Primitive) {
|
|
141
|
-
// TODO.
|
|
142
|
-
}
|
|
143
|
-
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
144
|
-
var cPrim = visual;
|
|
145
|
-
cPrim._orgColor = cPrim.color;
|
|
146
|
-
cPrim.color = color.clone();
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
function deselect(visual) {
|
|
150
|
-
if (visual instanceof Cesium.Entity) {
|
|
151
|
-
var entities = entity_utils_1.EntityUtils.GatherEntity(visual);
|
|
152
|
-
for (var i = 0; i < entities.length; i++) {
|
|
153
|
-
var cEntity = entities[i];
|
|
154
|
-
if (cEntity.point) {
|
|
155
|
-
cEntity.point.color = cEntity.point._orgColor;
|
|
156
|
-
}
|
|
157
|
-
if (cEntity.polyline) {
|
|
158
|
-
cEntity.polyline.material = cEntity.polyline._orgColor;
|
|
159
|
-
}
|
|
160
|
-
if (cEntity.polygon) {
|
|
161
|
-
cEntity.polygon.material = cEntity.polygon._orgColor;
|
|
162
|
-
}
|
|
163
|
-
if (cEntity.model) {
|
|
164
|
-
cEntity.model.color = cEntity.model._orgColor;
|
|
165
|
-
}
|
|
166
|
-
if (cEntity.billboard) {
|
|
167
|
-
cEntity.billboard.color = cEntity.billboard._orgColor;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
else if (visual instanceof Cesium.Primitive) {
|
|
172
|
-
// TODO.
|
|
173
|
-
}
|
|
174
|
-
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
175
|
-
var cPrim = visual;
|
|
176
|
-
cPrim.color = cPrim._orgColor;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Manages a registry of all Bruce visuals being rendered by menu items.
|
|
181
|
-
* If multiple stuff is registered with the same entity id, only the "best" one is left visible.
|
|
182
|
-
*/
|
|
183
|
-
var VisualsRegister;
|
|
184
|
-
(function (VisualsRegister) {
|
|
185
|
-
var Register = /** @class */ (function () {
|
|
186
|
-
function Register(viewer) {
|
|
187
|
-
this.id = bruce_models_1.ObjectUtils.UId();
|
|
188
|
-
this.rego = {};
|
|
189
|
-
this.onUpdate = null;
|
|
190
|
-
this.selectedIds = [];
|
|
191
|
-
this.addons = {};
|
|
192
|
-
this.viewer = viewer;
|
|
193
|
-
}
|
|
194
|
-
Object.defineProperty(Register.prototype, "Id", {
|
|
195
|
-
get: function () {
|
|
196
|
-
return this.id;
|
|
197
|
-
},
|
|
198
|
-
enumerable: false,
|
|
199
|
-
configurable: true
|
|
200
|
-
});
|
|
201
|
-
Object.defineProperty(Register.prototype, "OnUpdate", {
|
|
202
|
-
get: function () {
|
|
203
|
-
if (!this.onUpdate) {
|
|
204
|
-
this.onUpdate = new bruce_models_1.BruceEvent();
|
|
205
|
-
}
|
|
206
|
-
return this.onUpdate;
|
|
207
|
-
},
|
|
208
|
-
enumerable: false,
|
|
209
|
-
configurable: true
|
|
210
|
-
});
|
|
211
|
-
Register.prototype.AddAddon = function (entityId, addon) {
|
|
212
|
-
if (!this.addons[entityId]) {
|
|
213
|
-
this.addons[entityId] = [];
|
|
214
|
-
}
|
|
215
|
-
this.addons[entityId].push(addon);
|
|
216
|
-
var regos = this.rego[entityId];
|
|
217
|
-
if (regos) {
|
|
218
|
-
addon.Render(regos.map(function (x) { return x.visual; }));
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
|
-
Register.prototype.GetAddons = function (entityId) {
|
|
222
|
-
return this.addons[entityId] || [];
|
|
223
|
-
};
|
|
224
|
-
Register.prototype.RemoveAddon = function (entityId, addonId) {
|
|
225
|
-
var addons = this.addons[entityId];
|
|
226
|
-
if (addons) {
|
|
227
|
-
for (var i = 0; i < addons.length; i++) {
|
|
228
|
-
if (addons[i].Id === addonId) {
|
|
229
|
-
addons[i].Dispose();
|
|
230
|
-
addons.splice(i, 1);
|
|
231
|
-
break;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
};
|
|
236
|
-
Register.prototype.RemoveAddons = function (entityId) {
|
|
237
|
-
var addons = this.addons[entityId];
|
|
238
|
-
if (addons) {
|
|
239
|
-
for (var i = 0; i < addons.length; i++) {
|
|
240
|
-
addons[i].Dispose();
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
this.addons[entityId] = [];
|
|
244
|
-
};
|
|
245
|
-
Register.prototype.Select = function (id) {
|
|
246
|
-
if (this.selectedIds.indexOf(id) === -1) {
|
|
247
|
-
this.selectedIds.push(id);
|
|
248
|
-
var regos = this.rego[id];
|
|
249
|
-
if (regos) {
|
|
250
|
-
for (var i = 0; i < regos.length; i++) {
|
|
251
|
-
var rego = regos[i];
|
|
252
|
-
select(rego.visual);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
};
|
|
257
|
-
Register.prototype.Deselect = function (id) {
|
|
258
|
-
var index = this.selectedIds.indexOf(id);
|
|
259
|
-
if (index !== -1) {
|
|
260
|
-
this.selectedIds.splice(index, 1);
|
|
261
|
-
var regos = this.rego[id];
|
|
262
|
-
if (regos) {
|
|
263
|
-
for (var i = 0; i < regos.length; i++) {
|
|
264
|
-
var rego = regos[i];
|
|
265
|
-
deselect(rego.visual);
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
Register.prototype.IsSelected = function (id) {
|
|
271
|
-
return this.selectedIds.indexOf(id) !== -1;
|
|
272
|
-
};
|
|
273
|
-
Register.prototype.ClearSelected = function () {
|
|
274
|
-
for (var i = 0; i < this.selectedIds.length; i++) {
|
|
275
|
-
var id = this.selectedIds[i];
|
|
276
|
-
var regos = this.rego[id];
|
|
277
|
-
if (regos) {
|
|
278
|
-
for (var i_1 = 0; i_1 < regos.length; i_1++) {
|
|
279
|
-
var rego = regos[i_1];
|
|
280
|
-
deselect(rego.visual);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
this.selectedIds = [];
|
|
285
|
-
};
|
|
286
|
-
Register.prototype.Add = function (rego) {
|
|
287
|
-
var _a, _b;
|
|
288
|
-
this.Remove(rego.entityId, rego.menuItemId, false);
|
|
289
|
-
var entityId = rego.entityId;
|
|
290
|
-
var entityRegos = (_a = this.rego[entityId]) !== null && _a !== void 0 ? _a : [];
|
|
291
|
-
entityRegos.push(rego);
|
|
292
|
-
this.rego[entityId] = entityRegos;
|
|
293
|
-
markEntity(this, rego, rego.visual);
|
|
294
|
-
updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
|
|
295
|
-
if (this.selectedIds.includes(entityId)) {
|
|
296
|
-
select(rego.visual);
|
|
297
|
-
}
|
|
298
|
-
(_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({ rego: rego, isAdding: true });
|
|
299
|
-
};
|
|
300
|
-
Register.prototype.GetRego = function (entityId, menuItemId) {
|
|
301
|
-
var entityRegos = this.rego[entityId];
|
|
302
|
-
if (!entityRegos) {
|
|
303
|
-
return [];
|
|
304
|
-
}
|
|
305
|
-
return entityRegos.find(function (r) { return r.menuItemId === menuItemId; });
|
|
306
|
-
};
|
|
307
|
-
Register.prototype.GetMenuItemRegos = function (menuItemId) {
|
|
308
|
-
var visuals = [];
|
|
309
|
-
for (var entityId in this.rego) {
|
|
310
|
-
var entityRegos = this.rego[entityId];
|
|
311
|
-
if (entityRegos) {
|
|
312
|
-
var rego = entityRegos.find(function (r) { return r.menuItemId === menuItemId; });
|
|
313
|
-
if (rego) {
|
|
314
|
-
visuals.push(rego);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return visuals;
|
|
319
|
-
};
|
|
320
|
-
Register.prototype.RemoveByEntityId = function (id) {
|
|
321
|
-
var _a;
|
|
322
|
-
var entityRegos = this.rego[id];
|
|
323
|
-
if (!entityRegos) {
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
for (var i = 0; i < entityRegos.length; i++) {
|
|
327
|
-
var rego = entityRegos[i];
|
|
328
|
-
(_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({ rego: rego, isAdding: false });
|
|
329
|
-
removeEntity(this.viewer, rego.visual);
|
|
330
|
-
}
|
|
331
|
-
this.rego[id] = [];
|
|
332
|
-
delete this.rego[id];
|
|
333
|
-
};
|
|
334
|
-
Register.prototype.RemoveByMenuItemId = function (id) {
|
|
335
|
-
var _a;
|
|
336
|
-
for (var entityId in this.rego) {
|
|
337
|
-
var entityRegos = this.rego[entityId];
|
|
338
|
-
if (entityRegos) {
|
|
339
|
-
var rego = entityRegos.find(function (r) { return r.menuItemId === id; });
|
|
340
|
-
if (!rego) {
|
|
341
|
-
continue;
|
|
342
|
-
}
|
|
343
|
-
(_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({ rego: rego, isAdding: false });
|
|
344
|
-
removeEntity(this.viewer, rego.visual);
|
|
345
|
-
var doesInclude = this.rego[entityId].find(function (r) { return r.menuItemId === id; });
|
|
346
|
-
if (doesInclude) {
|
|
347
|
-
this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== id; });
|
|
348
|
-
updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
Register.prototype.Remove = function (entityId, menuItemId, _doUpdate) {
|
|
354
|
-
var _a;
|
|
355
|
-
if (_doUpdate === void 0) { _doUpdate = true; }
|
|
356
|
-
var entityRegos = this.rego[entityId];
|
|
357
|
-
if (!entityRegos) {
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
var rego = entityRegos.find(function (r) { return r.menuItemId === menuItemId; });
|
|
361
|
-
if (!rego) {
|
|
362
|
-
return;
|
|
363
|
-
}
|
|
364
|
-
(_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({ rego: rego, isAdding: false });
|
|
365
|
-
removeEntity(this.viewer, rego.visual);
|
|
366
|
-
this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== menuItemId; });
|
|
367
|
-
if (_doUpdate) {
|
|
368
|
-
updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
|
|
369
|
-
}
|
|
370
|
-
};
|
|
371
|
-
/**
|
|
372
|
-
* Returns an array of drilled visuals associated with this register.
|
|
373
|
-
* The top array item is the first found.
|
|
374
|
-
* @param cursor
|
|
375
|
-
* @returns
|
|
376
|
-
*/
|
|
377
|
-
Register.prototype.GetFromCursor = function (cursor) {
|
|
378
|
-
var _a;
|
|
379
|
-
var found = [];
|
|
380
|
-
var picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);
|
|
381
|
-
for (var i = 0; i < picked.length; i++) {
|
|
382
|
-
var object = picked[i];
|
|
383
|
-
var entity = (object && object.id && object.id instanceof Cesium.Entity ? object.id : object);
|
|
384
|
-
var visual = entity;
|
|
385
|
-
if (((_a = visual === null || visual === void 0 ? void 0 : visual._register) === null || _a === void 0 ? void 0 : _a.Id) == this.id) {
|
|
386
|
-
found.push(visual._rego);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
return found;
|
|
390
|
-
};
|
|
391
|
-
return Register;
|
|
392
|
-
}());
|
|
393
|
-
VisualsRegister.Register = Register;
|
|
394
|
-
})(VisualsRegister = exports.VisualsRegister || (exports.VisualsRegister = {}));
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VisualsRegister = void 0;
|
|
4
|
+
var bruce_models_1 = require("bruce-models");
|
|
5
|
+
var Cesium = require("cesium");
|
|
6
|
+
var entity_utils_1 = require("../utils/entity-utils");
|
|
7
|
+
var entity_render_engine_1 = require("./entity-render-engine");
|
|
8
|
+
function removeEntity(viewer, visual) {
|
|
9
|
+
unmarkEntity(visual);
|
|
10
|
+
if (visual instanceof Cesium.Entity) {
|
|
11
|
+
entity_render_engine_1.EntityRenderEngine.Remove(viewer, visual);
|
|
12
|
+
}
|
|
13
|
+
else if (visual instanceof Cesium.Primitive) {
|
|
14
|
+
if (viewer.scene.primitives.contains(visual)) {
|
|
15
|
+
viewer.scene.primitives.remove(visual);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
19
|
+
// No way to tell if changing show will crash it!
|
|
20
|
+
try {
|
|
21
|
+
visual.show = false;
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
console.error(e);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function updateCEntityShow(viewer, visual, show) {
|
|
29
|
+
if (visual._parentEntity) {
|
|
30
|
+
updateCEntityShow(viewer, visual._parentEntity, show);
|
|
31
|
+
}
|
|
32
|
+
if (visual._siblingGraphics) {
|
|
33
|
+
for (var i = 0; i < visual._siblingGraphics.length; i++) {
|
|
34
|
+
var sibling = visual._siblingGraphics[i];
|
|
35
|
+
updateCEntityShow(viewer, sibling, show);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (viewer.entities.contains(visual)) {
|
|
39
|
+
visual.show = show;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function updateEntityShow(viewer, visual, show) {
|
|
43
|
+
if (visual instanceof Cesium.Entity) {
|
|
44
|
+
updateCEntityShow(viewer, visual, show);
|
|
45
|
+
}
|
|
46
|
+
else if (visual instanceof Cesium.Primitive) {
|
|
47
|
+
if (viewer.scene.primitives.contains(visual)) {
|
|
48
|
+
visual.show = show;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
52
|
+
// No way to tell if changing show will crash it!
|
|
53
|
+
try {
|
|
54
|
+
visual.show = show;
|
|
55
|
+
}
|
|
56
|
+
catch (e) {
|
|
57
|
+
console.error(e);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function updateEntity(viewer, entityRegos, addons) {
|
|
62
|
+
var highestPriority = null;
|
|
63
|
+
for (var i = 0; i < entityRegos.length; i++) {
|
|
64
|
+
var rego = entityRegos[i];
|
|
65
|
+
if (highestPriority === null || rego.priority > highestPriority.priority) {
|
|
66
|
+
highestPriority = rego;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (var i = 0; i < entityRegos.length; i++) {
|
|
70
|
+
var rego = entityRegos[i];
|
|
71
|
+
var show = rego === highestPriority;
|
|
72
|
+
updateEntityShow(viewer, rego.visual, show);
|
|
73
|
+
}
|
|
74
|
+
if (addons) {
|
|
75
|
+
for (var j = 0; j < addons.length; j++) {
|
|
76
|
+
var addon = addons[j];
|
|
77
|
+
addon.Render(entityRegos.map(function (x) { return x.visual; }));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function markEntity(register, rego, visual) {
|
|
82
|
+
var vis = visual;
|
|
83
|
+
vis._register = register;
|
|
84
|
+
vis._rego = rego;
|
|
85
|
+
if (visual instanceof Cesium.Entity) {
|
|
86
|
+
var visEnt = visual;
|
|
87
|
+
if (visEnt._parentEntity) {
|
|
88
|
+
markEntity(register, rego, visEnt._parentEntity);
|
|
89
|
+
}
|
|
90
|
+
if (visEnt._siblingGraphics) {
|
|
91
|
+
for (var i = 0; i < visEnt._siblingGraphics.length; i++) {
|
|
92
|
+
markEntity(register, rego, visEnt._siblingGraphics[i]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function unmarkEntity(visual) {
|
|
98
|
+
var vis = visual;
|
|
99
|
+
vis._register = null;
|
|
100
|
+
if (visual instanceof Cesium.Entity) {
|
|
101
|
+
var visEnt = visual;
|
|
102
|
+
if (visEnt._parentEntity) {
|
|
103
|
+
unmarkEntity(visEnt._parentEntity);
|
|
104
|
+
}
|
|
105
|
+
if (visEnt._siblingGraphics) {
|
|
106
|
+
for (var i = 0; i < visEnt._siblingGraphics.length; i++) {
|
|
107
|
+
unmarkEntity(visEnt._siblingGraphics[i]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function select(visual) {
|
|
113
|
+
var color = Cesium.Color.fromAlpha(Cesium.Color.YELLOW, 0.5);
|
|
114
|
+
if (visual instanceof Cesium.Entity) {
|
|
115
|
+
var entities = entity_utils_1.EntityUtils.GatherEntity(visual);
|
|
116
|
+
for (var i = 0; i < entities.length; i++) {
|
|
117
|
+
var cEntity = entities[i];
|
|
118
|
+
if (cEntity.point) {
|
|
119
|
+
cEntity.point._orgColor = cEntity.point.color;
|
|
120
|
+
cEntity.point.color = color.clone();
|
|
121
|
+
}
|
|
122
|
+
if (cEntity.polyline) {
|
|
123
|
+
cEntity.polyline._orgColor = cEntity.polyline.material;
|
|
124
|
+
cEntity.polyline.material = color.clone();
|
|
125
|
+
}
|
|
126
|
+
if (cEntity.polygon) {
|
|
127
|
+
cEntity.polygon._orgColor = cEntity.polygon.material;
|
|
128
|
+
cEntity.polygon.material = color.clone();
|
|
129
|
+
}
|
|
130
|
+
if (cEntity.model) {
|
|
131
|
+
cEntity.model._orgColor = cEntity.model.color;
|
|
132
|
+
cEntity.model.color = color.clone();
|
|
133
|
+
}
|
|
134
|
+
if (cEntity.billboard) {
|
|
135
|
+
cEntity.billboard._orgColor = cEntity.billboard.color;
|
|
136
|
+
cEntity.billboard.color = color.clone();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (visual instanceof Cesium.Primitive) {
|
|
141
|
+
// TODO.
|
|
142
|
+
}
|
|
143
|
+
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
144
|
+
var cPrim = visual;
|
|
145
|
+
cPrim._orgColor = cPrim.color;
|
|
146
|
+
cPrim.color = color.clone();
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function deselect(visual) {
|
|
150
|
+
if (visual instanceof Cesium.Entity) {
|
|
151
|
+
var entities = entity_utils_1.EntityUtils.GatherEntity(visual);
|
|
152
|
+
for (var i = 0; i < entities.length; i++) {
|
|
153
|
+
var cEntity = entities[i];
|
|
154
|
+
if (cEntity.point) {
|
|
155
|
+
cEntity.point.color = cEntity.point._orgColor;
|
|
156
|
+
}
|
|
157
|
+
if (cEntity.polyline) {
|
|
158
|
+
cEntity.polyline.material = cEntity.polyline._orgColor;
|
|
159
|
+
}
|
|
160
|
+
if (cEntity.polygon) {
|
|
161
|
+
cEntity.polygon.material = cEntity.polygon._orgColor;
|
|
162
|
+
}
|
|
163
|
+
if (cEntity.model) {
|
|
164
|
+
cEntity.model.color = cEntity.model._orgColor;
|
|
165
|
+
}
|
|
166
|
+
if (cEntity.billboard) {
|
|
167
|
+
cEntity.billboard.color = cEntity.billboard._orgColor;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else if (visual instanceof Cesium.Primitive) {
|
|
172
|
+
// TODO.
|
|
173
|
+
}
|
|
174
|
+
else if (visual instanceof Cesium.Cesium3DTileFeature) {
|
|
175
|
+
var cPrim = visual;
|
|
176
|
+
cPrim.color = cPrim._orgColor;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Manages a registry of all Bruce visuals being rendered by menu items.
|
|
181
|
+
* If multiple stuff is registered with the same entity id, only the "best" one is left visible.
|
|
182
|
+
*/
|
|
183
|
+
var VisualsRegister;
|
|
184
|
+
(function (VisualsRegister) {
|
|
185
|
+
var Register = /** @class */ (function () {
|
|
186
|
+
function Register(viewer) {
|
|
187
|
+
this.id = bruce_models_1.ObjectUtils.UId();
|
|
188
|
+
this.rego = {};
|
|
189
|
+
this.onUpdate = null;
|
|
190
|
+
this.selectedIds = [];
|
|
191
|
+
this.addons = {};
|
|
192
|
+
this.viewer = viewer;
|
|
193
|
+
}
|
|
194
|
+
Object.defineProperty(Register.prototype, "Id", {
|
|
195
|
+
get: function () {
|
|
196
|
+
return this.id;
|
|
197
|
+
},
|
|
198
|
+
enumerable: false,
|
|
199
|
+
configurable: true
|
|
200
|
+
});
|
|
201
|
+
Object.defineProperty(Register.prototype, "OnUpdate", {
|
|
202
|
+
get: function () {
|
|
203
|
+
if (!this.onUpdate) {
|
|
204
|
+
this.onUpdate = new bruce_models_1.BruceEvent();
|
|
205
|
+
}
|
|
206
|
+
return this.onUpdate;
|
|
207
|
+
},
|
|
208
|
+
enumerable: false,
|
|
209
|
+
configurable: true
|
|
210
|
+
});
|
|
211
|
+
Register.prototype.AddAddon = function (entityId, addon) {
|
|
212
|
+
if (!this.addons[entityId]) {
|
|
213
|
+
this.addons[entityId] = [];
|
|
214
|
+
}
|
|
215
|
+
this.addons[entityId].push(addon);
|
|
216
|
+
var regos = this.rego[entityId];
|
|
217
|
+
if (regos) {
|
|
218
|
+
addon.Render(regos.map(function (x) { return x.visual; }));
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
Register.prototype.GetAddons = function (entityId) {
|
|
222
|
+
return this.addons[entityId] || [];
|
|
223
|
+
};
|
|
224
|
+
Register.prototype.RemoveAddon = function (entityId, addonId) {
|
|
225
|
+
var addons = this.addons[entityId];
|
|
226
|
+
if (addons) {
|
|
227
|
+
for (var i = 0; i < addons.length; i++) {
|
|
228
|
+
if (addons[i].Id === addonId) {
|
|
229
|
+
addons[i].Dispose();
|
|
230
|
+
addons.splice(i, 1);
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
Register.prototype.RemoveAddons = function (entityId) {
|
|
237
|
+
var addons = this.addons[entityId];
|
|
238
|
+
if (addons) {
|
|
239
|
+
for (var i = 0; i < addons.length; i++) {
|
|
240
|
+
addons[i].Dispose();
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
this.addons[entityId] = [];
|
|
244
|
+
};
|
|
245
|
+
Register.prototype.Select = function (id) {
|
|
246
|
+
if (this.selectedIds.indexOf(id) === -1) {
|
|
247
|
+
this.selectedIds.push(id);
|
|
248
|
+
var regos = this.rego[id];
|
|
249
|
+
if (regos) {
|
|
250
|
+
for (var i = 0; i < regos.length; i++) {
|
|
251
|
+
var rego = regos[i];
|
|
252
|
+
select(rego.visual);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
Register.prototype.Deselect = function (id) {
|
|
258
|
+
var index = this.selectedIds.indexOf(id);
|
|
259
|
+
if (index !== -1) {
|
|
260
|
+
this.selectedIds.splice(index, 1);
|
|
261
|
+
var regos = this.rego[id];
|
|
262
|
+
if (regos) {
|
|
263
|
+
for (var i = 0; i < regos.length; i++) {
|
|
264
|
+
var rego = regos[i];
|
|
265
|
+
deselect(rego.visual);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
Register.prototype.IsSelected = function (id) {
|
|
271
|
+
return this.selectedIds.indexOf(id) !== -1;
|
|
272
|
+
};
|
|
273
|
+
Register.prototype.ClearSelected = function () {
|
|
274
|
+
for (var i = 0; i < this.selectedIds.length; i++) {
|
|
275
|
+
var id = this.selectedIds[i];
|
|
276
|
+
var regos = this.rego[id];
|
|
277
|
+
if (regos) {
|
|
278
|
+
for (var i_1 = 0; i_1 < regos.length; i_1++) {
|
|
279
|
+
var rego = regos[i_1];
|
|
280
|
+
deselect(rego.visual);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
this.selectedIds = [];
|
|
285
|
+
};
|
|
286
|
+
Register.prototype.Add = function (rego) {
|
|
287
|
+
var _a, _b;
|
|
288
|
+
this.Remove(rego.entityId, rego.menuItemId, false);
|
|
289
|
+
var entityId = rego.entityId;
|
|
290
|
+
var entityRegos = (_a = this.rego[entityId]) !== null && _a !== void 0 ? _a : [];
|
|
291
|
+
entityRegos.push(rego);
|
|
292
|
+
this.rego[entityId] = entityRegos;
|
|
293
|
+
markEntity(this, rego, rego.visual);
|
|
294
|
+
updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
|
|
295
|
+
if (this.selectedIds.includes(entityId)) {
|
|
296
|
+
select(rego.visual);
|
|
297
|
+
}
|
|
298
|
+
(_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({ rego: rego, isAdding: true });
|
|
299
|
+
};
|
|
300
|
+
Register.prototype.GetRego = function (entityId, menuItemId) {
|
|
301
|
+
var entityRegos = this.rego[entityId];
|
|
302
|
+
if (!entityRegos) {
|
|
303
|
+
return [];
|
|
304
|
+
}
|
|
305
|
+
return entityRegos.find(function (r) { return r.menuItemId === menuItemId; });
|
|
306
|
+
};
|
|
307
|
+
Register.prototype.GetMenuItemRegos = function (menuItemId) {
|
|
308
|
+
var visuals = [];
|
|
309
|
+
for (var entityId in this.rego) {
|
|
310
|
+
var entityRegos = this.rego[entityId];
|
|
311
|
+
if (entityRegos) {
|
|
312
|
+
var rego = entityRegos.find(function (r) { return r.menuItemId === menuItemId; });
|
|
313
|
+
if (rego) {
|
|
314
|
+
visuals.push(rego);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return visuals;
|
|
319
|
+
};
|
|
320
|
+
Register.prototype.RemoveByEntityId = function (id) {
|
|
321
|
+
var _a;
|
|
322
|
+
var entityRegos = this.rego[id];
|
|
323
|
+
if (!entityRegos) {
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
for (var i = 0; i < entityRegos.length; i++) {
|
|
327
|
+
var rego = entityRegos[i];
|
|
328
|
+
(_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({ rego: rego, isAdding: false });
|
|
329
|
+
removeEntity(this.viewer, rego.visual);
|
|
330
|
+
}
|
|
331
|
+
this.rego[id] = [];
|
|
332
|
+
delete this.rego[id];
|
|
333
|
+
};
|
|
334
|
+
Register.prototype.RemoveByMenuItemId = function (id) {
|
|
335
|
+
var _a;
|
|
336
|
+
for (var entityId in this.rego) {
|
|
337
|
+
var entityRegos = this.rego[entityId];
|
|
338
|
+
if (entityRegos) {
|
|
339
|
+
var rego = entityRegos.find(function (r) { return r.menuItemId === id; });
|
|
340
|
+
if (!rego) {
|
|
341
|
+
continue;
|
|
342
|
+
}
|
|
343
|
+
(_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({ rego: rego, isAdding: false });
|
|
344
|
+
removeEntity(this.viewer, rego.visual);
|
|
345
|
+
var doesInclude = this.rego[entityId].find(function (r) { return r.menuItemId === id; });
|
|
346
|
+
if (doesInclude) {
|
|
347
|
+
this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== id; });
|
|
348
|
+
updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
Register.prototype.Remove = function (entityId, menuItemId, _doUpdate) {
|
|
354
|
+
var _a;
|
|
355
|
+
if (_doUpdate === void 0) { _doUpdate = true; }
|
|
356
|
+
var entityRegos = this.rego[entityId];
|
|
357
|
+
if (!entityRegos) {
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
var rego = entityRegos.find(function (r) { return r.menuItemId === menuItemId; });
|
|
361
|
+
if (!rego) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
(_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({ rego: rego, isAdding: false });
|
|
365
|
+
removeEntity(this.viewer, rego.visual);
|
|
366
|
+
this.rego[entityId] = entityRegos.filter(function (r) { return r.menuItemId !== menuItemId; });
|
|
367
|
+
if (_doUpdate) {
|
|
368
|
+
updateEntity(this.viewer, this.rego[entityId], this.GetAddons(entityId));
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
/**
|
|
372
|
+
* Returns an array of drilled visuals associated with this register.
|
|
373
|
+
* The top array item is the first found.
|
|
374
|
+
* @param cursor
|
|
375
|
+
* @returns
|
|
376
|
+
*/
|
|
377
|
+
Register.prototype.GetFromCursor = function (cursor) {
|
|
378
|
+
var _a;
|
|
379
|
+
var found = [];
|
|
380
|
+
var picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), 5);
|
|
381
|
+
for (var i = 0; i < picked.length; i++) {
|
|
382
|
+
var object = picked[i];
|
|
383
|
+
var entity = (object && object.id && object.id instanceof Cesium.Entity ? object.id : object);
|
|
384
|
+
var visual = entity;
|
|
385
|
+
if (((_a = visual === null || visual === void 0 ? void 0 : visual._register) === null || _a === void 0 ? void 0 : _a.Id) == this.id) {
|
|
386
|
+
found.push(visual._rego);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return found;
|
|
390
|
+
};
|
|
391
|
+
return Register;
|
|
392
|
+
}());
|
|
393
|
+
VisualsRegister.Register = Register;
|
|
394
|
+
})(VisualsRegister = exports.VisualsRegister || (exports.VisualsRegister = {}));
|
|
395
395
|
//# sourceMappingURL=visuals-register.js.map
|