bruce-cesium 3.2.7 → 3.2.9

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.
@@ -1,6 +1,6 @@
1
- import { Cartes, ProjectViewTile, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, DelayQueue, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, Bounds, EntityRelationType, BruceEvent, EntityCoords, Api, EntitySource, MenuItem, EntityRelation, ProgramKey, ENVIRONMENT, AbstractApi, ProjectViewBookmark, EntityAttachment, EntityAttachmentType, EntityAttribute, ProjectView, ProjectViewLegacyTile, Camera } from 'bruce-models';
1
+ import { Cartes, Carto, Entity as Entity$1, Geometry, Tileset, MathUtils, LRUCache, ProjectViewTile, DelayQueue, ZoomControl, Style, EntityTag, Calculator, EntityLod, EntityType, ClientFile, ObjectUtils, Bounds, EntityRelationType, BruceEvent, EntityCoords, Api, EntitySource, MenuItem, EntityRelation, ProgramKey, ENVIRONMENT, AbstractApi, ProjectViewBookmark, EntityAttachment, EntityAttachmentType, EntityAttribute, ProjectView, ProjectViewLegacyTile, Camera } from 'bruce-models';
2
2
  import * as Cesium from 'cesium';
3
- import { Cartographic, JulianDate, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, DistanceDisplayCondition, NearFarScalar, Model, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, SceneMode, Primitive, Cesium3DTileFeature, Cesium3DTileColorBlendMode, HeadingPitchRange, Ion, Cesium3DTileStyle, KmlDataSource, SceneTransforms, OrthographicFrustum, EasingFunction, EllipsoidTerrainProvider, CesiumInspector, defined, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, CesiumTerrainProvider, PolygonPipeline, Cesium3DTileset, Matrix4, Matrix3, IonResource, EllipsoidGeodesic, sampleTerrainMostDetailed, BoundingSphere, GeometryInstance, ScreenSpaceEventHandler, ScreenSpaceEventType, Intersect, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, ColorMaterialProperty } from 'cesium';
3
+ import { Cartographic, Cartesian2, Math as Math$1, Cartesian3, CallbackProperty, Color, HeightReference, Rectangle, SceneMode, DistanceDisplayCondition, NearFarScalar, Model, Entity, HorizontalOrigin, VerticalOrigin, ClassificationType, ArcType, CornerType, ShadowMode, PolygonHierarchy, PolylineGraphics, HeadingPitchRoll, Transforms, ColorBlendMode, JulianDate, Primitive, Cesium3DTileFeature, HeadingPitchRange, Cesium3DTileColorBlendMode, KmlDataSource, Cesium3DTileStyle, Ion, SceneTransforms, EllipsoidTerrainProvider, BingMapsImageryProvider, BingMapsStyle, MapboxImageryProvider, MapboxStyleImageryProvider, ArcGisMapServerImageryProvider, OpenStreetMapImageryProvider, GridImageryProvider, GeographicTilingScheme, ImageryLayer, UrlTemplateImageryProvider, TileMapServiceImageryProvider, IonImageryProvider, CesiumTerrainProvider, PolygonPipeline, EllipsoidGeodesic, sampleTerrainMostDetailed, defined, Cesium3DTileset, Matrix4, Matrix3, IonResource, OrthographicFrustum, EasingFunction, CesiumInspector, ScreenSpaceEventHandler, ScreenSpaceEventType, BoundingSphere, GeometryInstance, Intersect, ModelGraphics, PolygonGraphics, CorridorGraphics, PointGraphics, BillboardGraphics, EllipseGraphics, ColorMaterialProperty } from 'cesium';
4
4
 
