bruce-cesium 7.6.4 → 7.6.5

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 (26) hide show
  1. package/README.md +2 -27
  2. package/dist/bruce-cesium.es5.js +661 -29
  3. package/dist/bruce-cesium.es5.js.map +1 -1
  4. package/dist/bruce-cesium.umd.js +659 -27
  5. package/dist/bruce-cesium.umd.js.map +1 -1
  6. package/dist/lib/bruce-cesium.js +1 -1
  7. package/dist/lib/rendering/entity-render-engine-point-orientation.js +422 -0
  8. package/dist/lib/rendering/entity-render-engine-point-orientation.js.map +1 -0
  9. package/dist/lib/rendering/entity-render-engine-point.js +43 -3
  10. package/dist/lib/rendering/entity-render-engine-point.js.map +1 -1
  11. package/dist/lib/rendering/render-managers/common/entity-label-group.js +53 -17
  12. package/dist/lib/rendering/render-managers/common/entity-label-group.js.map +1 -1
  13. package/dist/lib/rendering/render-managers/common/entity-label.js +51 -3
  14. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -1
  15. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +3 -1
  16. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
  17. package/dist/lib/rendering/view-render-engine.js +2 -2
  18. package/dist/lib/rendering/view-render-engine.js.map +1 -1
  19. package/dist/lib/utils/entity-utils.js +96 -0
  20. package/dist/lib/utils/entity-utils.js.map +1 -1
  21. package/dist/types/bruce-cesium.d.ts +1 -1
  22. package/dist/types/rendering/entity-render-engine-point-orientation.d.ts +59 -0
  23. package/dist/types/rendering/render-managers/common/entity-label-group.d.ts +2 -0
  24. package/dist/types/rendering/render-managers/common/entity-label.d.ts +3 -0
  25. package/dist/types/utils/entity-utils.d.ts +29 -0
  26. package/package.json +2 -2
@@ -91,7 +91,7 @@ __exportStar(require("./widgets/widget-info-view"), exports);
91
91
  __exportStar(require("./widgets/widget-left-panel"), exports);
92
92
  __exportStar(require("./widgets/widget-nav-compass"), exports);
93
93
  __exportStar(require("./widgets/widget-view-bar"), exports);
