@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
|
@@ -47,10 +47,10 @@ export interface CalloutOptions<T extends Annotation[]> extends LayerOptions<T>
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
50
|
-
rescaleEvent: OnRescaleEvent;
|
|
51
|
-
xRatio: number;
|
|
52
|
-
callouts: Callout[];
|
|
53
|
-
groupFilter: string[] =
|
|
50
|
+
rescaleEvent: OnRescaleEvent | undefined;
|
|
51
|
+
xRatio: number | undefined;
|
|
52
|
+
callouts: Callout[] = [];
|
|
53
|
+
groupFilter: string[] = [];
|
|
54
54
|
minFontSize: number;
|
|
55
55
|
maxFontSize: number;
|
|
56
56
|
fontSizeFactor: number;
|
|
@@ -60,25 +60,23 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
60
60
|
|
|
61
61
|
constructor(id?: string, options?: CalloutOptions<T>) {
|
|
62
62
|
super(id, options);
|
|
63
|
-
this.minFontSize = options
|
|
64
|
-
this.maxFontSize = options
|
|
65
|
-
this.fontSizeFactor = options
|
|
66
|
-
this.offsetMin = options
|
|
67
|
-
this.offsetMax = options
|
|
68
|
-
this.offsetFactor = options
|
|
63
|
+
this.minFontSize = options?.minFontSize || DEFAULT_MIN_FONT_SIZE;
|
|
64
|
+
this.maxFontSize = options?.maxFontSize || DEFAULT_MAX_FONT_SIZE;
|
|
65
|
+
this.fontSizeFactor = options?.fontSizeFactor || DEFAULT_FONT_SIZE_FACTOR;
|
|
66
|
+
this.offsetMin = options?.offsetMin || DEFAULT_OFFSET_MIN;
|
|
67
|
+
this.offsetMax = options?.offsetMax || DEFAULT_OFFSET_MAX;
|
|
68
|
+
this.offsetFactor = options?.offsetFactor || DEFAULT_OFFSET_FACTOR;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
setGroupFilter(filter: string[]): void {
|
|
72
72
|
this.groupFilter = filter;
|
|
73
|
-
this.callouts =
|
|
73
|
+
this.callouts = [];
|
|
74
74
|
this.render();
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
override onUpdate(event: OnUpdateEvent<T>): void {
|
|
78
78
|
super.onUpdate(event);
|
|
79
|
-
|
|
80
|
-
this.callouts = undefined;
|
|
81
|
-
|
|
79
|
+
this.callouts = [];
|
|
82
80
|
this.render();
|
|
83
81
|
}
|
|
84
82
|
|
|
@@ -102,14 +100,14 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
102
100
|
|
|
103
101
|
const fontSize = calcSize(this.fontSizeFactor, this.minFontSize, this.maxFontSize, xScale);
|
|
104
102
|
|
|
105
|
-
if (!isPanning ||
|
|
103
|
+
if (!isPanning || this.callouts.length <= 0) {
|
|
106
104
|
const { data, ctx, groupFilter } = this;
|
|
107
105
|
const { calculateDisplacementFromBottom } = this.referenceSystem.options;
|
|
108
106
|
const isLeftToRight = calculateDisplacementFromBottom ? xBounds[0] < xBounds[1] : xBounds[0] > xBounds[1];
|
|
109
107
|
const scale = 0;
|
|
110
108
|
|
|
111
|
-
ctx.font = `bold ${fontSize}px arial
|
|
112
|
-
const filtered = data.filter((d: Annotation) =>
|
|
109
|
+
ctx != null && (ctx.font = `bold ${fontSize}px arial`);
|
|
110
|
+
const filtered = data.filter((d: Annotation) => groupFilter.length <= 0 || groupFilter.includes(d.group));
|
|
113
111
|
const offset = calcSize(this.offsetFactor, this.offsetMin, this.offsetMax, xScale);
|
|
114
112
|
this.callouts = this.positionCallouts(filtered, isLeftToRight, xScale, yScale, scale, fontSize, offset);
|
|
115
113
|
}
|
|
@@ -138,27 +136,24 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
138
136
|
this.renderText(label, x, y, fontSize, color);
|
|
139
137
|
};
|
|
140
138
|
|
|
141
|
-
private renderText(
|
|
142
|
-
title: string,
|
|
143
|
-
x: number,
|
|
144
|
-
y: number,
|
|
145
|
-
fontSize: number,
|
|
146
|
-
color: string,
|
|
147
|
-
font: string = 'arial',
|
|
148
|
-
fontStyle: string = 'normal',
|
|
149
|
-
): void {
|
|
139
|
+
private renderText(title: string, x: number, y: number, fontSize: number, color: string, font = 'arial', fontStyle = 'normal'): void {
|
|
150
140
|
const { ctx } = this;
|
|
151
|
-
ctx
|
|
152
|
-
|
|
153
|
-
|
|
141
|
+
if (ctx != null) {
|
|
142
|
+
ctx.font = `${fontStyle} ${fontSize}px ${font}`;
|
|
143
|
+
ctx.fillStyle = color;
|
|
144
|
+
ctx.fillText(title, x, y);
|
|
145
|
+
}
|
|
154
146
|
}
|
|
155
147
|
|
|
156
|
-
private renderPoint(x: number, y: number, radius
|
|
148
|
+
private renderPoint(x: number, y: number, radius = 3): void {
|
|
157
149
|
const { ctx } = this;
|
|
158
|
-
|
|
159
|
-
ctx
|
|
160
|
-
|
|
161
|
-
|
|
150
|
+
|
|
151
|
+
if (ctx != null) {
|
|
152
|
+
ctx.beginPath();
|
|
153
|
+
ctx.moveTo(x, y);
|
|
154
|
+
ctx.arc(x, y, radius, 0, Math.PI * 2);
|
|
155
|
+
ctx.fill();
|
|
156
|
+
}
|
|
162
157
|
}
|
|
163
158
|
|
|
164
159
|
private renderCallout(title: string, label: string, boundingBox: BoundingBox, color: string, location: string): void {
|
|
@@ -172,25 +167,27 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
172
167
|
this.renderLine(x, y, width, dotX, dotY, color, placeLeft);
|
|
173
168
|
}
|
|
174
169
|
|
|
175
|
-
private renderLine = (x: number, y: number, width: number, dotX: number, dotY: number, color: string, placeLeft
|
|
170
|
+
private renderLine = (x: number, y: number, width: number, dotX: number, dotY: number, color: string, placeLeft = true): void => {
|
|
176
171
|
const { ctx } = this;
|
|
177
172
|
const textX = placeLeft ? x : x + width;
|
|
178
173
|
const inverseTextX = placeLeft ? x + width : x;
|
|
179
174
|
const textY = y + 2;
|
|
180
175
|
|
|
181
|
-
ctx
|
|
182
|
-
|
|
176
|
+
if (ctx != null) {
|
|
177
|
+
ctx.strokeStyle = color;
|
|
178
|
+
ctx.lineWidth = 1;
|
|
183
179
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
180
|
+
ctx.beginPath();
|
|
181
|
+
ctx.moveTo(dotX, dotY);
|
|
182
|
+
ctx.lineTo(textX, textY);
|
|
183
|
+
ctx.lineTo(inverseTextX, textY);
|
|
188
184
|
|
|
189
|
-
|
|
185
|
+
ctx.stroke();
|
|
186
|
+
}
|
|
190
187
|
};
|
|
191
188
|
|
|
192
189
|
private getPosition(boundingBox: BoundingBox, location: string): Point {
|
|
193
|
-
const { x, y, offsetX, offsetY, width } = boundingBox;
|
|
190
|
+
const { x, y, offsetX = 0, offsetY = 0, width } = boundingBox;
|
|
194
191
|
switch (location) {
|
|
195
192
|
case Location.topleft:
|
|
196
193
|
return {
|
|
@@ -228,7 +225,7 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
228
225
|
yScale: ScaleLinear<number, number>,
|
|
229
226
|
_scale: number,
|
|
230
227
|
fontSize: number,
|
|
231
|
-
offset
|
|
228
|
+
offset = 20,
|
|
232
229
|
): Callout[] {
|
|
233
230
|
if (annotations.length === 0) {
|
|
234
231
|
return [];
|
|
@@ -236,12 +233,12 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
236
233
|
const alignment = isLeftToRight ? Location.topleft : Location.topright;
|
|
237
234
|
|
|
238
235
|
const nodes = annotations.map((a) => {
|
|
239
|
-
const pos = a.pos ? a.pos : this.referenceSystem
|
|
236
|
+
const pos = a.pos ? a.pos : this.referenceSystem?.project(a.md!)!;
|
|
240
237
|
return {
|
|
241
238
|
title: a.title,
|
|
242
239
|
label: a.label,
|
|
243
240
|
color: a.color,
|
|
244
|
-
pos: { x: pos[0]
|
|
241
|
+
pos: { x: pos?.[0]!, y: pos?.[1]! },
|
|
245
242
|
group: a.group,
|
|
246
243
|
alignment,
|
|
247
244
|
boundingBox: this.getAnnotationBoundingBox(a.title, a.label, pos, xScale, yScale, fontSize),
|
|
@@ -250,7 +247,7 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
250
247
|
};
|
|
251
248
|
});
|
|
252
249
|
|
|
253
|
-
const top = [nodes[nodes.length - 1]];
|
|
250
|
+
const top = [nodes[nodes.length - 1]!];
|
|
254
251
|
const bottom: Callout[] = [];
|
|
255
252
|
|
|
256
253
|
// Initial best effort
|
|
@@ -274,11 +271,11 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
274
271
|
height: number,
|
|
275
272
|
): { x: number; y: number; width: number; height: number } {
|
|
276
273
|
const { ctx } = this;
|
|
277
|
-
const ax1 = xScale(pos[0]);
|
|
278
|
-
const ay1 = yScale(pos[1]);
|
|
274
|
+
const ax1 = xScale(pos[0]!);
|
|
275
|
+
const ay1 = yScale(pos[1]!);
|
|
279
276
|
|
|
280
|
-
const labelWidth = ctx
|
|
281
|
-
const titleWidth = ctx
|
|
277
|
+
const labelWidth = ctx?.measureText(label).width ?? 0;
|
|
278
|
+
const titleWidth = ctx?.measureText(title).width ?? 0;
|
|
282
279
|
const width = Math.max(labelWidth, titleWidth);
|
|
283
280
|
|
|
284
281
|
const bbox = {
|
|
@@ -292,15 +289,15 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
292
289
|
|
|
293
290
|
chooseTopOrBottomPosition(nodes: Callout[], bottom: Callout[], top: Callout[]): void {
|
|
294
291
|
for (let i = nodes.length - 2; i >= 0; --i) {
|
|
295
|
-
const node = nodes[i]
|
|
296
|
-
const prevNode = top[0]
|
|
292
|
+
const node = nodes[i]!;
|
|
293
|
+
const prevNode = top[0]!;
|
|
297
294
|
|
|
298
295
|
const overlap = isOverlapping(node.boundingBox, prevNode.boundingBox);
|
|
299
296
|
if (overlap) {
|
|
300
297
|
node.alignment = node.alignment === Location.topleft ? Location.bottomright : Location.bottomleft;
|
|
301
298
|
bottom.push(node);
|
|
302
299
|
if (i > 0) {
|
|
303
|
-
top.unshift(nodes[--i]);
|
|
300
|
+
top.unshift(nodes[--i]!);
|
|
304
301
|
}
|
|
305
302
|
} else {
|
|
306
303
|
top.unshift(node);
|
|
@@ -310,9 +307,9 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
310
307
|
|
|
311
308
|
adjustTopPositions(top: Callout[]): void {
|
|
312
309
|
for (let i = top.length - 2; i >= 0; --i) {
|
|
313
|
-
const currentNode = top[i]
|
|
310
|
+
const currentNode = top[i]!;
|
|
314
311
|
for (let j = top.length - 1; j > i; --j) {
|
|
315
|
-
const prevNode = top[j]
|
|
312
|
+
const prevNode = top[j]!;
|
|
316
313
|
const overlap = getOverlapOffset(currentNode.boundingBox, prevNode.boundingBox);
|
|
317
314
|
if (overlap) {
|
|
318
315
|
currentNode.dy += overlap.dy;
|
|
@@ -324,9 +321,9 @@ export class CalloutCanvasLayer<T extends Annotation[]> extends CanvasLayer<T> {
|
|
|
324
321
|
|
|
325
322
|
adjustBottomPositions(bottom: Callout[]): void {
|
|
326
323
|
for (let i = bottom.length - 2; i >= 0; --i) {
|
|
327
|
-
const currentNode = bottom[i]
|
|
324
|
+
const currentNode = bottom[i]!;
|
|
328
325
|
for (let j = bottom.length - 1; j > i; --j) {
|
|
329
|
-
const prevNode = bottom[j]
|
|
326
|
+
const prevNode = bottom[j]!;
|
|
330
327
|
const overlap = getOverlapOffset(prevNode.boundingBox, currentNode.boundingBox);
|
|
331
328
|
if (overlap) {
|
|
332
329
|
currentNode.dy += overlap.dy;
|
|
@@ -28,7 +28,7 @@ export class ComplexRopeGeometry extends MeshGeometry {
|
|
|
28
28
|
* @readonly
|
|
29
29
|
*/
|
|
30
30
|
get width(): number {
|
|
31
|
-
return max(this.segments, (segment) => segment.diameter)
|
|
31
|
+
return max(this.segments, (segment) => segment.diameter)!;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/** Refreshes Rope indices and uvs */
|
|
@@ -66,7 +66,7 @@ export class ComplexRopeGeometry extends MeshGeometry {
|
|
|
66
66
|
uvs[3] = 1;
|
|
67
67
|
|
|
68
68
|
const segmentCount = segments.length;
|
|
69
|
-
const maxDiameter = max(segments, (segment) => segment.diameter)
|
|
69
|
+
const maxDiameter = max(segments, (segment) => segment.diameter)!;
|
|
70
70
|
|
|
71
71
|
let amount = 0;
|
|
72
72
|
let uvIndex = 0;
|
|
@@ -74,21 +74,21 @@ export class ComplexRopeGeometry extends MeshGeometry {
|
|
|
74
74
|
let indexCount = 0;
|
|
75
75
|
|
|
76
76
|
for (let i = 0; i < segmentCount; i++) {
|
|
77
|
-
let prev = segments[i]
|
|
77
|
+
let prev = segments[i]?.points[0]!;
|
|
78
78
|
const textureWidth = maxDiameter;
|
|
79
|
-
const radius = segments[i]
|
|
79
|
+
const radius = segments[i]?.diameter! / maxDiameter / 2;
|
|
80
80
|
|
|
81
|
-
const total = segments[i]
|
|
81
|
+
const total = segments[i]?.points.length!; // - 1;
|
|
82
82
|
|
|
83
83
|
for (let j = 0; j < total; j++) {
|
|
84
84
|
// time to do some smart drawing!
|
|
85
85
|
|
|
86
86
|
// calculate pixel distance from previous point
|
|
87
|
-
const dx = prev.x - segments[i]
|
|
88
|
-
const dy = prev.y - segments[i]
|
|
87
|
+
const dx = prev.x - segments[i]?.points[j]?.x!;
|
|
88
|
+
const dy = prev.y - segments[i]?.points[j]?.y!;
|
|
89
89
|
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
90
90
|
|
|
91
|
-
prev = segments[i]
|
|
91
|
+
prev = segments[i]?.points[j]!;
|
|
92
92
|
amount += distance / textureWidth;
|
|
93
93
|
|
|
94
94
|
uvs[uvIndex] = amount;
|
|
@@ -131,20 +131,20 @@ export class ComplexRopeGeometry extends MeshGeometry {
|
|
|
131
131
|
const segmentCount = segments.length;
|
|
132
132
|
let lastIndex = 0;
|
|
133
133
|
for (let i = 0; i < segmentCount; i++) {
|
|
134
|
-
let lastPoint = segments[i]
|
|
134
|
+
let lastPoint = segments[i]?.points[0]!;
|
|
135
135
|
let nextPoint;
|
|
136
136
|
let perpX = 0;
|
|
137
137
|
let perpY = 0;
|
|
138
138
|
|
|
139
|
-
const vertices = this.buffers[0]
|
|
140
|
-
const total = segments[i]
|
|
139
|
+
const vertices = this.buffers[0]?.data;
|
|
140
|
+
const total = segments[i]?.points.length!;
|
|
141
141
|
let index = 0;
|
|
142
142
|
for (let j = 0; j < total; j++) {
|
|
143
|
-
const point = segments[i]
|
|
143
|
+
const point = segments[i]?.points[j]!;
|
|
144
144
|
index = lastIndex + j * 4;
|
|
145
145
|
|
|
146
|
-
if (j < segments[i]
|
|
147
|
-
nextPoint = segments[i]
|
|
146
|
+
if (j < segments[i]?.points.length! - 1) {
|
|
147
|
+
nextPoint = segments[i]?.points[j + 1]!;
|
|
148
148
|
} else {
|
|
149
149
|
nextPoint = point;
|
|
150
150
|
}
|
|
@@ -153,7 +153,7 @@ export class ComplexRopeGeometry extends MeshGeometry {
|
|
|
153
153
|
perpX = nextPoint.y - lastPoint.y;
|
|
154
154
|
|
|
155
155
|
const perpLength = Math.sqrt(perpX * perpX + perpY * perpY);
|
|
156
|
-
const num = segments[i]
|
|
156
|
+
const num = segments[i]?.diameter! / 2;
|
|
157
157
|
|
|
158
158
|
perpX /= perpLength;
|
|
159
159
|
perpY /= perpLength;
|
|
@@ -161,16 +161,19 @@ export class ComplexRopeGeometry extends MeshGeometry {
|
|
|
161
161
|
perpX *= num;
|
|
162
162
|
perpY *= num;
|
|
163
163
|
|
|
164
|
-
vertices
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
164
|
+
if (vertices != null) {
|
|
165
|
+
vertices[index] = point.x + perpX;
|
|
166
|
+
vertices[index + 1] = point.y + perpY;
|
|
167
|
+
vertices[index + 2] = point.x - perpX;
|
|
168
|
+
vertices[index + 3] = point.y - perpY;
|
|
169
|
+
}
|
|
170
|
+
|
|
168
171
|
lastPoint = point;
|
|
169
172
|
}
|
|
170
173
|
lastIndex = index + 4;
|
|
171
174
|
}
|
|
172
175
|
|
|
173
|
-
this.buffers[0]
|
|
176
|
+
this.buffers[0]?.update();
|
|
174
177
|
}
|
|
175
178
|
|
|
176
179
|
public update(): void {
|
|
@@ -8,7 +8,6 @@ export class FixedWidthSimpleRopeGeometry extends MeshGeometry {
|
|
|
8
8
|
* @param {PIXI.Point[]} [points] - An array of PIXI.Point objects to construct this rope.
|
|
9
9
|
*/
|
|
10
10
|
constructor(points: IPoint[], width = 200) {
|
|
11
|
-
// eslint-disable-next-line no-magic-numbers
|
|
12
11
|
super(new Float32Array(points.length * 4), new Float32Array(points.length * 4), new Uint16Array((points.length - 1) * 6));
|
|
13
12
|
/**
|
|
14
13
|
* An array of points that determine the rope
|
|
@@ -66,17 +65,17 @@ export class FixedWidthSimpleRopeGeometry extends MeshGeometry {
|
|
|
66
65
|
uvs[2] = 0;
|
|
67
66
|
uvs[3] = 1;
|
|
68
67
|
let amount = 0;
|
|
69
|
-
let prev = points[0]
|
|
68
|
+
let prev = points[0]!;
|
|
70
69
|
const total = points.length; // - 1;
|
|
71
70
|
for (let i = 0; i < total; i++) {
|
|
72
71
|
// time to do some smart drawing!
|
|
73
72
|
const index = i * 4;
|
|
74
73
|
|
|
75
74
|
// calculate pixel distance from previous point
|
|
76
|
-
const dx = prev.x - points[i]
|
|
77
|
-
const dy = prev.y - points[i]
|
|
75
|
+
const dx = prev.x - points[i]?.x!;
|
|
76
|
+
const dy = prev.y - points[i]?.y!;
|
|
78
77
|
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
79
|
-
prev = points[i]
|
|
78
|
+
prev = points[i]!;
|
|
80
79
|
amount += distance / this._width;
|
|
81
80
|
|
|
82
81
|
uvs[index] = amount;
|
|
@@ -107,17 +106,17 @@ export class FixedWidthSimpleRopeGeometry extends MeshGeometry {
|
|
|
107
106
|
if (points.length < 1) {
|
|
108
107
|
return;
|
|
109
108
|
}
|
|
110
|
-
let lastPoint = points[0]
|
|
109
|
+
let lastPoint = points[0]!;
|
|
111
110
|
let nextPoint;
|
|
112
111
|
let perpX = 0;
|
|
113
112
|
let perpY = 0;
|
|
114
|
-
const vertices = this.buffers[0]
|
|
113
|
+
const vertices = this.buffers[0]?.data!;
|
|
115
114
|
const total = points.length;
|
|
116
115
|
for (let i = 0; i < total; i++) {
|
|
117
|
-
const point = points[i]
|
|
116
|
+
const point = points[i]!;
|
|
118
117
|
const index = i * 4;
|
|
119
118
|
if (i < points.length - 1) {
|
|
120
|
-
nextPoint = points[i + 1]
|
|
119
|
+
nextPoint = points[i + 1]!;
|
|
121
120
|
} else {
|
|
122
121
|
nextPoint = point;
|
|
123
122
|
}
|
|
@@ -140,7 +139,7 @@ export class FixedWidthSimpleRopeGeometry extends MeshGeometry {
|
|
|
140
139
|
vertices[index + 3] = point.y - perpY;
|
|
141
140
|
lastPoint = point;
|
|
142
141
|
}
|
|
143
|
-
this.buffers[0]
|
|
142
|
+
this.buffers[0]?.update();
|
|
144
143
|
}
|
|
145
144
|
|
|
146
145
|
public update(): void {
|
|
@@ -55,14 +55,14 @@ export class UniformTextureStretchRopeGeometry extends MeshGeometry {
|
|
|
55
55
|
const total = points.length; // - 1;
|
|
56
56
|
|
|
57
57
|
let totalLength = 0;
|
|
58
|
-
let prevPoint = points[0]
|
|
58
|
+
let prevPoint = points[0]!;
|
|
59
59
|
|
|
60
60
|
for (let i = 0; i < total; i++) {
|
|
61
|
-
const dx = prevPoint.x - points[i]
|
|
62
|
-
const dy = prevPoint.y - points[i]
|
|
61
|
+
const dx = prevPoint.x - points[i]?.x!;
|
|
62
|
+
const dy = prevPoint.y - points[i]?.y!;
|
|
63
63
|
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
64
64
|
|
|
65
|
-
prevPoint = points[i]
|
|
65
|
+
prevPoint = points[i]!;
|
|
66
66
|
totalLength += distance;
|
|
67
67
|
}
|
|
68
68
|
|
|
@@ -75,18 +75,18 @@ export class UniformTextureStretchRopeGeometry extends MeshGeometry {
|
|
|
75
75
|
uvs[3] = 1;
|
|
76
76
|
|
|
77
77
|
let amount = 0;
|
|
78
|
-
let prev = points[0]
|
|
78
|
+
let prev = points[0]!;
|
|
79
79
|
|
|
80
80
|
for (let i = 0; i < total; i++) {
|
|
81
81
|
// time to do some smart drawing!
|
|
82
82
|
const index = i * 4;
|
|
83
83
|
|
|
84
84
|
// calculate pixel distance from previous point
|
|
85
|
-
const dx = prev.x - points[i]
|
|
86
|
-
const dy = prev.y - points[i]
|
|
85
|
+
const dx = prev.x - points[i]?.x!;
|
|
86
|
+
const dy = prev.y - points[i]?.y!;
|
|
87
87
|
const distance = Math.sqrt(dx * dx + dy * dy);
|
|
88
88
|
|
|
89
|
-
prev = points[i]
|
|
89
|
+
prev = points[i]!;
|
|
90
90
|
|
|
91
91
|
// strech texture on distance/length instead of point/points.length to get a more correct strech
|
|
92
92
|
amount += distance / totalLength;
|
|
@@ -127,20 +127,20 @@ export class UniformTextureStretchRopeGeometry extends MeshGeometry {
|
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
let lastPoint = points[0]
|
|
130
|
+
let lastPoint = points[0]!;
|
|
131
131
|
let nextPoint;
|
|
132
132
|
let perpX = 0;
|
|
133
133
|
let perpY = 0;
|
|
134
134
|
|
|
135
|
-
const vertices = this.buffers[0]
|
|
135
|
+
const vertices = this.buffers[0]?.data!;
|
|
136
136
|
const total = points.length;
|
|
137
137
|
|
|
138
138
|
for (let i = 0; i < total; i++) {
|
|
139
|
-
const point = points[i]
|
|
139
|
+
const point = points[i]!;
|
|
140
140
|
const index = i * 4;
|
|
141
141
|
|
|
142
142
|
if (i < points.length - 1) {
|
|
143
|
-
nextPoint = points[i + 1]
|
|
143
|
+
nextPoint = points[i + 1]!;
|
|
144
144
|
} else {
|
|
145
145
|
nextPoint = point;
|
|
146
146
|
}
|
|
@@ -165,7 +165,7 @@ export class UniformTextureStretchRopeGeometry extends MeshGeometry {
|
|
|
165
165
|
lastPoint = point;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
this.buffers[0]
|
|
168
|
+
this.buffers[0]?.update();
|
|
169
169
|
}
|
|
170
170
|
|
|
171
171
|
public update(): void {
|
|
@@ -12,7 +12,7 @@ type SurfacePaths = {
|
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
export class GeomodelCanvasLayer<T extends SurfaceData> extends CanvasLayer<T> {
|
|
15
|
-
rescaleEvent: OnRescaleEvent;
|
|
15
|
+
rescaleEvent: OnRescaleEvent | undefined;
|
|
16
16
|
|
|
17
17
|
surfaceAreasPaths: SurfacePaths[] = [];
|
|
18
18
|
|
|
@@ -69,65 +69,72 @@ export class GeomodelCanvasLayer<T extends SurfaceData> extends CanvasLayer<T> {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
generateSurfaceAreasPaths(): void {
|
|
72
|
-
this.surfaceAreasPaths =
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
72
|
+
this.surfaceAreasPaths =
|
|
73
|
+
this.data?.areas.reduce((acc: SurfacePaths[], s: SurfaceArea) => {
|
|
74
|
+
const polygons = this.createPolygons(s.data);
|
|
75
|
+
const mapped: SurfacePaths[] = polygons.map((polygon: number[]) => ({
|
|
76
|
+
color: this.colorToCSSColor(s.color),
|
|
77
|
+
path: this.generatePolygonPath(polygon),
|
|
78
|
+
}));
|
|
79
|
+
acc.push(...mapped);
|
|
80
|
+
return acc;
|
|
81
|
+
}, []) ?? [];
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
generateSurfaceLinesPaths(): void {
|
|
84
|
-
this.surfaceLinesPaths =
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
this.surfaceLinesPaths =
|
|
86
|
+
this.data?.lines.reduce((acc: SurfacePaths[], l: SurfaceLine) => {
|
|
87
|
+
const lines = this.generateLinePaths(l);
|
|
88
|
+
const mapped: SurfacePaths[] = lines.map((path: Path2D) => ({ color: this.colorToCSSColor(l.color), path }));
|
|
89
|
+
acc.push(...mapped);
|
|
90
|
+
return acc;
|
|
91
|
+
}, []) ?? [];
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
drawPolygonPath = (color: string, path: Path2D): void => {
|
|
93
95
|
const { ctx } = this;
|
|
94
|
-
ctx
|
|
95
|
-
|
|
96
|
+
if (ctx != null) {
|
|
97
|
+
ctx.fillStyle = color;
|
|
98
|
+
ctx.fill(path);
|
|
99
|
+
}
|
|
96
100
|
};
|
|
97
101
|
|
|
98
102
|
drawLinePath = (color: string, path: Path2D): void => {
|
|
99
103
|
const { ctx } = this;
|
|
100
|
-
|
|
101
|
-
ctx
|
|
104
|
+
|
|
105
|
+
if (ctx != null) {
|
|
106
|
+
ctx.strokeStyle = color;
|
|
107
|
+
ctx.stroke(path);
|
|
108
|
+
}
|
|
102
109
|
};
|
|
103
110
|
|
|
104
111
|
createPolygons = (data: number[][]): number[][] => {
|
|
105
112
|
const polygons: number[][] = [];
|
|
106
|
-
let polygon: number[] =
|
|
113
|
+
let polygon: number[] = [];
|
|
107
114
|
|
|
108
115
|
// Start generating polygons
|
|
109
116
|
for (let i = 0; i < data.length; i++) {
|
|
110
117
|
// Generate top of polygon as long as we have valid values
|
|
111
|
-
const topIsValid = !!data[i][1];
|
|
118
|
+
const topIsValid = !!data[i]?.[1];
|
|
112
119
|
if (topIsValid) {
|
|
113
120
|
if (polygon === null) {
|
|
114
121
|
polygon = [];
|
|
115
122
|
}
|
|
116
|
-
polygon.push(data[i][0]
|
|
123
|
+
polygon.push(data[i]?.[0]!, data[i]?.[1]!);
|
|
117
124
|
}
|
|
118
125
|
|
|
119
126
|
const endIsReached = i === data.length - 1;
|
|
120
127
|
if (!topIsValid || endIsReached) {
|
|
121
|
-
if (polygon) {
|
|
128
|
+
if (polygon.length > 0) {
|
|
122
129
|
// Generate bottom of polygon
|
|
123
130
|
for (let j: number = !topIsValid ? i - 1 : i; j >= 0; j--) {
|
|
124
|
-
if (!data[j][1]) {
|
|
131
|
+
if (!data[j]?.[1]) {
|
|
125
132
|
break;
|
|
126
133
|
}
|
|
127
|
-
polygon.push(data[j][0]
|
|
134
|
+
polygon.push(data[j]?.[0]!, data[j]?.[2] || this.maxDepth);
|
|
128
135
|
}
|
|
129
136
|
polygons.push(polygon);
|
|
130
|
-
polygon =
|
|
137
|
+
polygon = [];
|
|
131
138
|
}
|
|
132
139
|
}
|
|
133
140
|
}
|
|
@@ -138,9 +145,9 @@ export class GeomodelCanvasLayer<T extends SurfaceData> extends CanvasLayer<T> {
|
|
|
138
145
|
generatePolygonPath = (polygon: number[]): Path2D => {
|
|
139
146
|
const path = new Path2D();
|
|
140
147
|
|
|
141
|
-
path.moveTo(polygon[0]
|
|
148
|
+
path.moveTo(polygon[0]!, polygon[1]!);
|
|
142
149
|
for (let i = 2; i < polygon.length; i += 2) {
|
|
143
|
-
path.lineTo(polygon[i]
|
|
150
|
+
path.lineTo(polygon[i]!, polygon[i + 1]!);
|
|
144
151
|
}
|
|
145
152
|
path.closePath();
|
|
146
153
|
|
|
@@ -152,22 +159,22 @@ export class GeomodelCanvasLayer<T extends SurfaceData> extends CanvasLayer<T> {
|
|
|
152
159
|
const { data: d } = s;
|
|
153
160
|
|
|
154
161
|
let penDown = false;
|
|
155
|
-
let path
|
|
162
|
+
let path: Path2D | undefined;
|
|
156
163
|
for (let i = 0; i < d.length; i++) {
|
|
157
|
-
if (d[i][1]) {
|
|
158
|
-
if (penDown) {
|
|
159
|
-
path.lineTo(d[i][0]
|
|
164
|
+
if (d[i]?.[1]) {
|
|
165
|
+
if (penDown && path) {
|
|
166
|
+
path.lineTo(d[i]?.[0]!, d[i]?.[1]!);
|
|
160
167
|
} else {
|
|
161
168
|
path = new Path2D();
|
|
162
|
-
path.moveTo(d[i][0]
|
|
169
|
+
path.moveTo(d[i]?.[0]!, d[i]?.[1]!);
|
|
163
170
|
penDown = true;
|
|
164
171
|
}
|
|
165
|
-
} else if (penDown) {
|
|
172
|
+
} else if (penDown && path) {
|
|
166
173
|
paths.push(path);
|
|
167
174
|
penDown = false;
|
|
168
175
|
}
|
|
169
176
|
}
|
|
170
|
-
if (penDown) {
|
|
177
|
+
if (penDown && path) {
|
|
171
178
|
paths.push(path);
|
|
172
179
|
}
|
|
173
180
|
|