@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.
Files changed (155) hide show
  1. package/dist/control/ExtendedCurveInterpolator.d.ts +0 -1
  2. package/dist/index.cjs +2 -2
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.ts +0 -1
  5. package/dist/index.mjs +2188 -2087
  6. package/dist/index.mjs.map +1 -1
  7. package/dist/index.umd.js +2 -2
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/interfaces.d.ts +1 -3
  10. package/dist/utils/arc-length.d.ts +0 -1
  11. package/dist/utils/binary-search.d.ts +0 -1
  12. package/dist/utils/root-finder.d.ts +1 -2
  13. package/package.json +25 -25
  14. package/src/components/axis.ts +23 -30
  15. package/src/control/ExtendedCurveInterpolator.ts +7 -7
  16. package/src/control/IntersectionReferenceSystem.ts +33 -41
  17. package/src/control/LayerManager.ts +33 -31
  18. package/src/control/MainController.ts +5 -7
  19. package/src/control/ZoomPanHandler.ts +50 -45
  20. package/src/control/interfaces.ts +3 -3
  21. package/src/control/overlay.ts +42 -35
  22. package/src/datautils/colortable.ts +4 -4
  23. package/src/datautils/findsample.ts +8 -7
  24. package/src/datautils/picks.ts +13 -13
  25. package/src/datautils/schematicShapeGenerator.ts +47 -17
  26. package/src/datautils/seismicimage.ts +12 -13
  27. package/src/datautils/surfacedata.ts +27 -26
  28. package/src/datautils/trajectory.ts +34 -32
  29. package/src/interfaces.ts +1 -1
  30. package/src/layers/CalloutCanvasLayer.ts +55 -58
  31. package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +23 -20
  32. package/src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts +9 -10
  33. package/src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts +13 -13
  34. package/src/layers/GeomodelCanvasLayer.ts +43 -36
  35. package/src/layers/GeomodelLabelsLayer.ts +99 -96
  36. package/src/layers/GeomodelLayerV2.ts +11 -11
  37. package/src/layers/GridLayer.ts +25 -21
  38. package/src/layers/ImageCanvasLayer.ts +17 -11
  39. package/src/layers/ReferenceLineLayer.ts +53 -45
  40. package/src/layers/SchematicLayer.ts +78 -75
  41. package/src/layers/WellborePathLayer.ts +48 -46
  42. package/src/layers/base/CanvasLayer.ts +18 -18
  43. package/src/layers/base/HTMLLayer.ts +5 -5
  44. package/src/layers/base/Layer.ts +18 -18
  45. package/src/layers/base/PixiLayer.ts +24 -20
  46. package/src/layers/base/SVGLayer.ts +5 -5
  47. package/src/utils/arc-length.ts +3 -10
  48. package/src/utils/binary-search.ts +2 -2
  49. package/src/utils/color.ts +9 -5
  50. package/src/utils/root-finder.ts +4 -4
  51. package/src/utils/text.ts +5 -5
  52. package/src/utils/vectorUtils.ts +13 -6
  53. package/src/vendor/pixi-dashed-line/index.ts +3 -2
  54. package/dist/components/axis.d.ts +0 -48
  55. package/dist/components/axis.d.ts.map +0 -1
  56. package/dist/components/index.d.ts +0 -2
  57. package/dist/components/index.d.ts.map +0 -1
  58. package/dist/constants.d.ts +0 -12
  59. package/dist/constants.d.ts.map +0 -1
  60. package/dist/control/ExtendedCurveInterpolator.d.ts.map +0 -1
  61. package/dist/control/IntersectionReferenceSystem.d.ts +0 -97
  62. package/dist/control/IntersectionReferenceSystem.d.ts.map +0 -1
  63. package/dist/control/LayerManager.d.ts +0 -77
  64. package/dist/control/LayerManager.d.ts.map +0 -1
  65. package/dist/control/MainController.d.ts +0 -155
  66. package/dist/control/MainController.d.ts.map +0 -1
  67. package/dist/control/ZoomPanHandler.d.ts +0 -159
  68. package/dist/control/ZoomPanHandler.d.ts.map +0 -1
  69. package/dist/control/index.d.ts +0 -6
  70. package/dist/control/index.d.ts.map +0 -1
  71. package/dist/control/interfaces.d.ts +0 -38
  72. package/dist/control/interfaces.d.ts.map +0 -1
  73. package/dist/control/overlay.d.ts +0 -21
  74. package/dist/control/overlay.d.ts.map +0 -1
  75. package/dist/datautils/colortable.d.ts +0 -2
  76. package/dist/datautils/colortable.d.ts.map +0 -1
  77. package/dist/datautils/findsample.d.ts +0 -3
  78. package/dist/datautils/findsample.d.ts.map +0 -1
  79. package/dist/datautils/index.d.ts +0 -7
  80. package/dist/datautils/index.d.ts.map +0 -1
  81. package/dist/datautils/interfaces.d.ts +0 -64
  82. package/dist/datautils/interfaces.d.ts.map +0 -1
  83. package/dist/datautils/picks.d.ts +0 -75
  84. package/dist/datautils/picks.d.ts.map +0 -1
  85. package/dist/datautils/schematicShapeGenerator.d.ts +0 -60
  86. package/dist/datautils/schematicShapeGenerator.d.ts.map +0 -1
  87. package/dist/datautils/seismicimage.d.ts +0 -46
  88. package/dist/datautils/seismicimage.d.ts.map +0 -1
  89. package/dist/datautils/surfacedata.d.ts +0 -11
  90. package/dist/datautils/surfacedata.d.ts.map +0 -1
  91. package/dist/datautils/trajectory.d.ts +0 -15
  92. package/dist/datautils/trajectory.d.ts.map +0 -1
  93. package/dist/index.d.ts.map +0 -1
  94. package/dist/interfaces.d.ts.map +0 -1
  95. package/dist/layers/CalloutCanvasLayer.d.ts +0 -61
  96. package/dist/layers/CalloutCanvasLayer.d.ts.map +0 -1
  97. package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts +0 -22
  98. package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts.map +0 -1
  99. package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts +0 -24
  100. package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts.map +0 -1
  101. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts +0 -21
  102. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts.map +0 -1
  103. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts +0 -27
  104. package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts.map +0 -1
  105. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts +0 -18
  106. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts.map +0 -1
  107. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts +0 -25
  108. package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts.map +0 -1
  109. package/dist/layers/GeomodelCanvasLayer.d.ts +0 -29
  110. package/dist/layers/GeomodelCanvasLayer.d.ts.map +0 -1
  111. package/dist/layers/GeomodelLabelsLayer.d.ts +0 -50
  112. package/dist/layers/GeomodelLabelsLayer.d.ts.map +0 -1
  113. package/dist/layers/GeomodelLayerV2.d.ts +0 -13
  114. package/dist/layers/GeomodelLayerV2.d.ts.map +0 -1
  115. package/dist/layers/GridLayer.d.ts +0 -30
  116. package/dist/layers/GridLayer.d.ts.map +0 -1
  117. package/dist/layers/ImageCanvasLayer.d.ts +0 -21
  118. package/dist/layers/ImageCanvasLayer.d.ts.map +0 -1
  119. package/dist/layers/ReferenceLineLayer.d.ts +0 -30
  120. package/dist/layers/ReferenceLineLayer.d.ts.map +0 -1
  121. package/dist/layers/SchematicLayer.d.ts +0 -114
  122. package/dist/layers/SchematicLayer.d.ts.map +0 -1
  123. package/dist/layers/SeismicCanvasLayer.d.ts +0 -19
  124. package/dist/layers/SeismicCanvasLayer.d.ts.map +0 -1
  125. package/dist/layers/WellborePathLayer.d.ts +0 -18
  126. package/dist/layers/WellborePathLayer.d.ts.map +0 -1
  127. package/dist/layers/base/CanvasLayer.d.ts +0 -20
  128. package/dist/layers/base/CanvasLayer.d.ts.map +0 -1
  129. package/dist/layers/base/HTMLLayer.d.ts +0 -14
  130. package/dist/layers/base/HTMLLayer.d.ts.map +0 -1
  131. package/dist/layers/base/Layer.d.ts +0 -70
  132. package/dist/layers/base/Layer.d.ts.map +0 -1
  133. package/dist/layers/base/PixiLayer.d.ts +0 -33
  134. package/dist/layers/base/PixiLayer.d.ts.map +0 -1
  135. package/dist/layers/base/SVGLayer.d.ts +0 -14
  136. package/dist/layers/base/SVGLayer.d.ts.map +0 -1
  137. package/dist/layers/base/index.d.ts +0 -6
  138. package/dist/layers/base/index.d.ts.map +0 -1
  139. package/dist/layers/index.d.ts +0 -17
  140. package/dist/layers/index.d.ts.map +0 -1
  141. package/dist/layers/schematicInterfaces.d.ts +0 -210
  142. package/dist/layers/schematicInterfaces.d.ts.map +0 -1
  143. package/dist/utils/arc-length.d.ts.map +0 -1
  144. package/dist/utils/binary-search.d.ts.map +0 -1
  145. package/dist/utils/color.d.ts +0 -6
  146. package/dist/utils/color.d.ts.map +0 -1
  147. package/dist/utils/index.d.ts +0 -2
  148. package/dist/utils/index.d.ts.map +0 -1
  149. package/dist/utils/root-finder.d.ts.map +0 -1
  150. package/dist/utils/text.d.ts +0 -15
  151. package/dist/utils/text.d.ts.map +0 -1
  152. package/dist/utils/vectorUtils.d.ts +0 -16
  153. package/dist/utils/vectorUtils.d.ts.map +0 -1
  154. package/dist/vendor/pixi-dashed-line/index.d.ts +0 -57
  155. 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[] = null;
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.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;
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 = undefined;
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 || !this.callouts) {
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) => !groupFilter || groupFilter.includes(d.group));
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.font = `${fontStyle} ${fontSize}px ${font}`;
152
- ctx.fillStyle = color;
153
- ctx.fillText(title, x, y);
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: number = 3): void {
148
+ private renderPoint(x: number, y: number, radius = 3): void {
157
149
  const { ctx } = this;
158
- ctx.beginPath();
159
- ctx.moveTo(x, y);
160
- ctx.arc(x, y, radius, 0, Math.PI * 2);
161
- ctx.fill();
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: boolean = true): void => {
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.strokeStyle = color;
182
- ctx.lineWidth = 1;
176
+ if (ctx != null) {
177
+ ctx.strokeStyle = color;
178
+ ctx.lineWidth = 1;
183
179
 
184
- ctx.beginPath();
185
- ctx.moveTo(dotX, dotY);
186
- ctx.lineTo(textX, textY);
187
- ctx.lineTo(inverseTextX, textY);
180
+ ctx.beginPath();
181
+ ctx.moveTo(dotX, dotY);
182
+ ctx.lineTo(textX, textY);
183
+ ctx.lineTo(inverseTextX, textY);
188
184
 
189
- ctx.stroke();
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: number = 20,
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.project(a.md);
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], y: pos[1] },
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.measureText(label).width;
281
- const titleWidth = ctx.measureText(title).width;
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].points[0];
77
+ let prev = segments[i]?.points[0]!;
78
78
  const textureWidth = maxDiameter;