94
- exports.VERSION = "7.6.4";
94
+ exports.VERSION = "7.6.5";
95
95
  /**
96
96
  * Updates the environment instance used by bruce-cesium to one specified.
97
97
  * This can be used to ensure that the instance a parent is referencing is shared between bruce-cesium, bruce-models, and the parent app.
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntityRenderEnginePointOrientation = void 0;
4
+ const bruce_models_1 = require("bruce-models");
5
+ const Cesium = require("cesium");
6
+ const entity_render_engine_1 = require("./entity-render-engine");
7
+ const drawing_utils_1 = require("../utils/drawing-utils");
8
+ const view_utils_1 = require("../utils/view-utils");
9
+ const cesium_entity_styler_1 = require("../utils/cesium-entity-styler");
10
+ const cesium_utils_1 = require("../internal/cesium-utils");
11
+ /**
12
+ * Draws the orientation effect a point style can ask for, an open ring whose pointer shows which way the Entity faces.
13
+ */
14
+ var EntityRenderEnginePointOrientation;
15
+ (function (EntityRenderEnginePointOrientation) {
16
+ // Compared as the wire string, since an older bruce-models in the host has no EPointEffectType at runtime.
17
+ EntityRenderEnginePointOrientation.ORIENTATION_EFFECT = "ORIENTATION";
18
+ // Clearance between the glyph and the ring, and the smallest ring, matching entity-label.ts's icon ring.
19
+ EntityRenderEnginePointOrientation.RING_PADDING = 4;
20
+ EntityRenderEnginePointOrientation.RING_MIN = 10;
21
+ const RING_STROKE = 2;
22
+ const RING_CSS = "rgba(255, 255, 255, 0.8)";
23
+ const RING_GLOW_CSS = "rgba(0, 0, 0, 0.3)";
24
+ const RING_GLOW_BLUR = 5;
25
+ // The pointer reaches TIP_BASE + TIP_GROWTH * sqrt(radius) px past the ring, so it grows slower than the ring.
26
+ const TIP_BASE = 3;
27
+ const TIP_GROWTH = 2.2;
28
+ // Share of the circle kept around the heading. Label rings keep 0.35, but the pointer uses most of it.
29
+ const ARC_FRACTION = 0.5;
30
+ // The arc always runs at least this far past where the pointer leaves it, so it still reads as a ring.
31
+ const ARC_TAIL = Math.PI / 30;
32
+ const ARC_STEPS = 12;
33
+ // Copies of the cap outline nested toward its centre, enough for 2 px strokes to read as a fill.
34
+ const CAP_FILL_LOOPS = 4;
35
+ // Canvas oversampling so the stroke stays crisp on high density screens.
36
+ const RING_DPR = 2;
37
+ const _ringCache = new bruce_models_1.LRUCache(50);
38
+ /*
39
+ * Whether a point style asks for the orientation effect.
40
+ */
41
+ function IsEnabled(style) {
42
+ var _a;
43
+ return ((_a = style === null || style === void 0 ? void 0 : style.effect) === null || _a === void 0 ? void 0 : _a.type) === EntityRenderEnginePointOrientation.ORIENTATION_EFFECT;
44
+ }
45
+ EntityRenderEnginePointOrientation.IsEnabled = IsEnabled;
46
+ /*
47
+ * The Entity's orientation from Bruce.Transform, or null when it has no usable heading to show.
48
+ */
49
+ function GetOrientation(entity) {
50
+ var _a;
51
+ const transform = (_a = entity === null || entity === void 0 ? void 0 : entity.Bruce) === null || _a === void 0 ? void 0 : _a.Transform;
52
+ const raw = transform === null || transform === void 0 ? void 0 : transform.heading;
53
+ if (raw == null ||
54
+ (typeof raw == "string" && !raw.trim())) {
55
+ return null;
56
+ }
57
+ const heading = Number(raw);
58
+ if (!isFinite(heading)) {
59
+ return null;
60
+ }
61
+ const pitch = Number(transform.pitch);
62
+ const roll = Number(transform.roll);
63
+ return {
64
+ heading,
65
+ pitch: isFinite(pitch) ? pitch : 0,
66
+ roll: isFinite(roll) ? roll : 0
67
+ };
68
+ }
69
+ EntityRenderEnginePointOrientation.GetOrientation = GetOrientation;
70
+ /*
71
+ * Ring radius in px for a glyph of the given radius.
72
+ */
73
+ function GetRingRadius(glyphRadius) {
74
+ const radius = Number(glyphRadius);
75
+ return Math.max(EntityRenderEnginePointOrientation.RING_MIN, (isFinite(radius) ? radius : 0) + EntityRenderEnginePointOrientation.RING_PADDING);
76
+ }
77
+ EntityRenderEnginePointOrientation.GetRingRadius = GetRingRadius;
78
+ /*
79
+ * How far the pointer's tip sits from the centre, as a multiple of the ring radius.
80
+ */
81
+ function GetTipRatio(ringRadius) {
82
+ return 1 + (TIP_BASE + TIP_GROWTH * Math.sqrt(ringRadius)) / ringRadius;
83
+ }
84
+ EntityRenderEnginePointOrientation.GetTipRatio = GetTipRatio;
85
+ /*
86
+ * The open ring in a unit frame, u forward and v right: arc tail, tangent to the tip, tangent back, arc tail.
87
+ * The pointer's sides are tangents to the circle, so the arc runs into the tip with no visible joint.
88
+ */
89
+ function GetOutline(tipRatio) {
90
+ const touch = Math.acos(1 / tipRatio);
91
+ const half = Math.max(Math.PI * ARC_FRACTION, touch + ARC_TAIL);
92
+ const points = [];
93
+ for (let i = 0; i <= ARC_STEPS; i++) {
94
+ const phi = -half + (half - touch) * i / ARC_STEPS;
95
+ points.push([Math.cos(phi), Math.sin(phi)]);
96
+ }
97
+ points.push([tipRatio, 0]);
98
+ for (let i = 0; i <= ARC_STEPS; i++) {
99
+ const phi = touch + (half - touch) * i / ARC_STEPS;
100
+ points.push([Math.cos(phi), Math.sin(phi)]);
101
+ }
102
+ return points;
103
+ }
104
+ EntityRenderEnginePointOrientation.GetOutline = GetOutline;
105
+ /*
106
+ * The filled cap between the pointer's sides and the circle, in the same unit frame as GetOutline.
107
+ */
108
+ function GetCap(tipRatio) {
109
+ const touch = Math.acos(1 / tipRatio);
110
+ const points = [[tipRatio, 0]];
111
+ for (let i = 0; i <= ARC_STEPS; i++) {
112
+ const phi = touch - 2 * touch * i / ARC_STEPS;
113
+ points.push([Math.cos(phi), Math.sin(phi)]);
114
+ }
115
+ return points;
116
+ }
117
+ EntityRenderEnginePointOrientation.GetCap = GetCap;
118
+ /*
119
+ * The outline as one path with its cap filled by nested copies of the cap's outline, for a polyline that cannot fill.
120
+ * Back and forth strokes would need sharp reversals, which Cesium mitres into spikes; nested loops only turn at the
121
+ * cap's own corners. Like GetOutline it starts and ends on the arc tails.
122
+ */
123
+ function GetFilledOutline(tipRatio) {
124
+ const outline = GetOutline(tipRatio);
125
+ const tipIndex = outline.findIndex(([u, v]) => u === tipRatio && v === 0);
126
+ const cap = GetCap(tipRatio);
127
+ const cu = cap.reduce((sum, [u]) => sum + u, 0) / cap.length;
128
+ const cv = cap.reduce((sum, [, v]) => sum + v, 0) / cap.length;
129
+ const loops = [];
130
+ for (let i = 0; i < CAP_FILL_LOOPS; i++) {
131
+ const k = 1 - i / CAP_FILL_LOOPS;
132
+ for (const [u, v] of cap) {
133
+ loops.push([cu + (u - cu) * k, cv + (v - cv) * k]);
134
+ }
135
+ }
136
+ loops.push([tipRatio, 0]);
137
+ return [...outline.slice(0, tipIndex + 1), ...loops, ...outline.slice(tipIndex + 1)];
138
+ }
139
+ EntityRenderEnginePointOrientation.GetFilledOutline = GetFilledOutline;
140
+ /*
141
+ * Draws the ring for a glyph as a billboard image pointing up, or null where there is no canvas to draw on.
142
+ */
143
+ function CreateRingBillboard(glyphRadius) {
144
+ var _a;
145
+ const radius = GetRingRadius(glyphRadius);
146
+ const key = radius.toFixed(1);
147
+ const cached = _ringCache.Get(key);
148
+ if (cached) {
149
+ return cached;
150
+ }
151
+ const tipRatio = GetTipRatio(radius);
152
+ const size = Math.ceil((radius * tipRatio + RING_STROKE + RING_GLOW_BLUR) * 2);
153
+ const canvas = document.createElement("canvas");
154
+ canvas.width = size * RING_DPR;
155
+ canvas.height = size * RING_DPR;
156
+ const context = (_a = canvas.getContext) === null || _a === void 0 ? void 0 : _a.call(canvas, "2d");
157
+ if (!context) {
158
+ return null;
159
+ }
160
+ context.scale(RING_DPR, RING_DPR);
161
+ // Forward is up the image, right is to the right.
162
+ const toCanvas = ([u, v]) => [size / 2 + v * radius, size / 2 - u * radius];
163
+ const trace = (points, close) => {
164
+ context.beginPath();
165
+ points.map(toCanvas).forEach(([x, y], i) => i ? context.lineTo(x, y) : context.moveTo(x, y));
166
+ if (close) {
167
+ context.closePath();
168
+ }
169
+ };
170
+ context.shadowColor = RING_GLOW_CSS;
171
+ context.shadowBlur = RING_GLOW_BLUR;
172
+ context.fillStyle = RING_CSS;
173
+ trace(GetCap(tipRatio), true);
174
+ context.fill();
175
+ context.strokeStyle = RING_CSS;
176
+ context.lineWidth = RING_STROKE;
177
+ context.lineJoin = "round";
178
+ context.lineCap = "round";
179
+ trace(GetOutline(tipRatio), false);
180
+ context.stroke();
181
+ const ring = {
182
+ canvasDataUri: canvas.toDataURL("image/png"),
183
+ size
184
+ };
185
+ _ringCache.Set(key, ring);
186
+ return ring;
187
+ }
188
+ EntityRenderEnginePointOrientation.CreateRingBillboard = CreateRingBillboard;
189
+ /*
190
+ * World space unit vector along the local horizon at a heading in degrees clockwise from north.
191
+ */
192
+ function GetHeadingAxis(pos3d, heading) {
193
+ const enu = Cesium.Transforms.eastNorthUpToFixedFrame(pos3d);
194
+ const rad = Cesium.Math.toRadians(heading);
195
+ const local = new Cesium.Cartesian3(Math.sin(rad), Math.cos(rad), 0);
196
+ const world = Cesium.Matrix4.multiplyByPointAsVector(enu, local, new Cesium.Cartesian3());
197
+ return Cesium.Cartesian3.normalize(world, world);
198
+ }
199
+ EntityRenderEnginePointOrientation.GetHeadingAxis = GetHeadingAxis;
200
+ /*
201
+ * World space forward and right unit vectors for a full orientation, which span the plane the 3D ring lies in.
202
+ */
203
+ function GetBasis(pos3d, orientation) {
204
+ const h = Cesium.Math.toRadians(orientation.heading);
205
+ const p = Cesium.Math.toRadians(orientation.pitch);
206
+ const r = Cesium.Math.toRadians(orientation.roll);
207
+ const forward = new Cesium.Cartesian3(Math.sin(h) * Math.cos(p), Math.cos(h) * Math.cos(p), Math.sin(p));
208
+ const level = new Cesium.Cartesian3(Math.cos(h), -Math.sin(h), 0);
209
+ const up = Cesium.Cartesian3.cross(level, forward, new Cesium.Cartesian3());
210
+ // Positive roll lowers the right side.
211
+ const right = Cesium.Cartesian3.add(Cesium.Cartesian3.multiplyByScalar(level, Math.cos(r), new Cesium.Cartesian3()), Cesium.Cartesian3.multiplyByScalar(up, -Math.sin(r), new Cesium.Cartesian3()), new Cesium.Cartesian3());
212
+ const enu = Cesium.Transforms.eastNorthUpToFixedFrame(pos3d);
213
+ const toWorld = (local) => {
214
+ const world = Cesium.Matrix4.multiplyByPointAsVector(enu, local, new Cesium.Cartesian3());
215
+ return Cesium.Cartesian3.normalize(world, world);
216
+ };
217
+ return { forward: toWorld(forward), right: toWorld(right) };
218
+ }
219
+ EntityRenderEnginePointOrientation.GetBasis = GetBasis;
220
+ /*
221
+ * Counter-clockwise billboard rotation that turns its up edge along a world direction as the camera sees it.
222
+ * Cesium's alignedAxis squares its angle and drops perspective, up to 160 degrees out when side on.
223
+ */
224
+ function GetScreenRotation(viewer, pos3d, axis) {
225
+ const transforms = Cesium.SceneTransforms;
226
+ const project = transforms.wgs84ToWindowCoordinates || transforms.worldToWindowCoordinates;
227
+ const camera = viewer.camera.positionWC || viewer.camera.position;
228
+ // A step proportional to distance keeps the two projections a few pixels apart at any zoom.
229
+ const step = Math.max(0.01, Cesium.Cartesian3.distance(camera, pos3d) * 0.01);
230
+ const ahead = Cesium.Cartesian3.add(pos3d, Cesium.Cartesian3.multiplyByScalar(axis, step, new Cesium.Cartesian3()), new Cesium.Cartesian3());
231
+ const from = project(viewer.scene, pos3d, new Cesium.Cartesian2());
232
+ const to = project(viewer.scene, ahead, new Cesium.Cartesian2());
233
+ if (!from || !to) {
234
+ return null;
235
+ }
236
+ const dx = to.x - from.x;
237
+ const dy = to.y - from.y;
238
+ if (Math.abs(dx) + Math.abs(dy) < 1e-6) {
239
+ return null;
240
+ }
241
+ return Math.atan2(-dx, -dy);
242
+ }
243
+ EntityRenderEnginePointOrientation.GetScreenRotation = GetScreenRotation;
244
+ /*
245
+ * Metres one CSS pixel covers at a position, since billboard sizes and polyline widths are CSS pixels.
246
+ */
247
+ function getMetresPerPixel(viewer, pos3d) {
248
+ const scene = viewer.scene;
249
+ const sphere = new Cesium.BoundingSphere(pos3d, 0);
250
+ const perBufferPixel = viewer.camera.getPixelSize(sphere, scene.drawingBufferWidth, scene.drawingBufferHeight);
251
+ return perBufferPixel * (scene.pixelRatio || 1);
252
+ }
253
+ /*
254
+ * Where the parent is drawn this frame, as an absolute position, or null while its ground is not known yet.
255
+ */
256
+ function getDrawnPos3d(viewer, parent, heightRef) {
257
+ const pos3d = (0, cesium_utils_1.GetCValue)(viewer, parent.position);
258
+ if (!pos3d) {
259
+ return null;
260
+ }
261
+ return drawing_utils_1.DrawingUtils.GetDrawnPos3d({
262
+ viewer,
263
+ heightRef,
264
+ pos3d,
265
+ terrainId: view_utils_1.ViewUtils.GetTerrainCacheId(viewer)
266
+ });
267
+ }
268
+ /*
269
+ * Creates or updates the ring for a point, or returns null when it cannot be drawn.
270
+ * Clamped to ground it shows only the heading as a billboard, otherwise the full 3D orientation.
271
+ */
272
+ function Render(params) {
273
+ const { viewer, parent, orientation, heightRef } = params;
274
+ if (!viewer || !parent || !orientation) {
275
+ return null;
276
+ }
277
+ const clamped = heightRef == Cesium.HeightReference.CLAMP_TO_GROUND;
278
+ const ring = clamped ? renderBillboard(params) : renderPolyline(params);
279
+ if (ring) {
280
+ ring._orientationRing = true;
281
+ ring._noEdit = true;
282
+ ring._parentEntity = parent;
283
+ }
284
+ return ring;
285
+ }
286
+ EntityRenderEnginePointOrientation.Render = Render;
287
+ /*
288
+ * The ring among a point's sibling graphics, if it has one.
289
+ */
290
+ function FindRing(siblings) {
291
+ return (siblings === null || siblings === void 0 ? void 0 : siblings.find(x => x === null || x === void 0 ? void 0 : x._orientationRing)) || null;
292
+ }
293
+ EntityRenderEnginePointOrientation.FindRing = FindRing;
294
+ /*
295
+ * The heading only ring, a billboard turned every frame to point along the ground.
296
+ */
297
+ function renderBillboard(params) {
298
+ var _a;
299
+ const { viewer, parent, orientation, heightRef } = params;
300
+ const image = CreateRingBillboard(params.glyphRadius);
301
+ if (!image) {
302
+ return null;
303
+ }
304
+ let rotation = 0;
305
+ const rotationProp = new Cesium.CallbackProperty(() => {
306
+ const drawn = getDrawnPos3d(viewer, parent, heightRef);
307
+ if (drawn) {
308
+ const next = GetScreenRotation(viewer, drawn, GetHeadingAxis(drawn, orientation.heading));
309
+ if (next != null) {
310
+ rotation = next;
311
+ }
312
+ }
313
+ return rotation;
314
+ }, false);
315
+ const position = new Cesium.CallbackProperty(() => (0, cesium_utils_1.GetCValue)(viewer, parent.position), false);
316
+ const displayCondition = entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance);
317
+ const pixelOffset = new Cesium.Cartesian2(0, -(params.glyphOffsetY || 0));
318
+ let ring = ((_a = params.existing) === null || _a === void 0 ? void 0 : _a.billboard) ? params.existing : null;
319
+ if (!ring) {
320
+ ring = new Cesium.Entity({
321
+ id: bruce_models_1.ObjectUtils.UId(15),
322
+ billboard: {
323
+ image: image.canvasDataUri,
324
+ width: image.size,
325
+ height: image.size,
326
+ rotation: rotationProp,
327
+ heightReference: heightRef,
328
+ pixelOffset,
329
+ distanceDisplayCondition: displayCondition
330
+ },
331
+ position,
332
+ show: true
333
+ });
334
+ }
335
+ else {
336
+ ring.billboard.image = new Cesium.ConstantProperty(image.canvasDataUri);
337
+ ring.billboard.width = new Cesium.ConstantProperty(image.size);
338
+ ring.billboard.height = new Cesium.ConstantProperty(image.size);
339
+ ring.billboard.rotation = rotationProp;
340
+ ring.billboard.heightReference = new Cesium.ConstantProperty(heightRef);
341
+ ring.billboard.pixelOffset = new Cesium.ConstantProperty(pixelOffset);
342
+ ring.billboard.distanceDisplayCondition = new Cesium.ConstantProperty(displayCondition);
343
+ ring.position = position;
344
+ ring.show = true;
345
+ }
346
+ cesium_entity_styler_1.CesiumEntityStyler.BakeDefaultColor({
347
+ entity: ring,
348
+ viewer,
349
+ colors: {
350
+ "billboard": Cesium.Color.WHITE
351
+ },
352
+ refresh: false
353
+ });
354
+ return ring;
355
+ }
356
+ /*
357
+ * The full orientation ring, a polyline in the orientation's plane, resized each frame to hold its screen size.
358
+ */
359
+ function renderPolyline(params) {
360
+ var _a;
361
+ const { viewer, parent, orientation, heightRef } = params;
362
+ const radiusPx = GetRingRadius(params.glyphRadius);
363
+ const outline = GetFilledOutline(GetTipRatio(radiusPx));
364
+ const color = Cesium.Color.fromCssColorString(RING_CSS);
365
+ let last = [];
366
+ let basisAt = null;
367
+ let basis = null;
368
+ const positions = new Cesium.CallbackProperty(() => {
369
+ const drawn = getDrawnPos3d(viewer, parent, heightRef);
370
+ if (!drawn) {
371
+ return last;
372
+ }
373
+ // The local frame only changes when the point moves.
374
+ if (!basisAt || !Cesium.Cartesian3.equals(basisAt, drawn)) {
375
+ basis = GetBasis(drawn, orientation);
376
+ basisAt = Cesium.Cartesian3.clone(drawn);
377
+ }
378
+ const scale = radiusPx * getMetresPerPixel(viewer, drawn);
379
+ if (!isFinite(scale) || scale <= 0) {
380
+ return last;
381
+ }
382
+ last = outline.map(([u, v]) => {
383
+ const point = Cesium.Cartesian3.multiplyByScalar(basis.forward, u * scale, new Cesium.Cartesian3());
384
+ Cesium.Cartesian3.add(point, Cesium.Cartesian3.multiplyByScalar(basis.right, v * scale, new Cesium.Cartesian3()), point);
385
+ return Cesium.Cartesian3.add(point, drawn, point);
386
+ });
387
+ return last;
388
+ }, false);
389
+ const displayCondition = entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance);
390
+ let ring = ((_a = params.existing) === null || _a === void 0 ? void 0 : _a.polyline) ? params.existing : null;
391
+ if (!ring) {
392
+ ring = new Cesium.Entity({
393
+ id: bruce_models_1.ObjectUtils.UId(15),
394
+ polyline: {
395
+ positions,
396
+ width: RING_STROKE,
397
+ material: color,
398
+ arcType: Cesium.ArcType.NONE,
399
+ // The positions are already absolute. Unset reads as clamped to the culler, which then grounds the ring.
400
+ clampToGround: false,
401
+ distanceDisplayCondition: displayCondition
402
+ },
403
+ position: new Cesium.CallbackProperty(() => (0, cesium_utils_1.GetCValue)(viewer, parent.position), false),
404
+ show: true
405
+ });
406
+ }
407
+ else {
408
+ ring.polyline.positions = positions;
409
+ ring.polyline.distanceDisplayCondition = new Cesium.ConstantProperty(displayCondition);
410
+ ring.show = true;
411
+ }
412
+ cesium_entity_styler_1.CesiumEntityStyler.SetDefaultColor({
413
+ color,
414
+ entity: ring,
415
+ viewer,
416
+ override: true,
417
+ requestRender: false
418
+ });
419
+ return ring;
420
+ }
421
+ })(EntityRenderEnginePointOrientation = exports.EntityRenderEnginePointOrientation || (exports.EntityRenderEnginePointOrientation = {}));
422
+ //# sourceMappingURL=entity-render-engine-point-orientation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-render-engine-point-orientation.js","sourceRoot":"","sources":["../../../src/rendering/entity-render-engine-point-orientation.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,7 @@ const limited_log_1 = require("../internal/limited-log");
12
12
  const image_utils_1 = require("../internal/image-utils");
