@webviz/subsurface-viewer 1.15.7 → 1.15.8
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/SubsurfaceViewer.d.ts +10 -14
- package/dist/SubsurfaceViewer.js.map +1 -1
- package/dist/components/Map.js +1 -1
- package/dist/components/Map.js.map +1 -1
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +2 -18
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js +2 -2
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -1
- package/dist/layers/types.d.ts +2 -2
- package/dist/layers/utils/layerTools.d.ts +9 -1
- package/dist/layers/utils/layerTools.js +15 -0
- package/dist/layers/utils/layerTools.js.map +1 -1
- package/dist/layers/wells/layers/logCurveLayer.d.ts +56 -0
- package/dist/layers/wells/layers/logCurveLayer.js +286 -0
- package/dist/layers/wells/layers/logCurveLayer.js.map +1 -0
- package/dist/layers/wells/types.d.ts +10 -7
- package/dist/layers/wells/utils/features.d.ts +21 -0
- package/dist/layers/wells/utils/features.js +52 -0
- package/dist/layers/wells/utils/features.js.map +1 -0
- package/dist/layers/wells/utils/log.d.ts +31 -0
- package/dist/layers/wells/utils/log.js +307 -0
- package/dist/layers/wells/utils/log.js.map +1 -0
- package/dist/layers/wells/utils/trajectory.d.ts +8 -6
- package/dist/layers/wells/utils/trajectory.js +115 -1
- package/dist/layers/wells/utils/trajectory.js.map +1 -1
- package/dist/layers/wells/utils/wells.d.ts +30 -0
- package/dist/layers/wells/utils/wells.js +55 -0
- package/dist/layers/wells/utils/wells.js.map +1 -0
- package/dist/layers/wells/wellsLayer.d.ts +10 -13
- package/dist/layers/wells/wellsLayer.js +71 -594
- package/dist/layers/wells/wellsLayer.js.map +1 -1
- package/dist/utils/arrays.d.ts +7 -0
- package/dist/utils/arrays.js +10 -0
- package/dist/utils/arrays.js.map +1 -0
- package/dist/utils/measurement.d.ts +16 -0
- package/dist/utils/measurement.js +37 -0
- package/dist/utils/measurement.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { rgbValues, getColors, } from "@emerson-eps/color-tables/";
|
|
2
|
+
import { createPropertyData, } from "../../utils/layerTools";
|
|
3
|
+
import { getSegmentIndex } from "./trajectory";
|
|
4
|
+
import { getPositionByMD, getWellMds, getWellObjectByName } from "./wells";
|
|
5
|
+
import { getTrajectory } from "./trajectory";
|
|
6
|
+
const MD_CURVE_NAMES = ["DEPTH::", "DEPT", "MD", "TDEP", "MD_RKB"]; // aliases for MD
|
|
7
|
+
export function getLogForWellbore(logs, logRunName, wellName) {
|
|
8
|
+
for (const log of logs) {
|
|
9
|
+
const { name, well } = log.header;
|
|
10
|
+
if (name === logRunName && well == wellName) {
|
|
11
|
+
return log;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
export function getLogIndexByName(d, log_name) {
|
|
17
|
+
const name = log_name.toLowerCase();
|
|
18
|
+
return d.curves.findIndex((item) => item.name.toLowerCase() === name);
|
|
19
|
+
}
|
|
20
|
+
export function getLogIndexByNames(d, names) {
|
|
21
|
+
for (const name of names) {
|
|
22
|
+
const index = getLogIndexByName(d, name);
|
|
23
|
+
if (index >= 0)
|
|
24
|
+
return index;
|
|
25
|
+
}
|
|
26
|
+
return -1;
|
|
27
|
+
}
|
|
28
|
+
export function isSelectedLogRun(d, logrun_name) {
|
|
29
|
+
return d.header.name.toLowerCase() === logrun_name.toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
export function getLogValues(d, logrun_name, log_name) {
|
|
32
|
+
if (!isSelectedLogRun(d, logrun_name))
|
|
33
|
+
return [];
|
|
34
|
+
const log_id = getLogIndexByName(d, log_name);
|
|
35
|
+
return log_id >= 0 ? getColumn(d.data, log_id) : [];
|
|
36
|
+
}
|
|
37
|
+
export function getLogInfo(d, logrun_name, log_name) {
|
|
38
|
+
if (!isSelectedLogRun(d, logrun_name))
|
|
39
|
+
return undefined;
|
|
40
|
+
const log_id = getLogIndexByName(d, log_name);
|
|
41
|
+
return d.curves[log_id];
|
|
42
|
+
}
|
|
43
|
+
export function getDiscreteLogMetadata(d, log_name) {
|
|
44
|
+
return d === null || d === void 0 ? void 0 : d.metadata_discrete[log_name];
|
|
45
|
+
}
|
|
46
|
+
export function getLogSegmentIndexForMd(log, md) {
|
|
47
|
+
const mdCurveIndex = getLogIndexByNames(log, MD_CURVE_NAMES);
|
|
48
|
+
if (md < log.data[0][mdCurveIndex])
|
|
49
|
+
return -1;
|
|
50
|
+
if (md > log.data.at(-1)[mdCurveIndex])
|
|
51
|
+
return -1;
|
|
52
|
+
// Special case to include the last md within the last segment
|
|
53
|
+
if (md === log.data.at(-1)[mdCurveIndex])
|
|
54
|
+
return log.data.length - 2;
|
|
55
|
+
for (let segmentIndex = 0; segmentIndex < log.data.length - 1; segmentIndex++) {
|
|
56
|
+
const segmentStart = log.data[segmentIndex][mdCurveIndex];
|
|
57
|
+
const segmentEnd = log.data[segmentIndex + 1][mdCurveIndex];
|
|
58
|
+
if (md < segmentStart)
|
|
59
|
+
continue;
|
|
60
|
+
if (md >= segmentStart && md < segmentEnd)
|
|
61
|
+
return segmentIndex;
|
|
62
|
+
}
|
|
63
|
+
return -1;
|
|
64
|
+
}
|
|
65
|
+
// Returns segment index of discrete logs
|
|
66
|
+
function getLogSegmentIndex(coord, wells_data, log_data, logrun_name) {
|
|
67
|
+
const trajectory = getLogPath(wells_data, log_data, logrun_name);
|
|
68
|
+
return getSegmentIndex(coord, trajectory);
|
|
69
|
+
}
|
|
70
|
+
export function getLogProperty(coord, wells_data, log_data, logrun_name, log_name) {
|
|
71
|
+
var _a, _b, _c;
|
|
72
|
+
if (!log_data.data)
|
|
73
|
+
return null;
|
|
74
|
+
const segment_index = getLogSegmentIndex(coord, wells_data, log_data, logrun_name);
|
|
75
|
+
let log_value = getLogValues(log_data, logrun_name, log_name)[segment_index];
|
|
76
|
+
let dl_attrs = undefined;
|
|
77
|
+
const dl_metadata = (_a = getDiscreteLogMetadata(log_data, log_name)) === null || _a === void 0 ? void 0 : _a.objects;
|
|
78
|
+
if (dl_metadata) {
|
|
79
|
+
dl_attrs = Object.entries(dl_metadata).find(([, value]) => value[1] == log_value);
|
|
80
|
+
}
|
|
81
|
+
const log = (_b = getLogInfo(log_data, logrun_name, log_name)) === null || _b === void 0 ? void 0 : _b.name;
|
|
82
|
+
const prop_name = log + " " + log_data.header.well;
|
|
83
|
+
log_value = dl_attrs ? dl_attrs[0] + " (" + log_value + ")" : log_value;
|
|
84
|
+
if (log_value) {
|
|
85
|
+
const well_object = getWellObjectByName(wells_data, log_data.header.well);
|
|
86
|
+
return createPropertyData(prop_name, log_value, (_c = well_object === null || well_object === void 0 ? void 0 : well_object.properties) === null || _c === void 0 ? void 0 : _c["color"]);
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
export function getLogWidth(d, logrun_name, log_name) {
|
|
92
|
+
return getLogValues(d, logrun_name, log_name);
|
|
93
|
+
}
|
|
94
|
+
// Return data required to build well layer legend
|
|
95
|
+
export function getLegendData(logs, wellName, logName, logColor) {
|
|
96
|
+
if (!logs)
|
|
97
|
+
return null;
|
|
98
|
+
const log = wellName
|
|
99
|
+
? logs.find((log) => log.header.well == wellName)
|
|
100
|
+
: logs[0];
|
|
101
|
+
const logInfo = !log
|
|
102
|
+
? undefined
|
|
103
|
+
: getLogInfo(log, log.header.name, logName);
|
|
104
|
+
const title = "Wells / " + logName;
|
|
105
|
+
if (log && (logInfo === null || logInfo === void 0 ? void 0 : logInfo.description) == "discrete") {
|
|
106
|
+
const meta = log["metadata_discrete"];
|
|
107
|
+
const metadataDiscrete = meta[logName].objects;
|
|
108
|
+
return {
|
|
109
|
+
title: title,
|
|
110
|
+
colorName: logColor,
|
|
111
|
+
discrete: true,
|
|
112
|
+
metadata: metadataDiscrete,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
const minArray = [];
|
|
117
|
+
const maxArray = [];
|
|
118
|
+
logs.forEach(function (log) {
|
|
119
|
+
const logValues = getLogValues(log, log.header.name, logName);
|
|
120
|
+
minArray.push(Math.min(...logValues));
|
|
121
|
+
maxArray.push(Math.max(...logValues));
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
title: title,
|
|
125
|
+
colorName: logColor,
|
|
126
|
+
discrete: false,
|
|
127
|
+
valueRange: [Math.min(...minArray), Math.max(...maxArray)],
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function getLogMd(d, logrun_name) {
|
|
132
|
+
if (!isSelectedLogRun(d, logrun_name))
|
|
133
|
+
return [];
|
|
134
|
+
const log_id = getLogIndexByNames(d, MD_CURVE_NAMES);
|
|
135
|
+
return log_id >= 0 ? getColumn(d.data, log_id) : [];
|
|
136
|
+
}
|
|
137
|
+
export function getCurveValueAtRow(log, curveName, rowIndex) {
|
|
138
|
+
const curveIndex = getLogIndexByName(log, curveName);
|
|
139
|
+
return log.data[rowIndex][curveIndex];
|
|
140
|
+
}
|
|
141
|
+
export function getCurveValueAtMd(log, curveName, md) {
|
|
142
|
+
const mdCurveIndex = getLogIndexByNames(log, MD_CURVE_NAMES);
|
|
143
|
+
const curveIndex = getLogIndexByName(log, curveName);
|
|
144
|
+
if (mdCurveIndex < 0 || curveIndex < 0)
|
|
145
|
+
return null;
|
|
146
|
+
if (md < log.data[0][mdCurveIndex])
|
|
147
|
+
return null;
|
|
148
|
+
if (md > log.data[log.data.length - 1][mdCurveIndex])
|
|
149
|
+
return null;
|
|
150
|
+
const segmentIndex = log.data.findIndex((row) => row[mdCurveIndex] > md);
|
|
151
|
+
if (segmentIndex === -1)
|
|
152
|
+
return null;
|
|
153
|
+
const mdBelow = log.data[segmentIndex - 1][mdCurveIndex];
|
|
154
|
+
const mdAbove = log.data[segmentIndex][mdCurveIndex];
|
|
155
|
+
const interpolatedT = (md - mdBelow) / (mdAbove - mdBelow);
|
|
156
|
+
if (log.curves[curveIndex].description === "continuous") {
|
|
157
|
+
const valueBelow = log.data[segmentIndex - 1][curveIndex];
|
|
158
|
+
const valueAbove = log.data[segmentIndex][curveIndex];
|
|
159
|
+
return valueBelow + interpolatedT * (valueAbove - valueBelow);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
const valueBelow = log.data[segmentIndex - 1][curveIndex];
|
|
163
|
+
return valueBelow;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
export function injectMdRows(log, ...mdValues) {
|
|
167
|
+
const newData = [...log.data];
|
|
168
|
+
const mdCurveIndex = getLogIndexByNames(log, MD_CURVE_NAMES);
|
|
169
|
+
let currentDataRowIdx = 0;
|
|
170
|
+
let spliceCount = 0;
|
|
171
|
+
for (let i = 0; i < mdValues.length; i++) {
|
|
172
|
+
const mdValue = mdValues[i];
|
|
173
|
+
if (mdValue < log.data[0][mdCurveIndex])
|
|
174
|
+
continue;
|
|
175
|
+
if (mdValue > log.data[log.data.length - 1][mdCurveIndex])
|
|
176
|
+
break;
|
|
177
|
+
// Increase until we go over or find the value
|
|
178
|
+
while (log.data[currentDataRowIdx][mdCurveIndex] < mdValue &&
|
|
179
|
+
currentDataRowIdx < log.data.length) {
|
|
180
|
+
currentDataRowIdx++;
|
|
181
|
+
}
|
|
182
|
+
if (currentDataRowIdx >= log.data.length)
|
|
183
|
+
break;
|
|
184
|
+
// Data already in array, so we can skip
|
|
185
|
+
if (log.data[currentDataRowIdx][mdCurveIndex] === mdValue)
|
|
186
|
+
continue;
|
|
187
|
+
const mdBelow = log.data[currentDataRowIdx - 1][mdCurveIndex];
|
|
188
|
+
const mdAbove = log.data[currentDataRowIdx][mdCurveIndex];
|
|
189
|
+
const interpolatedT = (mdValue - mdBelow) / (mdAbove - mdBelow);
|
|
190
|
+
const interpolatedRow = [];
|
|
191
|
+
for (let colIdx = 0; colIdx < log.data[currentDataRowIdx].length; colIdx++) {
|
|
192
|
+
if (colIdx === mdCurveIndex) {
|
|
193
|
+
interpolatedRow.push(mdValue);
|
|
194
|
+
}
|
|
195
|
+
else if (log.curves[colIdx].description === "continuous") {
|
|
196
|
+
const valueBelow = log.data[currentDataRowIdx - 1][colIdx];
|
|
197
|
+
const valueAbove = log.data[currentDataRowIdx][colIdx];
|
|
198
|
+
const interpolatedValue = valueBelow + interpolatedT * (valueAbove - valueBelow);
|
|
199
|
+
interpolatedRow.push(interpolatedValue);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
const valueBelow = log.data[currentDataRowIdx - 1][colIdx];
|
|
203
|
+
interpolatedRow.push(valueBelow);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
newData.splice(currentDataRowIdx + spliceCount, 0, interpolatedRow);
|
|
207
|
+
spliceCount++;
|
|
208
|
+
}
|
|
209
|
+
return Object.assign(Object.assign({}, log), { data: newData });
|
|
210
|
+
}
|
|
211
|
+
export function getLogColor(d, logrun_name, log_name, logColor, colorTables, colorMappingFunction, isLog) {
|
|
212
|
+
var _a;
|
|
213
|
+
const log_data = getLogValues(d, logrun_name, log_name);
|
|
214
|
+
const log_info = getLogInfo(d, logrun_name, log_name);
|
|
215
|
+
if (log_data.length == 0 || log_info == undefined)
|
|
216
|
+
return [];
|
|
217
|
+
const log_color = [];
|
|
218
|
+
if (log_info.description == "continuous") {
|
|
219
|
+
const min = Math.min(...log_data);
|
|
220
|
+
const max = Math.max(...log_data);
|
|
221
|
+
const max_delta = max - min;
|
|
222
|
+
log_data.forEach((value) => {
|
|
223
|
+
const adjustedVal = (value - min) / max_delta;
|
|
224
|
+
const rgb = colorMappingFunction
|
|
225
|
+
? colorMappingFunction(adjustedVal)
|
|
226
|
+
: rgbValues(adjustedVal, logColor, colorTables, isLog);
|
|
227
|
+
if (rgb) {
|
|
228
|
+
log_color.push([rgb[0], rgb[1], rgb[2]]);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
log_color.push([0, 0, 0, 0]); // push transparent for null/undefined log values
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
// well log data set for ex : H1: Array(2)0: (4) [255, 26, 202, 255] 1: 13
|
|
237
|
+
const log_attributes = (_a = getDiscreteLogMetadata(d, log_name)) === null || _a === void 0 ? void 0 : _a.objects;
|
|
238
|
+
const logLength = Object.keys(log_attributes).length;
|
|
239
|
+
const attributesObject = {};
|
|
240
|
+
const categorical = true;
|
|
241
|
+
Object.keys(log_attributes).forEach((key) => {
|
|
242
|
+
// get the point from log_attributes
|
|
243
|
+
const point = log_attributes[key][1];
|
|
244
|
+
const categoricalMin = 0;
|
|
245
|
+
const categoricalMax = logLength - 1;
|
|
246
|
+
let rgb;
|
|
247
|
+
if (colorMappingFunction) {
|
|
248
|
+
rgb = colorMappingFunction(point, categorical, categoricalMin, categoricalMax);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
// if color-map function is not defined
|
|
252
|
+
const arrayOfColors = getColors(logColor, colorTables, point);
|
|
253
|
+
if (!arrayOfColors.length)
|
|
254
|
+
console.error(`Empty or missed '${logColor}' color table`);
|
|
255
|
+
else {
|
|
256
|
+
rgb = arrayOfColors;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (rgb) {
|
|
260
|
+
if (rgb.length === 3) {
|
|
261
|
+
attributesObject[key] = [[rgb[0], rgb[1], rgb[2]], point];
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// ? What is the point of this? Why do we offset the index in this case, isn't the fourth value the opacity?
|
|
265
|
+
// (@anders2303)
|
|
266
|
+
attributesObject[key] = [[rgb[1], rgb[2], rgb[3]], point];
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
log_data.forEach((log_value) => {
|
|
271
|
+
var _a;
|
|
272
|
+
const dl_attrs = (_a = Object.entries(attributesObject).find(([, value]) => value[1] == log_value)) === null || _a === void 0 ? void 0 : _a[1];
|
|
273
|
+
if (dl_attrs)
|
|
274
|
+
log_color.push(dl_attrs[0]);
|
|
275
|
+
else
|
|
276
|
+
log_color.push([0, 0, 0, 0]); // use transparent for undefined/null log values
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
return log_color;
|
|
280
|
+
}
|
|
281
|
+
export function getLogPath(wells_data, d, logrun_name, trajectory_line_color) {
|
|
282
|
+
const well_object = getWellObjectByName(wells_data, d.header.well);
|
|
283
|
+
if (!well_object)
|
|
284
|
+
return [];
|
|
285
|
+
const well_xyz = getTrajectory(well_object, trajectory_line_color);
|
|
286
|
+
const well_mds = getWellMds(well_object);
|
|
287
|
+
if (well_xyz == undefined ||
|
|
288
|
+
well_mds == undefined ||
|
|
289
|
+
well_xyz.length == 0 ||
|
|
290
|
+
well_mds.length == 0)
|
|
291
|
+
return [];
|
|
292
|
+
const log_xyz = [];
|
|
293
|
+
const log_mds = getLogMd(d, logrun_name);
|
|
294
|
+
log_mds.forEach((md) => {
|
|
295
|
+
const xyz = getPositionByMD(well_xyz, well_mds, md);
|
|
296
|
+
log_xyz.push(xyz);
|
|
297
|
+
});
|
|
298
|
+
return log_xyz;
|
|
299
|
+
}
|
|
300
|
+
export function getColumn(data, col) {
|
|
301
|
+
const column = [];
|
|
302
|
+
for (let i = 0; i < data.length; i++) {
|
|
303
|
+
column.push(data[i][col]);
|
|
304
|
+
}
|
|
305
|
+
return column;
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../../src/layers/wells/utils/log.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,SAAS,EACT,SAAS,GACZ,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAEH,kBAAkB,GACrB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAM3E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB;AAErF,MAAM,UAAU,iBAAiB,CAC7B,IAAwB,EACxB,UAAkB,EAClB,QAAgB;IAEhB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAElC,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC1C,OAAO,GAAG,CAAC;QACf,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,CAAmB,EACnB,QAAgB;IAEhB,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,CAAmB,EACnB,KAAe;IAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC5B,CAAmB,EACnB,WAAmB;IAEnB,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY,CACxB,CAAmB,EACnB,WAAmB,EACnB,QAAgB;IAEhB,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,UAAU,CACtB,CAAmB,EACnB,WAAmB,EACnB,QAAgB;IAEhB,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAExD,MAAM,MAAM,GAAG,iBAAiB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,CAAmB,EAAE,QAAgB;IACxE,OAAO,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,uBAAuB,CACnC,GAAqB,EACrB,EAAU;IAEV,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAE7D,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAC9C,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAEnD,8DAA8D;IAC9D,IAAI,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAEtE,KACI,IAAI,YAAY,GAAG,CAAC,EACpB,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAClC,YAAY,EAAE,EAChB,CAAC;QACC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAE5D,IAAI,EAAE,GAAG,YAAY;YAAE,SAAS;QAChC,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,GAAG,UAAU;YAAE,OAAO,YAAY,CAAC;IACnE,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACd,CAAC;AAED,yCAAyC;AACzC,SAAS,kBAAkB,CACvB,KAAe,EACf,UAAyB,EACzB,QAA0B,EAC1B,WAAmB;IAEnB,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACjE,OAAO,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,KAAe,EACf,UAAyB,EACzB,QAA0B,EAC1B,WAAmB,EACnB,QAAgB;;IAEhB,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,MAAM,aAAa,GAAG,kBAAkB,CACpC,KAAK,EACL,UAAU,EACV,QAAQ,EACR,WAAW,CACd,CAAC;IACF,IAAI,SAAS,GAAoB,YAAY,CACzC,QAAQ,EACR,WAAW,EACX,QAAQ,CACX,CAAC,aAAa,CAAC,CAAC;IAEjB,IAAI,QAAQ,GAA0C,SAAS,CAAC;IAChE,MAAM,WAAW,GAAG,MAAA,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,0CAAE,OAAO,CAAC;IACxE,IAAI,WAAW,EAAE,CAAC;QACd,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CACvC,CAAC;IACN,CAAC;IAED,MAAM,GAAG,GAAG,MAAA,UAAU,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,0CAAE,IAAI,CAAC;IAC9D,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;IACnD,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAExE,IAAI,SAAS,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,mBAAmB,CACnC,UAAU,EACV,QAAQ,CAAC,MAAM,CAAC,IAAI,CACvB,CAAC;QACF,OAAO,kBAAkB,CACrB,SAAS,EACT,SAAS,EACT,MAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,0CAAG,OAAO,CAAC,CACrC,CAAC;IACN,CAAC;;QAAM,OAAO,IAAI,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CACvB,CAAmB,EACnB,WAAmB,EACnB,QAAgB;IAEhB,OAAO,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,aAAa,CACzB,IAAwB,EACxB,QAAgB,EAChB,OAAe,EACf,QAAgB;IAEhB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,GAAG,GAAG,QAAQ;QAChB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC;QACjD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,CAAC,GAAG;QAChB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;IACnC,IAAI,GAAG,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,KAAI,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;QAC/C,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,gBAAgB;SAC7B,CAAC;IACN,CAAC;SAAM,CAAC;QACJ,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAqB;YACxC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,QAAQ;YACnB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;SAC7D,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAmB,EAAE,WAAmB;IAC7D,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAG,kBAAkB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IACrD,OAAO,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAC9B,GAAqB,EACrB,SAAiB,EACjB,QAAgB;IAEhB,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,GAAqB,EACrB,SAAiB,EACjB,EAAU;IAEV,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAErD,IAAI,YAAY,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;IAEzE,IAAI,YAAY,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;IAErD,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;IAE3D,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,CAAC;QAEtD,OAAO,UAAU,GAAG,aAAa,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACJ,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1D,OAAO,UAAU,CAAC;IACtB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CACxB,GAAqB,EACrB,GAAG,QAAkB;IAErB,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,kBAAkB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAE7D,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAAE,SAAS;QAClD,IAAI,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;YAAE,MAAM;QAEjE,8CAA8C;QAC9C,OACI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,GAAG,OAAO;YACnD,iBAAiB,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EACrC,CAAC;YACC,iBAAiB,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,iBAAiB,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM;QAEhD,wCAAwC;QACxC,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,KAAK,OAAO;YAAE,SAAS;QAEpE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC;QAE1D,MAAM,aAAa,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;QAEhE,MAAM,eAAe,GAAG,EAAE,CAAC;QAE3B,KACI,IAAI,MAAM,GAAG,CAAC,EACd,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAC3C,MAAM,EAAE,EACV,CAAC;YACC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;gBACzD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC3D,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;gBACvD,MAAM,iBAAiB,GACnB,UAAU,GAAG,aAAa,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;gBAC3D,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACJ,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC3D,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,iBAAiB,GAAG,WAAW,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;QACpE,WAAW,EAAE,CAAC;IAClB,CAAC;IAED,uCACO,GAAG,KACN,IAAI,EAAE,OAAO,IACf;AACN,CAAC;AAED,MAAM,UAAU,WAAW,CACvB,CAAmB,EACnB,WAAmB,EACnB,QAAgB,EAChB,QAAgB,EAChB,WAA6B,EAC7B,oBAA6D,EAC7D,KAAc;;IAEd,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;IAC7D,MAAM,SAAS,GAAY,EAAE,CAAC;IAE9B,IAAI,QAAQ,CAAC,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC;QAC5B,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,MAAM,WAAW,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC;YAE9C,MAAM,GAAG,GAAG,oBAAoB;gBAC5B,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC;gBACnC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YAE3D,IAAI,GAAG,EAAE,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC;iBAAM,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,iDAAiD;YACnF,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACJ,0EAA0E;QAC1E,MAAM,cAAc,GAAG,MAAA,sBAAsB,CAAC,CAAC,EAAE,QAAQ,CAAC,0CAAE,OAAO,CAAC;QACpE,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;QAErD,MAAM,gBAAgB,GAAuC,EAAE,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC;QAEzB,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACxC,oCAAoC;YACpC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,cAAc,GAAG,CAAC,CAAC;YACzB,MAAM,cAAc,GAAG,SAAS,GAAG,CAAC,CAAC;YAErC,IAAI,GAAG,CAAC;YACR,IAAI,oBAAoB,EAAE,CAAC;gBACvB,GAAG,GAAG,oBAAoB,CACtB,KAAK,EACL,WAAW,EACX,cAAc,EACd,cAAc,CACjB,CAAC;YACN,CAAC;iBAAM,CAAC;gBACJ,uCAAuC;gBACvC,MAAM,aAAa,GAAa,SAAS,CACrC,QAAQ,EACR,WAAW,EACX,KAAK,CACR,CAAC;gBAEF,IAAI,CAAC,aAAa,CAAC,MAAM;oBACrB,OAAO,CAAC,KAAK,CAAC,oBAAoB,QAAQ,eAAe,CAAC,CAAC;qBAC1D,CAAC;oBACF,GAAG,GAAG,aAAa,CAAC;gBACxB,CAAC;YACL,CAAC;YAED,IAAI,GAAG,EAAE,CAAC;gBACN,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnB,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC9D,CAAC;qBAAM,CAAC;oBACJ,4GAA4G;oBAC5G,gBAAgB;oBAChB,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;;YAC3B,MAAM,QAAQ,GAAG,MAAA,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAClD,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAE,KAAyB,CAAC,CAAC,CAAC,IAAI,SAAS,CAC5D,0CAAG,CAAC,CAAC,CAAC;YAEP,IAAI,QAAQ;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;;gBACrC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gDAAgD;QACvF,CAAC,CAAC,CAAC;IACP,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU,CACtB,UAAyB,EACzB,CAAmB,EACnB,WAAmB,EACnB,qBAAqC;IAErC,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAEzC,IACI,QAAQ,IAAI,SAAS;QACrB,QAAQ,IAAI,SAAS;QACrB,QAAQ,CAAC,MAAM,IAAI,CAAC;QACpB,QAAQ,CAAC,MAAM,IAAI,CAAC;QAEpB,OAAO,EAAE,CAAC;IAEd,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACnB,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAI,IAAW,EAAE,GAAW;IACjD,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import type { Color } from "@deck.gl/core";
|
|
1
|
+
import type { AccessorContext, Color } from "@deck.gl/core";
|
|
2
2
|
import type { Position } from "geojson";
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
type ColorAccessor = Color | StyleAccessorFunction | undefined;
|
|
6
|
-
export declare function getColor(accessor: ColorAccessor): Color | ((object: WellFeature, objectInfo?: Record<string, unknown>) => Color | undefined);
|
|
3
|
+
import type { ColorAccessor, WellFeature } from "../types";
|
|
4
|
+
export declare function getColor(accessor: ColorAccessor): Color | ((object: WellFeature, objectInfo?: AccessorContext<WellFeature>) => Color | undefined);
|
|
7
5
|
/**
|
|
8
6
|
* Get trajectory data from LineString Geometry if it's visible (checking
|
|
9
7
|
* trajectory visiblity based on line color)
|
|
10
8
|
*/
|
|
11
9
|
export declare function getTrajectory(well_object: WellFeature, color_accessor: ColorAccessor): Position[] | undefined;
|
|
12
|
-
export
|
|
10
|
+
export declare function getMdsInRange(mdArray: number[], mdStart: number, mdEnd: number): number[];
|
|
11
|
+
export declare function interpolateDataOnTrajectory(coord: Position, data: number[], trajectory: Position[]): number | null;
|
|
12
|
+
export declare function getMd(coord: Position, feature: WellFeature, accessor: ColorAccessor): number | null;
|
|
13
|
+
export declare function getTvd(coord: Position, feature: WellFeature, accessor: ColorAccessor): number | null;
|
|
14
|
+
export declare function getSegmentIndex(coord: Position, path: Position[]): number;
|
|
@@ -1,15 +1,20 @@
|
|
|
1
|
+
import { distance, subtract, dot } from "mathjs";
|
|
2
|
+
import { distToSegmentSquared, isPointAwayFromLineEnd, } from "../../../utils/measurement";
|
|
3
|
+
import { getWellHeadPosition } from "./features";
|
|
1
4
|
function getLineStringGeometry(well_object) {
|
|
2
5
|
const geometries = well_object.geometry.geometries;
|
|
3
6
|
return geometries.find((item) => item.type === "LineString");
|
|
4
7
|
}
|
|
5
8
|
export function getColor(accessor) {
|
|
6
|
-
if (accessor) {
|
|
9
|
+
if (Array.isArray(accessor)) {
|
|
7
10
|
return accessor;
|
|
8
11
|
}
|
|
9
12
|
return (object, objectInfo) => {
|
|
10
13
|
var _a;
|
|
11
14
|
if (typeof accessor === "function") {
|
|
12
15
|
const colorFunc = accessor;
|
|
16
|
+
// info object is arguably required, but there's too many spots that don't pass it along atm
|
|
17
|
+
// @ts-expect-error -- @ander2303
|
|
13
18
|
const color = colorFunc(object, objectInfo);
|
|
14
19
|
if (color) {
|
|
15
20
|
return color;
|
|
@@ -44,4 +49,113 @@ export function getTrajectory(well_object, color_accessor) {
|
|
|
44
49
|
else
|
|
45
50
|
return undefined;
|
|
46
51
|
}
|
|
52
|
+
export function getMdsInRange(mdArray,
|
|
53
|
+
// We assume the range is already sanitized (aka: mdStart < mdEnd)
|
|
54
|
+
mdStart, mdEnd) {
|
|
55
|
+
const mdSection = [];
|
|
56
|
+
mdSection.push(mdStart);
|
|
57
|
+
for (let index = 0; index < mdArray.length; index++) {
|
|
58
|
+
const md = mdArray[index];
|
|
59
|
+
// Equal mds are skipped, since they're added at the end
|
|
60
|
+
if (md <= mdStart)
|
|
61
|
+
continue;
|
|
62
|
+
if (md >= mdEnd)
|
|
63
|
+
break;
|
|
64
|
+
mdSection.push(md);
|
|
65
|
+
}
|
|
66
|
+
mdSection.push(mdEnd);
|
|
67
|
+
return mdSection;
|
|
68
|
+
}
|
|
69
|
+
// Interpolates point closest to the coords on trajectory
|
|
70
|
+
export function interpolateDataOnTrajectory(coord, data, trajectory) {
|
|
71
|
+
// if number of data points in less than 1 or
|
|
72
|
+
// length of data and trajectory are different we cannot interpolate.
|
|
73
|
+
if (data.length <= 1 || data.length != trajectory.length)
|
|
74
|
+
return null;
|
|
75
|
+
// Identify closest well path leg to coord.
|
|
76
|
+
const segment_index = getSegmentIndex(coord, trajectory);
|
|
77
|
+
const index0 = segment_index;
|
|
78
|
+
const index1 = index0 + 1;
|
|
79
|
+
// Get the nearest data.
|
|
80
|
+
const data0 = data[index0];
|
|
81
|
+
const data1 = data[index1];
|
|
82
|
+
// Get the nearest survey points.
|
|
83
|
+
const survey0 = trajectory[index0];
|
|
84
|
+
const survey1 = trajectory[index1];
|
|
85
|
+
// To avoid interpolating longer than the actual wellbore path we ignore the coordinate if it's moved beyond the last line
|
|
86
|
+
if (index1 === trajectory.length - 1 &&
|
|
87
|
+
isPointAwayFromLineEnd(coord, [survey0, survey1])) {
|
|
88
|
+
coord = survey1;
|
|
89
|
+
}
|
|
90
|
+
const dv = distance(survey0, survey1);
|
|
91
|
+
if (dv === 0) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
// Calculate the scalar projection onto segment.
|
|
95
|
+
const v0 = subtract(coord, survey0);
|
|
96
|
+
const v1 = subtract(survey1, survey0);
|
|
97
|
+
// scalar_projection in interval [0,1]
|
|
98
|
+
const scalar_projection = dot(v0, v1) / (dv * dv);
|
|
99
|
+
// Interpolate data.
|
|
100
|
+
return data0 * (1.0 - scalar_projection) + data1 * scalar_projection;
|
|
101
|
+
}
|
|
102
|
+
export function getMd(coord, feature, accessor) {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
if (!((_b = (_a = feature.properties) === null || _a === void 0 ? void 0 : _a["md"]) === null || _b === void 0 ? void 0 : _b[0]) || !feature.geometry)
|
|
105
|
+
return null;
|
|
106
|
+
const measured_depths = feature.properties.md[0];
|
|
107
|
+
const trajectory3D = getTrajectory(feature, accessor);
|
|
108
|
+
if (trajectory3D == undefined)
|
|
109
|
+
return null;
|
|
110
|
+
let trajectory;
|
|
111
|
+
// In 2D view coord is of type Point2D and in 3D view it is Point3D,
|
|
112
|
+
// so use appropriate trajectory for interpolation
|
|
113
|
+
if (coord.length == 2) {
|
|
114
|
+
const trajectory2D = trajectory3D.map((v) => {
|
|
115
|
+
return v.slice(0, 2);
|
|
116
|
+
});
|
|
117
|
+
trajectory = trajectory2D;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
trajectory = trajectory3D;
|
|
121
|
+
}
|
|
122
|
+
return interpolateDataOnTrajectory(coord, measured_depths, trajectory);
|
|
123
|
+
}
|
|
124
|
+
export function getTvd(coord, feature, accessor) {
|
|
125
|
+
var _a;
|
|
126
|
+
const trajectory3D = getTrajectory(feature, accessor);
|
|
127
|
+
// if trajectory is not found or if it has a data single point then get tvd from well head
|
|
128
|
+
if (trajectory3D == undefined || (trajectory3D === null || trajectory3D === void 0 ? void 0 : trajectory3D.length) <= 1) {
|
|
129
|
+
const wellhead_xyz = getWellHeadPosition(feature);
|
|
130
|
+
return (_a = wellhead_xyz === null || wellhead_xyz === void 0 ? void 0 : wellhead_xyz[2]) !== null && _a !== void 0 ? _a : null;
|
|
131
|
+
}
|
|
132
|
+
let trajectory;
|
|
133
|
+
// For 2D view coord is Point2D and for 3D view it is Point3D
|
|
134
|
+
if (coord.length == 2) {
|
|
135
|
+
const trajectory2D = trajectory3D === null || trajectory3D === void 0 ? void 0 : trajectory3D.map((v) => {
|
|
136
|
+
return v.slice(0, 2);
|
|
137
|
+
});
|
|
138
|
+
trajectory = trajectory2D;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
trajectory = trajectory3D;
|
|
142
|
+
}
|
|
143
|
+
const tvds = trajectory3D.map((v) => {
|
|
144
|
+
return v[2];
|
|
145
|
+
});
|
|
146
|
+
// TVD goes downwards, so it's reversed
|
|
147
|
+
return interpolateDataOnTrajectory(coord, tvds, trajectory);
|
|
148
|
+
} // Identify closest path leg to coord.
|
|
149
|
+
export function getSegmentIndex(coord, path) {
|
|
150
|
+
let min_d = Number.MAX_VALUE;
|
|
151
|
+
let segment_index = 0;
|
|
152
|
+
for (let i = 0; i < (path === null || path === void 0 ? void 0 : path.length) - 1; i++) {
|
|
153
|
+
const d = distToSegmentSquared(path[i], path[i + 1], coord);
|
|
154
|
+
if (d > min_d)
|
|
155
|
+
continue;
|
|
156
|
+
segment_index = i;
|
|
157
|
+
min_d = d;
|
|
158
|
+
}
|
|
159
|
+
return segment_index;
|
|
160
|
+
}
|
|
47
161
|
//# sourceMappingURL=trajectory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../../../src/layers/wells/utils/trajectory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../../../src/layers/wells/utils/trajectory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Position } from "geojson";
|
|
2
|
+
import type { WellFeature } from "../types";
|
|
3
|
+
/**
|
|
4
|
+
* Gets a well feature object based on it's name
|
|
5
|
+
* @param wells_data A list of data features
|
|
6
|
+
* @param name The name of the well. Case insensitive
|
|
7
|
+
* @returns Returns the well if found
|
|
8
|
+
*/
|
|
9
|
+
export declare function getWellObjectByName(wells_data: WellFeature[], name: string): WellFeature | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Gets multiple well feature objects based on their names
|
|
12
|
+
* @param wells_data A list of data features
|
|
13
|
+
* @param name The names of the wells to find. Case insensitive
|
|
14
|
+
* @returns Returns a list of all wells who's name was found
|
|
15
|
+
*/
|
|
16
|
+
export declare function getWellObjectsByName(wells_data: WellFeature[], name: string[]): WellFeature[];
|
|
17
|
+
/**
|
|
18
|
+
* Get measured depths array from well feature object
|
|
19
|
+
* @param well_object A well feature object
|
|
20
|
+
* @returns An array of measured depths for the well
|
|
21
|
+
*/
|
|
22
|
+
export declare function getWellMds(well_object: WellFeature): number[];
|
|
23
|
+
/**
|
|
24
|
+
* Gets an interpolated world position along a well trajectory based on measured depth
|
|
25
|
+
* @param well_xyz A wells trajectory positions
|
|
26
|
+
* @param well_mds A wells trajectory measured depths
|
|
27
|
+
* @param md The measured depth to get the position for
|
|
28
|
+
* @returns The interpolated world position at the given measured depth
|
|
29
|
+
*/
|
|
30
|
+
export declare function getPositionByMD(well_xyz: Position[], well_mds: number[], md: number): Position;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { interpolateNumberArray } from "d3-interpolate";
|
|
2
|
+
/**
|
|
3
|
+
* Gets a well feature object based on it's name
|
|
4
|
+
* @param wells_data A list of data features
|
|
5
|
+
* @param name The name of the well. Case insensitive
|
|
6
|
+
* @returns Returns the well if found
|
|
7
|
+
*/
|
|
8
|
+
export function getWellObjectByName(wells_data, name) {
|
|
9
|
+
return wells_data.find((item) => { var _a, _b; return ((_b = (_a = item.properties) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === (name === null || name === void 0 ? void 0 : name.toLowerCase()); });
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Gets multiple well feature objects based on their names
|
|
13
|
+
* @param wells_data A list of data features
|
|
14
|
+
* @param name The names of the wells to find. Case insensitive
|
|
15
|
+
* @returns Returns a list of all wells who's name was found
|
|
16
|
+
*/
|
|
17
|
+
export function getWellObjectsByName(wells_data, name) {
|
|
18
|
+
const res = [];
|
|
19
|
+
for (let i = 0; i < (name === null || name === void 0 ? void 0 : name.length); i++) {
|
|
20
|
+
wells_data.find((item) => {
|
|
21
|
+
var _a, _b, _c;
|
|
22
|
+
if (((_b = (_a = item.properties) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === ((_c = name[i]) === null || _c === void 0 ? void 0 : _c.toLowerCase()))
|
|
23
|
+
res.push(item);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return res;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get measured depths array from well feature object
|
|
30
|
+
* @param well_object A well feature object
|
|
31
|
+
* @returns An array of measured depths for the well
|
|
32
|
+
*/
|
|
33
|
+
export function getWellMds(well_object) {
|
|
34
|
+
return well_object.properties.md[0];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Gets an interpolated world position along a well trajectory based on measured depth
|
|
38
|
+
* @param well_xyz A wells trajectory positions
|
|
39
|
+
* @param well_mds A wells trajectory measured depths
|
|
40
|
+
* @param md The measured depth to get the position for
|
|
41
|
+
* @returns The interpolated world position at the given measured depth
|
|
42
|
+
*/
|
|
43
|
+
export function getPositionByMD(well_xyz, well_mds, md) {
|
|
44
|
+
const [l_idx, h_idx] = getNeighboringMdIndices(well_mds, md);
|
|
45
|
+
const md_low = well_mds[l_idx];
|
|
46
|
+
const md_normalized = (md - md_low) / (well_mds[h_idx] - md_low);
|
|
47
|
+
return interpolateNumberArray(well_xyz[l_idx], well_xyz[h_idx])(md_normalized);
|
|
48
|
+
}
|
|
49
|
+
function getNeighboringMdIndices(mds, md) {
|
|
50
|
+
const idx = mds.findIndex((x) => x >= md);
|
|
51
|
+
if (idx === -1)
|
|
52
|
+
return [];
|
|
53
|
+
return idx === 0 ? [idx, idx + 1] : [idx - 1, idx];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=wells.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wells.js","sourceRoot":"","sources":["../../../../src/layers/wells/utils/wells.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAKxD;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAC/B,UAAyB,EACzB,IAAY;IAEZ,OAAO,UAAU,CAAC,IAAI,CAClB,CAAC,IAAI,EAAE,EAAE,eAAC,OAAA,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,0CAAE,WAAW,EAAE,OAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,EAAE,CAAA,CAAA,EAAA,CACzE,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAChC,UAAyB,EACzB,IAAc;IAEd,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAA,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;;YACrB,IAAI,CAAA,MAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,0CAAE,WAAW,EAAE,OAAK,MAAA,IAAI,CAAC,CAAC,CAAC,0CAAE,WAAW,EAAE,CAAA;gBAC/D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,WAAwB;IAC/C,OAAO,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC3B,QAAoB,EACpB,QAAkB,EAClB,EAAU;IAEV,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,uBAAuB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;IACjE,OAAO,sBAAsB,CACzB,QAAQ,CAAC,KAAK,CAAC,EACf,QAAQ,CAAC,KAAK,CAAC,CAClB,CAAC,aAAa,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAa,EAAE,EAAU;IACtD,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1C,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -4,10 +4,10 @@ import type { BinaryFeatureCollection } from "@loaders.gl/schema";
|
|
|
4
4
|
import type { Feature } from "geojson";
|
|
5
5
|
import type { ColormapFunctionType } from "../utils/colormapTools";
|
|
6
6
|
import type { ExtendedLayerProps, ReportBoundingBoxAction } from "../utils/layerTools";
|
|
7
|
-
import type { ContinuousLegendDataType, DiscreteLegendDataType } from "../../components/ColorLegend";
|
|
8
7
|
import type { WellLabelLayerProps } from "./layers/wellLabelLayer";
|
|
9
8
|
import { WellLabelLayer } from "./layers/wellLabelLayer";
|
|
10
|
-
import type { AbscissaTransform, LineStyleAccessor, LogCurveDataType,
|
|
9
|
+
import type { AbscissaTransform, LineStyleAccessor, LogCurveDataType, WellFeature, WellFeatureCollection, WellHeadStyleAccessor, WellsPickInfo } from "./types";
|
|
10
|
+
import type { ContinuousLegendDataType, DiscreteLegendDataType } from "../../components/ColorLegend";
|
|
11
11
|
export declare enum SubLayerId {
|
|
12
12
|
COLORS = "colors",
|
|
13
13
|
SIMPLE = "simple",
|
|
@@ -88,26 +88,28 @@ export interface WellsLayerProps extends ExtendedLayerProps {
|
|
|
88
88
|
reportBoundingBox?: React.Dispatch<ReportBoundingBoxAction>;
|
|
89
89
|
wellLabel?: Partial<WellLabelLayerProps>;
|
|
90
90
|
}
|
|
91
|
-
export declare function getSize(type: string, accessor: SizeAccessor, offset?: number): number | ((object: Feature) => number);
|
|
92
91
|
export default class WellsLayer extends CompositeLayer<WellsLayerProps> {
|
|
93
92
|
state: {
|
|
94
93
|
data: WellFeatureCollection | undefined;
|
|
95
|
-
|
|
94
|
+
logData: LogCurveDataType[] | undefined;
|
|
96
95
|
selectedMultiWells: string[];
|
|
97
|
-
|
|
96
|
+
logDomainSelection: {
|
|
97
|
+
well: string;
|
|
98
|
+
selection: number[];
|
|
99
|
+
} | undefined;
|
|
98
100
|
sectionData?: WellFeatureCollection;
|
|
99
101
|
};
|
|
100
102
|
private recomputeDataState;
|
|
101
103
|
shouldUpdateState({ changeFlags }: UpdateParameters<this>): boolean;
|
|
102
104
|
updateState({ props, oldProps }: UpdateParameters<WellsLayer>): void;
|
|
103
105
|
onClick(info: WellsPickInfo): boolean;
|
|
104
|
-
setSelection(well: string | undefined,
|
|
106
|
+
setSelection(well: string | undefined, selection?: [number | undefined, number | undefined]): void;
|
|
105
107
|
setMultiSelection(wells: string[] | undefined): void;
|
|
106
108
|
getWellDataState(): WellFeatureCollection | undefined;
|
|
107
109
|
getLegendData(value: LogCurveDataType[]): ContinuousLegendDataType | DiscreteLegendDataType | null;
|
|
108
110
|
setLegend(value: LogCurveDataType[]): void;
|
|
109
|
-
getLogLayer(): Layer;
|
|
110
|
-
getSelectionLayer(): Layer;
|
|
111
|
+
getLogLayer(): Layer | undefined;
|
|
112
|
+
getSelectionLayer(): Layer | undefined;
|
|
111
113
|
getLogCurveData(): LogCurveDataType[] | undefined;
|
|
112
114
|
setupLegend(): void;
|
|
113
115
|
protected getWellLabelPosition(): number | ((d: Feature) => number);
|
|
@@ -117,8 +119,3 @@ export default class WellsLayer extends CompositeLayer<WellsLayerProps> {
|
|
|
117
119
|
info: PickingInfo;
|
|
118
120
|
}): WellsPickInfo;
|
|
119
121
|
}
|
|
120
|
-
export declare function getLogValues(d: LogCurveDataType, logrun_name: string, log_name: string): number[];
|
|
121
|
-
export declare function getLogInfo(d: LogCurveDataType, logrun_name: string, log_name: string): {
|
|
122
|
-
name: string;
|
|
123
|
-
description: string;
|
|
124
|
-
} | undefined;
|