5
5
  /*! *****************************************************************************
6
6
  Copyright (c) Microsoft Corporation. All rights reserved.
@@ -484,213 +484,6 @@ var DrawingUtils;
484
484
  DrawingUtils.RaisePos3d = RaisePos3d;
485
485
  })(DrawingUtils || (DrawingUtils = {}));
486
486
 
487
- var CESIUM_INSPECTOR_KEY = "_nextspace_inspector";
488
- var ViewUtils;
489
- (function (ViewUtils) {
490
- function GatherLegacyMapTiles(params) {
491
- var viewer = params.viewer;
492
- var collection = viewer.imageryLayers;
493
- var tiles = [];
494
- for (var i = 0; i < collection.length; i++) {
495
- var layer = collection.get(i);
496
- if (layer._bName) {
497
- tiles.push({
498
- alpha: layer.alpha,
499
- brightness: layer.brightness,
500
- contrast: layer.contrast,
501
- hue: layer.hue,
502
- saturation: layer.saturation,
503
- gamma: layer.gamma,
504
- title: layer._bName,
505
- });
506
- }
507
- }
508
- return {
509
- imagery: tiles.reverse()
510
- };
511
- }
512
- ViewUtils.GatherLegacyMapTiles = GatherLegacyMapTiles;
513
- function GatherLegacyTerrainTile(params) {
514
- var viewer = params.viewer;
515
- var enabled = viewer.terrainProvider;
516
- if (enabled === null || enabled === void 0 ? void 0 : enabled._bName) {
517
- return {
518
- terrain: enabled._bName
519
- };
520
- }
521
- return {
522
- terrain: "flatterrain"
523
- };
524
- }
525
- ViewUtils.GatherLegacyTerrainTile = GatherLegacyTerrainTile;
526
- function GatherMapTiles(params) {
527
- var viewer = params.viewer;
528
- var imagery = viewer.imageryLayers;
529
- var tiles = [];
530
- var _loop_1 = function (i) {
531
- var provider = imagery.get(i);
532
- if (provider._bMeta) {
533
- var idCombo_1 = provider._bMeta.accountId + provider._bMeta.tilesetId;
534
- if (!tiles.find(function (x) { return x.accountId + x.tilesetId === idCombo_1; })) {
535
- tiles.push({
536
- accountId: provider._bMeta.accountId,
537
- tilesetId: provider._bMeta.tilesetId,
538
- alpha: provider.alpha,
539
- brightness: provider.brightness,
540
- contrast: provider.contrast,
541
- hue: provider.hue,
542
- saturation: provider.saturation,
543
- gamma: provider.gamma
544
- });
545
- }
546
- }
547
- };
548
- for (var i = 0; i < imagery.length; i++) {
549
- _loop_1(i);
550
- }
551
- return {
552
- imagery: tiles
553
- };
554
- }
555
- ViewUtils.GatherMapTiles = GatherMapTiles;
556
- function GatherTerrainTile(params) {
557
- var viewer = params.viewer;
558
- var provider = viewer.terrainProvider;
559
- if (provider === null || provider === void 0 ? void 0 : provider._bMeta) {
560
- return {
561
- terrain: {
562
- accountId: provider._bMeta.accountId,
563
- tilesetId: provider._bMeta.tilesetId,
564
- }
565
- };
566
- }
567
- else if (provider instanceof EllipsoidTerrainProvider) {
568
- return {
569
- terrain: {
570
- tilesetId: ProjectViewTile.EDefaultTerrain.FlatTerrain,
571
- accountId: null
572
- }
573
- };
574
- }
575
- return null;
576
- }
577
- ViewUtils.GatherTerrainTile = GatherTerrainTile;
578
- function SetTerrainWireframeStatus(params) {
579
- if (!params.viewer[CESIUM_INSPECTOR_KEY]) {
580
- var InspectorClass = CesiumInspector;
581
- if (InspectorClass) {
582
- var inspector = new InspectorClass(document.createElement("div"), params.viewer.scene);
583
- inspector.container.style.display = "none";
584
- params.viewer[CESIUM_INSPECTOR_KEY] = inspector;
585
- params.viewer.scene.requestRender();
586
- }
587
- }
588
- if (params.viewer[CESIUM_INSPECTOR_KEY]) {
589
- params.viewer[CESIUM_INSPECTOR_KEY].viewModel.wireframe = params.status;
590
- }
591
- }
592
- ViewUtils.SetTerrainWireframeStatus = SetTerrainWireframeStatus;
593
- function GetTerrainWireframeStatus(params) {
594
- var _a, _b;
595
- if (!params.viewer[CESIUM_INSPECTOR_KEY]) {
596
- return false;
597
- }
598
- return (_b = (_a = params.viewer[CESIUM_INSPECTOR_KEY]) === null || _a === void 0 ? void 0 : _a.viewModel) === null || _b === void 0 ? void 0 : _b.wireframe;
599
- }
600
- ViewUtils.GetTerrainWireframeStatus = GetTerrainWireframeStatus;
601
- /**
602
- * Changes between perspective and orthographic view.
603
- * When Cesium stops being bad at picking positions in 2d mode we'll use the flat earth mode instead.
604
- * @param params
605
- */
606
- function Set2dStatus(params) {
607
- var viewer = params.viewer, is2d = params.status, moveCamera = params.moveCamera;
608
- var curLens2d = viewer.camera.frustum instanceof OrthographicFrustum;
609
- if (curLens2d && !is2d) {
610
- viewer.camera.switchToPerspectiveFrustum();
611
- viewer.scene.screenSpaceCameraController.enableTilt = true;
612
- viewer.scene.requestRender();
613
- }
614
- else if (!curLens2d && is2d) {
615
- viewer.camera.switchToOrthographicFrustum();
616
- viewer.scene.screenSpaceCameraController.enableTilt = false;
617
- if (moveCamera != false) {
618
- try {
619
- // Face camera downwards to make it look 2d.
620
- // We want to try make it look at the center-point of the current view.
621
- // If center cannot be calculated then we'll simply raise the camera and face it downwards.
622
- var scene = viewer.scene;
623
- var windowPosition = new Cartesian2(scene.canvas.clientWidth / 2, scene.canvas.clientHeight / 2);
624
- var ray = viewer.camera.getPickRay(windowPosition);
625
- var intersection = scene.globe.pick(ray, scene);
626
- var center = void 0;
627
- if (defined(intersection)) {
628
- center = Cartographic.fromCartesian(intersection);
629
- }
630
- // Use current camera position if we can't calculate the center.
631
- else {
632
- center = Cartographic.fromCartesian(viewer.camera.position);
633
- center.height = 0;
634
- }
635
- center.height = viewer.camera.positionCartographic.height + 100;
636
- viewer.camera.setView({
637
- destination: Cartographic.toCartesian(center),
638
- orientation: {
639
- heading: 0.0,
640
- pitch: Math$1.toRadians(-90.0),
641
- roll: 0.0
642
- }
643
- });
644
- }
645
- catch (e) {
646
- console.error(e);
647
- }
648
- }
649
- viewer.scene.requestRender();
650
- }
651
- }
652
- ViewUtils.Set2dStatus = Set2dStatus;
653
- function Get2dStatus(params) {
654
- var viewer = params.viewer;
655
- return viewer.camera.frustum instanceof OrthographicFrustum;
656
- }
657
- ViewUtils.Get2dStatus = Get2dStatus;
658
- function SetLockedCameraStatus(params) {
659
- var viewer = params.viewer, status = params.status;
660
- var scene = viewer === null || viewer === void 0 ? void 0 : viewer.scene;
661
- if (!scene) {
662
- return;
663
- }
664
- if (status) {
665
- scene.screenSpaceCameraController.enableInputs = false;
666
- scene.screenSpaceCameraController.enableTranslate = false;
667
- scene.screenSpaceCameraController.enableZoom = false;
668
- scene.screenSpaceCameraController.enableRotate = false;
669
- scene.screenSpaceCameraController.enableTilt = false;
670
- }
671
- else {
672
- scene.screenSpaceCameraController.enableInputs = true;
673
- scene.screenSpaceCameraController.enableTranslate = true;
674
- scene.screenSpaceCameraController.enableZoom = true;
675
- scene.screenSpaceCameraController.enableRotate = true;
676
- if (!ViewUtils.Get2dStatus({ viewer: viewer })) {
677
- scene.screenSpaceCameraController.enableTilt = true;
678
- }
679
- }
680
- viewer.scene.requestRender();
681
- }
682
- ViewUtils.SetLockedCameraStatus = SetLockedCameraStatus;
683
- function GetLockedCameraStatus(params) {
684
- var _a;
685
- var scene = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a.scene;
686
- if (!scene) {
687
- return false;
688
- }
689
- return !scene.screenSpaceCameraController.enableTranslate;
690
- }
691
- ViewUtils.GetLockedCameraStatus = GetLockedCameraStatus;
692
- })(ViewUtils || (ViewUtils = {}));
693
-
694
487
  /**
695
488
  * Returns if a given visual can be styled by this utility.
696
489
  * @param viewer
@@ -1311,6 +1104,81 @@ function GetValue(viewer, obj) {
1311
1104
  }
1312
1105
  return obj;
1313
1106
  }
1107
+ /**
1108
+ * Returns location information from a given tileset feature.
1109
+ * This works well with OSM.
1110
+ * @param feature
1111
+ * @returns
1112
+ */
1113
+ var getLocationFromFeature = function (feature) {
1114
+ var _a;
1115
+ var prepareLatitude = function (propName, value) {
1116
+ value = +value;
1117
+ // Check to see if the lat is in valid degrees, if not, try convert from radians.
1118
+ if (value < -90 || value > 90) {
1119
+ value = Math$1.toDegrees(value);
1120
+ }
1121
+ // If the value is really small we'll assume it's in radians.
1122
+ // "cesium#blah" properties are always in degrees. No need to check.
1123
+ if (value < 0.9 && !propName.startsWith("cesium#")) {
1124
+ value = Math$1.toDegrees(value);
1125
+ }
1126
+ return value;
1127
+ };
1128
+ var prepareLongitude = function (propName, value) {
1129
+ value = +value;
1130
+ // Check to see if the lon is in valid degrees, if not, try convert from radians.
1131
+ if (value < -180 || value > 180) {
1132
+ value = Math$1.toDegrees(value);
1133
+ }
1134
+ // If the value is really small we'll assume it's in radians.
1135
+ // "cesium#blah" properties are always in degrees. No need to check.
1136
+ if (value < 0.9 && !propName.startsWith("cesium#")) {
1137
+ value = Math$1.toDegrees(value);
1138
+ }
1139
+ return value;
1140
+ };
1141
+ var result = {
1142
+ location: {
1143
+ latitude: null,
1144
+ longitude: null,
1145
+ altitude: 0
1146
+ },
1147
+ isClamped: true,
1148
+ radius: null
1149
+ };
1150
+ // 'getPropertyIds' = new version of Cesium, 'getPropertyNames' = old version.
1151
+ var featureAny = feature;
1152
+ var propertyNames = featureAny.getPropertyNames ? featureAny.getPropertyNames() : (_a = featureAny.getPropertyIds) === null || _a === void 0 ? void 0 : _a.call(featureAny);
1153
+ propertyNames = [].concat(propertyNames);
1154
+ for (var i = 0; i < propertyNames.length; i++) {
1155
+ var propName = propertyNames[i];
1156
+ var propLower = propName.toLowerCase();
1157
+ if (propLower.includes("latitude")) {
1158
+ result.location.latitude = prepareLatitude(propName, feature.getProperty(propName));
1159
+ continue;
1160
+ }
1161
+ if (propLower.includes("longitude")) {
1162
+ result.location.longitude = prepareLongitude(propName, feature.getProperty(propName));
1163
+ continue;
1164
+ }
1165
+ if (propLower.includes("height")) {
1166
+ result.radius = +feature.getProperty(propName);
1167
+ continue;
1168
+ }
1169
+ if (propLower.includes("terrain")) {
1170
+ result.location.altitude = +feature.getProperty(propName);
1171
+ if (!result.location.altitude) {
1172
+ result.location.altitude = 0;
1173
+ }
1174
+ continue;
1175
+ }
1176
+ }
1177
+ if (result.location.latitude == null || result.location.longitude == null) {
1178
+ return null;
1179
+ }
1180
+ return result;
1181
+ };
1314
1182
  var EntityUtils;