13
13
  const cesium_entity_styler_1 = require("../utils/cesium-entity-styler");
14
14
  const view_utils_1 = require("../utils/view-utils");
15
+ const entity_render_engine_point_orientation_1 = require("./entity-render-engine-point-orientation");
15
16
  /**
16
17
  * Handles point rendering.
17
18
  */
@@ -53,14 +54,21 @@ var EntityRenderEnginePoint;
53
54
  let animatePosition = null;
54
55
  let shouldShowTrack = false;
55
56
  let trackStyle = null;
57
+ // The drawn glyph's half size and how far its centre sits above the anchor, for sizing the orientation ring.
58
+ let glyph = null;
59
+ // The orientation ring a previous render left, which the effect decides to keep or remove at the end.
60
+ let existingRing = null;
56
61
  const prepareExistingGraphic = (cEntity, maxSiblings = 0) => {
57
62
  // Gather entity in case previous version had sibling graphics we no longer need.
58
63
  const parts = entity_utils_1.EntityUtils.GatherEntity({
59
64
  entity: cEntity,
60
65
  });
61
66
  if (parts.length > 1) {
67
+ // The ring is held apart so the sibling count below only ever trims the track.
68
+ existingRing = entity_render_engine_point_orientation_1.EntityRenderEnginePointOrientation.FindRing(cEntity._siblingGraphics);
69
+ const others = (cEntity._siblingGraphics || []).filter(x => x !== existingRing);
62
70
  // We'll cull all except the allowed number of siblings.
63
- cEntity._siblingGraphics = cEntity._siblingGraphics.slice(0, maxSiblings);
71
+ cEntity._siblingGraphics = others.slice(0, maxSiblings).concat(existingRing ? [existingRing] : []);
64
72
  // We'll remove all that aren't in the allowed (direct) list.
65
73
  for (let i = 0; i < parts.length - 1; i++) {
66
74
  const part = parts[i];
@@ -72,7 +80,7 @@ var EntityRenderEnginePoint;
72
80
  console.warn("Point.Render: Parent entity was not null. This should not happen.");
73
81
  }
74
82
  }
75
- siblings = cEntity._siblingGraphics;
83
+ siblings = (cEntity._siblingGraphics || []).filter(x => x !== existingRing);
76
84
  cEntity._siblingGraphics = [];
77
85
  };
