@equinor/esv-intersection 3.0.9 → 3.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/control/ExtendedCurveInterpolator.d.ts +0 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.mjs +2188 -2087
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/dist/interfaces.d.ts +1 -3
- package/dist/utils/arc-length.d.ts +0 -1
- package/dist/utils/binary-search.d.ts +0 -1
- package/dist/utils/root-finder.d.ts +1 -2
- package/package.json +25 -25
- package/src/components/axis.ts +23 -30
- package/src/control/ExtendedCurveInterpolator.ts +7 -7
- package/src/control/IntersectionReferenceSystem.ts +33 -41
- package/src/control/LayerManager.ts +33 -31
- package/src/control/MainController.ts +5 -7
- package/src/control/ZoomPanHandler.ts +50 -45
- package/src/control/interfaces.ts +3 -3
- package/src/control/overlay.ts +42 -35
- package/src/datautils/colortable.ts +4 -4
- package/src/datautils/findsample.ts +8 -7
- package/src/datautils/picks.ts +13 -13
- package/src/datautils/schematicShapeGenerator.ts +47 -17
- package/src/datautils/seismicimage.ts +12 -13
- package/src/datautils/surfacedata.ts +27 -26
- package/src/datautils/trajectory.ts +34 -32
- package/src/interfaces.ts +1 -1
- package/src/layers/CalloutCanvasLayer.ts +55 -58
- package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +23 -20
- package/src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts +9 -10
- package/src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts +13 -13
- package/src/layers/GeomodelCanvasLayer.ts +43 -36
- package/src/layers/GeomodelLabelsLayer.ts +99 -96
- package/src/layers/GeomodelLayerV2.ts +11 -11
- package/src/layers/GridLayer.ts +25 -21
- package/src/layers/ImageCanvasLayer.ts +17 -11
- package/src/layers/ReferenceLineLayer.ts +53 -45
- package/src/layers/SchematicLayer.ts +78 -75
- package/src/layers/WellborePathLayer.ts +48 -46
- package/src/layers/base/CanvasLayer.ts +18 -18
- package/src/layers/base/HTMLLayer.ts +5 -5
- package/src/layers/base/Layer.ts +18 -18
- package/src/layers/base/PixiLayer.ts +24 -20
- package/src/layers/base/SVGLayer.ts +5 -5
- package/src/utils/arc-length.ts +3 -10
- package/src/utils/binary-search.ts +2 -2
- package/src/utils/color.ts +9 -5
- package/src/utils/root-finder.ts +4 -4
- package/src/utils/text.ts +5 -5
- package/src/utils/vectorUtils.ts +13 -6
- package/src/vendor/pixi-dashed-line/index.ts +3 -2
- package/dist/components/axis.d.ts +0 -48
- package/dist/components/axis.d.ts.map +0 -1
- package/dist/components/index.d.ts +0 -2
- package/dist/components/index.d.ts.map +0 -1
- package/dist/constants.d.ts +0 -12
- package/dist/constants.d.ts.map +0 -1
- package/dist/control/ExtendedCurveInterpolator.d.ts.map +0 -1
- package/dist/control/IntersectionReferenceSystem.d.ts +0 -97
- package/dist/control/IntersectionReferenceSystem.d.ts.map +0 -1
- package/dist/control/LayerManager.d.ts +0 -77
- package/dist/control/LayerManager.d.ts.map +0 -1
- package/dist/control/MainController.d.ts +0 -155
- package/dist/control/MainController.d.ts.map +0 -1
- package/dist/control/ZoomPanHandler.d.ts +0 -159
- package/dist/control/ZoomPanHandler.d.ts.map +0 -1
- package/dist/control/index.d.ts +0 -6
- package/dist/control/index.d.ts.map +0 -1
- package/dist/control/interfaces.d.ts +0 -38
- package/dist/control/interfaces.d.ts.map +0 -1
- package/dist/control/overlay.d.ts +0 -21
- package/dist/control/overlay.d.ts.map +0 -1
- package/dist/datautils/colortable.d.ts +0 -2
- package/dist/datautils/colortable.d.ts.map +0 -1
- package/dist/datautils/findsample.d.ts +0 -3
- package/dist/datautils/findsample.d.ts.map +0 -1
- package/dist/datautils/index.d.ts +0 -7
- package/dist/datautils/index.d.ts.map +0 -1
- package/dist/datautils/interfaces.d.ts +0 -64
- package/dist/datautils/interfaces.d.ts.map +0 -1
- package/dist/datautils/picks.d.ts +0 -75
- package/dist/datautils/picks.d.ts.map +0 -1
- package/dist/datautils/schematicShapeGenerator.d.ts +0 -60
- package/dist/datautils/schematicShapeGenerator.d.ts.map +0 -1
- package/dist/datautils/seismicimage.d.ts +0 -46
- package/dist/datautils/seismicimage.d.ts.map +0 -1
- package/dist/datautils/surfacedata.d.ts +0 -11
- package/dist/datautils/surfacedata.d.ts.map +0 -1
- package/dist/datautils/trajectory.d.ts +0 -15
- package/dist/datautils/trajectory.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/interfaces.d.ts.map +0 -1
- package/dist/layers/CalloutCanvasLayer.d.ts +0 -61
- package/dist/layers/CalloutCanvasLayer.d.ts.map +0 -1
- package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts +0 -22
- package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts.map +0 -1
- package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts +0 -24
- package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts.map +0 -1
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts +0 -21
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts.map +0 -1
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts +0 -27
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts.map +0 -1
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts +0 -18
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts.map +0 -1
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts +0 -25
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts.map +0 -1
- package/dist/layers/GeomodelCanvasLayer.d.ts +0 -29
- package/dist/layers/GeomodelCanvasLayer.d.ts.map +0 -1
- package/dist/layers/GeomodelLabelsLayer.d.ts +0 -50
- package/dist/layers/GeomodelLabelsLayer.d.ts.map +0 -1
- package/dist/layers/GeomodelLayerV2.d.ts +0 -13
- package/dist/layers/GeomodelLayerV2.d.ts.map +0 -1
- package/dist/layers/GridLayer.d.ts +0 -30
- package/dist/layers/GridLayer.d.ts.map +0 -1
- package/dist/layers/ImageCanvasLayer.d.ts +0 -21
- package/dist/layers/ImageCanvasLayer.d.ts.map +0 -1
- package/dist/layers/ReferenceLineLayer.d.ts +0 -30
- package/dist/layers/ReferenceLineLayer.d.ts.map +0 -1
- package/dist/layers/SchematicLayer.d.ts +0 -114
- package/dist/layers/SchematicLayer.d.ts.map +0 -1
- package/dist/layers/SeismicCanvasLayer.d.ts +0 -19
- package/dist/layers/SeismicCanvasLayer.d.ts.map +0 -1
- package/dist/layers/WellborePathLayer.d.ts +0 -18
- package/dist/layers/WellborePathLayer.d.ts.map +0 -1
- package/dist/layers/base/CanvasLayer.d.ts +0 -20
- package/dist/layers/base/CanvasLayer.d.ts.map +0 -1
- package/dist/layers/base/HTMLLayer.d.ts +0 -14
- package/dist/layers/base/HTMLLayer.d.ts.map +0 -1
- package/dist/layers/base/Layer.d.ts +0 -70
- package/dist/layers/base/Layer.d.ts.map +0 -1
- package/dist/layers/base/PixiLayer.d.ts +0 -33
- package/dist/layers/base/PixiLayer.d.ts.map +0 -1
- package/dist/layers/base/SVGLayer.d.ts +0 -14
- package/dist/layers/base/SVGLayer.d.ts.map +0 -1
- package/dist/layers/base/index.d.ts +0 -6
- package/dist/layers/base/index.d.ts.map +0 -1
- package/dist/layers/index.d.ts +0 -17
- package/dist/layers/index.d.ts.map +0 -1
- package/dist/layers/schematicInterfaces.d.ts +0 -210
- package/dist/layers/schematicInterfaces.d.ts.map +0 -1
- package/dist/utils/arc-length.d.ts.map +0 -1
- package/dist/utils/binary-search.d.ts.map +0 -1
- package/dist/utils/color.d.ts +0 -6
- package/dist/utils/color.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/root-finder.d.ts.map +0 -1
- package/dist/utils/text.d.ts +0 -15
- package/dist/utils/text.d.ts.map +0 -1
- package/dist/utils/vectorUtils.d.ts +0 -16
- package/dist/utils/vectorUtils.d.ts.map +0 -1
- package/dist/vendor/pixi-dashed-line/index.d.ts +0 -57
- package/dist/vendor/pixi-dashed-line/index.d.ts.map +0 -1
|
@@ -12,7 +12,7 @@ import { HORIZONTAL_AXIS_MARGIN, VERTICAL_AXIS_MARGIN } from '../constants';
|
|
|
12
12
|
* API for controlling data and layers
|
|
13
13
|
*/
|
|
14
14
|
export class Controller {
|
|
15
|
-
private _referenceSystem: IntersectionReferenceSystem;
|
|
15
|
+
private _referenceSystem: IntersectionReferenceSystem | undefined;
|
|
16
16
|
|
|
17
17
|
private layerManager: LayerManager;
|
|
18
18
|
private _overlay: Overlay<Controller>;
|
|
@@ -69,7 +69,7 @@ export class Controller {
|
|
|
69
69
|
* Clears data from all mounted layers
|
|
70
70
|
* @param includeReferenceSystem - (optional) if true also removes reference system, default is true
|
|
71
71
|
*/
|
|
72
|
-
clearAllData(includeReferenceSystem
|
|
72
|
+
clearAllData(includeReferenceSystem = true): Controller {
|
|
73
73
|
this.layerManager.clearAllData(includeReferenceSystem);
|
|
74
74
|
return this;
|
|
75
75
|
}
|
|
@@ -106,7 +106,7 @@ export class Controller {
|
|
|
106
106
|
* Find first layer with given id, returns undefined if none are found
|
|
107
107
|
* @param layerId string id
|
|
108
108
|
*/
|
|
109
|
-
getLayer(layerId: string): Layer<unknown> {
|
|
109
|
+
getLayer(layerId: string): Layer<unknown> | undefined {
|
|
110
110
|
return this.layerManager.getLayer(layerId);
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -259,8 +259,6 @@ export class Controller {
|
|
|
259
259
|
this.layerManager.destroy();
|
|
260
260
|
this._overlay.destroy();
|
|
261
261
|
this._referenceSystem = undefined;
|
|
262
|
-
this.layerManager = undefined;
|
|
263
|
-
this._overlay = undefined;
|
|
264
262
|
return this;
|
|
265
263
|
}
|
|
266
264
|
|
|
@@ -278,7 +276,7 @@ export class Controller {
|
|
|
278
276
|
return this._overlay;
|
|
279
277
|
}
|
|
280
278
|
|
|
281
|
-
get referenceSystem(): IntersectionReferenceSystem {
|
|
279
|
+
get referenceSystem(): IntersectionReferenceSystem | undefined {
|
|
282
280
|
return this._referenceSystem;
|
|
283
281
|
}
|
|
284
282
|
|
|
@@ -286,7 +284,7 @@ export class Controller {
|
|
|
286
284
|
return this.layerManager.zoomPanHandler;
|
|
287
285
|
}
|
|
288
286
|
|
|
289
|
-
get axis(): Axis {
|
|
287
|
+
get axis(): Axis | undefined {
|
|
290
288
|
return this.layerManager.axis;
|
|
291
289
|
}
|
|
292
290
|
|
|
@@ -12,20 +12,19 @@ export type RescaleFunction = (event: OnRescaleEvent) => void;
|
|
|
12
12
|
* Handle zoom and pan for intersection layers
|
|
13
13
|
*/
|
|
14
14
|
export class ZoomPanHandler {
|
|
15
|
-
zoom
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
options: ZoomAndPanOptions = null;
|
|
15
|
+
zoom!: ZoomBehavior<HTMLElement, unknown>;
|
|
16
|
+
container: Selection<HTMLElement, unknown, null, undefined>;
|
|
17
|
+
onRescale: RescaleFunction;
|
|
18
|
+
options: ZoomAndPanOptions;
|
|
20
19
|
xBounds: [number, number] = [0, 1];
|
|
21
20
|
yBounds: [number, number] = [0, 1];
|
|
22
21
|
translateBoundsX: [number, number] = [0, 1];
|
|
23
22
|
translateBoundsY: [number, number] = [0, 1];
|
|
24
|
-
scaleX: ScaleLinear<number, number
|
|
25
|
-
scaleY: ScaleLinear<number, number
|
|
26
|
-
_zFactor
|
|
27
|
-
_enableTranslateExtent
|
|
28
|
-
currentTransform: ZoomTransform;
|
|
23
|
+
scaleX: ScaleLinear<number, number>;
|
|
24
|
+
scaleY: ScaleLinear<number, number>;
|
|
25
|
+
_zFactor = 1;
|
|
26
|
+
_enableTranslateExtent = false;
|
|
27
|
+
currentTransform: ZoomTransform | undefined;
|
|
29
28
|
|
|
30
29
|
/**
|
|
31
30
|
* Constructor
|
|
@@ -66,7 +65,7 @@ export class ZoomPanHandler {
|
|
|
66
65
|
* @returns width
|
|
67
66
|
*/
|
|
68
67
|
get width(): number {
|
|
69
|
-
return this.scaleX.range()[1];
|
|
68
|
+
return this.scaleX.range()[1] ?? 0;
|
|
70
69
|
}
|
|
71
70
|
|
|
72
71
|
/**
|
|
@@ -74,7 +73,7 @@ export class ZoomPanHandler {
|
|
|
74
73
|
* @returns height
|
|
75
74
|
*/
|
|
76
75
|
get height(): number {
|
|
77
|
-
return this.scaleY.range()[1];
|
|
76
|
+
return this.scaleY.range()[1] ?? 0;
|
|
78
77
|
}
|
|
79
78
|
|
|
80
79
|
/**
|
|
@@ -111,8 +110,8 @@ export class ZoomPanHandler {
|
|
|
111
110
|
* @returns ratio
|
|
112
111
|
*/
|
|
113
112
|
get xRatio(): number {
|
|
114
|
-
const domain
|
|
115
|
-
const ratio
|
|
113
|
+
const domain = this.scaleX.domain() as [number, number];
|
|
114
|
+
const ratio = Math.abs(this.width / (domain[1] - domain[0]));
|
|
116
115
|
return ratio;
|
|
117
116
|
}
|
|
118
117
|
|
|
@@ -121,8 +120,8 @@ export class ZoomPanHandler {
|
|
|
121
120
|
* @returns ratio
|
|
122
121
|
*/
|
|
123
122
|
get yRatio(): number {
|
|
124
|
-
const domain
|
|
125
|
-
const ratio
|
|
123
|
+
const domain = this.scaleY.domain() as [number, number];
|
|
124
|
+
const ratio = Math.abs(this.height / (domain[1] - domain[0]));
|
|
126
125
|
return ratio;
|
|
127
126
|
}
|
|
128
127
|
|
|
@@ -183,10 +182,10 @@ export class ZoomPanHandler {
|
|
|
183
182
|
updateTranslateExtent(): void {
|
|
184
183
|
const { width, xSpan, zFactor, enableTranslateExtent, translateBoundsX, translateBoundsY } = this;
|
|
185
184
|
|
|
186
|
-
let x1
|
|
187
|
-
let y1
|
|
188
|
-
let x2
|
|
189
|
-
let y2
|
|
185
|
+
let x1 = -Infinity;
|
|
186
|
+
let y1 = -Infinity;
|
|
187
|
+
let x2 = +Infinity;
|
|
188
|
+
let y2 = +Infinity;
|
|
190
189
|
|
|
191
190
|
if (enableTranslateExtent) {
|
|
192
191
|
const ppu: number = width / xSpan;
|
|
@@ -237,8 +236,7 @@ export class ZoomPanHandler {
|
|
|
237
236
|
* Initialized handler
|
|
238
237
|
*/
|
|
239
238
|
init(): void {
|
|
240
|
-
this.zoom = zoom().scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel]).on('zoom', this.onZoom);
|
|
241
|
-
|
|
239
|
+
this.zoom = zoom<HTMLElement, unknown>().scaleExtent([this.options.minZoomLevel, this.options.maxZoomLevel]).on('zoom', this.onZoom);
|
|
242
240
|
this.container.call(this.zoom);
|
|
243
241
|
}
|
|
244
242
|
|
|
@@ -292,19 +290,20 @@ export class ZoomPanHandler {
|
|
|
292
290
|
setViewport(cx?: number, cy?: number, displ?: number, duration?: number): void {
|
|
293
291
|
const { zoom, container, calculateTransform, scaleX, scaleY, isXInverted } = this;
|
|
294
292
|
|
|
295
|
-
if (isNaN(cx) || isNaN(displ)) {
|
|
296
|
-
const xd
|
|
293
|
+
if (cx == null || displ == null || isNaN(cx) || isNaN(displ)) {
|
|
294
|
+
const xd = scaleX.domain() as [number, number];
|
|
297
295
|
const dspan: number = xd[1] - xd[0];
|
|
298
|
-
|
|
296
|
+
|
|
297
|
+
if (cx == null || isNaN(cx)) {
|
|
299
298
|
cx = xd[0] + dspan / 2 || 0;
|
|
300
299
|
}
|
|
301
|
-
if (isNaN(displ)) {
|
|
300
|
+
if (displ == null || isNaN(displ)) {
|
|
302
301
|
displ = Math.abs(dspan) || 1;
|
|
303
302
|
}
|
|
304
303
|
}
|
|
305
304
|
|
|
306
|
-
if (isNaN(cy)) {
|
|
307
|
-
const yd
|
|
305
|
+
if (cy == null || isNaN(cy)) {
|
|
306
|
+
const yd = scaleY.domain() as [number, number];
|
|
308
307
|
cy = yd[0] + (yd[1] - yd[0]) / 2 || 0;
|
|
309
308
|
}
|
|
310
309
|
|
|
@@ -315,7 +314,7 @@ export class ZoomPanHandler {
|
|
|
315
314
|
|
|
316
315
|
const t: ZoomTransform = calculateTransform(dx0, dx1, cy);
|
|
317
316
|
|
|
318
|
-
if (Number.isFinite(duration) && duration > 0) {
|
|
317
|
+
if (duration != null && Number.isFinite(duration) && duration > 0) {
|
|
319
318
|
zoom.transform(container.transition().duration(duration), t);
|
|
320
319
|
} else {
|
|
321
320
|
zoom.transform(container, t);
|
|
@@ -346,19 +345,25 @@ export class ZoomPanHandler {
|
|
|
346
345
|
* Adjust zoom due to changes in size of target
|
|
347
346
|
* @param force - force update even if size did not change
|
|
348
347
|
*/
|
|
349
|
-
adjustToSize(
|
|
348
|
+
adjustToSize(): void;
|
|
349
|
+
adjustToSize(autoAdjust: boolean): void;
|
|
350
|
+
adjustToSize(width: number, height: number, force: boolean): void;
|
|
351
|
+
adjustToSize(widthOrAutoAdjust?: unknown, height?: number, force = false): void {
|
|
350
352
|
const { width: oldWidth, height: oldHeight, scaleX, scaleY, recalculateZoomTransform } = this;
|
|
351
353
|
|
|
352
354
|
let w = 0;
|
|
353
355
|
let h = 0;
|
|
354
356
|
|
|
355
|
-
if (typeof
|
|
356
|
-
const { width: containerWidth, height: containerHeight } = this.container.node().getBoundingClientRect();
|
|
357
|
-
w = containerWidth;
|
|
358
|
-
h = containerHeight;
|
|
359
|
-
} else {
|
|
360
|
-
w = width;
|
|
357
|
+
if (typeof widthOrAutoAdjust === 'number' && typeof height === 'number') {
|
|
361
358
|
h = height;
|
|
359
|
+
w = widthOrAutoAdjust;
|
|
360
|
+
} else {
|
|
361
|
+
const containerEl = this.container.node();
|
|
362
|
+
if (containerEl) {
|
|
363
|
+
const { width: containerWidth, height: containerHeight } = containerEl.getBoundingClientRect();
|
|
364
|
+
w = containerWidth;
|
|
365
|
+
h = containerHeight;
|
|
366
|
+
}
|
|
362
367
|
}
|
|
363
368
|
|
|
364
369
|
const newWidth: number = Math.max(1, w);
|
|
@@ -386,15 +391,15 @@ export class ZoomPanHandler {
|
|
|
386
391
|
calculateTransform(dx0: number, dx1: number, dy: number): ZoomTransform {
|
|
387
392
|
const { scaleX, xSpan, xBounds, yBounds, zFactor, viewportRatio: ratio, isXInverted, isYInverted } = this;
|
|
388
393
|
|
|
389
|
-
const [rx1, rx2] = scaleX.range();
|
|
390
|
-
const displ
|
|
391
|
-
const k
|
|
392
|
-
const unitsPerPixels
|
|
394
|
+
const [rx1, rx2] = scaleX.range() as [number, number];
|
|
395
|
+
const displ = Math.abs(dx1 - dx0);
|
|
396
|
+
const k = xSpan / displ;
|
|
397
|
+
const unitsPerPixels = displ / (rx2 - rx1);
|
|
393
398
|
|
|
394
|
-
const dy0
|
|
399
|
+
const dy0 = dy - (isYInverted ? -displ : displ) / zFactor / ratio / 2;
|
|
395
400
|
|
|
396
|
-
const tx
|
|
397
|
-
const ty
|
|
401
|
+
const tx = (xBounds[0] - dx0) / (isXInverted ? -unitsPerPixels : unitsPerPixels);
|
|
402
|
+
const ty = (yBounds[0] - dy0) / ((isYInverted ? -unitsPerPixels : unitsPerPixels) / zFactor);
|
|
398
403
|
|
|
399
404
|
return zoomIdentity.translate(tx, ty).scale(k);
|
|
400
405
|
}
|
|
@@ -405,8 +410,8 @@ export class ZoomPanHandler {
|
|
|
405
410
|
recalculateZoomTransform(): void {
|
|
406
411
|
const { scaleX, scaleY, container, calculateTransform, updateTranslateExtent } = this;
|
|
407
412
|
|
|
408
|
-
const [dx0, dx1] = scaleX.domain();
|
|
409
|
-
const [dy0, dy1] = scaleY.domain();
|
|
413
|
+
const [dx0, dx1] = scaleX.domain() as [number, number];
|
|
414
|
+
const [dy0, dy1] = scaleY.domain() as [number, number];
|
|
410
415
|
|
|
411
416
|
const dy: number = dy0 + (dy1 - dy0) / 2;
|
|
412
417
|
|
|
@@ -18,8 +18,8 @@ export interface ControllerOptions {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
interface OverlayEvent<T> {
|
|
21
|
-
target
|
|
22
|
-
source: Element;
|
|
21
|
+
target: Element | undefined;
|
|
22
|
+
source: Element | undefined;
|
|
23
23
|
caller: T;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -33,7 +33,7 @@ export interface OverlayMouseMoveEvent<T> extends OverlayEvent<T> {
|
|
|
33
33
|
y: number;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
export
|
|
36
|
+
export type OverlayMouseExitEvent<T> = OverlayEvent<T>;
|
|
37
37
|
|
|
38
38
|
export interface OverlayCallbacks<T> {
|
|
39
39
|
onMouseMove?(event: OverlayMouseMoveEvent<T>): void;
|
package/src/control/overlay.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { select, Selection, pointer, ContainerElement } from 'd3-selection';
|
|
|
2
2
|
import { OverlayCallbacks } from './interfaces';
|
|
3
3
|
|
|
4
4
|
export class Overlay<T> {
|
|
5
|
-
elm: Selection<
|
|
6
|
-
source:
|
|
5
|
+
elm: Selection<HTMLDivElement, unknown, null, undefined>;
|
|
6
|
+
source: HTMLDivElement | undefined;
|
|
7
7
|
elements: { [propName: string]: Element } = {};
|
|
8
8
|
listeners: { [propName: string]: OverlayCallbacks<T> } = {};
|
|
9
9
|
enabled = true;
|
|
@@ -11,8 +11,7 @@ export class Overlay<T> {
|
|
|
11
11
|
constructor(caller: T, container: HTMLElement) {
|
|
12
12
|
const con = select(container);
|
|
13
13
|
this.elm = con.append('div').attr('id', 'overlay').style('z-index', '11').style('position', 'absolute');
|
|
14
|
-
|
|
15
|
-
this.source = this.elm.node();
|
|
14
|
+
this.source = this.elm.node() ?? undefined;
|
|
16
15
|
|
|
17
16
|
const { elm } = this;
|
|
18
17
|
elm.on('resize', (event) => {
|
|
@@ -24,17 +23,18 @@ export class Overlay<T> {
|
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
Object.keys(this.listeners).forEach((key: string) => {
|
|
27
|
-
const target = this.elements[key]
|
|
26
|
+
const target = this.elements[key] ?? undefined;
|
|
28
27
|
const ops = this.listeners[key];
|
|
29
28
|
if (ops && ops.onResize) {
|
|
30
|
-
requestAnimationFrame(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
requestAnimationFrame(
|
|
30
|
+
() =>
|
|
31
|
+
ops.onResize?.({
|
|
32
|
+
target,
|
|
33
|
+
source: this.source,
|
|
34
|
+
caller,
|
|
35
|
+
width,
|
|
36
|
+
height,
|
|
37
|
+
}),
|
|
38
38
|
);
|
|
39
39
|
}
|
|
40
40
|
});
|
|
@@ -47,18 +47,19 @@ export class Overlay<T> {
|
|
|
47
47
|
|
|
48
48
|
const [mx, my] = pointer(event, this.elm.node() as ContainerElement);
|
|
49
49
|
Object.keys(this.listeners).forEach((key: string) => {
|
|
50
|
-
const target = this.elements[key]
|
|
50
|
+
const target = this.elements[key] ?? undefined;
|
|
51
51
|
const ops = this.listeners[key];
|
|
52
52
|
|
|
53
53
|
if (ops && ops.onMouseMove) {
|
|
54
|
-
requestAnimationFrame(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
54
|
+
requestAnimationFrame(
|
|
55
|
+
() =>
|
|
56
|
+
ops.onMouseMove?.({
|
|
57
|
+
x: mx,
|
|
58
|
+
y: my,
|
|
59
|
+
target,
|
|
60
|
+
source: this.source,
|
|
61
|
+
caller,
|
|
62
|
+
}),
|
|
62
63
|
);
|
|
63
64
|
}
|
|
64
65
|
});
|
|
@@ -69,28 +70,34 @@ export class Overlay<T> {
|
|
|
69
70
|
return;
|
|
70
71
|
}
|
|
71
72
|
Object.keys(this.listeners).forEach((key: string) => {
|
|
72
|
-
const target = this.elements[key] ||
|
|
73
|
+
const target = this.elements[key] || undefined;
|
|
73
74
|
const ops = this.listeners[key];
|
|
74
75
|
if (ops && ops.onMouseExit) {
|
|
75
|
-
requestAnimationFrame(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
76
|
+
requestAnimationFrame(
|
|
77
|
+
() =>
|
|
78
|
+
ops.onMouseExit?.({
|
|
79
|
+
target,
|
|
80
|
+
source: this.source,
|
|
81
|
+
caller,
|
|
82
|
+
}),
|
|
81
83
|
);
|
|
82
84
|
}
|
|
83
85
|
});
|
|
84
86
|
});
|
|
85
87
|
}
|
|
86
88
|
|
|
87
|
-
create(key: string, callbacks?: OverlayCallbacks<T>): HTMLElement {
|
|
89
|
+
create(key: string, callbacks?: OverlayCallbacks<T>): HTMLElement | undefined {
|
|
88
90
|
const newElm = this.elm.append('div').style('position', 'relative').style('pointer-events', 'none').node();
|
|
89
|
-
|
|
90
|
-
if (
|
|
91
|
-
this.
|
|
91
|
+
|
|
92
|
+
if (newElm != null) {
|
|
93
|
+
this.elements[key] = newElm;
|
|
94
|
+
if (callbacks) {
|
|
95
|
+
this.listeners[key] = callbacks;
|
|
96
|
+
}
|
|
97
|
+
return newElm;
|
|
98
|
+
} else {
|
|
99
|
+
return undefined;
|
|
92
100
|
}
|
|
93
|
-
return newElm;
|
|
94
101
|
}
|
|
95
102
|
|
|
96
103
|
register(key: string, callbacks: OverlayCallbacks<T>): void {
|
|
@@ -111,7 +118,7 @@ export class Overlay<T> {
|
|
|
111
118
|
}
|
|
112
119
|
|
|
113
120
|
destroy(): void {
|
|
114
|
-
this.source
|
|
121
|
+
this.source?.remove();
|
|
115
122
|
}
|
|
116
123
|
}
|
|
117
124
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { scaleLinear } from 'd3-scale';
|
|
2
2
|
import { color } from 'd3-color';
|
|
3
3
|
|
|
4
|
-
export function createColorTable(colorMap: string[], size: number): number
|
|
4
|
+
export function createColorTable(colorMap: string[], size: number): [number, number, number][] {
|
|
5
5
|
const colorDomain = colorMap.map((_v, i) => (i * size) / colorMap.length);
|
|
6
6
|
const colorScale = scaleLinear<string>().domain(colorDomain).range(colorMap);
|
|
7
7
|
|
|
8
|
-
const table = Array.from(new Array(size).keys()).map((i) => {
|
|
9
|
-
const rgb = color(colorScale(i))
|
|
10
|
-
return [rgb.r, rgb.g, rgb.b];
|
|
8
|
+
const table = Array.from(new Array(size).keys()).map<[number, number, number]>((i) => {
|
|
9
|
+
const rgb = color(colorScale(i))?.rgb();
|
|
10
|
+
return rgb != null ? [rgb.r, rgb.g, rgb.b] : [0, 0, 0];
|
|
11
11
|
});
|
|
12
12
|
|
|
13
13
|
return table;
|
|
@@ -47,15 +47,16 @@ export function findIndexOfSample(data: number[][], pos: number): number {
|
|
|
47
47
|
return index;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export function findSampleAtPos(data: number[][], pos: number, topLimit
|
|
51
|
-
let y
|
|
50
|
+
export function findSampleAtPos(data: number[][], pos: number, topLimit = 0, bottomLimit = 0): number {
|
|
51
|
+
let y = 0;
|
|
52
52
|
const index = findIndexOfSample(data, pos);
|
|
53
53
|
if (index !== -1) {
|
|
54
|
-
const v1 = data[index][1];
|
|
55
|
-
const v2 = data[index + 1][1];
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const
|
|
54
|
+
const v1 = data[index]?.[1];
|
|
55
|
+
const v2 = data[index + 1]?.[1];
|
|
56
|
+
|
|
57
|
+
if (v1 && v2) {
|
|
58
|
+
const x1 = data[index]?.[0] ?? 0;
|
|
59
|
+
const x2 = data[index + 1]?.[0] ?? 0;
|
|
59
60
|
const span = x2 - x1;
|
|
60
61
|
const d = pos - x1;
|
|
61
62
|
const f = d / span;
|
package/src/datautils/picks.ts
CHANGED
|
@@ -103,7 +103,7 @@ function getFilteredExitPicks(formationPicks: PairedPickAndUnit[]): Annotation[]
|
|
|
103
103
|
|
|
104
104
|
export const getPicksData = (picksData: { unitPicks: PairedPickAndUnit[]; nonUnitPicks: PickWithId[] }): Annotation[] =>
|
|
105
105
|
[...getReferencePicks(picksData.nonUnitPicks), ...getEntryPicks(picksData.unitPicks), ...getFilteredExitPicks(picksData.unitPicks)].sort(
|
|
106
|
-
(a, b) => a.md - b.md
|
|
106
|
+
(a, b) => a.md! - b.md!,
|
|
107
107
|
);
|
|
108
108
|
|
|
109
109
|
/**
|
|
@@ -142,7 +142,7 @@ function findGaps(from: number, to: number, arr: { from: number; to: number; itm
|
|
|
142
142
|
let d = from;
|
|
143
143
|
let i = 0;
|
|
144
144
|
while (d < to && i < arr.length) {
|
|
145
|
-
const itm = arr[i]
|
|
145
|
+
const itm = arr[i]!;
|
|
146
146
|
if (itm.from > d) {
|
|
147
147
|
gaps.push([d, Math.min(itm.from, to)]);
|
|
148
148
|
}
|
|
@@ -171,13 +171,13 @@ function joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined:
|
|
|
171
171
|
const nonUnitPicks: PickWithId[] = [];
|
|
172
172
|
const joined: PickAndUnit[] = [];
|
|
173
173
|
picks.forEach((p: Pick) => {
|
|
174
|
-
const matches = transformed.filter((u: UnitDto) => p.pickIdentifier
|
|
174
|
+
const matches = transformed.filter((u: UnitDto) => p.pickIdentifier?.search(new RegExp(`(${u.topSurface}|${u.baseSurface})`, 'i')) !== -1);
|
|
175
175
|
if (matches.length > 0) {
|
|
176
176
|
matches.forEach((u: UnitDto) =>
|
|
177
177
|
joined.push({
|
|
178
178
|
md: p.md,
|
|
179
179
|
tvd: p.tvd,
|
|
180
|
-
identifier: p.pickIdentifier
|
|
180
|
+
identifier: p.pickIdentifier!,
|
|
181
181
|
confidence: p.confidence,
|
|
182
182
|
mdUnit: p.mdUnit,
|
|
183
183
|
depthReferencePoint: p.depthReferencePoint,
|
|
@@ -185,7 +185,7 @@ function joinPicksAndStratColumn(picks: Pick[], stratColumn: Unit[]): { joined:
|
|
|
185
185
|
}),
|
|
186
186
|
);
|
|
187
187
|
} else {
|
|
188
|
-
nonUnitPicks.push({ identifier: p.pickIdentifier
|
|
188
|
+
nonUnitPicks.push({ identifier: p.pickIdentifier!, ...p });
|
|
189
189
|
}
|
|
190
190
|
});
|
|
191
191
|
|
|
@@ -206,7 +206,7 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
|
|
|
206
206
|
.sort((a: PickAndUnit, b: PickAndUnit) => a.unitName.localeCompare(b.unitName) || a.md - b.md || a.ageTop - b.ageTop);
|
|
207
207
|
|
|
208
208
|
while (sorted.length > 0) {
|
|
209
|
-
current = sorted.shift()
|
|
209
|
+
current = sorted.shift()!;
|
|
210
210
|
const name = current.identifier;
|
|
211
211
|
let pairWithName: string;
|
|
212
212
|
|
|
@@ -222,8 +222,8 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
|
|
|
222
222
|
continue;
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
let top: PickAndUnit;
|
|
226
|
-
let base: PickAndUnit;
|
|
225
|
+
let top: PickAndUnit | undefined;
|
|
226
|
+
let base: PickAndUnit | undefined;
|
|
227
227
|
|
|
228
228
|
const pairWith = sorted.find((p: PickAndUnit) => p.identifier === pairWithName);
|
|
229
229
|
if (!pairWith) {
|
|
@@ -233,7 +233,7 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
|
|
|
233
233
|
base = joined
|
|
234
234
|
.filter((d: PickAndUnit) => d.level)
|
|
235
235
|
.sort((a: PickAndUnit, b: PickAndUnit) => a.md - b.md)
|
|
236
|
-
.find((p: PickAndUnit) => p.md > top
|
|
236
|
+
.find((p: PickAndUnit) => p.md > top!.md);
|
|
237
237
|
if (base) {
|
|
238
238
|
console.warn(`Using ${base.identifier} as base for ${name}`);
|
|
239
239
|
} else {
|
|
@@ -245,7 +245,7 @@ function pairJoinedPicks(joined: PickAndUnit[]): PairedPickAndUnit[] {
|
|
|
245
245
|
top = joined
|
|
246
246
|
.filter((d: PickAndUnit) => d.level)
|
|
247
247
|
.sort((a: PickAndUnit, b: PickAndUnit) => b.md - a.md)
|
|
248
|
-
.find((p: PickAndUnit) => p.md < base
|
|
248
|
+
.find((p: PickAndUnit) => p.md < base!.md);
|
|
249
249
|
if (top) {
|
|
250
250
|
console.warn(`Using ${top.identifier} as top for ${name}`);
|
|
251
251
|
} else {
|
|
@@ -303,10 +303,10 @@ export function transformFormationData(picks: Pick[], stratColumn: Unit[]): { un
|
|
|
303
303
|
// given presedence over lower levels for overlapping picks.
|
|
304
304
|
const unitPicks = [];
|
|
305
305
|
while (itemstack.length > 0) {
|
|
306
|
-
const first = itemstack.pop()
|
|
306
|
+
const first = itemstack.pop()!;
|
|
307
307
|
const group: PairedPickAndUnit[] = [];
|
|
308
|
-
while (itemstack.length > 0 && itemstack[itemstack.length - 1]
|
|
309
|
-
group.push(itemstack.pop());
|
|
308
|
+
while (itemstack.length > 0 && itemstack[itemstack.length - 1]?.level! > first.level) {
|
|
309
|
+
group.push(itemstack.pop()!);
|
|
310
310
|
}
|
|
311
311
|
group.reverse();
|
|
312
312
|
group.push(first);
|