1315
1183
  (function (EntityUtils) {
1316
1184
  /**
@@ -1320,12 +1188,11 @@ var EntityUtils;
1320
1188
  * @param params
1321
1189
  */
1322
1190
  function GetLocation(params) {
1323
- var _a;
1324
1191
  return __awaiter(this, void 0, void 0, function () {
1325
- var api, viewer, samples, visualRegister, minimumAlt, paddingAlt, MAX_DISTANCE_BETWEEN_SAMPLES, MAX_TERRAIN_SAMPLES, terrainSamples, MAX_API_CALLS, apiCalls, MAX_VALID_SAMPLES, validSamples, MIN_RECT_DIAGONAL_LENGTH, data, spheres, processPosHeight, ensureHeightRefs, getEntityPositions, allPosses, i, sample, samplePosses, valid, j, samplePos, k, allPos, distance, rect, factor, marginX, marginY, diagonalLen, terrData, posCarto, height, MIN_POSSES_LEN, allPointSphere, rectSphere, combinedSphere;
1192
+ var api, viewer, samples, visualRegister, minimumAlt, paddingAlt, MAX_DISTANCE_BETWEEN_SAMPLES, MAX_TERRAIN_SAMPLES, terrainSamples, MAX_API_CALLS, apiCalls, MAX_VALID_SAMPLES, validSamples, data, spheres, processPosHeight, ensureHeightRefs, getEntityPositions, allPosses, i, sample, samplePosses, valid, j, samplePos, k, allPos, distance, rect, factor, marginX, marginY, carto, i, pos, radius, sphere, allPointSphere, rectSphere, combinedSphere;
1326
1193
  var _this = this;
1327
- return __generator(this, function (_b) {
1328
- switch (_b.label) {
1194
+ return __generator(this, function (_a) {
1195
+ switch (_a.label) {
1329
1196
  case 0:
1330
1197
  api = params.api, viewer = params.viewer, samples = params.samples, visualRegister = params.visualRegister, minimumAlt = params.minimumAlt, paddingAlt = params.paddingAlt;
1331
1198
  if (!paddingAlt) {
@@ -1338,10 +1205,6 @@ var EntityUtils;
1338
1205
  apiCalls = 0;
1339
1206
  MAX_VALID_SAMPLES = 20;
1340
1207
  validSamples = 0;
1341
- MIN_RECT_DIAGONAL_LENGTH = isNaN(minimumAlt) || minimumAlt == null ? 0 : minimumAlt * 10;
1342
- if (MIN_RECT_DIAGONAL_LENGTH < 1500) {
1343
- MIN_RECT_DIAGONAL_LENGTH = 1500;
1344
- }
1345
1208
  data = {
1346
1209
  pos3d: null,
1347
1210
  rectangle: null,
@@ -1439,7 +1302,7 @@ var EntityUtils;
1439
1302
  case 0:
1440
1303
  entityId = sample.entityId, entity = sample.entity, tileset = sample.tileset, tilesetId = sample.tilesetId;
1441
1304
  evaluateRendered = function () { return __awaiter(_this, void 0, void 0, function () {
1442
- var rego, posses, visual, visualHeightRef, hierarchy, hPosses, hPossesSample, step, i, pPosses, pPossesSample, step, i, pPosses, pPossesSample, step, i, pos3d_1, toAdjust, modelExt, sphere;
1305
+ var rego, posses, parts, i, part, visualHeightRef, hierarchy, hPosses, hPossesSample, step, i_1, pPosses, pPossesSample, step, i_2, pPosses, pPossesSample, step, i_3, pos3d_1, toAdjust, modelExt, sphere, data_1, pos3d_2, toAdjust, sphere;
1443
1306
  return __generator(this, function (_a) {
1444
1307
  switch (_a.label) {
1445
1308
  case 0:
@@ -1447,102 +1310,130 @@ var EntityUtils;
1447
1310
  entityId: sample.entityId,
1448
1311
  }) : null;
1449
1312
  posses = [];
1450
- if (!((rego === null || rego === void 0 ? void 0 : rego.visual) instanceof Entity)) return [3 /*break*/, 14];
1451
- visual = rego.visual;
1452
- visualHeightRef = HeightReference.RELATIVE_TO_GROUND;
1453
- if (!visual.model) return [3 /*break*/, 1];
1454
- visualHeightRef = GetValue(viewer, visual.model.heightReference);
1455
- return [3 /*break*/, 12];
1313
+ parts = GatherEntity({
1314
+ entity: rego === null || rego === void 0 ? void 0 : rego.visual,
1315
+ });
1316
+ i = 0;
1317
+ _a.label = 1;
1456
1318
  case 1:
1457
- if (!visual.polygon) return [3 /*break*/, 4];
1458
- visualHeightRef = GetValue(viewer, visual.polygon.heightReference);
1459
- hierarchy = GetValue(viewer, visual.polygon.hierarchy);
1460
- if (!(hierarchy === null || hierarchy === void 0 ? void 0 : hierarchy.positions)) return [3 /*break*/, 3];
1319
+ if (!(i < parts.length)) return [3 /*break*/, 19];
1320
+ part = parts[i];
1321
+ if (!(part instanceof Entity)) return [3 /*break*/, 16];
1322
+ visualHeightRef = HeightReference.RELATIVE_TO_GROUND;
1323
+ if (!part.model) return [3 /*break*/, 2];
1324
+ visualHeightRef = GetValue(viewer, part.model.heightReference);
1325
+ return [3 /*break*/, 13];
1326
+ case 2:
1327
+ if (!part.polygon) return [3 /*break*/, 5];
1328
+ visualHeightRef = GetValue(viewer, part.polygon.heightReference);
1329
+ hierarchy = GetValue(viewer, part.polygon.hierarchy);
1330
+ if (!(hierarchy === null || hierarchy === void 0 ? void 0 : hierarchy.positions)) return [3 /*break*/, 4];
1461
1331
  hPosses = hierarchy.positions.map(function (x) { return x.clone ? x.clone() : x; });
1462
1332
  hPossesSample = [];
1463
1333
  step = Math.max(1, Math.floor(hPosses.length / 5));
1464
- for (i = 0; i < hPosses.length; i += step) {
1465
- hPossesSample.push(hPosses[i]);
1334
+ for (i_1 = 0; i_1 < hPosses.length; i_1 += step) {
1335
+ hPossesSample.push(hPosses[i_1]);
1466
1336
  }
1467
1337
  return [4 /*yield*/, ensureHeightRefs(hPossesSample, __assign(__assign({}, sample), { heightRef: visualHeightRef }))];
1468
- case 2:
1338
+ case 3:
1469
1339
  _a.sent();
1470
1340
  posses = posses.concat(hPossesSample);
1471
- _a.label = 3;
1472
- case 3: return [3 /*break*/, 12];
1473
- case 4:
1474
- if (!visual.polyline) return [3 /*break*/, 7];
1475
- visualHeightRef = GetValue(viewer, visual.polyline.clampToGround) ?
1341
+ _a.label = 4;
1342
+ case 4: return [3 /*break*/, 13];
1343
+ case 5:
1344
+ if (!part.polyline) return [3 /*break*/, 8];
1345
+ visualHeightRef = GetValue(viewer, part.polyline.clampToGround) ?
1476
1346
  HeightReference.CLAMP_TO_GROUND : HeightReference.NONE;
1477
- pPosses = GetValue(viewer, visual.polyline.positions);
1478
- if (!(pPosses === null || pPosses === void 0 ? void 0 : pPosses.length)) return [3 /*break*/, 6];
1347
+ pPosses = GetValue(viewer, part.polyline.positions);
1348
+ if (!(pPosses === null || pPosses === void 0 ? void 0 : pPosses.length)) return [3 /*break*/, 7];
1479
1349
  // Grab 5 positions from the polyline at varied indexes.
1480
1350
  pPosses = pPosses.map(function (x) { return x.clone ? x.clone() : x; });
1481
1351
  pPossesSample = [];
1482
1352
  step = Math.max(1, Math.floor(pPosses.length / 5));
1483
- for (i = 0; i < pPosses.length; i += step) {
1484
- pPossesSample.push(pPosses[i]);
1353
+ for (i_2 = 0; i_2 < pPosses.length; i_2 += step) {
1354
+ pPossesSample.push(pPosses[i_2]);
1485
1355
  }
1486
1356
  return [4 /*yield*/, ensureHeightRefs(pPossesSample, __assign(__assign({}, sample), { heightRef: visualHeightRef }))];
1487
- case 5:
1357
+ case 6:
1488
1358
  _a.sent();
1489
1359
  posses = posses.concat(pPossesSample);
1490
- _a.label = 6;
1491
- case 6: return [3 /*break*/, 12];
1492
- case 7:
1493
- if (!visual.billboard) return [3 /*break*/, 8];
1494
- visualHeightRef = GetValue(viewer, visual.billboard.heightReference);
1495
- return [3 /*break*/, 12];
1360
+ _a.label = 7;
1361
+ case 7: return [3 /*break*/, 13];
1496
1362
  case 8:
1497
- if (!visual.corridor) return [3 /*break*/, 11];
1498
- visualHeightRef = GetValue(viewer, visual.corridor.heightReference);
1499
- pPosses = GetValue(viewer, visual.corridor.positions);
1500
- if (!(pPosses === null || pPosses === void 0 ? void 0 : pPosses.length)) return [3 /*break*/, 10];
1363
+ if (!part.billboard) return [3 /*break*/, 9];
1364
+ visualHeightRef = GetValue(viewer, part.billboard.heightReference);
1365
+ return [3 /*break*/, 13];
1366
+ case 9:
1367
+ if (!part.corridor) return [3 /*break*/, 12];
1368
+ visualHeightRef = GetValue(viewer, part.corridor.heightReference);
1369
+ pPosses = GetValue(viewer, part.corridor.positions);
1370
+ if (!(pPosses === null || pPosses === void 0 ? void 0 : pPosses.length)) return [3 /*break*/, 11];
1501
1371
  // Grab 5 positions from the corridor at varied indexes.
1502
1372
  pPosses = pPosses.map(function (x) { return x.clone ? x.clone() : x; });
1503
1373
  pPossesSample = [];
1504
1374
  step = Math.max(1, Math.floor(pPosses.length / 5));
1505
- for (i = 0; i < pPosses.length; i += step) {
1506
- pPossesSample.push(pPosses[i]);
1375
+ for (i_3 = 0; i_3 < pPosses.length; i_3 += step) {
1376
+ pPossesSample.push(pPosses[i_3]);
1507
1377
  }
1508
1378
  return [4 /*yield*/, ensureHeightRefs(pPossesSample, __assign(__assign({}, sample), { heightRef: visualHeightRef }))];
1509
- case 9:
1379
+ case 10:
1510
1380
  _a.sent();
1511
1381
  posses = posses.concat(pPossesSample);
1512
- _a.label = 10;
1513
- case 10: return [3 /*break*/, 12];
1514
- case 11:
1515
- if (visual.ellipse) {
1516
- visualHeightRef = GetValue(viewer, visual.ellipse.heightReference);
1382
+ _a.label = 11;
1383
+ case 11: return [3 /*break*/, 13];
1384
+ case 12:
1385
+ if (part.ellipse) {
1386
+ visualHeightRef = GetValue(viewer, part.ellipse.heightReference);
1517
1387
  }
1518
- else if (visual.point) {
1519
- visualHeightRef = GetValue(viewer, visual.point.heightReference);
1388
+ else if (part.point) {
1389
+ visualHeightRef = GetValue(viewer, part.point.heightReference);
1520
1390
  }
1521
- _a.label = 12;
1522
- case 12:
1523
- pos3d_1 = GetValue(viewer, visual.position);
1524
- if (!(pos3d_1 === null || pos3d_1 === void 0 ? void 0 : pos3d_1.x)) return [3 /*break*/, 14];
1391
+ _a.label = 13;
1392
+ case 13:
1393
+ if (!(part.point || part.model || part.billboard || part.ellipse)) return [3 /*break*/, 15];
1394
+ pos3d_1 = GetValue(viewer, part.position);
1395
+ if (!(pos3d_1 === null || pos3d_1 === void 0 ? void 0 : pos3d_1.x)) return [3 /*break*/, 15];
1525
1396
  toAdjust = [pos3d_1];
1526
1397
  return [4 /*yield*/, ensureHeightRefs(toAdjust, __assign(__assign({}, sample), { heightRef: visualHeightRef }))];
1527
- case 13:
1398
+ case 14:
1528
1399
  _a.sent();
1529
1400
  pos3d_1 = toAdjust[0];
1530
1401
  posses.push(pos3d_1);
1531
- if (visual.model) {
1532
- modelExt = visual.model;
1402
+ if (part.model) {
1403
+ modelExt = part.model;
1533
1404
  if (modelExt._radius && modelExt._radius > -1) {
1534
1405
  sphere = BoundingSphere.fromPoints([pos3d_1]);
1535
1406
  sphere.radius = modelExt._radius;
1536
1407
  spheres.push(sphere);
1537
1408
  }
1538
1409
  }
1539
- _a.label = 14;
1540
- case 14: return [2 /*return*/, posses];
1410
+ _a.label = 15;
1411
+ case 15: return [3 /*break*/, 18];
1412
+ case 16:
1413
+ if (!(part instanceof Cesium3DTileFeature)) return [3 /*break*/, 18];
1414
+ data_1 = getLocationFromFeature(part);
1415
+ if (!(data_1 != null)) return [3 /*break*/, 18];
1416
+ pos3d_2 = Cartesian3.fromDegrees(data_1.location.longitude, data_1.location.latitude, data_1.location.altitude);
1417
+ toAdjust = [pos3d_2];
1418
+ return [4 /*yield*/, ensureHeightRefs(toAdjust, __assign(__assign({}, sample), { heightRef: data_1.isClamped ? HeightReference.CLAMP_TO_GROUND : HeightReference.NONE }))];
1419
+ case 17:
1420
+ _a.sent();
1421
+ pos3d_2 = toAdjust[0];
1422
+ posses.push(pos3d_2);
1423
+ if (data_1.radius != null && !isNaN(data_1.radius)) {
1424
+ sphere = new BoundingSphere(pos3d_2, data_1.radius);
1425
+ spheres.push(sphere);
1426
+ }
1427
+ _a.label = 18;
1428
+ case 18:
1429
+ i++;
1430
+ return [3 /*break*/, 1];
1431
+ case 19: return [2 /*return*/, posses];
1541
1432
  }
1542
1433
  });
1543
1434
  }); };
1544
1435
  evaluateRecord = function () { return __awaiter(_this, void 0, void 0, function () {
1545
- var posses, location_1, latitude, longitude, pos3d_2, pointStr, points, point, pos3d_3, lineStr, points, pPosses, pRings, boundary, points, pPosses, point, bPosses;
1436
+ var posses, location_1, latitude, longitude, pos3d_3, pointStr, points, point, pos3d_4, lineStr, points, pPosses, pRings, boundary, points, pPosses, point, bPosses;
1546
1437
  return __generator(this, function (_a) {
1547
1438
  switch (_a.label) {
1548
1439
  case 0:
@@ -1553,8 +1444,8 @@ var EntityUtils;
1553
1444
  longitude = EnsureNumber(location_1.longitude);
1554
1445
  // Disallowing exact 0.
1555
1446
  if (latitude || longitude) {
1556
- pos3d_2 = Cartesian3.fromDegrees(longitude, latitude, EnsureNumber(location_1.altitude));
1557
- posses.push(pos3d_2);
1447
+ pos3d_3 = Cartesian3.fromDegrees(longitude, latitude, EnsureNumber(location_1.altitude));
1448
+ posses.push(pos3d_3);
1558
1449
  }
1559
1450
  }
1560
1451
  if (!(entity.geometry && typeof entity.geometry == "object")) return [3 /*break*/, 4];
@@ -1563,8 +1454,8 @@ var EntityUtils;
1563
1454
  points = Geometry.ParsePoints(pointStr);
1564
1455
  point = points.length > 0 ? points[0] : null;
1565
1456
  if (point && Carto.ValidateCarto(point)) {
1566
- pos3d_3 = Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));
1567
- posses.push(pos3d_3);
1457
+ pos3d_4 = Cartesian3.fromDegrees(EnsureNumber(point.longitude), EnsureNumber(point.latitude), EnsureNumber(point.altitude));
1458
+ posses.push(pos3d_4);
1568
1459
  }
1569
1460
  }
1570
1461
  lineStr = entity.geometry.LineString;
@@ -1755,13 +1646,13 @@ var EntityUtils;
1755
1646
  }); };
1756
1647
  allPosses = [];
1757
1648
  i = 0;
1758
- _b.label = 1;
1649
+ _a.label = 1;
1759
1650
  case 1:
1760
1651
  if (!(i < samples.length)) return [3 /*break*/, 4];
1761
1652
  sample = samples[i];
1762
1653
  return [4 /*yield*/, getEntityPositions(sample)];
1763
1654
  case 2:
1764
- samplePosses = _b.sent();
1655
+ samplePosses = _a.sent();
1765
1656
  if (samplePosses === null || samplePosses === void 0 ? void 0 : samplePosses.length) {
1766
1657
  valid = !(allPosses === null || allPosses === void 0 ? void 0 : allPosses.length);
1767
1658
  if (!valid) {
@@ -1788,7 +1679,7 @@ var EntityUtils;
1788
1679
  }
1789
1680
  }
1790
1681
  }
1791
- _b.label = 3;
1682
+ _a.label = 3;
1792
1683
  case 3:
1793
1684
  i++;
1794
1685
  return [3 /*break*/, 1];
@@ -1802,25 +1693,29 @@ var EntityUtils;
1802
1693
  rect.west -= marginX;
1803
1694
  rect.north += marginY;
1804
1695
  rect.south -= marginY;
1805
- diagonalLen = Cartesian3.distance(Cartesian3.fromRadians(rect.west, rect.north), Cartesian3.fromRadians(rect.east, rect.south));
1806
- terrData = ViewUtils.GatherTerrainTile({
1807
- viewer: viewer
1808
- });
1809
- if (((_a = terrData === null || terrData === void 0 ? void 0 : terrData.terrain) === null || _a === void 0 ? void 0 : _a.tilesetId) == ProjectViewTile.EDefaultTerrain.FlatTerrain) {
1810
- MIN_RECT_DIAGONAL_LENGTH = 0;
1696
+ data.rectangle = rect;
1697
+ carto = Rectangle.center(rect);
1698
+ carto.height = 0;
1699
+ for (i = 0; i < allPosses.length; i++) {
1700
+ pos = allPosses[i];
1701
+ carto.height += Cartographic.fromCartesian(pos).height;
1702
+ }
1703
+ if (carto.height != 0) {
1704
+ carto.height /= allPosses.length;
1811
1705
  }
1812
- posCarto = Cartographic.fromCartesian(allPosses[0]);
1813
- height = posCarto.height + (diagonalLen * 1.5);
1814
- data.pos3d = Cartesian3.fromRadians(posCarto.longitude, posCarto.latitude, height);
1815
- MIN_POSSES_LEN = 10;
1816
- if (diagonalLen >= MIN_RECT_DIAGONAL_LENGTH && allPosses.length >= MIN_POSSES_LEN) {
1817
- data.rectangle = rect;
1706
+ data.pos3d = Cartesian3.fromRadians(carto.longitude, carto.latitude, carto.height);
1707
+ radius = Cartesian3.distance(Cartesian3.fromRadians(rect.west, rect.north), Cartesian3.fromRadians(rect.east, rect.south));
1708
+ if (radius != 0) {
1709
+ radius /= 2;
1818
1710
  }
1711
+ sphere = new BoundingSphere(data.pos3d, radius);
1712
+ spheres.push(sphere);
1713
+ data.sphere = sphere;
1819
1714
  }
1820
1715
  else if (allPosses.length == 1) {
1821
1716
  data.pos3d = allPosses[0];
1822
1717
  }
1823
- if (spheres.length) {
1718
+ if ((data.rectangle && spheres.length > 1) || (!data.rectangle && spheres.length > 0)) {
1824
1719
  allPointSphere = BoundingSphere.fromPoints(allPosses);
1825
1720
  spheres.push(allPointSphere);
1826
1721
  if (data.rectangle) {
@@ -1852,9 +1747,9 @@ var EntityUtils;
1852
1747
  if ((rego === null || rego === void 0 ? void 0 : rego.visual) instanceof Entity) {
1853
1748
  var visual = rego.visual;
1854
1749
  if (visual.position) {
1855
- var pos3d_4 = GetValue(viewer, visual.position);
1750
+ var pos3d_5 = GetValue(viewer, visual.position);
1856
1751
  // Fix height reference.
1857
- if (pos3d_4 === null || pos3d_4 === void 0 ? void 0 : pos3d_4.x) {
1752
+ if (pos3d_5 === null || pos3d_5 === void 0 ? void 0 : pos3d_5.x) {
1858
1753
  var visualHeightRef = HeightReference.RELATIVE_TO_GROUND;
1859
1754
  if (visual.model) {
1860
1755
  visualHeightRef = GetValue(viewer, visual.model.heightReference);
@@ -1881,7 +1776,7 @@ var EntityUtils;
1881
1776
  return DrawingUtils.EnsurePosHeight({
1882
1777
  desiredHeightRef: params.returnHeightRef,
1883
1778
  heightRef: visualHeightRef,
1884
- pos3d: pos3d_4,
1779
+ pos3d: pos3d_5,
1885
1780
  viewer: viewer
1886
1781
  });
1887
1782
  }
@@ -2544,6 +2439,213 @@ var RenderManager;
2544
2439
  RenderManager.GetZoomMinMax = GetZoomMinMax;
2545
2440
  })(RenderManager || (RenderManager = {}));
2546
2441
 
2442
+ var CESIUM_INSPECTOR_KEY = "_nextspace_inspector";
2443
+ var ViewUtils;
2444
+ (function (ViewUtils) {
2445
+ function GatherLegacyMapTiles(params) {
2446
+ var viewer = params.viewer;
2447
+ var collection = viewer.imageryLayers;
2448
+ var tiles = [];
2449
+ for (var i = 0; i < collection.length; i++) {
2450
+ var layer = collection.get(i);
2451
+ if (layer._bName) {
2452
+ tiles.push({
2453
+ alpha: layer.alpha,
2454
+ brightness: layer.brightness,
2455
+ contrast: layer.contrast,
2456
+ hue: layer.hue,
2457
+ saturation: layer.saturation,
2458
+ gamma: layer.gamma,
2459
+ title: layer._bName,
2460
+ });
2461
+ }
2462
+ }
2463
+ return {
2464
+ imagery: tiles.reverse()
2465
+ };
2466
+ }
2467
+ ViewUtils.GatherLegacyMapTiles = GatherLegacyMapTiles;
2468
+ function GatherLegacyTerrainTile(params) {
2469
+ var viewer = params.viewer;
2470
+ var enabled = viewer.terrainProvider;
2471
+ if (enabled === null || enabled === void 0 ? void 0 : enabled._bName) {
2472
+ return {
2473
+ terrain: enabled._bName
2474
+ };
2475
+ }
2476
+ return {
2477
+ terrain: "flatterrain"
2478
+ };
2479
+ }
2480
+ ViewUtils.GatherLegacyTerrainTile = GatherLegacyTerrainTile;
2481
+ function GatherMapTiles(params) {
2482
+ var viewer = params.viewer;
2483
+ var imagery = viewer.imageryLayers;
2484
+ var tiles = [];
2485
+ var _loop_1 = function (i) {
2486
+ var provider = imagery.get(i);
2487
+ if (provider._bMeta) {
2488
+ var idCombo_1 = provider._bMeta.accountId + provider._bMeta.tilesetId;
2489
+ if (!tiles.find(function (x) { return x.accountId + x.tilesetId === idCombo_1; })) {
2490
+ tiles.push({
2491
+ accountId: provider._bMeta.accountId,
2492
+ tilesetId: provider._bMeta.tilesetId,
2493
+ alpha: provider.alpha,
2494
+ brightness: provider.brightness,
2495
+ contrast: provider.contrast,
2496
+ hue: provider.hue,
2497
+ saturation: provider.saturation,
2498
+ gamma: provider.gamma
2499
+ });
2500
+ }
2501
+ }
2502
+ };
2503
+ for (var i = 0; i < imagery.length; i++) {
2504
+ _loop_1(i);
2505
+ }
2506
+ return {
2507
+ imagery: tiles
2508
+ };
2509
+ }
2510
+ ViewUtils.GatherMapTiles = GatherMapTiles;
2511
+ function GatherTerrainTile(params) {
2512
+ var viewer = params.viewer;
2513
+ var provider = viewer.terrainProvider;
2514
+ if (provider === null || provider === void 0 ? void 0 : provider._bMeta) {
2515
+ return {
2516
+ terrain: {
2517
+ accountId: provider._bMeta.accountId,
2518
+ tilesetId: provider._bMeta.tilesetId,
2519
+ }
2520
+ };
2521
+ }
2522
+ else if (provider instanceof EllipsoidTerrainProvider) {
2523
+ return {
2524
+ terrain: {
2525
+ tilesetId: ProjectViewTile.EDefaultTerrain.FlatTerrain,
2526
+ accountId: null
2527
+ }
2528
+ };
2529
+ }
2530
+ return null;
2531
+ }
2532
+ ViewUtils.GatherTerrainTile = GatherTerrainTile;
2533
+ function SetTerrainWireframeStatus(params) {
2534
+ if (!params.viewer[CESIUM_INSPECTOR_KEY]) {
2535
+ var InspectorClass = CesiumInspector;
2536
+ if (InspectorClass) {
2537
+ var inspector = new InspectorClass(document.createElement("div"), params.viewer.scene);
2538
+ inspector.container.style.display = "none";
2539
+ params.viewer[CESIUM_INSPECTOR_KEY] = inspector;
2540
+ params.viewer.scene.requestRender();
2541
+ }
2542
+ }
2543
+ if (params.viewer[CESIUM_INSPECTOR_KEY]) {
2544
+ params.viewer[CESIUM_INSPECTOR_KEY].viewModel.wireframe = params.status;
2545
+ }
2546
+ }
2547
+ ViewUtils.SetTerrainWireframeStatus = SetTerrainWireframeStatus;
2548
+ function GetTerrainWireframeStatus(params) {
2549
+ var _a, _b;
2550
+ if (!params.viewer[CESIUM_INSPECTOR_KEY]) {
2551
+ return false;
2552
+ }
2553
+ return (_b = (_a = params.viewer[CESIUM_INSPECTOR_KEY]) === null || _a === void 0 ? void 0 : _a.viewModel) === null || _b === void 0 ? void 0 : _b.wireframe;
2554
+ }
2555
+ ViewUtils.GetTerrainWireframeStatus = GetTerrainWireframeStatus;
2556
+ /**
2557
+ * Changes between perspective and orthographic view.
2558
+ * When Cesium stops being bad at picking positions in 2d mode we'll use the flat earth mode instead.
2559
+ * @param params
2560
+ */
2561
+ function Set2dStatus(params) {
2562
+ var viewer = params.viewer, is2d = params.status, moveCamera = params.moveCamera;
2563
+ var curLens2d = viewer.camera.frustum instanceof OrthographicFrustum;
2564
+ if (curLens2d && !is2d) {
2565
+ viewer.camera.switchToPerspectiveFrustum();
2566
+ viewer.scene.screenSpaceCameraController.enableTilt = true;
2567
+ viewer.scene.requestRender();
2568
+ }
2569
+ else if (!curLens2d && is2d) {
2570
+ viewer.camera.switchToOrthographicFrustum();
2571
+ viewer.scene.screenSpaceCameraController.enableTilt = false;
2572
+ if (moveCamera != false) {
2573
+ try {
2574
+ // Face camera downwards to make it look 2d.
2575
+ // We want to try make it look at the center-point of the current view.
2576
+ // If center cannot be calculated then we'll simply raise the camera and face it downwards.
2577
+ var scene = viewer.scene;
2578
+ var windowPosition = new Cartesian2(scene.canvas.clientWidth / 2, scene.canvas.clientHeight / 2);
2579
+ var ray = viewer.camera.getPickRay(windowPosition);
2580
+ var intersection = scene.globe.pick(ray, scene);
2581
+ var center = void 0;
2582
+ if (defined(intersection)) {
2583
+ center = Cartographic.fromCartesian(intersection);
2584
+ }
2585
+ // Use current camera position if we can't calculate the center.
2586
+ else {
2587
+ center = Cartographic.fromCartesian(viewer.camera.position);
2588
+ center.height = 0;
2589
+ }
2590
+ center.height = viewer.camera.positionCartographic.height + 100;
2591
+ viewer.camera.setView({
2592
+ destination: Cartographic.toCartesian(center),
2593
+ orientation: {
2594
+ heading: 0.0,
2595
+ pitch: Math$1.toRadians(-90.0),
2596
+ roll: 0.0
2597
+ }
2598
+ });
2599
+ }
2600
+ catch (e) {
2601
+ console.error(e);
2602
+ }
2603
+ }
2604
+ viewer.scene.requestRender();
2605
+ }
2606
+ }
2607
+ ViewUtils.Set2dStatus = Set2dStatus;
2608
+ function Get2dStatus(params) {
2609
+ var viewer = params.viewer;
2610
+ return viewer.camera.frustum instanceof OrthographicFrustum;
2611
+ }
2612
+ ViewUtils.Get2dStatus = Get2dStatus;
2613
+ function SetLockedCameraStatus(params) {
2614
+ var viewer = params.viewer, status = params.status;
2615
+ var scene = viewer === null || viewer === void 0 ? void 0 : viewer.scene;
2616
+ if (!scene) {
2617
+ return;
2618
+ }
2619
+ if (status) {
2620
+ scene.screenSpaceCameraController.enableInputs = false;
2621
+ scene.screenSpaceCameraController.enableTranslate = false;
2622
+ scene.screenSpaceCameraController.enableZoom = false;
2623
+ scene.screenSpaceCameraController.enableRotate = false;
2624
+ scene.screenSpaceCameraController.enableTilt = false;
2625
+ }
2626
+ else {
2627
+ scene.screenSpaceCameraController.enableInputs = true;
2628
+ scene.screenSpaceCameraController.enableTranslate = true;
2629
+ scene.screenSpaceCameraController.enableZoom = true;
2630
+ scene.screenSpaceCameraController.enableRotate = true;
2631
+ if (!ViewUtils.Get2dStatus({ viewer: viewer })) {
2632
+ scene.screenSpaceCameraController.enableTilt = true;
2633
+ }
2634
+ }
2635
+ viewer.scene.requestRender();
2636
+ }
2637
+ ViewUtils.SetLockedCameraStatus = SetLockedCameraStatus;
2638
+ function GetLockedCameraStatus(params) {
2639
+ var _a;
2640
+ var scene = (_a = params.viewer) === null || _a === void 0 ? void 0 : _a.scene;
2641
+ if (!scene) {
2642
+ return false;
2643
+ }
2644
+ return !scene.screenSpaceCameraController.enableTranslate;
2645
+ }
2646
+ ViewUtils.GetLockedCameraStatus = GetLockedCameraStatus;
2647
+ })(ViewUtils || (ViewUtils = {}));
2648
+
2547
2649
  var MODEL_MIN_RADIUS = 10;
2548
2650
  var POINT_MIN_RADIUS = 15;
2549
2651
  // If a shape has more than this amount of points, we'll avoid checking it because it will take too long.
@@ -19901,7 +20003,7 @@ var CesiumViewMonitor;
19901
20003
  CesiumViewMonitor$$1.Monitor = Monitor;
19902
20004
  })(CesiumViewMonitor || (CesiumViewMonitor = {}));
19903
20005
 
19904
- var VERSION$1 = "3.2.7";
20006
+ var VERSION$1 = "3.2.9";
19905
20007
 
19906
20008
  export { VERSION$1 as VERSION, CesiumViewMonitor, ViewerUtils, MenuItemManager, EntityRenderEngine, MenuItemCreator, VisualsRegister, RenderManager, EntitiesIdsRenderManager, EntitiesLoadedRenderManager, EntitiesRenderManager, EntityRenderManager, TilesetCadRenderManager, TilesetArbRenderManager, TilesetEntitiesRenderManager, TilesetOsmRenderManager, TilesetPointcloudRenderManager, TilesetGooglePhotosRenderManager, DataSourceStaticKmlManager, RelationsRenderManager, SharedGetters, CesiumParabola, EntityLabel, ViewRenderEngine, TileRenderEngine, TilesetRenderEngine, CESIUM_INSPECTOR_KEY, ViewUtils, DrawingUtils, MeasureUtils, EntityUtils, Draw3dPolygon, Draw3dPolyline };
19907
20009
  //# sourceMappingURL=bruce-cesium.es5.js.map