@equinor/esv-intersection 3.0.1 → 3.0.4
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/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +2241 -1938
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +21 -22
- package/dist/components/axis.d.ts +0 -47
- package/dist/components/index.d.ts +0 -1
- package/dist/control/ExtendedCurveInterpolator.d.ts +0 -58
- package/dist/control/IntersectionReferenceSystem.d.ts +0 -96
- package/dist/control/LayerManager.d.ts +0 -76
- package/dist/control/MainController.d.ts +0 -154
- package/dist/control/ZoomPanHandler.d.ts +0 -158
- package/dist/control/index.d.ts +0 -5
- package/dist/control/interfaces.d.ts +0 -37
- package/dist/control/overlay.d.ts +0 -20
- package/dist/datautils/colortable.d.ts +0 -1
- package/dist/datautils/findsample.d.ts +0 -2
- package/dist/datautils/index.d.ts +0 -6
- package/dist/datautils/interfaces.d.ts +0 -63
- package/dist/datautils/picks.d.ts +0 -74
- package/dist/datautils/schematicShapeGenerator.d.ts +0 -59
- package/dist/datautils/seismicimage.d.ts +0 -45
- package/dist/datautils/surfacedata.d.ts +0 -10
- package/dist/datautils/trajectory.d.ts +0 -14
- package/dist/layers/CalloutCanvasLayer.d.ts +0 -60
- package/dist/layers/CustomDisplayObjects/ComplexRope.d.ts +0 -22
- package/dist/layers/CustomDisplayObjects/ComplexRopeGeometry.d.ts +0 -27
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRope.d.ts +0 -20
- package/dist/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.d.ts +0 -26
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRope.d.ts +0 -17
- package/dist/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.d.ts +0 -24
- package/dist/layers/GeomodelCanvasLayer.d.ts +0 -28
- package/dist/layers/GeomodelLabelsLayer.d.ts +0 -49
- package/dist/layers/GeomodelLayerV2.d.ts +0 -12
- package/dist/layers/GridLayer.d.ts +0 -29
- package/dist/layers/ImageCanvasLayer.d.ts +0 -20
- package/dist/layers/ReferenceLineLayer.d.ts +0 -29
- package/dist/layers/SchematicLayer.d.ts +0 -113
- package/dist/layers/SeismicCanvasLayer.d.ts +0 -18
- package/dist/layers/WellborePathLayer.d.ts +0 -17
- package/dist/layers/base/CanvasLayer.d.ts +0 -19
- package/dist/layers/base/HTMLLayer.d.ts +0 -13
- package/dist/layers/base/Layer.d.ts +0 -69
- package/dist/layers/base/PixiLayer.d.ts +0 -32
- package/dist/layers/base/SVGLayer.d.ts +0 -13
- package/dist/layers/base/index.d.ts +0 -5
- package/dist/layers/index.d.ts +0 -16
- package/dist/layers/schematicInterfaces.d.ts +0 -208
- package/dist/utils/arc-length.d.ts +0 -23
- package/dist/utils/binary-search.d.ts +0 -8
- package/dist/utils/color.d.ts +0 -5
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/root-finder.d.ts +0 -34
- package/dist/utils/text.d.ts +0 -14
- package/dist/utils/vectorUtils.d.ts +0 -15
- package/dist/vendor/pixi-dashed-line/index.d.ts +0 -57
- package/src/components/axis.ts +0 -247
- package/src/components/index.ts +0 -1
- package/src/control/ExtendedCurveInterpolator.ts +0 -155
- package/src/control/IntersectionReferenceSystem.ts +0 -391
- package/src/control/LayerManager.ts +0 -294
- package/src/control/MainController.ts +0 -296
- package/src/control/ZoomPanHandler.ts +0 -436
- package/src/control/index.ts +0 -5
- package/src/control/interfaces.ts +0 -42
- package/src/control/overlay.ts +0 -118
- package/src/datautils/colortable.ts +0 -14
- package/src/datautils/findsample.ts +0 -64
- package/src/datautils/index.ts +0 -6
- package/src/datautils/interfaces.ts +0 -68
- package/src/datautils/picks.ts +0 -328
- package/src/datautils/schematicShapeGenerator.ts +0 -1007
- package/src/datautils/seismicimage.ts +0 -180
- package/src/datautils/surfacedata.ts +0 -318
- package/src/datautils/trajectory.ts +0 -206
- package/src/layers/CalloutCanvasLayer.ts +0 -338
- package/src/layers/CustomDisplayObjects/ComplexRope.ts +0 -45
- package/src/layers/CustomDisplayObjects/ComplexRopeGeometry.ts +0 -190
- package/src/layers/CustomDisplayObjects/FixedWidthSimpleRope.ts +0 -41
- package/src/layers/CustomDisplayObjects/FixedWidthSimpleRopeGeometry.ts +0 -149
- package/src/layers/CustomDisplayObjects/UniformTextureStretchRope.ts +0 -39
- package/src/layers/CustomDisplayObjects/UniformTextureStretchRopeGeometry.ts +0 -174
- package/src/layers/GeomodelCanvasLayer.ts +0 -176
- package/src/layers/GeomodelLabelsLayer.ts +0 -619
- package/src/layers/GeomodelLayerV2.ts +0 -110
- package/src/layers/GridLayer.ts +0 -145
- package/src/layers/ImageCanvasLayer.ts +0 -55
- package/src/layers/ReferenceLineLayer.ts +0 -185
- package/src/layers/SchematicLayer.ts +0 -871
- package/src/layers/SeismicCanvasLayer.ts +0 -46
- package/src/layers/WellborePathLayer.ts +0 -129
- package/src/layers/base/CanvasLayer.ts +0 -102
- package/src/layers/base/HTMLLayer.ts +0 -70
- package/src/layers/base/Layer.ts +0 -217
- package/src/layers/base/PixiLayer.ts +0 -190
- package/src/layers/base/SVGLayer.ts +0 -63
- package/src/layers/base/index.ts +0 -5
- package/src/layers/index.ts +0 -16
- package/src/layers/schematicInterfaces.ts +0 -470
- package/src/utils/arc-length.ts +0 -66
- package/src/utils/binary-search.ts +0 -26
- package/src/utils/color.ts +0 -22
- package/src/utils/index.ts +0 -1
- package/src/utils/root-finder.ts +0 -78
- package/src/utils/text.ts +0 -88
- package/src/utils/vectorUtils.ts +0 -67
- package/src/vendor/pixi-dashed-line/index.ts +0 -394
|
@@ -1,470 +0,0 @@
|
|
|
1
|
-
import { SHOE_LENGTH, SHOE_WIDTH } from '../constants';
|
|
2
|
-
|
|
3
|
-
export function assertNever(x: never): never {
|
|
4
|
-
throw new Error(`Unexpected object: ${JSON.stringify(x)}`);
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* The closure type of the outline
|
|
9
|
-
*/
|
|
10
|
-
export type OutlineClosure = 'None' | 'TopAndBottom' | 'Top' | 'Bottom';
|
|
11
|
-
|
|
12
|
-
export interface HoleSize {
|
|
13
|
-
kind: 'hole';
|
|
14
|
-
id: string;
|
|
15
|
-
diameter: number;
|
|
16
|
-
start: number;
|
|
17
|
-
end: number;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface CasingWindow {
|
|
21
|
-
id: string;
|
|
22
|
-
start: number;
|
|
23
|
-
end: number;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export interface Casing {
|
|
27
|
-
kind: 'casing';
|
|
28
|
-
id: string;
|
|
29
|
-
diameter: number;
|
|
30
|
-
start: number;
|
|
31
|
-
end: number;
|
|
32
|
-
hasShoe: boolean;
|
|
33
|
-
innerDiameter: number;
|
|
34
|
-
windows?: CasingWindow[];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
interface SymbolComponent {
|
|
38
|
-
id: string;
|
|
39
|
-
diameter: number;
|
|
40
|
-
start: number;
|
|
41
|
-
end: number;
|
|
42
|
-
symbolKey: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface PAndASymbol extends SymbolComponent {
|
|
46
|
-
kind: 'pAndASymbol';
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const isPAndASymbol = (item: PAndA): item is PAndASymbol => item.kind === 'pAndASymbol';
|
|
50
|
-
|
|
51
|
-
export interface CementSqueeze {
|
|
52
|
-
kind: 'cementSqueeze';
|
|
53
|
-
id: string;
|
|
54
|
-
start: number;
|
|
55
|
-
end: number;
|
|
56
|
-
/**
|
|
57
|
-
* Referenced Casing and Completion ids
|
|
58
|
-
*/
|
|
59
|
-
referenceIds: string[];
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export const isCementSqueeze = (item: PAndA): item is CementSqueeze => item.kind === 'cementSqueeze';
|
|
63
|
-
|
|
64
|
-
export interface CementPlug {
|
|
65
|
-
kind: 'cementPlug';
|
|
66
|
-
id: string;
|
|
67
|
-
start: number;
|
|
68
|
-
end: number;
|
|
69
|
-
/**
|
|
70
|
-
* Referenced Casing, Completion ids
|
|
71
|
-
*/
|
|
72
|
-
referenceIds: string[];
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export const isCementPlug = (item: PAndA): item is CementSqueeze => item.kind === 'cementPlug';
|
|
76
|
-
|
|
77
|
-
export type PAndA = PAndASymbol | CementSqueeze | CementPlug;
|
|
78
|
-
|
|
79
|
-
interface BaseCompletion {
|
|
80
|
-
id: string;
|
|
81
|
-
diameter: number;
|
|
82
|
-
start: number;
|
|
83
|
-
end: number;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export interface Screen extends BaseCompletion {
|
|
87
|
-
kind: 'screen';
|
|
88
|
-
}
|
|
89
|
-
export interface Tubing extends BaseCompletion {
|
|
90
|
-
kind: 'tubing';
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export interface CompletionSymbol extends BaseCompletion {
|
|
94
|
-
kind: 'completionSymbol';
|
|
95
|
-
symbolKey: string;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
export type Completion = Tubing | Screen | CompletionSymbol;
|
|
99
|
-
|
|
100
|
-
export const foldCompletion =
|
|
101
|
-
<T>(fScreen: (obj: Screen) => T, fTubing: (obj: Tubing) => T, fSymbol: (obj: CompletionSymbol) => T) =>
|
|
102
|
-
(completion: Completion): T => {
|
|
103
|
-
switch (completion.kind) {
|
|
104
|
-
case 'screen':
|
|
105
|
-
return fScreen(completion);
|
|
106
|
-
case 'tubing':
|
|
107
|
-
return fTubing(completion);
|
|
108
|
-
case 'completionSymbol':
|
|
109
|
-
return fSymbol(completion);
|
|
110
|
-
default:
|
|
111
|
-
return assertNever(completion);
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
export interface Cement {
|
|
116
|
-
kind: 'cement';
|
|
117
|
-
id: string;
|
|
118
|
-
/**
|
|
119
|
-
* Referenced Casing and Completion ids
|
|
120
|
-
*/
|
|
121
|
-
referenceIds: string[];
|
|
122
|
-
toc: number;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* 'Open hole' and 'Open hole screen' are not included as they are not visualized and also not included in the ruleset
|
|
127
|
-
*/
|
|
128
|
-
export type PerforationSubKind =
|
|
129
|
-
| 'Perforation'
|
|
130
|
-
| 'Open hole gravel pack'
|
|
131
|
-
| 'Open hole frac pack'
|
|
132
|
-
| 'Cased hole frac pack'
|
|
133
|
-
| 'Cased hole gravel pack'
|
|
134
|
-
| 'Cased hole fracturation';
|
|
135
|
-
|
|
136
|
-
export interface Perforation {
|
|
137
|
-
kind: 'perforation';
|
|
138
|
-
subKind: PerforationSubKind;
|
|
139
|
-
id: string;
|
|
140
|
-
start: number;
|
|
141
|
-
end: number;
|
|
142
|
-
/**
|
|
143
|
-
* is the perforation open or sealed?
|
|
144
|
-
*/
|
|
145
|
-
isOpen: boolean;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export const foldPerforationSubKind = <T>(
|
|
149
|
-
options: {
|
|
150
|
-
Perforation: (kind: 'Perforation') => T;
|
|
151
|
-
OpenHoleGravelPack: (kind: 'Open hole gravel pack') => T;
|
|
152
|
-
OpenHoleFracPack: (kind: 'Open hole frac pack') => T;
|
|
153
|
-
CasedHoleGravelPack: (kind: 'Cased hole gravel pack') => T;
|
|
154
|
-
CasedHoleFracPack: (kind: 'Cased hole frac pack') => T;
|
|
155
|
-
CasedHoleFracturation: (kind: 'Cased hole fracturation') => T;
|
|
156
|
-
},
|
|
157
|
-
subKind: PerforationSubKind,
|
|
158
|
-
) => {
|
|
159
|
-
switch (subKind) {
|
|
160
|
-
case 'Perforation':
|
|
161
|
-
return options.Perforation(subKind);
|
|
162
|
-
|
|
163
|
-
case 'Open hole gravel pack':
|
|
164
|
-
return options.OpenHoleGravelPack(subKind);
|
|
165
|
-
|
|
166
|
-
case 'Open hole frac pack':
|
|
167
|
-
return options.OpenHoleFracPack(subKind);
|
|
168
|
-
|
|
169
|
-
case 'Cased hole fracturation':
|
|
170
|
-
return options.CasedHoleFracturation(subKind);
|
|
171
|
-
|
|
172
|
-
case 'Cased hole frac pack':
|
|
173
|
-
return options.CasedHoleFracPack(subKind);
|
|
174
|
-
|
|
175
|
-
case 'Cased hole gravel pack':
|
|
176
|
-
return options.CasedHoleGravelPack(subKind);
|
|
177
|
-
|
|
178
|
-
default:
|
|
179
|
-
return assertNever(subKind);
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
export const shouldPerforationStartAtHoleDiameter = (perf: Perforation) =>
|
|
184
|
-
foldPerforationSubKind(
|
|
185
|
-
{
|
|
186
|
-
Perforation: () => true,
|
|
187
|
-
OpenHoleGravelPack: () => true,
|
|
188
|
-
OpenHoleFracPack: () => false,
|
|
189
|
-
CasedHoleFracturation: () => false,
|
|
190
|
-
CasedHoleGravelPack: () => false,
|
|
191
|
-
CasedHoleFracPack: () => false,
|
|
192
|
-
},
|
|
193
|
-
perf.subKind,
|
|
194
|
-
);
|
|
195
|
-
|
|
196
|
-
export const shouldPerforationStartAtCasingDiameter = (perf: Perforation) =>
|
|
197
|
-
foldPerforationSubKind(
|
|
198
|
-
{
|
|
199
|
-
Perforation: () => false,
|
|
200
|
-
OpenHoleGravelPack: () => false,
|
|
201
|
-
OpenHoleFracPack: () => true,
|
|
202
|
-
CasedHoleFracturation: () => true,
|
|
203
|
-
CasedHoleGravelPack: () => true,
|
|
204
|
-
CasedHoleFracPack: () => true,
|
|
205
|
-
},
|
|
206
|
-
perf.subKind,
|
|
207
|
-
);
|
|
208
|
-
|
|
209
|
-
export const hasPacking = (perf: Perforation): boolean =>
|
|
210
|
-
foldPerforationSubKind(
|
|
211
|
-
{
|
|
212
|
-
Perforation: () => false,
|
|
213
|
-
OpenHoleGravelPack: () => true,
|
|
214
|
-
OpenHoleFracPack: () => true,
|
|
215
|
-
CasedHoleFracturation: () => false,
|
|
216
|
-
CasedHoleGravelPack: () => true,
|
|
217
|
-
CasedHoleFracPack: () => true,
|
|
218
|
-
},
|
|
219
|
-
perf.subKind,
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
export function hasFracLines(perf: Perforation): boolean {
|
|
223
|
-
return foldPerforationSubKind(
|
|
224
|
-
{
|
|
225
|
-
Perforation: () => false,
|
|
226
|
-
OpenHoleGravelPack: () => false,
|
|
227
|
-
OpenHoleFracPack: () => true,
|
|
228
|
-
CasedHoleFracturation: () => true,
|
|
229
|
-
CasedHoleGravelPack: () => false,
|
|
230
|
-
CasedHoleFracPack: () => true,
|
|
231
|
-
},
|
|
232
|
-
perf.subKind,
|
|
233
|
-
);
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export function hasSpikes(perf: Perforation): boolean {
|
|
237
|
-
return foldPerforationSubKind(
|
|
238
|
-
{
|
|
239
|
-
Perforation: () => true,
|
|
240
|
-
OpenHoleGravelPack: () => false,
|
|
241
|
-
OpenHoleFracPack: () => false,
|
|
242
|
-
CasedHoleFracturation: () => false,
|
|
243
|
-
CasedHoleGravelPack: () => false,
|
|
244
|
-
CasedHoleFracPack: () => false,
|
|
245
|
-
},
|
|
246
|
-
perf.subKind,
|
|
247
|
-
);
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
export function isSubkindCasedHoleGravelPack(perf: Perforation): boolean {
|
|
251
|
-
return foldPerforationSubKind(
|
|
252
|
-
{
|
|
253
|
-
Perforation: () => false,
|
|
254
|
-
OpenHoleGravelPack: () => false,
|
|
255
|
-
OpenHoleFracPack: () => false,
|
|
256
|
-
CasedHoleFracturation: () => false,
|
|
257
|
-
CasedHoleGravelPack: () => true,
|
|
258
|
-
CasedHoleFracPack: () => false,
|
|
259
|
-
},
|
|
260
|
-
perf.subKind,
|
|
261
|
-
);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
export function isSubKindPerforation(perf: Perforation): boolean {
|
|
265
|
-
return foldPerforationSubKind(
|
|
266
|
-
{
|
|
267
|
-
Perforation: () => true,
|
|
268
|
-
OpenHoleGravelPack: () => false,
|
|
269
|
-
OpenHoleFracPack: () => false,
|
|
270
|
-
CasedHoleFracturation: () => false,
|
|
271
|
-
CasedHoleGravelPack: () => false,
|
|
272
|
-
CasedHoleFracPack: () => false,
|
|
273
|
-
},
|
|
274
|
-
perf.subKind,
|
|
275
|
-
);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
export function isSubKindCasedHoleFracPack(perf: Perforation): boolean {
|
|
279
|
-
return foldPerforationSubKind(
|
|
280
|
-
{
|
|
281
|
-
Perforation: () => false,
|
|
282
|
-
OpenHoleGravelPack: () => false,
|
|
283
|
-
OpenHoleFracPack: () => false,
|
|
284
|
-
CasedHoleFracturation: () => false,
|
|
285
|
-
CasedHoleGravelPack: () => false,
|
|
286
|
-
CasedHoleFracPack: () => true,
|
|
287
|
-
},
|
|
288
|
-
perf.subKind,
|
|
289
|
-
);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
export function isOpenHoleFracPack(perf: Perforation) {
|
|
293
|
-
return foldPerforationSubKind(
|
|
294
|
-
{
|
|
295
|
-
Perforation: () => false,
|
|
296
|
-
OpenHoleGravelPack: () => false,
|
|
297
|
-
OpenHoleFracPack: () => true,
|
|
298
|
-
CasedHoleFracturation: () => false,
|
|
299
|
-
CasedHoleGravelPack: () => false,
|
|
300
|
-
CasedHoleFracPack: () => false,
|
|
301
|
-
},
|
|
302
|
-
perf.subKind,
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
export const intersect = (a: Perforation, b: Perforation): boolean => {
|
|
307
|
-
return a.start < b.end && a.end > b.start;
|
|
308
|
-
};
|
|
309
|
-
|
|
310
|
-
export interface SchematicData {
|
|
311
|
-
holeSizes: HoleSize[];
|
|
312
|
-
casings: Casing[];
|
|
313
|
-
cements: Cement[];
|
|
314
|
-
completion: Completion[];
|
|
315
|
-
pAndA: PAndA[];
|
|
316
|
-
symbols: {
|
|
317
|
-
[key: string]: string;
|
|
318
|
-
};
|
|
319
|
-
perforations: Perforation[];
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
export interface InternalLayerOptions {
|
|
323
|
-
holeLayerId: string;
|
|
324
|
-
casingLayerId: string;
|
|
325
|
-
completionLayerId: string;
|
|
326
|
-
cementLayerId: string;
|
|
327
|
-
pAndALayerId: string;
|
|
328
|
-
perforationLayerId: string;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
export const defaultInternalLayerOptions = (layerId: string): InternalLayerOptions => ({
|
|
332
|
-
holeLayerId: `${layerId}-hole`,
|
|
333
|
-
casingLayerId: `${layerId}-casing`,
|
|
334
|
-
completionLayerId: `${layerId}-completion`,
|
|
335
|
-
cementLayerId: `${layerId}-cement`,
|
|
336
|
-
pAndALayerId: `${layerId}-pAndA`,
|
|
337
|
-
perforationLayerId: `${layerId}-perforation`,
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
export interface HoleOptions {
|
|
341
|
-
firstColor: string;
|
|
342
|
-
secondColor: string;
|
|
343
|
-
lineColor: string;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
export const defaultHoleOptions: HoleOptions = {
|
|
347
|
-
firstColor: '#8c541d',
|
|
348
|
-
secondColor: '#eee3d8',
|
|
349
|
-
lineColor: '#8b4513',
|
|
350
|
-
};
|
|
351
|
-
|
|
352
|
-
export interface CasingShoeSize {
|
|
353
|
-
width: number;
|
|
354
|
-
length: number;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
export interface WindowOptions {
|
|
358
|
-
dashColor: string;
|
|
359
|
-
dashLength: number;
|
|
360
|
-
spaceLength: number;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
export interface CasingOptions {
|
|
364
|
-
solidColor: string;
|
|
365
|
-
lineColor: string;
|
|
366
|
-
shoeSize: CasingShoeSize;
|
|
367
|
-
windowOptions: WindowOptions;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
export const defaultCasingOptions: CasingOptions = {
|
|
371
|
-
solidColor: '#dcdcdc',
|
|
372
|
-
lineColor: '#575757',
|
|
373
|
-
shoeSize: {
|
|
374
|
-
width: SHOE_WIDTH,
|
|
375
|
-
length: SHOE_LENGTH,
|
|
376
|
-
},
|
|
377
|
-
windowOptions: {
|
|
378
|
-
dashColor: '#dc0000',
|
|
379
|
-
dashLength: 5,
|
|
380
|
-
spaceLength: 3,
|
|
381
|
-
},
|
|
382
|
-
};
|
|
383
|
-
|
|
384
|
-
export interface PerforationOptions {
|
|
385
|
-
stroke: string;
|
|
386
|
-
yellow: string;
|
|
387
|
-
grey: string;
|
|
388
|
-
red: string;
|
|
389
|
-
outline: string;
|
|
390
|
-
transparent: string;
|
|
391
|
-
spikeWidth: number;
|
|
392
|
-
spikeLength: number;
|
|
393
|
-
packingOpacity: number;
|
|
394
|
-
fracLineLength: number;
|
|
395
|
-
fracLineCurve: number;
|
|
396
|
-
scalingFactor: number;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
export const defaultPerforationOptions: PerforationOptions = {
|
|
400
|
-
stroke: 'rgba(0, 0, 0, 0.25)',
|
|
401
|
-
yellow: '#FFFC00',
|
|
402
|
-
grey: 'gray',
|
|
403
|
-
red: '#FF5050',
|
|
404
|
-
outline: 'black',
|
|
405
|
-
transparent: 'rgba(255, 255, 255, 0)',
|
|
406
|
-
spikeWidth: 50,
|
|
407
|
-
spikeLength: 50,
|
|
408
|
-
packingOpacity: 0.5,
|
|
409
|
-
fracLineCurve: 10,
|
|
410
|
-
fracLineLength: 25,
|
|
411
|
-
scalingFactor: 25,
|
|
412
|
-
};
|
|
413
|
-
|
|
414
|
-
export interface CementOptions {
|
|
415
|
-
firstColor: string;
|
|
416
|
-
secondColor: string;
|
|
417
|
-
scalingFactor: number;
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
export const defaultCementOptions: CementOptions = {
|
|
421
|
-
firstColor: '#c7b9ab',
|
|
422
|
-
secondColor: '#5b5b5b',
|
|
423
|
-
scalingFactor: 4,
|
|
424
|
-
};
|
|
425
|
-
|
|
426
|
-
export interface CementSqueezeOptions {
|
|
427
|
-
firstColor: string;
|
|
428
|
-
secondColor: string;
|
|
429
|
-
scalingFactor: number;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
export const defaultCementSqueezeOptions: CementSqueezeOptions = {
|
|
433
|
-
firstColor: '#8b6713',
|
|
434
|
-
secondColor: '#000000',
|
|
435
|
-
scalingFactor: 4,
|
|
436
|
-
};
|
|
437
|
-
|
|
438
|
-
export interface ScreenOptions {
|
|
439
|
-
scalingFactor: number;
|
|
440
|
-
lineColor: string;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
export const defaultScreenOptions: ScreenOptions = {
|
|
444
|
-
scalingFactor: 4,
|
|
445
|
-
lineColor: '#63666a',
|
|
446
|
-
};
|
|
447
|
-
|
|
448
|
-
export interface TubingOptions {
|
|
449
|
-
innerColor: string;
|
|
450
|
-
outerColor: string;
|
|
451
|
-
scalingFactor: number;
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
export const defaultTubingOptions: TubingOptions = {
|
|
455
|
-
scalingFactor: 1,
|
|
456
|
-
innerColor: '#eeeeff',
|
|
457
|
-
outerColor: '#777788',
|
|
458
|
-
};
|
|
459
|
-
|
|
460
|
-
export interface CementPlugOptions {
|
|
461
|
-
firstColor: string;
|
|
462
|
-
secondColor: string;
|
|
463
|
-
scalingFactor: number;
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
export const defaultCementPlugOptions: CementPlugOptions = {
|
|
467
|
-
firstColor: '#c7b9ab',
|
|
468
|
-
secondColor: '#000000',
|
|
469
|
-
scalingFactor: 4,
|
|
470
|
-
};
|
package/src/utils/arc-length.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import Vector2 from '@equinor/videx-vector2';
|
|
2
|
-
import { Vector } from 'curve-interpolator/dist/src/interfaces';
|
|
3
|
-
|
|
4
|
-
type fx = (n: number) => Vector;
|
|
5
|
-
|
|
6
|
-
/*
|
|
7
|
-
* Methods for calculating length of a curve
|
|
8
|
-
*/
|
|
9
|
-
export class ArcLength {
|
|
10
|
-
/**
|
|
11
|
-
* Calculate using an adaptive bisect method
|
|
12
|
-
* @param {Number} func Curve function returning [x,y]
|
|
13
|
-
* @param {Number} minLimit Min limit
|
|
14
|
-
* @param {Number} maxLimit Max limit
|
|
15
|
-
* @param {Number} tolerance Result tolerance
|
|
16
|
-
* @param {Number} minDepth Min recursive depth before accepting solution
|
|
17
|
-
* @param {Number} maxDepth Max recursive depth
|
|
18
|
-
*/
|
|
19
|
-
static bisect(
|
|
20
|
-
func: fx,
|
|
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 => {
|
|
28
|
-
const mid = (a + b) / 2;
|
|
29
|
-
const midVal = func(mid) as number[];
|
|
30
|
-
const spanA = Vector2.distance(aVal, midVal);
|
|
31
|
-
const spanB = Vector2.distance(midVal, bVal);
|
|
32
|
-
const length = spanA + spanB;
|
|
33
|
-
if ((depth >= minDepth && Math.abs(length - span) < tolerance) || depth >= maxDepth) {
|
|
34
|
-
return length;
|
|
35
|
-
}
|
|
36
|
-
const tol = tolerance / 2;
|
|
37
|
-
const d = depth + 1;
|
|
38
|
-
return calcRec(a, mid, aVal, midVal, spanA, tol, d) + calcRec(mid, b, midVal, bVal, spanB, tol, d);
|
|
39
|
-
};
|
|
40
|
-
const aVal = func(minLimit) as number[];
|
|
41
|
-
const bVal = func(maxLimit) as number[];
|
|
42
|
-
const span = Vector2.distance(aVal, bVal);
|
|
43
|
-
const res = calcRec(minLimit, maxLimit, aVal, bVal, span, tolerance);
|
|
44
|
-
return res;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Calculate using trapezoid method
|
|
49
|
-
* @param {Number} func Curve function returning [x,y]
|
|
50
|
-
* @param {Number} minLimit Min limit
|
|
51
|
-
* @param {Number} maxLimit Max limit
|
|
52
|
-
* @param {Number} segments Number of segments
|
|
53
|
-
*/
|
|
54
|
-
static trapezoid(func: fx, minLimit: number = 0, maxLimit: number = 1, segments: number = 1000): number {
|
|
55
|
-
let length = 0;
|
|
56
|
-
let lastPos = func(minLimit) as number[];
|
|
57
|
-
const step = (maxLimit - minLimit) / (segments - 1);
|
|
58
|
-
for (let i = 1; i < segments; i++) {
|
|
59
|
-
const pos = func(minLimit + i * step) as number[];
|
|
60
|
-
const delta = Vector2.distance(lastPos, pos);
|
|
61
|
-
length += delta;
|
|
62
|
-
lastPos = pos;
|
|
63
|
-
}
|
|
64
|
-
return length;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Find index where value[index] =< searchValue and value[index+1] >= searchValue using binary search
|
|
3
|
-
* @param {Number} values Array of sorted values
|
|
4
|
-
* @param {Number} searchValue Value to search for
|
|
5
|
-
*/
|
|
6
|
-
export class BinarySearch {
|
|
7
|
-
static search(values: number[], searchValue: number): number {
|
|
8
|
-
let il = 0;
|
|
9
|
-
let ih = values.length - 1;
|
|
10
|
-
let i = Math.floor(il + ih / 2);
|
|
11
|
-
while (i > il && i < ih) {
|
|
12
|
-
const v = values[i];
|
|
13
|
-
const v1 = values[i + 1];
|
|
14
|
-
if (v <= searchValue && v1 >= searchValue) {
|
|
15
|
-
return i;
|
|
16
|
-
}
|
|
17
|
-
if (searchValue < v) {
|
|
18
|
-
ih = i;
|
|
19
|
-
} else {
|
|
20
|
-
il = i;
|
|
21
|
-
}
|
|
22
|
-
i = Math.floor(il + ih / 2);
|
|
23
|
-
}
|
|
24
|
-
return i;
|
|
25
|
-
}
|
|
26
|
-
}
|
package/src/utils/color.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { color, Color } from 'd3-color';
|
|
2
|
-
|
|
3
|
-
const RADIX_SIXTEEN = 16;
|
|
4
|
-
const HEX_STRING_LENGTH = 6;
|
|
5
|
-
/**
|
|
6
|
-
* Convert color string to number
|
|
7
|
-
*/
|
|
8
|
-
export function convertColor(colorStr: string): number {
|
|
9
|
-
const c: Color = color(colorStr);
|
|
10
|
-
const d: string = c.formatHex();
|
|
11
|
-
const n: number = parseInt(d.replace('#', '0x'));
|
|
12
|
-
return n;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export function colorToCSSColor(color: number | string): string {
|
|
16
|
-
if (typeof color === 'string') {
|
|
17
|
-
return color;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const colorHexString = color.toString(RADIX_SIXTEEN);
|
|
21
|
-
return `#${colorHexString.padStart(HEX_STRING_LENGTH, '0')}`;
|
|
22
|
-
}
|
package/src/utils/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './text';
|
package/src/utils/root-finder.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { clamp } from '@equinor/videx-math';
|
|
2
|
-
|
|
3
|
-
type fx = (n: number) => number;
|
|
4
|
-
|
|
5
|
-
/*
|
|
6
|
-
* Methods for finding root of a function
|
|
7
|
-
*/
|
|
8
|
-
export class RootFinder {
|
|
9
|
-
/**
|
|
10
|
-
* Find root using newthons method
|
|
11
|
-
* @param {Number} func f(x)
|
|
12
|
-
* @param {Number} precision Accuracy of result
|
|
13
|
-
* @param {Number} maxIterations Max number of iterations to use
|
|
14
|
-
* @param {Number} start Starting position
|
|
15
|
-
* @param {Number} minLimit Min limit of result
|
|
16
|
-
* @param {Number} maxLimit Max limit of result
|
|
17
|
-
*/
|
|
18
|
-
static newton(func: fx, precision: number = 0.01, maxIterations: number = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
|
|
19
|
-
const h = 0.0001;
|
|
20
|
-
let t = start;
|
|
21
|
-
for (let i = 0; i < maxIterations; i++) {
|
|
22
|
-
const v = func(t);
|
|
23
|
-
if (Math.abs(v) < precision) {
|
|
24
|
-
return clamp(t, minLimit, maxLimit);
|
|
25
|
-
}
|
|
26
|
-
const d = (func(t + h) - v) / h;
|
|
27
|
-
t = t - v / d;
|
|
28
|
-
}
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Find root using bisect method
|
|
34
|
-
* @param {Number} func f(x)
|
|
35
|
-
* @param {Number} precision Accuracy of result
|
|
36
|
-
* @param {Number} maxIterations Max number of iterations to use
|
|
37
|
-
* @param {Number} start Starting position
|
|
38
|
-
* @param {Number} minLimit Min limit of result
|
|
39
|
-
* @param {Number} maxLimit Max limit of result
|
|
40
|
-
*/
|
|
41
|
-
static bisect(func: fx, precision: number = 0.01, maxIterations: number = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
|
|
42
|
-
let tl = minLimit;
|
|
43
|
-
let th = maxLimit;
|
|
44
|
-
let t = start;
|
|
45
|
-
let v;
|
|
46
|
-
let i;
|
|
47
|
-
for (i = 0; i < maxIterations; i++) {
|
|
48
|
-
v = func(t);
|
|
49
|
-
if (Math.abs(v) < precision) {
|
|
50
|
-
return t;
|
|
51
|
-
}
|
|
52
|
-
if (v < 0) {
|
|
53
|
-
th = t;
|
|
54
|
-
} else {
|
|
55
|
-
tl = t;
|
|
56
|
-
}
|
|
57
|
-
t = (th + tl) / 2;
|
|
58
|
-
}
|
|
59
|
-
return t;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Find root by trying available methods
|
|
64
|
-
* @param {Number} func f(x)
|
|
65
|
-
* @param {Number} precision Accuracy of result
|
|
66
|
-
* @param {Number} maxIterations Max number of iterations to use
|
|
67
|
-
* @param {Number} start Starting position
|
|
68
|
-
* @param {Number} minLimit Min limit of result
|
|
69
|
-
* @param {Number} maxLimit Max limit of result
|
|
70
|
-
*/
|
|
71
|
-
static findRoot(func: fx, precision: number = 0.01, maxIterations: number = 1000, start = 0.5, minLimit = 0, maxLimit = 1): number {
|
|
72
|
-
let t = RootFinder.newton(func, precision, maxIterations, start);
|
|
73
|
-
if (t == null) {
|
|
74
|
-
t = RootFinder.bisect(func, precision, maxIterations, start, minLimit, maxLimit);
|
|
75
|
-
}
|
|
76
|
-
return t;
|
|
77
|
-
}
|
|
78
|
-
}
|