bruce-cesium 0.3.1 → 0.3.4

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 (78) hide show
  1. package/README.md +0 -0
  2. package/dist/bruce-cesium.es5.js +16 -9
  3. package/dist/bruce-cesium.es5.js.map +1 -1
  4. package/dist/bruce-cesium.umd.js +15 -8
  5. package/dist/bruce-cesium.umd.js.map +1 -1
  6. package/dist/lib/bruce-cesium.js +30 -30
  7. package/dist/lib/bruce-cesium.js.map +0 -0
  8. package/dist/lib/rendering/entity-render-engine.js +848 -848
  9. package/dist/lib/rendering/entity-render-engine.js.map +0 -0
  10. package/dist/lib/rendering/menu-item-manager.js +252 -249
  11. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  12. package/dist/lib/rendering/render-addons/measure-addon.js +186 -186
  13. package/dist/lib/rendering/render-addons/measure-addon.js.map +0 -0
  14. package/dist/lib/rendering/render-addons/render-addon.js +2 -2
  15. package/dist/lib/rendering/render-addons/render-addon.js.map +0 -0
  16. package/dist/lib/rendering/render-helper.js +279 -279
  17. package/dist/lib/rendering/render-helper.js.map +0 -0
  18. package/dist/lib/rendering/render-managers/common/shared-getters.js +31 -31
  19. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +0 -0
  20. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +144 -144
  21. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +0 -0
  22. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +141 -141
  23. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +0 -0
  24. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +232 -232
  25. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +0 -0
  26. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +138 -138
  27. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +0 -0
  28. package/dist/lib/rendering/render-managers/render-manager.js +50 -50
  29. package/dist/lib/rendering/render-managers/render-manager.js.map +0 -0
  30. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +230 -230
  31. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +0 -0
  32. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +320 -320
  33. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +0 -0
  34. package/dist/lib/rendering/tile-render-engine.js +542 -542
  35. package/dist/lib/rendering/tile-render-engine.js.map +0 -0
  36. package/dist/lib/rendering/tileset-render-engine.js +472 -472
  37. package/dist/lib/rendering/tileset-render-engine.js.map +0 -0
  38. package/dist/lib/rendering/view-render-engine.js +138 -138
  39. package/dist/lib/rendering/view-render-engine.js.map +0 -0
  40. package/dist/lib/rendering/visuals-register.js +394 -394
  41. package/dist/lib/rendering/visuals-register.js.map +0 -0
  42. package/dist/lib/utils/drawing-utils.js +42 -42
  43. package/dist/lib/utils/drawing-utils.js.map +0 -0
  44. package/dist/lib/utils/entity-utils.js +99 -99
  45. package/dist/lib/utils/entity-utils.js.map +0 -0
  46. package/dist/lib/utils/measure-utils.js +34 -34
  47. package/dist/lib/utils/measure-utils.js.map +0 -0
  48. package/dist/lib/utils/view-utils.js +34 -34
  49. package/dist/lib/utils/view-utils.js.map +0 -0
  50. package/dist/lib/viewer/cesium-view-monitor.js +231 -227
  51. package/dist/lib/viewer/cesium-view-monitor.js.map +1 -1
  52. package/dist/lib/viewer/viewer-utils.js +85 -85
  53. package/dist/lib/viewer/viewer-utils.js.map +0 -0
  54. package/dist/types/bruce-cesium.d.ts +0 -0
  55. package/dist/types/rendering/entity-render-engine.d.ts +0 -0
  56. package/dist/types/rendering/menu-item-manager.d.ts +4 -2
  57. package/dist/types/rendering/render-addons/measure-addon.d.ts +0 -0
  58. package/dist/types/rendering/render-addons/render-addon.d.ts +0 -0
  59. package/dist/types/rendering/render-helper.d.ts +0 -0
  60. package/dist/types/rendering/render-managers/common/shared-getters.d.ts +0 -0
  61. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +0 -0
  62. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +0 -0
  63. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +0 -0
  64. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +0 -0
  65. package/dist/types/rendering/render-managers/render-manager.d.ts +0 -0
  66. package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +0 -0
  67. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +0 -0
  68. package/dist/types/rendering/tile-render-engine.d.ts +0 -0
  69. package/dist/types/rendering/tileset-render-engine.d.ts +0 -0
  70. package/dist/types/rendering/view-render-engine.d.ts +0 -0
  71. package/dist/types/rendering/visuals-register.d.ts +0 -0
  72. package/dist/types/utils/drawing-utils.d.ts +0 -0
  73. package/dist/types/utils/entity-utils.d.ts +0 -0
  74. package/dist/types/utils/measure-utils.d.ts +0 -0
  75. package/dist/types/utils/view-utils.d.ts +0 -0
  76. package/dist/types/viewer/cesium-view-monitor.d.ts +0 -0
  77. package/dist/types/viewer/viewer-utils.d.ts +0 -0
  78. package/package.json +73 -73
