@equinor/esv-intersection 3.0.8 → 3.0.10
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/components/axis.d.ts +1 -2
- package/dist/components/axis.d.ts.map +1 -1
- package/dist/control/ExtendedCurveInterpolator.d.ts.map +1 -1
- package/dist/control/IntersectionReferenceSystem.d.ts +2 -6
- package/dist/control/IntersectionReferenceSystem.d.ts.map +1 -1
- package/dist/control/LayerManager.d.ts +2 -2
- package/dist/control/LayerManager.d.ts.map +1 -1
- package/dist/control/MainController.d.ts +3 -3
- package/dist/control/MainController.d.ts.map +1 -1
- package/dist/control/ZoomPanHandler.d.ts +5 -4
- package/dist/control/ZoomPanHandler.d.ts.map +1 -1
- package/dist/control/interfaces.d.ts +3 -4
- package/dist/control/interfaces.d.ts.map +1 -1
- package/dist/control/overlay.d.ts +3 -3
- package/dist/control/overlay.d.ts.map +1 -1
- package/dist/datautils/colortable.d.ts +1 -1
- package/dist/datautils/colortable.d.ts.map +1 -1
- package/dist/datautils/findsample.d.ts.map +1 -1
- package/dist/datautils/schematicShapeGenerator.d.ts +3 -3
- package/dist/datautils/schematicShapeGenerator.d.ts.map +1 -1
- package/dist/datautils/seismicimage.d.ts.map +1 -1
- package/dist/datautils/trajectory.d.ts +1 -1
- package/dist/datautils/trajectory.d.ts.map +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1373 -1272
- 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 -2
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/layers/CalloutCanvasLayer.d.ts +2 -2
- package/dist/layers/CalloutCanvasLayer.d.ts.map +1 -1
- package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts.map +1 -1
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts.map +1 -1
- package/dist/layers/GeomodelCanvasLayer.d.ts +1 -1
- package/dist/layers/GeomodelCanvasLayer.d.ts.map +1 -1
- package/dist/layers/GeomodelLabelsLayer.d.ts +4 -4
- package/dist/layers/GeomodelLabelsLayer.d.ts.map +1 -1
- package/dist/layers/GeomodelLayerV2.d.ts.map +1 -1
- package/dist/layers/GridLayer.d.ts.map +1 -1
- package/dist/layers/ImageCanvasLayer.d.ts +1 -1
- package/dist/layers/ImageCanvasLayer.d.ts.map +1 -1
- package/dist/layers/ReferenceLineLayer.d.ts +1 -2
- package/dist/layers/ReferenceLineLayer.d.ts.map +1 -1
- package/dist/layers/SchematicLayer.d.ts.map +1 -1
- package/dist/layers/WellborePathLayer.d.ts +1 -1
- package/dist/layers/WellborePathLayer.d.ts.map +1 -1
- package/dist/layers/base/CanvasLayer.d.ts +3 -3
- package/dist/layers/base/CanvasLayer.d.ts.map +1 -1
- package/dist/layers/base/HTMLLayer.d.ts +1 -1
- package/dist/layers/base/HTMLLayer.d.ts.map +1 -1
- package/dist/layers/base/Layer.d.ts +10 -10
- package/dist/layers/base/Layer.d.ts.map +1 -1
- package/dist/layers/base/PixiLayer.d.ts +4 -4
- package/dist/layers/base/PixiLayer.d.ts.map +1 -1
- package/dist/layers/base/SVGLayer.d.ts +1 -1
- package/dist/layers/base/SVGLayer.d.ts.map +1 -1
- package/dist/utils/arc-length.d.ts.map +1 -1
- package/dist/utils/color.d.ts.map +1 -1
- package/dist/utils/root-finder.d.ts +1 -1
- package/dist/utils/root-finder.d.ts.map +1 -1
- package/dist/utils/text.d.ts +2 -2
- package/dist/utils/text.d.ts.map +1 -1
- package/dist/utils/vectorUtils.d.ts.map +1 -1
- package/dist/vendor/pixi-dashed-line/index.d.ts.map +1 -1
- package/package.json +11 -11
- 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 +20 -16
- 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
|
@@ -29,7 +29,7 @@ export interface WellborepathLayerOptions<T extends [number, number][]> extends
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export class WellborepathLayer<T extends [number, number][]> extends SVGLayer<T> {
|
|
32
|
-
rescaleEvent: OnRescaleEvent;
|
|
32
|
+
rescaleEvent: OnRescaleEvent | undefined;
|
|
33
33
|
|
|
34
34
|
constructor(id?: string, options?: WellborepathLayerOptions<T>) {
|
|
35
35
|
super(id, options);
|
|
@@ -78,52 +78,54 @@ export class WellborepathLayer<T extends [number, number][]> extends SVGLayer<T>
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
private renderWellborePath(data: [number, number][]): string {
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
if (this.rescaleEvent != null) {
|
|
82
|
+
const { xScale, yScale } = this.rescaleEvent;
|
|
83
|
+
const transformedData: [number, number][] = data.map((d) => [xScale(d[0]), yScale(d[1])]);
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
85
|
+
// TODO: Might be a good idea to move something like this to a shared function in a base class
|
|
86
|
+
let curveFactory;
|
|
87
|
+
const { curveType, tension } = this.options as WellborepathLayerOptions<T>;
|
|
88
|
+
switch (curveType) {
|
|
89
|
+
default:
|
|
90
|
+
case 'curveCatmullRom':
|
|
91
|
+
curveFactory = curveCatmullRom.alpha(tension || CURVE_CATMULL_ROM_ALPHA);
|
|
92
|
+
break;
|
|
93
|
+
case 'curveLinear':
|
|
94
|
+
curveFactory = curveLinear;
|
|
95
|
+
break;
|
|
96
|
+
case 'curveBasis':
|
|
97
|
+
curveFactory = curveBasis;
|
|
98
|
+
break;
|
|
99
|
+
case 'curveBasisClosed':
|
|
100
|
+
curveFactory = curveBasisClosed;
|
|
101
|
+
break;
|
|
102
|
+
case 'curveBundle':
|
|
103
|
+
curveFactory = curveBundle.beta(tension || CURVE_BUNDLE_BETA);
|
|
104
|
+
break;
|
|
105
|
+
case 'curveCardinal':
|
|
106
|
+
curveFactory = curveCardinal.tension(tension || CURVE_CARDINAL_TENSION);
|
|
107
|
+
break;
|
|
108
|
+
case 'curveMonotoneX':
|
|
109
|
+
curveFactory = curveMonotoneX;
|
|
110
|
+
break;
|
|
111
|
+
case 'curveMonotoneY':
|
|
112
|
+
curveFactory = curveMonotoneY;
|
|
113
|
+
break;
|
|
114
|
+
case 'curveNatural':
|
|
115
|
+
curveFactory = curveNatural;
|
|
116
|
+
break;
|
|
117
|
+
case 'curveStep':
|
|
118
|
+
curveFactory = curveStep;
|
|
119
|
+
break;
|
|
120
|
+
case 'curveStepAfter':
|
|
121
|
+
curveFactory = curveStepAfter;
|
|
122
|
+
break;
|
|
123
|
+
case 'curveStepBefore':
|
|
124
|
+
curveFactory = curveStepBefore;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
return line().curve(curveFactory)(transformedData) ?? '';
|
|
125
128
|
}
|
|
126
|
-
|
|
127
|
-
return line().curve(curveFactory)(transformedData);
|
|
129
|
+
return '';
|
|
128
130
|
}
|
|
129
131
|
}
|
|
@@ -3,9 +3,9 @@ import { OnMountEvent, OnUpdateEvent, OnResizeEvent, OnRescaleEvent } from '../.
|
|
|
3
3
|
import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
|
|
4
4
|
|
|
5
5
|
export abstract class CanvasLayer<T> extends Layer<T> {
|
|
6
|
-
ctx: CanvasRenderingContext2D;
|
|
7
|
-
elm: HTMLElement;
|
|
8
|
-
canvas: HTMLCanvasElement;
|
|
6
|
+
ctx: CanvasRenderingContext2D | undefined;
|
|
7
|
+
elm: HTMLElement | undefined;
|
|
8
|
+
canvas: HTMLCanvasElement | undefined;
|
|
9
9
|
|
|
10
10
|
onOpacityChanged(_opacity: number): void {
|
|
11
11
|
if (this.canvas) {
|
|
@@ -36,7 +36,7 @@ export abstract class CanvasLayer<T> extends Layer<T> {
|
|
|
36
36
|
const isVisible = visible || this.isVisible;
|
|
37
37
|
const visibility = isVisible ? 'visible' : 'hidden';
|
|
38
38
|
const interactive = this.interactive ? 'auto' : 'none';
|
|
39
|
-
this.canvas
|
|
39
|
+
this.canvas?.setAttribute(
|
|
40
40
|
'style',
|
|
41
41
|
`position:absolute;pointer-events:${interactive};z-index:${this.order};opacity:${this.opacity};visibility:${visibility}`,
|
|
42
42
|
);
|
|
@@ -45,8 +45,8 @@ export abstract class CanvasLayer<T> extends Layer<T> {
|
|
|
45
45
|
override onMount(event: OnMountEvent): void {
|
|
46
46
|
super.onMount(event);
|
|
47
47
|
const { elm } = event;
|
|
48
|
-
const width = event.width || parseInt(elm
|
|
49
|
-
const height = event.height || parseInt(elm
|
|
48
|
+
const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;
|
|
49
|
+
const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;
|
|
50
50
|
this.elm = elm;
|
|
51
51
|
let canvas: HTMLCanvasElement;
|
|
52
52
|
if (!this.canvas) {
|
|
@@ -59,21 +59,21 @@ export abstract class CanvasLayer<T> extends Layer<T> {
|
|
|
59
59
|
this.canvas.setAttribute('height', `${height}px`);
|
|
60
60
|
this.canvas.setAttribute('class', 'canvas-layer');
|
|
61
61
|
this.updateStyle();
|
|
62
|
-
this.ctx = this.canvas.getContext('2d');
|
|
62
|
+
this.ctx = this.canvas.getContext('2d') ?? undefined;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
override onUnmount(): void {
|
|
66
66
|
super.onUnmount();
|
|
67
|
-
this.canvas
|
|
68
|
-
this.canvas =
|
|
67
|
+
this.canvas?.remove();
|
|
68
|
+
this.canvas = undefined;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
override onResize(event: OnResizeEvent): void {
|
|
72
72
|
const { ctx } = this;
|
|
73
73
|
const { width, height } = event;
|
|
74
74
|
|
|
75
|
-
ctx
|
|
76
|
-
ctx
|
|
75
|
+
ctx?.canvas.setAttribute('width', `${width}px`);
|
|
76
|
+
ctx?.canvas.setAttribute('height', `${height}px`);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
override onUpdate(event: OnUpdateEvent<T>): void {
|
|
@@ -81,22 +81,22 @@ export abstract class CanvasLayer<T> extends Layer<T> {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
resetTransform(): void {
|
|
84
|
-
this.ctx
|
|
84
|
+
this.ctx?.resetTransform();
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
setTransform(event: OnRescaleEvent): void {
|
|
88
88
|
this.resetTransform();
|
|
89
89
|
const flippedX = event.xBounds[0] > event.xBounds[1];
|
|
90
90
|
const flippedY = event.yBounds[0] > event.yBounds[1];
|
|
91
|
-
this.ctx
|
|
92
|
-
this.ctx
|
|
91
|
+
this.ctx?.translate(event.xScale(0), event.yScale(0));
|
|
92
|
+
this.ctx?.scale(event.xRatio * (flippedX ? -1 : 1), event.yRatio * (flippedY ? -1 : 1));
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
clearCanvas(): void {
|
|
96
96
|
const { ctx, canvas } = this;
|
|
97
|
-
ctx
|
|
98
|
-
ctx
|
|
99
|
-
ctx
|
|
100
|
-
ctx
|
|
97
|
+
ctx?.save();
|
|
98
|
+
ctx?.resetTransform();
|
|
99
|
+
ctx?.clearRect(0, 0, canvas?.width ?? 0, canvas?.height ?? 0);
|
|
100
|
+
ctx?.restore();
|
|
101
101
|
}
|
|
102
102
|
}
|
|
@@ -4,13 +4,13 @@ import { OnMountEvent, OnResizeEvent } from '../../interfaces';
|
|
|
4
4
|
import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
|
|
5
5
|
|
|
6
6
|
export abstract class HTMLLayer<T> extends Layer<T> {
|
|
7
|
-
elm: Selection<
|
|
7
|
+
elm: Selection<HTMLDivElement, unknown, null, undefined> | undefined;
|
|
8
8
|
|
|
9
9
|
override onMount(event: OnMountEvent): void {
|
|
10
10
|
super.onMount(event);
|
|
11
11
|
const { elm } = event;
|
|
12
|
-
const width = event.width || parseInt(elm
|
|
13
|
-
const height = event.height || parseInt(elm
|
|
12
|
+
const width = event.width || parseInt(elm?.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;
|
|
13
|
+
const height = event.height || parseInt(elm?.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;
|
|
14
14
|
|
|
15
15
|
if (!this.elm) {
|
|
16
16
|
this.elm = select(elm).append('div');
|
|
@@ -30,8 +30,8 @@ export abstract class HTMLLayer<T> extends Layer<T> {
|
|
|
30
30
|
|
|
31
31
|
override onUnmount(): void {
|
|
32
32
|
super.onUnmount();
|
|
33
|
-
this.elm
|
|
34
|
-
this.elm =
|
|
33
|
+
this.elm?.remove();
|
|
34
|
+
this.elm = undefined;
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
override onResize(event: OnResizeEvent): void {
|
package/src/layers/base/Layer.ts
CHANGED
|
@@ -26,12 +26,12 @@ export abstract class Layer<T> {
|
|
|
26
26
|
private _order: number;
|
|
27
27
|
protected _options: LayerOptions<T>;
|
|
28
28
|
private loading: boolean;
|
|
29
|
-
private _element
|
|
29
|
+
private _element: HTMLElement | undefined;
|
|
30
30
|
private _opacity: number;
|
|
31
|
-
private _referenceSystem
|
|
32
|
-
private _data
|
|
31
|
+
private _referenceSystem: IntersectionReferenceSystem | undefined;
|
|
32
|
+
private _data: T | undefined;
|
|
33
33
|
private _visible: boolean;
|
|
34
|
-
private _interactive
|
|
34
|
+
private _interactive = false;
|
|
35
35
|
|
|
36
36
|
constructor(id?: string, options?: LayerOptions<T>) {
|
|
37
37
|
this._id = id || `layer-${Math.floor(Math.random() * 1000)}`;
|
|
@@ -41,7 +41,7 @@ export abstract class Layer<T> {
|
|
|
41
41
|
...opts,
|
|
42
42
|
};
|
|
43
43
|
this.loading = false;
|
|
44
|
-
this._element =
|
|
44
|
+
this._element = undefined;
|
|
45
45
|
this._opacity = opts.layerOpacity || 1;
|
|
46
46
|
this._visible = true;
|
|
47
47
|
this._interactive = opts.interactive || false;
|
|
@@ -49,7 +49,7 @@ export abstract class Layer<T> {
|
|
|
49
49
|
if (options && options.data) {
|
|
50
50
|
this.setData(options.data);
|
|
51
51
|
}
|
|
52
|
-
this._referenceSystem = options
|
|
52
|
+
this._referenceSystem = options?.referenceSystem;
|
|
53
53
|
|
|
54
54
|
this.onMount = this.onMount.bind(this);
|
|
55
55
|
this.onUnmount = this.onUnmount.bind(this);
|
|
@@ -65,7 +65,7 @@ export abstract class Layer<T> {
|
|
|
65
65
|
return this._id;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
get element(): HTMLElement {
|
|
68
|
+
get element(): HTMLElement | undefined {
|
|
69
69
|
return this._element;
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -112,19 +112,19 @@ export abstract class Layer<T> {
|
|
|
112
112
|
return this._interactive;
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
get referenceSystem(): IntersectionReferenceSystem {
|
|
115
|
+
get referenceSystem(): IntersectionReferenceSystem | undefined {
|
|
116
116
|
return this._referenceSystem;
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
set referenceSystem(referenceSystem: IntersectionReferenceSystem) {
|
|
119
|
+
set referenceSystem(referenceSystem: IntersectionReferenceSystem | undefined) {
|
|
120
120
|
this._referenceSystem = referenceSystem;
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
get data(): T {
|
|
123
|
+
get data(): T | undefined {
|
|
124
124
|
return this.getData();
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
set data(data: T) {
|
|
127
|
+
set data(data: T | undefined) {
|
|
128
128
|
this.setData(data);
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -132,14 +132,14 @@ export abstract class Layer<T> {
|
|
|
132
132
|
return this._visible;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
getData(): T {
|
|
135
|
+
getData(): T | undefined {
|
|
136
136
|
return this._data;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
setData(data: T): void {
|
|
139
|
+
setData(data: T | undefined): void {
|
|
140
140
|
this._data = data;
|
|
141
141
|
// should not be called when there is no visual element to work with
|
|
142
|
-
if (this.element) {
|
|
142
|
+
if (this.element && data != null) {
|
|
143
143
|
this.onUpdate({ data });
|
|
144
144
|
}
|
|
145
145
|
}
|
|
@@ -148,10 +148,10 @@ export abstract class Layer<T> {
|
|
|
148
148
|
* Clears data and (optionally) the reference system
|
|
149
149
|
* @param includeReferenceSystem - (optional) if true also removes reference system, default is true
|
|
150
150
|
*/
|
|
151
|
-
clearData(includeReferenceSystem
|
|
152
|
-
this._data =
|
|
151
|
+
clearData(includeReferenceSystem = true): void {
|
|
152
|
+
this._data = undefined;
|
|
153
153
|
if (includeReferenceSystem) {
|
|
154
|
-
this.referenceSystem =
|
|
154
|
+
this.referenceSystem = undefined;
|
|
155
155
|
}
|
|
156
156
|
this.onUpdate({});
|
|
157
157
|
}
|
|
@@ -168,7 +168,7 @@ export abstract class Layer<T> {
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
onUnmount(event?: OnUnmountEvent): void {
|
|
171
|
-
if (this._options.onUnmount) {
|
|
171
|
+
if (this._options.onUnmount && event != null) {
|
|
172
172
|
this._options.onUnmount(event, this);
|
|
173
173
|
}
|
|
174
174
|
}
|
|
@@ -9,9 +9,9 @@ import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
|
|
|
9
9
|
// The plugin we are trying to avoid:
|
|
10
10
|
// https://github.com/pixijs/pixijs/blob/dev/packages/ticker/src/TickerPlugin.ts
|
|
11
11
|
export class PixiRenderApplication {
|
|
12
|
-
stage: Container;
|
|
12
|
+
stage: Container | undefined;
|
|
13
13
|
|
|
14
|
-
renderer: IRenderer<HTMLCanvasElement
|
|
14
|
+
renderer: IRenderer<HTMLCanvasElement> | undefined;
|
|
15
15
|
|
|
16
16
|
constructor(pixiRenderOptions?: IRendererOptionsAuto) {
|
|
17
17
|
const options = {
|
|
@@ -29,15 +29,15 @@ export class PixiRenderApplication {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
destroy() {
|
|
32
|
-
this.stage
|
|
32
|
+
this.stage?.destroy({
|
|
33
33
|
children: true,
|
|
34
34
|
texture: true,
|
|
35
35
|
baseTexture: true,
|
|
36
36
|
});
|
|
37
|
-
this.stage =
|
|
37
|
+
this.stage = undefined;
|
|
38
38
|
|
|
39
39
|
// Get renderType and clContext before we destroy the renderer
|
|
40
|
-
const renderType = this.renderer
|
|
40
|
+
const renderType = this.renderer?.type;
|
|
41
41
|
const glContext = this.renderer instanceof Renderer ? this.renderer?.gl : undefined;
|
|
42
42
|
|
|
43
43
|
/**
|
|
@@ -50,21 +50,23 @@ export class PixiRenderApplication {
|
|
|
50
50
|
glContext?.getExtension('WEBGL_lose_context')?.loseContext();
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
this.renderer
|
|
54
|
-
this.renderer =
|
|
53
|
+
this.renderer?.destroy(true);
|
|
54
|
+
this.renderer = undefined;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
get view() {
|
|
58
|
-
return this.renderer
|
|
58
|
+
return this.renderer?.view;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
render() {
|
|
62
|
-
|
|
62
|
+
if (this.stage != null) {
|
|
63
|
+
this.renderer?.render(this.stage);
|
|
64
|
+
}
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
export abstract class PixiLayer<T> extends Layer<T> {
|
|
67
|
-
private pixiViewContainer: HTMLElement;
|
|
69
|
+
private pixiViewContainer: HTMLElement | undefined;
|
|
68
70
|
private ctx: PixiRenderApplication;
|
|
69
71
|
private container: Container;
|
|
70
72
|
|
|
@@ -74,7 +76,7 @@ export abstract class PixiLayer<T> extends Layer<T> {
|
|
|
74
76
|
this.ctx = ctx;
|
|
75
77
|
|
|
76
78
|
this.container = new Container();
|
|
77
|
-
this.ctx.stage
|
|
79
|
+
this.ctx.stage?.addChild(this.container);
|
|
78
80
|
}
|
|
79
81
|
|
|
80
82
|
render(): void {
|
|
@@ -95,16 +97,18 @@ export abstract class PixiLayer<T> extends Layer<T> {
|
|
|
95
97
|
override onMount(event: OnMountEvent) {
|
|
96
98
|
super.onMount(event);
|
|
97
99
|
|
|
98
|
-
this.pixiViewContainer = this.element
|
|
100
|
+
this.pixiViewContainer = this.element?.querySelector('#webgl-layer') ?? undefined;
|
|
99
101
|
|
|
100
102
|
if (!this.pixiViewContainer) {
|
|
101
103
|
this.pixiViewContainer = document.createElement('div');
|
|
102
104
|
this.pixiViewContainer.setAttribute('id', `${this.id}`);
|
|
103
105
|
this.pixiViewContainer.setAttribute('class', 'webgl-layer');
|
|
104
106
|
|
|
105
|
-
|
|
107
|
+
if (this.ctx.view != null) {
|
|
108
|
+
this.pixiViewContainer.appendChild(this.ctx.view);
|
|
109
|
+
}
|
|
106
110
|
|
|
107
|
-
this.element
|
|
111
|
+
this.element?.appendChild(this.pixiViewContainer);
|
|
108
112
|
|
|
109
113
|
this.updateStyle();
|
|
110
114
|
}
|
|
@@ -114,15 +118,15 @@ export abstract class PixiLayer<T> extends Layer<T> {
|
|
|
114
118
|
super.onUnmount(event);
|
|
115
119
|
|
|
116
120
|
this.clearLayer();
|
|
117
|
-
this.ctx.stage
|
|
121
|
+
this.ctx.stage?.removeChild(this.container);
|
|
118
122
|
this.container.destroy();
|
|
119
|
-
this.pixiViewContainer
|
|
123
|
+
this.pixiViewContainer?.remove();
|
|
120
124
|
this.pixiViewContainer = undefined;
|
|
121
125
|
}
|
|
122
126
|
|
|
123
127
|
override onResize(event: OnResizeEvent): void {
|
|
124
128
|
super.onResize(event);
|
|
125
|
-
this.ctx.renderer
|
|
129
|
+
this.ctx.renderer?.resize(event.width, event.height);
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
override onRescale(event: OnRescaleEvent): void {
|
|
@@ -156,7 +160,7 @@ export abstract class PixiLayer<T> extends Layer<T> {
|
|
|
156
160
|
.map((pair) => pair.join(':'))
|
|
157
161
|
.join(';');
|
|
158
162
|
|
|
159
|
-
this.pixiViewContainer
|
|
163
|
+
this.pixiViewContainer?.setAttribute('style', styles);
|
|
160
164
|
}
|
|
161
165
|
|
|
162
166
|
override setVisibility(visible: boolean, layerId?: string): void {
|
|
@@ -184,7 +188,7 @@ export abstract class PixiLayer<T> extends Layer<T> {
|
|
|
184
188
|
}
|
|
185
189
|
}
|
|
186
190
|
|
|
187
|
-
renderType(): RENDERER_TYPE {
|
|
188
|
-
return this.ctx.renderer
|
|
191
|
+
renderType(): RENDERER_TYPE | undefined {
|
|
192
|
+
return this.ctx.renderer?.type;
|
|
189
193
|
}
|
|
190
194
|
}
|
|
@@ -4,13 +4,13 @@ import { OnMountEvent, OnResizeEvent } from '../../interfaces';
|
|
|
4
4
|
import { DEFAULT_LAYER_HEIGHT, DEFAULT_LAYER_WIDTH } from '../../constants';
|
|
5
5
|
|
|
6
6
|
export abstract class SVGLayer<T> extends Layer<T> {
|
|
7
|
-
elm: Selection<
|
|
7
|
+
elm: Selection<SVGSVGElement, unknown, null, undefined> | undefined;
|
|
8
8
|
|
|
9
9
|
override onMount(event: OnMountEvent): void {
|
|
10
10
|
super.onMount(event);
|
|
11
11
|
const { elm } = event;
|
|
12
|
-
const width = event.width || parseInt(elm.getAttribute('width'), 10) || DEFAULT_LAYER_WIDTH;
|
|
13
|
-
const height = event.height || parseInt(elm.getAttribute('height'), 10) || DEFAULT_LAYER_HEIGHT;
|
|
12
|
+
const width = event.width || parseInt(elm.getAttribute('width') ?? '', 10) || DEFAULT_LAYER_WIDTH;
|
|
13
|
+
const height = event.height || parseInt(elm.getAttribute('height') ?? '', 10) || DEFAULT_LAYER_HEIGHT;
|
|
14
14
|
if (!this.elm) {
|
|
15
15
|
this.elm = select(elm).append('svg');
|
|
16
16
|
this.elm.attr('id', `${this.id}`);
|
|
@@ -23,8 +23,8 @@ export abstract class SVGLayer<T> extends Layer<T> {
|
|
|
23
23
|
|
|
24
24
|
override onUnmount(): void {
|
|
25
25
|
super.onUnmount();
|
|
26
|
-
this.elm
|
|
27
|
-
this.elm =
|
|
26
|
+
this.elm?.remove();
|
|
27
|
+
this.elm = undefined;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
override onResize(event: OnResizeEvent): void {
|
package/src/utils/arc-length.ts
CHANGED
|
@@ -16,15 +16,8 @@ export class ArcLength {
|
|
|
16
16
|
* @param {Number} minDepth Min recursive depth before accepting solution
|
|
17
17
|
* @param {Number} maxDepth Max recursive depth
|
|
18
18
|
*/
|
|
19
|
-
static bisect(
|
|
20
|
-
|
|
21
|
-
minLimit: number = 0,
|
|
22
|
-
maxLimit: number = 1,
|
|
23
|
-
tolerance: number = 0.005,
|
|
24
|
-
minDepth: number = 4,
|
|
25
|
-
maxDepth: number = 10,
|
|
26
|
-
): number {
|
|
27
|
-
const calcRec = (a: number, b: number, aVal: number[], bVal: number[], span: number, tolerance: number, depth: number = 0): number => {
|
|
19
|
+
static bisect(func: fx, minLimit = 0, maxLimit = 1, tolerance = 0.005, minDepth = 4, maxDepth = 10): number {
|
|
20
|
+
const calcRec = (a: number, b: number, aVal: number[], bVal: number[], span: number, tolerance: number, depth = 0): number => {
|
|
28
21
|
const mid = (a + b) / 2;
|
|
29
22
|
const midVal = func(mid) as number[];
|
|
30
23
|
const spanA = Vector2.distance(aVal, midVal);
|
|
@@ -51,7 +44,7 @@ export class ArcLength {
|
|
|
51
44
|
* @param {Number} maxLimit Max limit
|
|
52
45
|
* @param {Number} segments Number of segments
|
|
53
46
|
*/
|
|
54
|
-
static trapezoid(func: fx, minLimit
|
|
47
|
+
static trapezoid(func: fx, minLimit = 0, maxLimit = 1, segments = 1000): number {
|
|
55
48
|
let length = 0;
|
|
56
49
|
let lastPos = func(minLimit) as number[];
|
|
57
50
|
const step = (maxLimit - minLimit) / (segments - 1);
|
|
@@ -11,10 +11,10 @@ export class BinarySearch {
|
|
|
11
11
|
while (i > il && i < ih) {
|
|
12
12
|
const v = values[i];
|
|
13
13
|
const v1 = values[i + 1];
|
|
14
|
-
if (v <= searchValue && v1 >= searchValue) {
|
|
14
|
+
if (v != null && v1 != null && v <= searchValue && v1 >= searchValue) {
|
|
15
15
|
return i;
|
|
16
16
|
}
|
|
17
|
-
if (searchValue < v) {
|
|
17
|
+
if (v != null && searchValue < v) {
|
|
18
18
|
ih = i;
|
|
19
19
|
} else {
|
|
20
20
|
il = i;
|
package/src/utils/color.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { color
|
|
1
|
+
import { color } from 'd3-color';
|
|
2
2
|
|
|
3
3
|
const RADIX_SIXTEEN = 16;
|
|
4
4
|
const HEX_STRING_LENGTH = 6;
|
|
@@ -6,10 +6,14 @@ const HEX_STRING_LENGTH = 6;
|
|
|
6
6
|
* Convert color string to number
|
|
7
7
|
*/
|
|
8
8
|
export function convertColor(colorStr: string): number {
|
|
9
|
-
const c
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const c = color(colorStr);
|
|
10
|
+
if (c != null) {
|
|
11
|
+
const d: string = c?.formatHex();
|
|
12
|
+
const n: number = parseInt(d.replace('#', '0x'));
|
|
13
|
+
return n;
|
|
14
|
+
} else {
|
|
15
|
+
throw Error(`Could not format string ${colorStr} to hex code.`);
|
|
16
|
+
}
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
export function colorToCSSColor(color: number | string): string {
|
package/src/utils/root-finder.ts
CHANGED
|
@@ -15,7 +15,7 @@ export class RootFinder {
|
|
|
15
15
|
* @param {Number} minLimit Min limit of result
|
|
16
16
|
* @param {Number} maxLimit Max limit of result
|
|
17
17
|
*/
|
|
18
|
-
static newton(func: fx, precision
|
|
18
|
+
static newton(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number | undefined {
|
|
19
19
|
const h = 0.0001;
|
|
20
20
|
let t = start;
|
|
21
21
|
for (let i = 0; i < maxIterations; i++) {
|
|
@@ -26,7 +26,7 @@ export class RootFinder {
|
|
|
26
26
|
const d = (func(t + h) - v) / h;
|
|
27
27
|
t = t - v / d;
|
|
28
28
|
}
|
|
29
|
-
return
|
|
29
|
+
return undefined;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
/**
|
|
@@ -38,7 +38,7 @@ export class RootFinder {
|
|
|
38
38
|
* @param {Number} minLimit Min limit of result
|
|
39
39
|
* @param {Number} maxLimit Max limit of result
|
|
40
40
|
*/
|
|
41
|
-
static bisect(func: fx, precision
|
|
41
|
+
static bisect(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
|
|
42
42
|
let tl = minLimit;
|
|
43
43
|
let th = maxLimit;
|
|
44
44
|
let t = start;
|
|
@@ -68,7 +68,7 @@ export class RootFinder {
|
|
|
68
68
|
* @param {Number} minLimit Min limit of result
|
|
69
69
|
* @param {Number} maxLimit Max limit of result
|
|
70
70
|
*/
|
|
71
|
-
static findRoot(func: fx, precision
|
|
71
|
+
static findRoot(func: fx, precision = 0.01, maxIterations = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
|
|
72
72
|
let t = RootFinder.newton(func, precision, maxIterations, start);
|
|
73
73
|
if (t == null) {
|
|
74
74
|
t = RootFinder.bisect(func, precision, maxIterations, start, minLimit, maxLimit);
|
package/src/utils/text.ts
CHANGED
|
@@ -7,7 +7,7 @@ const DEFAULT_HORIZONTAL_PADDING = 4;
|
|
|
7
7
|
const DEFAULT_VERTICAL_PADDING = 2;
|
|
8
8
|
|
|
9
9
|
export function pixelsPerUnit(x: ScaleLinear<number, number>): number {
|
|
10
|
-
const [min] = x.domain();
|
|
10
|
+
const [min] = x.domain() as [number, number];
|
|
11
11
|
return Math.abs(x(min + 1));
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -42,14 +42,14 @@ export function isOverlapping(
|
|
|
42
42
|
return true;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
export function getOverlap(r1: BoundingBox, r2: BoundingBox): { dx: number; dy: number } {
|
|
45
|
+
export function getOverlap(r1: BoundingBox, r2: BoundingBox): { dx: number; dy: number } | undefined {
|
|
46
46
|
const r1x2 = r1.x + r1.width;
|
|
47
47
|
const r2x2 = r2.x + r2.width;
|
|
48
48
|
const r1y2 = r1.y + r1.height;
|
|
49
49
|
const r2y2 = r2.y + r2.height;
|
|
50
50
|
|
|
51
51
|
if (r2.x > r1x2 || r2.y > r1y2 || r2x2 < r1.x || r2y2 < r1.y) {
|
|
52
|
-
return
|
|
52
|
+
return undefined;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
const dx = Math.max(0, Math.min(r1.x + r1.width, r2.x + r2.width) - Math.max(r1.x, r2.x));
|
|
@@ -67,14 +67,14 @@ export function getOverlapOffset(
|
|
|
67
67
|
r2: BoundingBox,
|
|
68
68
|
horizontalPadding = DEFAULT_HORIZONTAL_PADDING,
|
|
69
69
|
verticalPadding = DEFAULT_VERTICAL_PADDING,
|
|
70
|
-
): { dx: number; dy: number } {
|
|
70
|
+
): { dx: number; dy: number } | undefined {
|
|
71
71
|
const r1x2 = r1.x + r1.width;
|
|
72
72
|
const r2x2 = r2.x + r2.width;
|
|
73
73
|
const r1y2 = r1.y + r1.height;
|
|
74
74
|
const r2y2 = r2.y + r2.height;
|
|
75
75
|
|
|
76
76
|
if (r2.x - horizontalPadding > r1x2 || r2.y - verticalPadding > r1y2 || r2x2 + horizontalPadding < r1.x || r2y2 + verticalPadding < r1.y) {
|
|
77
|
-
return
|
|
77
|
+
return undefined;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
const dx = r1.x + r1.width - r2.x + horizontalPadding;
|