79
- const radius = segments[i].diameter / maxDiameter / 2;
79
+ const radius = segments[i]?.diameter! / maxDiameter / 2;
80
80
 
81
- const total = segments[i].points.length; // - 1;
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].points[j].x;
88
- const dy = prev.y - segments[i].points[j].y;
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].points[j];
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].points[0];
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].data;
140
- const total = segments[i].points.length;
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].points[j];
143
+ const point = segments[i]?.points[j]!;
144
144
  index = lastIndex + j * 4;
145
145
 
146
- if (j < segments[i].points.length - 1) {
147
- nextPoint = segments[i].points[j + 1];
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].diameter / 2;
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[index] = point.x + perpX;
165
- vertices[index + 1] = point.y + perpY;
166
- vertices[index + 2] = point.x - perpX;
167
- vertices[index + 3] = point.y - perpY;
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].update();
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].x;
77
- const dy = prev.y - points[i].y;
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].data;
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].update();
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].x;
62
- const dy = prevPoint.y - points[i].y;
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].x;
86
- const dy = prev.y - points[i].y;
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].data;
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].update();
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 = this.data.areas.reduce((acc: SurfacePaths[], s: SurfaceArea) => {
73
- const polygons = this.createPolygons(s.data);
74
- const mapped: SurfacePaths[] = polygons.map((polygon: number[]) => ({
75
- color: this.colorToCSSColor(s.color),
76
- path: this.generatePolygonPath(polygon),
77
- }));
78
- acc.push(...mapped);
79
- return acc;
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 = this.data.lines.reduce((acc: SurfacePaths[], l: SurfaceLine) => {
85
- const lines = this.generateLinePaths(l);
86
- const mapped: SurfacePaths[] = lines.map((path: Path2D) => ({ color: this.colorToCSSColor(l.color), path }));
87
- acc.push(...mapped);
88
- return acc;
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.fillStyle = color;
95
- ctx.fill(path);
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
- ctx.strokeStyle = color;
101
- ctx.stroke(path);
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[] = null;
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], data[i][1]);
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], data[j][2] || this.maxDepth);
134
+ polygon.push(data[j]?.[0]!, data[j]?.[2] || this.maxDepth);
128
135
  }
129
136
  polygons.push(polygon);
130
- polygon = null;
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], polygon[1]);
148
+ path.moveTo(polygon[0]!, polygon[1]!);
142
149
  for (let i = 2; i < polygon.length; i += 2) {
143
- path.lineTo(polygon[i], polygon[i + 1]);
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 = null;
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], d[i][1]);
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], d[i][1]);
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