78
86
  const updateShouldShowTrack = () => {
@@ -325,6 +333,11 @@ var EntityRenderEnginePoint;
325
333
  }
326
334
  cEntity.billboard._billboardSize = image.height;
327
335
  cEntity.billboard._billboardImgKey = imageKey;
336
+ // Icons hang from their bottom edge, so the glyph's centre sits half its height up.
337
+ glyph = {
338
+ radius: Math.max(image.width || image.height, image.height) * iconScale / 2,
339
+ offsetY: image.height * iconScale / 2
340
+ };
328
341
  }
329
342
  }
330
343
  }
@@ -698,6 +711,7 @@ var EntityRenderEnginePoint;
698
711
  cEntity.billboard._billboardImgKey = imgKey;
699
712
  }
700
713
  cEntity.billboard._billboardSize = Math.ceil(circleBillboard.height / 2);
714
+ glyph = { radius: size / 2, offsetY: 0 };
701
715
  }
702
716
  // Generate a polyline 'track' for the historic data.
703
717
  // We do this for historic data that exists and is moving.
@@ -747,6 +761,31 @@ var EntityRenderEnginePoint;
747
761
  }
748
762
  trackEntity._parentEntity = cEntity;
749
763
  }
764
+ // Cylinders set no glyph, so a style switching to one drops its ring.
765
+ const orientation = glyph && cEntity && entity_render_engine_point_orientation_1.EntityRenderEnginePointOrientation.IsEnabled(style)
766
+ ? entity_render_engine_point_orientation_1.EntityRenderEnginePointOrientation.GetOrientation(entity)
767
+ : null;
768
+ const ring = orientation ? entity_render_engine_point_orientation_1.EntityRenderEnginePointOrientation.Render({
769
+ viewer: params.viewer,
770
+ parent: cEntity,
771
+ existing: existingRing,
772
+ orientation,
773
+ heightRef,
774
+ glyphRadius: glyph.radius,
775
+ glyphOffsetY: glyph.offsetY,
776
+ minDistance: params.minDistance,
777
+ maxDistance: params.maxDistance
778
+ }) : null;
779
+ if (existingRing && existingRing !== ring) {
780
+ (0, cesium_utils_1.RemoveCEntityFromScene)(params.viewer, existingRing);
781
+ }
782
+ if (ring) {
783
+ siblings.push(ring);
784
+ // A new graphic on an existing visual needs a full refresh to be added, as the track does.
785
+ if (ring !== existingRing && params.rego) {
786
+ params.rego.stale = true;
787
+ }
788
+ }
750
789
  cEntity._siblingGraphics = siblings;
751
790
  cEntity.styleEffective = entity_render_engine_1.StyleEffective.Combine(styleTraceParts);
752
791
  return cEntity;
@@ -881,7 +920,8 @@ const createImageBillboard = (url) => {
881
920
  canvas.getContext("2d").drawImage(image, 0, 0);
882
921
  return {
883
922
  canvasDataUri: canvas.toDataURL("image/png"),
884
- height: image.height
923
+ height: image.height,
924
+ width: image.width
885
925
  };
886
926
  });
887
927
  _billboardCache.Set(cacheKey, prom);