@webviz/subsurface-viewer 1.10.0 → 1.10.2
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.
@@ -33,6 +33,28 @@ const DEFAULT_PROPS = {
|
|
33
33
|
backgroundPadding: [5, 1, 5, 1],
|
34
34
|
getBorderColor: [0, 0, 0, 255],
|
35
35
|
getBorderWidth: 1,
|
36
|
+
// Animate label position transitions in order to help tracking when labels are moving
|
37
|
+
transitions: {
|
38
|
+
getPosition: {
|
39
|
+
duration: 100,
|
40
|
+
type: "spring",
|
41
|
+
},
|
42
|
+
},
|
43
|
+
};
|
44
|
+
const getCumulativeDistance = (well_xyz) => {
|
45
|
+
const cumulativeDistance = [0];
|
46
|
+
for (let i = 1; i < well_xyz.length; i++) {
|
47
|
+
const p1 = well_xyz[i - 1];
|
48
|
+
const p2 = well_xyz[i];
|
49
|
+
if (!p1 || !p2) {
|
50
|
+
continue;
|
51
|
+
}
|
52
|
+
const v0 = new Vector3(p1);
|
53
|
+
const v1 = new Vector3(p2);
|
54
|
+
const distance = v0.distance(v1);
|
55
|
+
cumulativeDistance.push(cumulativeDistance[i - 1] + distance);
|
56
|
+
}
|
57
|
+
return cumulativeDistance;
|
36
58
|
};
|
37
59
|
/**
|
38
60
|
* The `WellLabelLayer` class extends the `TextLayer` to provide functionality for rendering well labels
|
@@ -92,8 +114,8 @@ export class WellLabelLayer extends TextLayer {
|
|
92
114
|
}
|
93
115
|
fraction = _.clamp(fraction, 0, 1);
|
94
116
|
// Return a pos "annotation_position" percent down the trajectory
|
95
|
-
|
96
|
-
const label = (_b = (_a = well_data.properties) === null || _a === void 0 ? void 0 : _a["name"]) !== null && _b !== void 0 ? _b : "
|
117
|
+
const pos = this.getVectorAlongTrajectory(fraction, well_data)[1];
|
118
|
+
const label = (_b = (_a = well_data.properties) === null || _a === void 0 ? void 0 : _a["name"]) !== null && _b !== void 0 ? _b : "";
|
97
119
|
const labelSize = label.length;
|
98
120
|
const view_from = new Vector3(this.context.viewport.cameraPosition);
|
99
121
|
const dir = new Vector3([
|
@@ -118,12 +140,11 @@ export class WellLabelLayer extends TextLayer {
|
|
118
140
|
// Increase perturbation for labels at the top of the trajectory, where the
|
119
141
|
// cluttering is likely most prominent.
|
120
142
|
const zOffset = fraction > 0 ? offset : offset * 5;
|
121
|
-
|
143
|
+
return [
|
122
144
|
pos[0] + dir[0] * offset,
|
123
145
|
pos[1] + dir[1] * offset,
|
124
146
|
pos[2] + dir[2] * zOffset,
|
125
147
|
];
|
126
|
-
return pos !== null && pos !== void 0 ? pos : [0, 0, 0];
|
127
148
|
}
|
128
149
|
/**
|
129
150
|
* Get angle and position at a given fraction down the trajectory.
|
@@ -131,54 +152,70 @@ export class WellLabelLayer extends TextLayer {
|
|
131
152
|
* @param wellData Well trajectory
|
132
153
|
*/
|
133
154
|
getVectorAlongTrajectory(fraction, wellData) {
|
134
|
-
var _a
|
155
|
+
var _a;
|
135
156
|
if (!wellData) {
|
136
157
|
return [0, [0, 0, 0]];
|
137
158
|
}
|
138
|
-
const
|
139
|
-
|
140
|
-
|
159
|
+
const trajectory = getTrajectory(wellData, undefined);
|
160
|
+
if (_.isUndefined(trajectory) || trajectory.length < 2) {
|
161
|
+
return [0, [0, 0, 0]];
|
162
|
+
}
|
163
|
+
const width = this.context.viewport.width;
|
164
|
+
const height = this.context.viewport.height;
|
141
165
|
const candidateFractions = [0.5, 0.25, 0.75, 0.125, 0.87, 0.37, 0.62];
|
142
|
-
const
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
const p2 = new Vector2(this.project(pi2));
|
154
|
-
const p = [
|
155
|
-
pi1[0] + (pi2[0] - pi1[0]) / 2,
|
156
|
-
pi1[1] + (pi2[1] - pi1[1]) / 2,
|
157
|
-
(_b = pi1 === null || pi1 === void 0 ? void 0 : pi1[2]) !== null && _b !== void 0 ? _b : 0 + ((_c = pi2 === null || pi2 === void 0 ? void 0 : pi2[2]) !== null && _c !== void 0 ? _c : 0 - ((_d = pi1 === null || pi1 === void 0 ? void 0 : pi1[2]) !== null && _d !== void 0 ? _d : 0)) / 2,
|
158
|
-
];
|
159
|
-
if (this.props.autoPosition) {
|
160
|
-
const ps = this.project(p);
|
161
|
-
if (ps[0] < 0 || ps[0] > w || ps[1] < 0 || ps[1] > h) {
|
162
|
-
// If the label is outside view/camera, reposition it
|
163
|
-
fraction = candidateFractions.shift();
|
164
|
-
continue;
|
165
|
-
}
|
166
|
-
}
|
167
|
-
const v = new Vector2(p2[0] - p1[0], -(p2[1] - p1[1]));
|
168
|
-
v.normalize();
|
169
|
-
const rad = Math.atan2(v[1], v[0]);
|
170
|
-
const deg = rad * (180 / Math.PI);
|
171
|
-
let a = deg;
|
172
|
-
if (deg > 90) {
|
173
|
-
a = deg - 180;
|
166
|
+
const cumulativeDistance = getCumulativeDistance(trajectory);
|
167
|
+
const zSign = this.props.zIncreasingDownwards
|
168
|
+
? new Vector3(1, 1, -1)
|
169
|
+
: new Vector3(1, 1, 1);
|
170
|
+
while (candidateFractions.length != 0) {
|
171
|
+
const targetDistance = cumulativeDistance[cumulativeDistance.length - 1] * fraction;
|
172
|
+
// Find the index of the segment that contains the target distance
|
173
|
+
let targetIndex = 0;
|
174
|
+
for (let i = 0; i < cumulativeDistance.length - 1; i++) {
|
175
|
+
if (cumulativeDistance[i + 1] < targetDistance) {
|
176
|
+
continue;
|
174
177
|
}
|
175
|
-
|
176
|
-
|
178
|
+
targetIndex = i;
|
179
|
+
break;
|
180
|
+
}
|
181
|
+
const segmentBegin = new Vector3([...trajectory[targetIndex]]);
|
182
|
+
const segmentEnd = new Vector3([...trajectory[targetIndex + 1]]);
|
183
|
+
// Invert z if z is increasing downwards
|
184
|
+
segmentBegin.multiply(zSign);
|
185
|
+
segmentEnd.multiply(zSign);
|
186
|
+
const distanceAlongTrajectory1 = cumulativeDistance[targetIndex];
|
187
|
+
const distanceAlongTrajectory2 = cumulativeDistance[targetIndex + 1];
|
188
|
+
const lineDistance = distanceAlongTrajectory2 - distanceAlongTrajectory1;
|
189
|
+
const fractionOnLine = (targetDistance - distanceAlongTrajectory1) / lineDistance;
|
190
|
+
// Linear interpolation between segmentBegin and segmentEnd
|
191
|
+
const labelPosition = new Vector3(segmentBegin).lerp(segmentEnd, fractionOnLine);
|
192
|
+
// If autoPosition is enabled, check if the label is outside the viewport
|
193
|
+
// and if so, try the next candidate fraction
|
194
|
+
if (this.props.autoPosition) {
|
195
|
+
const ps = this.project(labelPosition);
|
196
|
+
if (ps[0] < 0 || ps[0] > width || ps[1] < 0 || ps[1] > height) {
|
197
|
+
// If the label is outside view/camera, reposition it
|
198
|
+
fraction = (_a = candidateFractions.shift()) !== null && _a !== void 0 ? _a : 0;
|
199
|
+
continue;
|
177
200
|
}
|
178
|
-
return [a, p];
|
179
201
|
}
|
202
|
+
const p1 = this.project(segmentBegin);
|
203
|
+
const p2 = this.project(segmentEnd);
|
204
|
+
const v = new Vector2(p2[0] - p1[0], -(p2[1] - p1[1]));
|
205
|
+
v.normalize();
|
206
|
+
const rad = Math.atan2(v[1], v[0]);
|
207
|
+
const deg = rad * (180 / Math.PI);
|
208
|
+
let a = deg;
|
209
|
+
if (deg > 90) {
|
210
|
+
a = deg - 180;
|
211
|
+
}
|
212
|
+
else if (deg < -90) {
|
213
|
+
a = deg + 180;
|
214
|
+
}
|
215
|
+
return [a, labelPosition.toArray()];
|
180
216
|
}
|
181
|
-
|
217
|
+
// Default to well head of no valid position is found in viewport
|
218
|
+
return [0, trajectory[0]];
|
182
219
|
}
|
183
220
|
}
|
184
221
|
WellLabelLayer.defaultProps = DEFAULT_PROPS;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"wellLabelLayer.js","sourceRoot":"","sources":["../../../../src/layers/wells/layers/wellLabelLayer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpD;;GAEG;AACH,MAAM,CAAN,IAAY,gBAUX;AAVD,WAAY,gBAAgB;IACxB;;OAEG;IACH,6CAAyB,CAAA;IAEzB;;OAEG;IACH,uCAAmB,CAAA;AACvB,CAAC,EAVW,gBAAgB,KAAhB,gBAAgB,QAU3B;AA4BD,MAAM,aAAa,GAAsC;IACrD,EAAE,EAAE,kBAAkB;IACtB,YAAY,EAAE,KAAK;IACnB,oBAAoB,EAAE,CAAC;IACvB,OAAO,EAAE,CAAC,CAAU,EAAE,EAAE;;QACpB,MAAM,IAAI,GAAG,MAAA,CAAC,CAAC,UAAU,0CAAG,MAAM,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,oBAAoB,EAAE,QAAQ;IAC9B,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,IAAI;IAC1B,WAAW,EAAE,gBAAgB,CAAC,UAAU;IACxC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAC9B,cAAc,EAAE,CAAC;
|
1
|
+
{"version":3,"file":"wellLabelLayer.js","sourceRoot":"","sources":["../../../../src/layers/wells/layers/wellLabelLayer.ts"],"names":[],"mappings":"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"}
|