@@ -1,473 +1,473 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.TilesetRenderEngine = void 0;
40
- var bruce_models_1 = require("bruce-models");
41
- var Cesium = require("cesium");
42
- function colorToCColor(color) {
43
- return new Cesium.Color(color.red ? color.red / 255 : 0, color.green ? color.green / 255 : 0, color.blue ? color.blue / 255 : 0, color.alpha);
44
- }
45
- var TilesetRenderEngine;
46
- (function (TilesetRenderEngine) {
47
- function ApplySettings(cTileset, tileset) {
48
- if (tileset.type == bruce_models_1.Tileset.EType.Cad) {
49
- var settings = tileset.settings;
50
- var root = cTileset.root;
51
- var transform = settings.transform;
52
- if (!transform) {
53
- transform = {
54
- heading: 0,
55
- pitch: 0,
56
- roll: 0,
57
- scale: 1
58
- };
59
- }
60
- var point = settings.location;
61
- var pos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);
62
- var hpr = Cesium.HeadingPitchRoll.fromDegrees(transform.heading, transform.pitch, transform.roll, new Cesium.HeadingPitchRoll());
63
- root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);
64
- var scale = +(transform === null || transform === void 0 ? void 0 : transform.scale);
65
- if (!scale || scale <= 0) {
66
- scale = 0.000001;
67
- }
68
- var scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(scale, scale, scale), new Cesium.Matrix4());
69
- root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);
70
- // Force matrix to update
71
- root.updateTransform();
72
- var maxScreenSpaceError = settings.maximumScreenSpaceError;
73
- if (maxScreenSpaceError || maxScreenSpaceError == 0) {
74
- cTileset.maximumScreenSpaceError = maxScreenSpaceError;
75
- }
76
- }
77
- else {
78
- throw ("Not implemented.");
79
- }
80
- }
81
- TilesetRenderEngine.ApplySettings = ApplySettings;
82
- function Render(params) {
83
- var api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);
84
- if (params.tileset.type == bruce_models_1.Tileset.EType.Cad) {
85
- var cTileset_1 = new Cesium.Cesium3DTileset({
86
- url: bruce_models_1.Tileset.GetPublicFileUrl(api, params.tileset.id, "tileset.json") + "?generation=" + params.tileset.generateVersion
87
- });
88
- params.viewer.scene.primitives.add(cTileset_1);
89
- cTileset_1.readyPromise.then(function () {
90
- ApplySettings(cTileset_1, params.tileset);
91
- });
92
- return cTileset_1;
93
- }
94
- else {
95
- throw ("Not implemented.");
96
- }
97
- }
98
- TilesetRenderEngine.Render = Render;
99
- var CadStyler = /** @class */ (function () {
100
- function CadStyler(api, cTileset, fallbackStyleId, styleMapping) {
101
- this.disposed = false;
102
- this.loadedEntities = {};
103
- this.styleMappingLoaded = false;
104
- this.styleMappingsLoaded = {};
105
- this.fallbackStyle = null;
106
- this.runningQueues = 0;
107
- this.recordLoadQueue = [];
108
- this.recordCheckQueue = [];
109
- this.api = api;
110
- this.cTileset = cTileset;
111
- this.fallbackStyleId = fallbackStyleId;
112
- this.styleMapping = styleMapping;
113
- this.loadStyles();
114
- }
115
- Object.defineProperty(CadStyler.prototype, "Disposed", {
116
- get: function () {
117
- return this.disposed;
118
- },
119
- enumerable: false,
120
- configurable: true
121
- });
122
- CadStyler.prototype.QueueEntities = function (entities) {
123
- for (var i = 0; i < entities.length; i++) {
124
- var entity = entities[i];
125
- this.queueTilesetFeatureStyle(entity);
126
- }
127
- if (this.recordLoadQueue.length > 0) {
128
- this.processQueue();
129
- }
130
- };
131
- CadStyler.prototype.processQueue = function () {
132
- return __awaiter(this, void 0, void 0, function () {
133
- var MAX_BATCHES, BATCH_DELAY, batch, rerun, entityIds, entities, _loop_1, this_1, i;
134
- var _this = this;
135
- return __generator(this, function (_a) {
136
- switch (_a.label) {
137
- case 0:
138
- MAX_BATCHES = 2;
139
- BATCH_DELAY = 200;
140
- if (this.runningQueues >= MAX_BATCHES) {
141
- return [2 /*return*/];
142
- }
143
- else if (this.disposed) {
144
- return [2 /*return*/];
145
- }
146
- this.runningQueues += 1;
147
- batch = [];
148
- rerun = false;
149
- _a.label = 1;
150
- case 1:
151
- _a.trys.push([1, , 4, 5]);
152
- batch = this.getEntitiesForQueue();
153
- entityIds = batch.map(function (x) { return x.entityId; });
154
- if (!(entityIds.length > 0)) return [3 /*break*/, 3];
155
- return [4 /*yield*/, bruce_models_1.Entity.GetListByIds(this.api, entityIds)];
156
- case 2:
157
- entities = _a.sent();
158
- _loop_1 = function (i) {
159
- var record = entities[i];
160
- var feature = batch.find(function (x) { var _a; return (x === null || x === void 0 ? void 0 : x.entityId) == ((_a = record === null || record === void 0 ? void 0 : record.Bruce) === null || _a === void 0 ? void 0 : _a.ID); });
161
- if (feature) {
162
- this_1.styleTilesetFeatureFullData(feature, record);
163
- }
164
- };
165
- this_1 = this;
166
- for (i = 0; i < entities.length; i++) {
167
- _loop_1(i);
168
- }
169
- rerun = batch.length > 0;
170
- _a.label = 3;
171
- case 3: return [3 /*break*/, 5];
172
- case 4:
173
- setTimeout(function () {
174
- _this.runningQueues -= 1;
175
- if (rerun) {
176
- _this.processQueue();
177
- }
178
- }, BATCH_DELAY);
179
- return [7 /*endfinally*/];
180
- case 5: return [2 /*return*/];
181
- }
182
- });
183
- });
184
- };
185
- CadStyler.prototype.getEntitiesForQueue = function () {
186
- var BATCH_SIZE = 30;
187
- var batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);
188
- var entities = [];
189
- for (var i = 0; i < batchHashes.length; i++) {
190
- var id = batchHashes[i];
191
- var entity = this.loadedEntities[id];
192
- if (entity) {
193
- entities.push(entity);
194
- }
195
- }
196
- return entities;
197
- };
198
- CadStyler.prototype.Dispose = function () {
199
- if (this.disposed) {
200
- return;
201
- }
202
- this.disposed = true;
203
- clearInterval(this.queueLoadInterval);
204
- clearInterval(this.queueCheckInterval);
205
- };
206
- CadStyler.prototype.loadStyles = function () {
207
- var _a, _b;
208
- return __awaiter(this, void 0, void 0, function () {
209
- var fallbackStyleId, data, e_1, styleMapping, modelTree, entityTypeIds, _loop_2, i, i, styleMap, styleId, entityType, e_2, data, e_3;
210
- return __generator(this, function (_c) {
211
- switch (_c.label) {
212
- case 0:
213
- fallbackStyleId = this.fallbackStyleId;
214
- if (!(fallbackStyleId && fallbackStyleId > 0)) return [3 /*break*/, 4];
215
- _c.label = 1;
216
- case 1:
217
- _c.trys.push([1, 3, , 4]);
218
- return [4 /*yield*/, bruce_models_1.Style.Get(this.api, fallbackStyleId)];
219
- case 2:
220
- data = _c.sent();
221
- this.fallbackStyle = data;
222
- return [3 /*break*/, 4];
223
- case 3:
224
- e_1 = _c.sent();
225
- console.error(e_1);
226
- return [3 /*break*/, 4];
227
- case 4:
228
- styleMapping = this.styleMapping;
229
- if (!styleMapping) {
230
- styleMapping = [];
231
- }
232
- this.styleMapping = styleMapping;
233
- // It is default style.
234
- // We have to get all possible entity type ids and append them to mapping.
235
- if (!fallbackStyleId) {
236
- try {
237
- modelTree = (_b = (_a = this.cTileset) === null || _a === void 0 ? void 0 : _a.extensions) === null || _b === void 0 ? void 0 : _b.modelTree;
238
- if (modelTree) {
239
- entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);
240
- _loop_2 = function (i) {
241
- var entityTypeId = entityTypeIds[i];
242
- if (styleMapping.findIndex(function (x) { return x.EntityTypeID == entityTypeId; }) <= -1) {
243
- styleMapping.push({
244
- EntityTypeID: entityTypeId,
245
- StyleID: null,
246
- style: null
247
- });
248
- }
249
- };
250
- for (i = 0; i < entityTypeIds.length; i++) {
251
- _loop_2(i);
252
- }
253
- }
254
- }
255
- catch (e) {
256
- console.log(e);
257
- }
258
- }
259
- i = 0;
260
- _c.label = 5;
261
- case 5:
262
- if (!(i < styleMapping.length)) return [3 /*break*/, 15];
263
- if (this.disposed) {
264
- return [3 /*break*/, 15];
265
- }
266
- styleMap = styleMapping[i];
267
- if (!!styleMap.style) return [3 /*break*/, 13];
268
- styleId = styleMap.StyleID;
269
- if (!!styleId) return [3 /*break*/, 9];
270
- _c.label = 6;
271
- case 6:
272
- _c.trys.push([6, 8, , 9]);
273
- return [4 /*yield*/, bruce_models_1.EntityType.Get(this.api, styleMap.EntityTypeID)];
274
- case 7:
275
- entityType = _c.sent();
276
- styleId = entityType === null || entityType === void 0 ? void 0 : entityType["DisplaySetting.ID"];
277
- return [3 /*break*/, 9];
278
- case 8:
279
- e_2 = _c.sent();
280
- console.error(e_2);
281
- return [3 /*break*/, 9];
282
- case 9:
283
- if (!styleId) return [3 /*break*/, 13];
284
- _c.label = 10;
285
- case 10:
286
- _c.trys.push([10, 12, , 13]);
287
- return [4 /*yield*/, bruce_models_1.Style.Get(this.api, styleId)];
288
- case 11:
289
- data = _c.sent();
290
- if (data) {
291
- styleMap.style = data;
292
- styleMap.StyleID = styleId;
293
- }
294
- return [3 /*break*/, 13];
295
- case 12:
296
- e_3 = _c.sent();
297
- console.error(e_3);
298
- return [3 /*break*/, 13];
299
- case 13:
300
- if (styleMap.EntityTypeID && styleMap.style) {
301
- this.styleMappingsLoaded[styleMap.EntityTypeID] = true;
302
- this.processTilesetFeatureCheckQueue();
303
- this.processQueue();
304
- }
305
- _c.label = 14;
306
- case 14:
307
- i++;
308
- return [3 /*break*/, 5];
309
- case 15:
310
- this.styleMappingLoaded = true;
311
- if (!!this.disposed) return [3 /*break*/, 17];
312
- return [4 /*yield*/, this.processTilesetFeatureCheckQueue()];
313
- case 16:
314
- _c.sent();
315
- this.processQueue();
316
- _c.label = 17;
317
- case 17: return [2 /*return*/];
318
- }
319
- });
320
- });
321
- };
322
- CadStyler.prototype.getEntityTypeIdsFromModelTree = function (modelTree) {
323
- var entityTypeIds = [];
324
- this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);
325
- return entityTypeIds;
326
- };
327
- CadStyler.prototype.digEntityTypeIdsFromModelTreeBranch = function (branch, arr) {
328
- if (branch) {
329
- // Does not yet include this entity type id.
330
- if (branch.typeId && !arr.includes(branch.typeId)) {
331
- arr.push(branch.typeId);
332
- }
333
- if (branch.children) {
334
- for (var i = 0; i < branch.children.length; i++) {
335
- var child = branch.children[i];
336
- this.digEntityTypeIdsFromModelTreeBranch(child, arr);
337
- }
338
- }
339
- }
340
- };
341
- CadStyler.prototype.processTilesetFeatureCheckQueue = function () {
342
- return __awaiter(this, void 0, void 0, function () {
343
- var BATCH_CHECK_SIZE;
344
- var _this = this;
345
- return __generator(this, function (_a) {
346
- BATCH_CHECK_SIZE = 1000;
347
- return [2 /*return*/, new Promise(function (res) {
348
- clearInterval(_this.queueCheckInterval);
349
- _this.queueCheckInterval = setInterval(function () {
350
- if (_this.disposed) {
351
- clearInterval(_this.queueCheckInterval);
352
- res();
353
- return;
354
- }
355
- // Construct batch for loaded styles.
356
- var batch = [];
357
- if (_this.styleMappingLoaded) {
358
- batch = _this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);
359
- }
360
- else {
361
- for (var i = 0; i < _this.recordCheckQueue.length; i++) {
362
- var hash = _this.recordCheckQueue[i];
363
- var entity = _this.loadedEntities[hash];
364
- if (entity) {
365
- var entityTypeId = entity.entityTypeId;
366
- if (entityTypeId) {
367
- if (_this.styleMappingsLoaded[entityTypeId] == true) {
368
- batch.push(hash);
369
- }
370
- }
371
- }
372
- if (batch.length >= BATCH_CHECK_SIZE) {
373
- break;
374
- }
375
- }
376
- var _loop_3 = function (i) {
377
- var hash = batch[i];
378
- var index = _this.recordCheckQueue.findIndex(function (x) { return x == hash; });
379
- if (index > -1) {
380
- _this.recordCheckQueue.splice(index, 1);
381
- }
382
- };
383
- for (var i = 0; i < batch.length; i++) {
384
- _loop_3(i);
385
- }
386
- }
387
- if (batch.length) {
388
- for (var i = 0; i < batch.length; i++) {
389
- var item = batch[i];
390
- var entity = _this.loadedEntities[item];
391
- if (entity) {
392
- _this.queueTilesetFeatureStyle(entity);
393
- }
394
- }
395
- }
396
- else {
397
- clearInterval(_this.queueCheckInterval);
398
- res();
399
- }
400
- }, 50);
401
- })];
402
- });
403
- });
404
- };
405
- CadStyler.prototype.queueTilesetFeatureStyle = function (entity) {
406
- if (this.styleMappingLoaded || this.styleMappingsLoaded[entity.entityTypeId] == true) {
407
- var needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, entity.entityTypeId);
408
- if (needsData) {
409
- if (this.recordLoadQueue.findIndex(function (x) { return x == entity.entityId; })) {
410
- this.recordLoadQueue.push(entity.entityId);
411
- }
412
- }
413
- else {
414
- this.styleTilesetFeature(entity);
415
- }
416
- }
417
- else {
418
- this.recordCheckQueue.push(entity.entityId);
419
- }
420
- };
421
- CadStyler.prototype.styleTilesetFeature = function (entity) {
422
- this.styleTilesetFeatureFullData(entity, null);
423
- };
424
- CadStyler.prototype.styleTilesetFeatureFullData = function (entity, data) {
425
- var _a;
426
- var style = this.getTilesetFeatureStyle(entity.entityId, entity.entityTypeId);
427
- if (!style) {
428
- return;
429
- }
430
- var bColor = (((_a = style.modelStyle) === null || _a === void 0 ? void 0 : _a.fillColor) ? bruce_models_1.Calculator.GetValue(style.modelStyle.fillColor, data, []) : null);
431
- if (bColor != null) {
432
- var cColor = colorToCColor(bColor);
433
- var visual = entity.visual;
434
- if (visual && visual instanceof Cesium.Cesium3DTileFeature) {
435
- visual.color = cColor;
436
- }
437
- }
438
- };
439
- CadStyler.prototype.getTilesetFeatureStyle = function (entityId, entityTypeId) {
440
- var _a, _b, _c;
441
- // Locate what style is applicable to the feature.
442
- var style = null;
443
- if (entityTypeId) {
444
- style = (_a = this.styleMapping.find(function (x) { return x.EntityTypeID == entityTypeId; })) === null || _a === void 0 ? void 0 : _a.style;
445
- }
446
- if (!style) {
447
- style = this.fallbackStyle;
448
- }
449
- if (!style) {
450
- return null;
451
- }
452
- if (!((_c = (_b = style.Settings) === null || _b === void 0 ? void 0 : _b.modelStyle) === null || _c === void 0 ? void 0 : _c.customize)) {
453
- return null;
454
- }
455
- return style.Settings;
456
- };
457
- CadStyler.prototype.getTilesetFeatureNeedsFullData = function (entityId, entityTypeId) {
458
- var _a;
459
- var style = this.getTilesetFeatureStyle(entityId, entityTypeId);
460
- if (!style) {
461
- return false;
462
- }
463
- var fill = (_a = style === null || style === void 0 ? void 0 : style.modelStyle) === null || _a === void 0 ? void 0 : _a.fillColor;
464
- if (!fill || fill.length <= 0) {
465
- return false;
466
- }
467
- return fill[0].type != 0;
468
- };
469
- return CadStyler;
470
- }());
471
- TilesetRenderEngine.CadStyler = CadStyler;
472
- })(TilesetRenderEngine = exports.TilesetRenderEngine || (exports.TilesetRenderEngine = {}));
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.TilesetRenderEngine = void 0;
40
+ var bruce_models_1 = require("bruce-models");
41
+ var Cesium = require("cesium");
42
+ function colorToCColor(color) {
43
+ return new Cesium.Color(color.red ? color.red / 255 : 0, color.green ? color.green / 255 : 0, color.blue ? color.blue / 255 : 0, color.alpha);
44
+ }
45
+ var TilesetRenderEngine;
46
+ (function (TilesetRenderEngine) {
47
+ function ApplySettings(cTileset, tileset) {
48
+ if (tileset.type == bruce_models_1.Tileset.EType.Cad) {
49
+ var settings = tileset.settings;
50
+ var root = cTileset.root;
51
+ var transform = settings.transform;
52
+ if (!transform) {
53
+ transform = {
54
+ heading: 0,
55
+ pitch: 0,
56
+ roll: 0,
57
+ scale: 1
58
+ };
59
+ }
60
+ var point = settings.location;
61
+ var pos = Cesium.Cartesian3.fromDegrees(point.longitude, point.latitude, point.altitude);
62
+ var hpr = Cesium.HeadingPitchRoll.fromDegrees(transform.heading, transform.pitch, transform.roll, new Cesium.HeadingPitchRoll());
63
+ root.transform = Cesium.Transforms.headingPitchRollToFixedFrame(pos, hpr);
64
+ var scale = +(transform === null || transform === void 0 ? void 0 : transform.scale);
65
+ if (!scale || scale <= 0) {
66
+ scale = 0.000001;
67
+ }
68
+ var scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(scale, scale, scale), new Cesium.Matrix4());
69
+ root.transform = Cesium.Matrix4.multiply(root.transform, scaleMatrix, root.transform);
70
+ // Force matrix to update
71
+ root.updateTransform();
72
+ var maxScreenSpaceError = settings.maximumScreenSpaceError;
73
+ if (maxScreenSpaceError || maxScreenSpaceError == 0) {
74
+ cTileset.maximumScreenSpaceError = maxScreenSpaceError;
75
+ }
76
+ }
77
+ else {
78
+ throw ("Not implemented.");
79
+ }
80
+ }
81
+ TilesetRenderEngine.ApplySettings = ApplySettings;
82
+ function Render(params) {
83
+ var api = params.apiGetter.getApi(params.apiGetter.accountId, params.apiGetter.env);
84
+ if (params.tileset.type == bruce_models_1.Tileset.EType.Cad) {
85
+ var cTileset_1 = new Cesium.Cesium3DTileset({
86
+ url: bruce_models_1.Tileset.GetPublicFileUrl(api, params.tileset.id, "tileset.json") + "?generation=" + params.tileset.generateVersion
87
+ });
88
+ params.viewer.scene.primitives.add(cTileset_1);
89
+ cTileset_1.readyPromise.then(function () {
90
+ ApplySettings(cTileset_1, params.tileset);
91
+ });
92
+ return cTileset_1;
93
+ }
94
+ else {
95
+ throw ("Not implemented.");
96
+ }
97
+ }
98
+ TilesetRenderEngine.Render = Render;
99
+ var CadStyler = /** @class */ (function () {
100
+ function CadStyler(api, cTileset, fallbackStyleId, styleMapping) {
101
+ this.disposed = false;
102
+ this.loadedEntities = {};
103
+ this.styleMappingLoaded = false;
104
+ this.styleMappingsLoaded = {};
105
+ this.fallbackStyle = null;
106
+ this.runningQueues = 0;
107
+ this.recordLoadQueue = [];
108
+ this.recordCheckQueue = [];
109
+ this.api = api;
110
+ this.cTileset = cTileset;
111
+ this.fallbackStyleId = fallbackStyleId;
112
+ this.styleMapping = styleMapping;
113
+ this.loadStyles();
114
+ }
115
+ Object.defineProperty(CadStyler.prototype, "Disposed", {
116
+ get: function () {
117
+ return this.disposed;
118
+ },
119
+ enumerable: false,
120
+ configurable: true
121
+ });
122
+ CadStyler.prototype.QueueEntities = function (entities) {
123
+ for (var i = 0; i < entities.length; i++) {
124
+ var entity = entities[i];
125
+ this.queueTilesetFeatureStyle(entity);
126
+ }
127
+ if (this.recordLoadQueue.length > 0) {
128
+ this.processQueue();
129
+ }
130
+ };
131
+ CadStyler.prototype.processQueue = function () {
132
+ return __awaiter(this, void 0, void 0, function () {
133
+ var MAX_BATCHES, BATCH_DELAY, batch, rerun, entityIds, entities, _loop_1, this_1, i;
134
+ var _this = this;
135
+ return __generator(this, function (_a) {
136
+ switch (_a.label) {
137
+ case 0:
138
+ MAX_BATCHES = 2;
139
+ BATCH_DELAY = 200;
140
+ if (this.runningQueues >= MAX_BATCHES) {
141
+ return [2 /*return*/];
142
+ }
143
+ else if (this.disposed) {
144
+ return [2 /*return*/];
145
+ }
146
+ this.runningQueues += 1;
147
+ batch = [];
148
+ rerun = false;
149
+ _a.label = 1;
150
+ case 1:
151
+ _a.trys.push([1, , 4, 5]);
152
+ batch = this.getEntitiesForQueue();
153
+ entityIds = batch.map(function (x) { return x.entityId; });
154
+ if (!(entityIds.length > 0)) return [3 /*break*/, 3];
155
+ return [4 /*yield*/, bruce_models_1.Entity.GetListByIds(this.api, entityIds)];
156
+ case 2:
157
+ entities = _a.sent();
158
+ _loop_1 = function (i) {
159
+ var record = entities[i];
160
+ var feature = batch.find(function (x) { var _a; return (x === null || x === void 0 ? void 0 : x.entityId) == ((_a = record === null || record === void 0 ? void 0 : record.Bruce) === null || _a === void 0 ? void 0 : _a.ID); });
161
+ if (feature) {
162
+ this_1.styleTilesetFeatureFullData(feature, record);
163
+ }
164
+ };
165
+ this_1 = this;
166
+ for (i = 0; i < entities.length; i++) {
167
+ _loop_1(i);
168
+ }
169
+ rerun = batch.length > 0;
170
+ _a.label = 3;
171
+ case 3: return [3 /*break*/, 5];
172
+ case 4:
173
+ setTimeout(function () {
174
+ _this.runningQueues -= 1;
175
+ if (rerun) {
176
+ _this.processQueue();
177
+ }
178
+ }, BATCH_DELAY);
179
+ return [7 /*endfinally*/];
180
+ case 5: return [2 /*return*/];
181
+ }
182
+ });
183
+ });
184
+ };
185
+ CadStyler.prototype.getEntitiesForQueue = function () {
186
+ var BATCH_SIZE = 30;
187
+ var batchHashes = this.recordLoadQueue.splice(0, BATCH_SIZE);
188
+ var entities = [];
189
+ for (var i = 0; i < batchHashes.length; i++) {
190
+ var id = batchHashes[i];
191
+ var entity = this.loadedEntities[id];
192
+ if (entity) {
193
+ entities.push(entity);
194
+ }
195
+ }
196
+ return entities;
197
+ };
198
+ CadStyler.prototype.Dispose = function () {
199
+ if (this.disposed) {
200
+ return;
201
+ }
202
+ this.disposed = true;
203
+ clearInterval(this.queueLoadInterval);
204
+ clearInterval(this.queueCheckInterval);
205
+ };
206
+ CadStyler.prototype.loadStyles = function () {
207
+ var _a, _b;
208
+ return __awaiter(this, void 0, void 0, function () {
209
+ var fallbackStyleId, data, e_1, styleMapping, modelTree, entityTypeIds, _loop_2, i, i, styleMap, styleId, entityType, e_2, data, e_3;
210
+ return __generator(this, function (_c) {
211
+ switch (_c.label) {
212
+ case 0:
213
+ fallbackStyleId = this.fallbackStyleId;
214
+ if (!(fallbackStyleId && fallbackStyleId > 0)) return [3 /*break*/, 4];
215
+ _c.label = 1;
216
+ case 1:
217
+ _c.trys.push([1, 3, , 4]);
218
+ return [4 /*yield*/, bruce_models_1.Style.Get(this.api, fallbackStyleId)];
219
+ case 2:
220
+ data = _c.sent();
221
+ this.fallbackStyle = data;
222
+ return [3 /*break*/, 4];
223
+ case 3:
224
+ e_1 = _c.sent();
225
+ console.error(e_1);
226
+ return [3 /*break*/, 4];
227
+ case 4:
228
+ styleMapping = this.styleMapping;
229
+ if (!styleMapping) {
230
+ styleMapping = [];
231
+ }
232
+ this.styleMapping = styleMapping;
233
+ // It is default style.
234
+ // We have to get all possible entity type ids and append them to mapping.
235
+ if (!fallbackStyleId) {
236
+ try {
237
+ modelTree = (_b = (_a = this.cTileset) === null || _a === void 0 ? void 0 : _a.extensions) === null || _b === void 0 ? void 0 : _b.modelTree;
238
+ if (modelTree) {
239
+ entityTypeIds = this.getEntityTypeIdsFromModelTree(modelTree);
240
+ _loop_2 = function (i) {
241
+ var entityTypeId = entityTypeIds[i];
242
+ if (styleMapping.findIndex(function (x) { return x.EntityTypeID == entityTypeId; }) <= -1) {
243
+ styleMapping.push({
244
+ EntityTypeID: entityTypeId,
245
+ StyleID: null,
246
+ style: null
247
+ });
248
+ }
249
+ };
250
+ for (i = 0; i < entityTypeIds.length; i++) {
251
+ _loop_2(i);
252
+ }
253
+ }
254
+ }
255
+ catch (e) {
256
+ console.log(e);
257
+ }
258
+ }
259
+ i = 0;
260
+ _c.label = 5;
261
+ case 5:
262
+ if (!(i < styleMapping.length)) return [3 /*break*/, 15];
263
+ if (this.disposed) {
264
+ return [3 /*break*/, 15];
265
+ }
266
+ styleMap = styleMapping[i];
267
+ if (!!styleMap.style) return [3 /*break*/, 13];
268
+ styleId = styleMap.StyleID;
269
+ if (!!styleId) return [3 /*break*/, 9];
270
+ _c.label = 6;
271
+ case 6:
272
+ _c.trys.push([6, 8, , 9]);
273
+ return [4 /*yield*/, bruce_models_1.EntityType.Get(this.api, styleMap.EntityTypeID)];
274
+ case 7:
275
+ entityType = _c.sent();
276
+ styleId = entityType === null || entityType === void 0 ? void 0 : entityType["DisplaySetting.ID"];
277
+ return [3 /*break*/, 9];
278
+ case 8:
279
+ e_2 = _c.sent();
280
+ console.error(e_2);
281
+ return [3 /*break*/, 9];
282
+ case 9:
283
+ if (!styleId) return [3 /*break*/, 13];
284
+ _c.label = 10;
285
+ case 10:
286
+ _c.trys.push([10, 12, , 13]);
287
+ return [4 /*yield*/, bruce_models_1.Style.Get(this.api, styleId)];
288
+ case 11:
289
+ data = _c.sent();
290
+ if (data) {
291
+ styleMap.style = data;
292
+ styleMap.StyleID = styleId;
293
+ }
294
+ return [3 /*break*/, 13];
295
+ case 12:
296
+ e_3 = _c.sent();
297
+ console.error(e_3);
298
+ return [3 /*break*/, 13];
299
+ case 13:
300
+ if (styleMap.EntityTypeID && styleMap.style) {
301
+ this.styleMappingsLoaded[styleMap.EntityTypeID] = true;
302
+ this.processTilesetFeatureCheckQueue();
303
+ this.processQueue();
304
+ }
305
+ _c.label = 14;
306
+ case 14:
307
+ i++;
308
+ return [3 /*break*/, 5];
309
+ case 15:
310
+ this.styleMappingLoaded = true;
311
+ if (!!this.disposed) return [3 /*break*/, 17];
312
+ return [4 /*yield*/, this.processTilesetFeatureCheckQueue()];
313
+ case 16:
314
+ _c.sent();
315
+ this.processQueue();
316
+ _c.label = 17;
317
+ case 17: return [2 /*return*/];
318
+ }
319
+ });
320
+ });
321
+ };
322
+ CadStyler.prototype.getEntityTypeIdsFromModelTree = function (modelTree) {
323
+ var entityTypeIds = [];
324
+ this.digEntityTypeIdsFromModelTreeBranch(modelTree, entityTypeIds);
325
+ return entityTypeIds;
326
+ };
327
+ CadStyler.prototype.digEntityTypeIdsFromModelTreeBranch = function (branch, arr) {
328
+ if (branch) {
329
+ // Does not yet include this entity type id.
330
+ if (branch.typeId && !arr.includes(branch.typeId)) {
331
+ arr.push(branch.typeId);
332
+ }
333
+ if (branch.children) {
334
+ for (var i = 0; i < branch.children.length; i++) {
335
+ var child = branch.children[i];
336
+ this.digEntityTypeIdsFromModelTreeBranch(child, arr);
337
+ }
338
+ }
339
+ }
340
+ };
341
+ CadStyler.prototype.processTilesetFeatureCheckQueue = function () {
342
+ return __awaiter(this, void 0, void 0, function () {
343
+ var BATCH_CHECK_SIZE;
344
+ var _this = this;
345
+ return __generator(this, function (_a) {
346
+ BATCH_CHECK_SIZE = 1000;
347
+ return [2 /*return*/, new Promise(function (res) {
348
+ clearInterval(_this.queueCheckInterval);
349
+ _this.queueCheckInterval = setInterval(function () {
350
+ if (_this.disposed) {
351
+ clearInterval(_this.queueCheckInterval);
352
+ res();
353
+ return;
354
+ }
355
+ // Construct batch for loaded styles.
356
+ var batch = [];
357
+ if (_this.styleMappingLoaded) {
358
+ batch = _this.recordCheckQueue.splice(0, BATCH_CHECK_SIZE);
359
+ }
360
+ else {
361
+ for (var i = 0; i < _this.recordCheckQueue.length; i++) {
362
+ var hash = _this.recordCheckQueue[i];
363
+ var entity = _this.loadedEntities[hash];
364
+ if (entity) {
365
+ var entityTypeId = entity.entityTypeId;
366
+ if (entityTypeId) {
367
+ if (_this.styleMappingsLoaded[entityTypeId] == true) {
368
+ batch.push(hash);
369
+ }
370
+ }
371
+ }
372
+ if (batch.length >= BATCH_CHECK_SIZE) {
373
+ break;
374
+ }
375
+ }
376
+ var _loop_3 = function (i) {
377
+ var hash = batch[i];
378
+ var index = _this.recordCheckQueue.findIndex(function (x) { return x == hash; });
379
+ if (index > -1) {
380
+ _this.recordCheckQueue.splice(index, 1);
381
+ }
382
+ };
383
+ for (var i = 0; i < batch.length; i++) {
384
+ _loop_3(i);
385
+ }
386
+ }
387
+ if (batch.length) {
388
+ for (var i = 0; i < batch.length; i++) {
389
+ var item = batch[i];
390
+ var entity = _this.loadedEntities[item];
391
+ if (entity) {
392
+ _this.queueTilesetFeatureStyle(entity);
393
+ }
394
+ }
395
+ }
396
+ else {
397
+ clearInterval(_this.queueCheckInterval);
398
+ res();
399
+ }
400
+ }, 50);
401
+ })];
402
+ });
403
+ });
404
+ };
405
+ CadStyler.prototype.queueTilesetFeatureStyle = function (entity) {
406
+ if (this.styleMappingLoaded || this.styleMappingsLoaded[entity.entityTypeId] == true) {
407
+ var needsData = this.getTilesetFeatureNeedsFullData(entity.entityId, entity.entityTypeId);
408
+ if (needsData) {
409
+ if (this.recordLoadQueue.findIndex(function (x) { return x == entity.entityId; })) {
410
+ this.recordLoadQueue.push(entity.entityId);
411
+ }
412
+ }
413
+ else {
414
+ this.styleTilesetFeature(entity);
415
+ }
416
+ }
417
+ else {
418
+ this.recordCheckQueue.push(entity.entityId);
419
+ }
420
+ };
421
+ CadStyler.prototype.styleTilesetFeature = function (entity) {
422
+ this.styleTilesetFeatureFullData(entity, null);
423
+ };
424
+ CadStyler.prototype.styleTilesetFeatureFullData = function (entity, data) {
425
+ var _a;
426
+ var style = this.getTilesetFeatureStyle(entity.entityId, entity.entityTypeId);
427
+ if (!style) {
428
+ return;
429
+ }
430
+ var bColor = (((_a = style.modelStyle) === null || _a === void 0 ? void 0 : _a.fillColor) ? bruce_models_1.Calculator.GetValue(style.modelStyle.fillColor, data, []) : null);
431
+ if (bColor != null) {
432
+ var cColor = colorToCColor(bColor);
433
+ var visual = entity.visual;
434
+ if (visual && visual instanceof Cesium.Cesium3DTileFeature) {
435
+ visual.color = cColor;
436
+ }
437
+ }
438
+ };
439
+ CadStyler.prototype.getTilesetFeatureStyle = function (entityId, entityTypeId) {
440
+ var _a, _b, _c;
441
+ // Locate what style is applicable to the feature.
442
+ var style = null;
443
+ if (entityTypeId) {
444
+ style = (_a = this.styleMapping.find(function (x) { return x.EntityTypeID == entityTypeId; })) === null || _a === void 0 ? void 0 : _a.style;
445
+ }
446
+ if (!style) {
447
+ style = this.fallbackStyle;
448
+ }
449
+ if (!style) {
450
+ return null;
451
+ }
452
+ if (!((_c = (_b = style.Settings) === null || _b === void 0 ? void 0 : _b.modelStyle) === null || _c === void 0 ? void 0 : _c.customize)) {
453
+ return null;
454
+ }
455
+ return style.Settings;
456
+ };
457
+ CadStyler.prototype.getTilesetFeatureNeedsFullData = function (entityId, entityTypeId) {
458
+ var _a;
459
+ var style = this.getTilesetFeatureStyle(entityId, entityTypeId);
460
+ if (!style) {
461
+ return false;
462
+ }
463
+ var fill = (_a = style === null || style === void 0 ? void 0 : style.modelStyle) === null || _a === void 0 ? void 0 : _a.fillColor;
464
+ if (!fill || fill.length <= 0) {
465
+ return false;
466
+ }
467
+ return fill[0].type != 0;
468
+ };
469
+ return CadStyler;
470
+ }());
471
+ TilesetRenderEngine.CadStyler = CadStyler;
472
+ })(TilesetRenderEngine = exports.TilesetRenderEngine || (exports.TilesetRenderEngine = {}));
473
473
  //# sourceMappingURL=tileset-render-engine.js.map