@webviz/subsurface-viewer 0.0.1-alpha.1 → 0.0.2-alpha.1
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/package.json +5 -2
- package/package.json +6 -3
- package/src/DashSubsurfaceViewer.tsx +0 -270
- package/src/SubsurfaceViewer.stories.tsx +0 -449
- package/src/SubsurfaceViewer.test.tsx +0 -98
- package/src/SubsurfaceViewer.tsx +0 -356
- package/src/__snapshots__/SubsurfaceViewer.test.tsx.snap +0 -178
- package/src/assets/glTF/north_arrow/scene.bin +0 -0
- package/src/assets/glTF/north_arrow/scene.gltf +0 -315
- package/src/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
- package/src/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
- package/src/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
- package/src/components/ColorLegend.test.tsx +0 -32
- package/src/components/ColorLegend.tsx +0 -80
- package/src/components/ColorLegends.test.tsx +0 -97
- package/src/components/ColorLegends.tsx +0 -46
- package/src/components/DistanceScale.stories.tsx +0 -28
- package/src/components/DistanceScale.test.tsx +0 -36
- package/src/components/DistanceScale.tsx +0 -84
- package/src/components/InfoCard.test.tsx +0 -110
- package/src/components/InfoCard.tsx +0 -263
- package/src/components/Map.test.tsx +0 -142
- package/src/components/Map.tsx +0 -1435
- package/src/components/StatusIndicator.test.tsx +0 -14
- package/src/components/StatusIndicator.tsx +0 -38
- package/src/components/ViewAnnotation.tsx +0 -16
- package/src/components/ViewFooter.test.tsx +0 -12
- package/src/components/ViewFooter.tsx +0 -30
- package/src/components/__snapshots__/ColorLegends.test.tsx.snap +0 -15
- package/src/components/__snapshots__/DistanceScale.test.tsx.snap +0 -33
- package/src/components/__snapshots__/InfoCard.test.tsx.snap +0 -561
- package/src/components/__snapshots__/Map.test.tsx.snap +0 -119
- package/src/components/__snapshots__/StatusIndicator.test.tsx.snap +0 -3
- package/src/components/__snapshots__/ViewFooter.test.tsx.snap +0 -7
- package/src/components/settings/DrawModeSelector.test.tsx +0 -45
- package/src/components/settings/DrawModeSelector.tsx +0 -58
- package/src/components/settings/DrawModeSelector_performance.test.tsx +0 -35
- package/src/components/settings/LayerProperty.test.tsx +0 -35
- package/src/components/settings/LayerProperty.tsx +0 -153
- package/src/components/settings/LayerProperty_performance.test.tsx +0 -39
- package/src/components/settings/LayerSettingsButton.test.tsx +0 -133
- package/src/components/settings/LayerSettingsButton.tsx +0 -95
- package/src/components/settings/LayersButton.test.tsx +0 -102
- package/src/components/settings/LayersButton.tsx +0 -97
- package/src/components/settings/NumericInput.test.tsx +0 -25
- package/src/components/settings/NumericInput.tsx +0 -67
- package/src/components/settings/Settings.tsx +0 -71
- package/src/components/settings/SliderInput.test.tsx +0 -28
- package/src/components/settings/SliderInput.tsx +0 -71
- package/src/components/settings/ToggleButton.test.tsx +0 -25
- package/src/components/settings/ToggleButton.tsx +0 -53
- package/src/components/settings/__snapshots__/DrawModeSelector.test.tsx.snap +0 -124
- package/src/components/settings/__snapshots__/LayerProperty.test.tsx.snap +0 -124
- package/src/components/settings/__snapshots__/LayerSettingsButton.test.tsx.snap +0 -36
- package/src/components/settings/__snapshots__/LayersButton.test.tsx.snap +0 -83
- package/src/components/settings/__snapshots__/NumericInput.test.tsx.snap +0 -123
- package/src/components/settings/__snapshots__/SliderInput.test.tsx.snap +0 -244
- package/src/components/settings/__snapshots__/ToggleButton.test.tsx.snap +0 -182
- package/src/custom.d.ts +0 -9
- package/src/index.ts +0 -5
- package/src/inputSchema/ColorTables.json +0 -51
- package/src/inputSchema/FaultPolygons.json +0 -80
- package/src/inputSchema/Grid.json +0 -39
- package/src/inputSchema/PieChart.json +0 -72
- package/src/inputSchema/WellLog.json +0 -126
- package/src/inputSchema/WellLogTemplate.json +0 -136
- package/src/inputSchema/WellLogs.json +0 -5
- package/src/inputSchema/Wells.json +0 -106
- package/src/inputSchema/schemaValidationUtil.tsx +0 -55
- package/src/inputSchema/validator.tsx +0 -72
- package/src/inputSchema/wellCompletions.json +0 -108
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.stories.tsx +0 -172
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.tsx +0 -136
- package/src/layers/axes/axes-fragment.glsl.ts +0 -15
- package/src/layers/axes/axesLayer.stories.tsx +0 -87
- package/src/layers/axes/axesLayer.ts +0 -692
- package/src/layers/axes/boxLayer.ts +0 -71
- package/src/layers/axes/grid-vertex.glsl.ts +0 -14
- package/src/layers/axes2d/axes2DLayer.stories.tsx +0 -150
- package/src/layers/axes2d/axes2DLayer.ts +0 -841
- package/src/layers/axes2d/font-atlas.png +0 -0
- package/src/layers/axes2d/label-fragment.glsl.js +0 -37
- package/src/layers/axes2d/label-vertex.glsl.js +0 -20
- package/src/layers/axes2d/line-fragment.glsl.js +0 -14
- package/src/layers/axes2d/line-vertex.glsl.js +0 -13
- package/src/layers/colormap/colormap.fs.glsl.ts +0 -42
- package/src/layers/colormap/colormapLayer.ts +0 -247
- package/src/layers/drawing/drawingLayer.tsx +0 -256
- package/src/layers/fault_polygons/faultPolygonsLayer.ts +0 -54
- package/src/layers/grid3d/fragment.fs.glsl.ts +0 -109
- package/src/layers/grid3d/fragment_lines.glsl.ts +0 -21
- package/src/layers/grid3d/grid3dLayer.stories.tsx +0 -172
- package/src/layers/grid3d/grid3dLayer.ts +0 -248
- package/src/layers/grid3d/privateLayer.ts +0 -292
- package/src/layers/grid3d/vertex.glsl.ts +0 -43
- package/src/layers/grid3d/vertex_lines.glsl.ts +0 -15
- package/src/layers/grid3d/webworker.ts +0 -173
- package/src/layers/hillshading2d/hillshading2d.fs.glsl.ts +0 -62
- package/src/layers/hillshading2d/hillshading2dLayer.ts +0 -172
- package/src/layers/index.ts +0 -35
- package/src/layers/intersection/intersectionView.stories.tsx +0 -294
- package/src/layers/intersection/unfoldedGeoJsonLayer.ts +0 -92
- package/src/layers/map/fragment.fs.glsl.ts +0 -127
- package/src/layers/map/fragment_lines.glsl.ts +0 -21
- package/src/layers/map/mapLayer.stories.tsx +0 -1369
- package/src/layers/map/mapLayer.ts +0 -470
- package/src/layers/map/privateMapLayer.ts +0 -317
- package/src/layers/map/vertex.glsl.ts +0 -45
- package/src/layers/map/vertex_lines.glsl.ts +0 -15
- package/src/layers/map/webworker.ts +0 -479
- package/src/layers/northarrow/northArrow.stories.tsx +0 -108
- package/src/layers/northarrow/northArrow3DLayer.ts +0 -204
- package/src/layers/northarrow/northarrow-fragment.glsl.js +0 -14
- package/src/layers/northarrow/northarrow-vertex.glsl.js +0 -13
- package/src/layers/piechart/fragment.glsl.js +0 -42
- package/src/layers/piechart/pieChartLayer.ts +0 -246
- package/src/layers/piechart/vertex.glsl.js +0 -42
- package/src/layers/points/pointsLayer.stories.tsx +0 -141
- package/src/layers/points/pointsLayer.ts +0 -143
- package/src/layers/polylines/polylinesLayer.stories.tsx +0 -144
- package/src/layers/polylines/polylinesLayer.ts +0 -263
- package/src/layers/selectable_geojson/selectableGeoJsonLayer.ts +0 -25
- package/src/layers/shader_modules/decoder.fs.glsl.ts +0 -41
- package/src/layers/shader_modules/decoder.ts +0 -46
- package/src/layers/shader_modules/index.ts +0 -1
- package/src/layers/terrain/map3DLayer.stories.tsx +0 -340
- package/src/layers/terrain/map3DLayer.ts +0 -556
- package/src/layers/terrain/terrainMapLayer.ts +0 -334
- package/src/layers/terrain/terrainmap.fs.glsl.ts +0 -134
- package/src/layers/triangle/fragment.fs.glsl.ts +0 -126
- package/src/layers/triangle/fragment_lines.glsl.ts +0 -21
- package/src/layers/triangle/privateTriangleLayer.ts +0 -203
- package/src/layers/triangle/test_data/surfacePoints.ts +0 -4344
- package/src/layers/triangle/test_data/surfaceTriangles.ts +0 -7392
- package/src/layers/triangle/triangleLayer.stories.tsx +0 -191
- package/src/layers/triangle/triangleLayer.ts +0 -273
- package/src/layers/triangle/vertex.glsl.ts +0 -35
- package/src/layers/triangle/vertex_lines.glsl.ts +0 -15
- package/src/layers/triangle/webworker.ts +0 -165
- package/src/layers/utils/glsl.d.ts +0 -4
- package/src/layers/utils/layerTools.ts +0 -182
- package/src/layers/utils/propertyMapTools.ts +0 -43
- package/src/layers/wells/utils/spline.ts +0 -318
- package/src/layers/wells/wellsLayer.stories.tsx +0 -625
- package/src/layers/wells/wellsLayer.ts +0 -1377
- package/src/redux/actions.ts +0 -8
- package/src/redux/reducer.ts +0 -43
- package/src/redux/store.ts +0 -15
- package/src/redux/types.ts +0 -114
- package/src/storybook/SubsurfaceViewer.stories.jsx +0 -644
- package/src/storybook/components/InfoCard.stories.jsx +0 -39
- package/src/storybook/components/colorLegends/ContinuousLegend.stories.jsx +0 -32
- package/src/storybook/components/colorLegends/DiscreteLegend.stories.jsx +0 -33
- package/src/storybook/components/colorLegends/IndividualScaleForMap.stories.jsx +0 -99
- package/src/storybook/components/colorLegends/SingleScaleForMap.stories.jsx +0 -120
- package/src/storybook/components/settings/LayerSettingsButton.stories.jsx +0 -34
- package/src/storybook/components/settings/NumericInput.stories.jsx +0 -17
- package/src/storybook/components/settings/ToggleButton.stories.jsx +0 -16
- package/src/storybook/schemaValidation/sampleData.js +0 -177
- package/src/storybook/schemaValidation/schemaValidation.stories.jsx +0 -91
- package/src/test/TestWrapper.tsx +0 -13
- package/src/utils/configuration.ts +0 -61
- package/src/utils/fit-bounds.js +0 -85
- package/src/utils/measurement.ts +0 -61
- package/src/utils/northArrow.ts +0 -4
- package/src/utils/specExtractor.ts +0 -36
- package/src/viewports/index.js +0 -1
- package/src/viewports/intersectionViewport.ts +0 -137
- package/src/views/index.js +0 -1
- package/src/views/intersectionView.ts +0 -38
- package/tsconfig.json +0 -7
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { BitmapLayer, BitmapLayerProps } from "@deck.gl/layers/typed";
|
|
2
|
-
import { PickingInfo, Texture } from "@deck.gl/core/typed";
|
|
3
|
-
|
|
4
|
-
import { decoder } from "../shader_modules";
|
|
5
|
-
import { decodeRGB, ValueDecoder } from "../utils/propertyMapTools";
|
|
6
|
-
import { getModelMatrix } from "../utils/layerTools";
|
|
7
|
-
import { LayerPickInfo } from "../../layers/utils/layerTools";
|
|
8
|
-
|
|
9
|
-
import fsHillshading from "./hillshading2d.fs.glsl";
|
|
10
|
-
|
|
11
|
-
// Most props are inherited from DeckGL's BitmapLayer. For a full list, see
|
|
12
|
-
// https://deck.gl/docs/api-reference/layers/bitmap-layer
|
|
13
|
-
//
|
|
14
|
-
// The property map is encoded in an image and sent in the `image` prop of the BitmapLayer.
|
|
15
|
-
// For more details on the property map encoding, see colormapLayer.ts
|
|
16
|
-
export interface Hillshading2DProps extends BitmapLayerProps {
|
|
17
|
-
// Min and max property values.
|
|
18
|
-
valueRange: [number, number];
|
|
19
|
-
|
|
20
|
-
// Direction the light comes from.
|
|
21
|
-
lightDirection: [number, number, number];
|
|
22
|
-
// Intensity of light that is applied to the whole map uniformly.
|
|
23
|
-
ambientLightIntensity: number;
|
|
24
|
-
// Intensity of light that is applied to the lightened potions of the map.
|
|
25
|
-
diffuseLightIntensity: number;
|
|
26
|
-
|
|
27
|
-
// Use color map in this range
|
|
28
|
-
colorMapRange: [number, number];
|
|
29
|
-
|
|
30
|
-
// By default, scale the [0, 256*256*256-1] decoded values to [0, 1]
|
|
31
|
-
valueDecoder: ValueDecoder;
|
|
32
|
-
|
|
33
|
-
// Rotates image around bounds upper left corner counterclockwise in degrees.
|
|
34
|
-
rotDeg: number;
|
|
35
|
-
|
|
36
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
|
-
setReportedBoundingBox?: any;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const defaultProps = {
|
|
41
|
-
"@@type": "Hillshading2DLayer",
|
|
42
|
-
name: "Hill shading",
|
|
43
|
-
id: "hillshading-layer",
|
|
44
|
-
opacity: 1.0,
|
|
45
|
-
pickable: true,
|
|
46
|
-
visible: true,
|
|
47
|
-
rotDeg: 0,
|
|
48
|
-
valueRange: { type: "array", value: [0, 1] },
|
|
49
|
-
lightDirection: [1, 1, 1],
|
|
50
|
-
ambientLightIntensity: 0.5,
|
|
51
|
-
diffuseLightIntensity: 0.5,
|
|
52
|
-
valueDecoder: {
|
|
53
|
-
rgbScaler: [1, 1, 1],
|
|
54
|
-
// By default, scale the [0, 256*256*256-1] decoded values to [0, 1]
|
|
55
|
-
floatScaler: 1.0 / (256.0 * 256.0 * 256.0 - 1.0),
|
|
56
|
-
offset: 0,
|
|
57
|
-
step: 0,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export default class Hillshading2DLayer extends BitmapLayer<Hillshading2DProps> {
|
|
62
|
-
initializeState(): void {
|
|
63
|
-
this.setState({
|
|
64
|
-
isLoaded: false,
|
|
65
|
-
});
|
|
66
|
-
super.initializeState();
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Signature from the base class, eslint doesn't like the any type.
|
|
70
|
-
// eslint-disable-next-line
|
|
71
|
-
draw({ moduleParameters, uniforms }: any): void {
|
|
72
|
-
if (!this.state["isLoaded"]) {
|
|
73
|
-
this.setState({
|
|
74
|
-
isLoaded: true,
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
if (typeof this.props.setReportedBoundingBox !== "undefined") {
|
|
78
|
-
const xMin = this.props.bounds[0];
|
|
79
|
-
const yMin = this.props.bounds[1];
|
|
80
|
-
const zMin = 1;
|
|
81
|
-
const xMax = this.props.bounds[2];
|
|
82
|
-
const yMax = this.props.bounds[3];
|
|
83
|
-
const zMax = -1;
|
|
84
|
-
const bbox = [xMin, yMin, zMin, xMax, yMax, zMax];
|
|
85
|
-
|
|
86
|
-
this.props.setReportedBoundingBox(bbox);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
if (this.props.image) {
|
|
91
|
-
const mergedModuleParams = {
|
|
92
|
-
...moduleParameters,
|
|
93
|
-
valueDecoder: {
|
|
94
|
-
// The prop objects are not merged with the defaultProps by default.
|
|
95
|
-
// See https://github.com/facebook/react/issues/2568
|
|
96
|
-
...defaultProps.valueDecoder,
|
|
97
|
-
...moduleParameters.valueDecoder,
|
|
98
|
-
},
|
|
99
|
-
modelMatrix: getModelMatrix(
|
|
100
|
-
this.props.rotDeg,
|
|
101
|
-
this.props.bounds[0] as number, // Rotate around upper left corner of bounds
|
|
102
|
-
this.props.bounds[3] as number
|
|
103
|
-
),
|
|
104
|
-
};
|
|
105
|
-
super.setModuleParameters(mergedModuleParams);
|
|
106
|
-
|
|
107
|
-
const valueRangeMin = this.props.valueRange[0] ?? 0.0;
|
|
108
|
-
const valueRangeMax = this.props.valueRange[1] ?? 1.0;
|
|
109
|
-
const colorMapRangeMin =
|
|
110
|
-
this.props.colorMapRange?.[0] ?? valueRangeMin;
|
|
111
|
-
const colorMapRangeMax =
|
|
112
|
-
this.props.colorMapRange?.[1] ?? valueRangeMax;
|
|
113
|
-
|
|
114
|
-
const [minVal, maxVal] = this.props.valueRange;
|
|
115
|
-
super.draw({
|
|
116
|
-
uniforms: {
|
|
117
|
-
...uniforms,
|
|
118
|
-
// Send extra uniforms to the shader.
|
|
119
|
-
bitmapResolution: [
|
|
120
|
-
(this.props.image as Texture).width,
|
|
121
|
-
(this.props.image as Texture).height,
|
|
122
|
-
],
|
|
123
|
-
valueRangeSize: maxVal - minVal,
|
|
124
|
-
lightDirection: this.props.lightDirection,
|
|
125
|
-
ambientLightIntensity: this.props.ambientLightIntensity,
|
|
126
|
-
diffuseLightIntensity: this.props.diffuseLightIntensity,
|
|
127
|
-
valueRangeMin,
|
|
128
|
-
valueRangeMax,
|
|
129
|
-
colorMapRangeMin,
|
|
130
|
-
colorMapRangeMax,
|
|
131
|
-
},
|
|
132
|
-
moduleParameters: mergedModuleParams,
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Signature from the base class, eslint doesn't like the any type.
|
|
138
|
-
// eslint-disable-next-line
|
|
139
|
-
getShaders(): any {
|
|
140
|
-
const parentShaders = super.getShaders();
|
|
141
|
-
// Overwrite the BitmapLayer's default fragment shader with ours, that does hillshading.
|
|
142
|
-
parentShaders.fs = fsHillshading;
|
|
143
|
-
// Add the decoder shader module to our colormap shader, so we can use the decoder function from our shader.
|
|
144
|
-
parentShaders.modules.push(decoder);
|
|
145
|
-
return parentShaders;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
getPickingInfo({ info }: { info: PickingInfo }): LayerPickInfo {
|
|
149
|
-
if (this.state["pickingDisabled"] || !info.color) {
|
|
150
|
-
return info;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const mergedDecoder = {
|
|
154
|
-
...defaultProps.valueDecoder,
|
|
155
|
-
...this.props.valueDecoder,
|
|
156
|
-
};
|
|
157
|
-
// The picked color is the one in raw image, not the one after hillshading.
|
|
158
|
-
// We just need to decode that RGB color into a property float value.
|
|
159
|
-
const val = decodeRGB(info.color, mergedDecoder, this.props.valueRange);
|
|
160
|
-
|
|
161
|
-
return {
|
|
162
|
-
...info,
|
|
163
|
-
// Picking color doesn't represent object index in this layer.
|
|
164
|
-
// For more details, see https://deck.gl/docs/developer-guide/custom-layers/picking
|
|
165
|
-
index: 0,
|
|
166
|
-
propertyValue: val,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
Hillshading2DLayer.layerName = "Hillshading2DLayer";
|
|
172
|
-
Hillshading2DLayer.defaultProps = defaultProps;
|
package/src/layers/index.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export { default as ColormapLayer } from "./colormap/colormapLayer";
|
|
2
|
-
export { default as MapLayer } from "./map/mapLayer";
|
|
3
|
-
export { default as TriangleLayer } from "./triangle/triangleLayer";
|
|
4
|
-
export { default as PointsLayer } from "./points/pointsLayer";
|
|
5
|
-
export { default as PolylinesLayer } from "./polylines/polylinesLayer";
|
|
6
|
-
export { default as Map3DLayer } from "./terrain/map3DLayer";
|
|
7
|
-
export { default as DrawingLayer } from "./drawing/drawingLayer";
|
|
8
|
-
export { default as Hillshading2DLayer } from "./hillshading2d/hillshading2dLayer";
|
|
9
|
-
export { default as WellsLayer } from "./wells/wellsLayer";
|
|
10
|
-
export { default as PieChartLayer } from "./piechart/pieChartLayer";
|
|
11
|
-
export { default as FaultPolygonsLayer } from "./fault_polygons/faultPolygonsLayer";
|
|
12
|
-
export { default as AxesLayer } from "./axes/axesLayer";
|
|
13
|
-
export { default as Axes2DLayer } from "./axes2d/axes2DLayer";
|
|
14
|
-
export { default as SelectableGeoJsonLayer } from "./selectable_geojson/selectableGeoJsonLayer";
|
|
15
|
-
export { default as NorthArrow3DLayer } from "./northarrow/northArrow3DLayer";
|
|
16
|
-
export { default as UnfoldedGeoJsonLayer } from "./intersection/unfoldedGeoJsonLayer";
|
|
17
|
-
export { default as Grid3DLayer } from "./grid3d/grid3dLayer";
|
|
18
|
-
export { default as BoxSelectionLayer } from "./BoxSelectionLayer/boxSelectionLayer";
|
|
19
|
-
|
|
20
|
-
export { AxesLayerProps } from "./axes/axesLayer";
|
|
21
|
-
export { Axes2DLayerProps } from "./axes2d/axes2DLayer";
|
|
22
|
-
export { ColormapLayerProps } from "./colormap/colormapLayer";
|
|
23
|
-
export { DrawingLayerProps } from "./drawing/drawingLayer";
|
|
24
|
-
export { FaultPolygonsLayerProps } from "./fault_polygons/faultPolygonsLayer";
|
|
25
|
-
export { Hillshading2DProps } from "./hillshading2d/hillshading2dLayer";
|
|
26
|
-
export { MapLayerProps } from "./map/mapLayer";
|
|
27
|
-
export { TriangleLayerProps } from "./triangle/triangleLayer";
|
|
28
|
-
export { PointsLayerProps } from "./points/pointsLayer";
|
|
29
|
-
export { PolylinesLayerProps } from "./polylines/polylinesLayer";
|
|
30
|
-
export { NorthArrow3DLayerProps } from "./northarrow/northArrow3DLayer";
|
|
31
|
-
export { PieChartLayerProps } from "./piechart/pieChartLayer";
|
|
32
|
-
export { Map3DLayerProps } from "./terrain/map3DLayer";
|
|
33
|
-
export { WellsLayerProps } from "./wells/wellsLayer";
|
|
34
|
-
export { Grid3DLayerProps } from "./grid3d/grid3dLayer";
|
|
35
|
-
export { BoxSelectionLayerProps } from "./BoxSelectionLayer/boxSelectionLayer";
|
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import SubsurfaceViewer from "../../SubsurfaceViewer";
|
|
3
|
-
import { ComponentStory, ComponentMeta } from "@storybook/react";
|
|
4
|
-
import { Feature } from "geojson";
|
|
5
|
-
|
|
6
|
-
export default {
|
|
7
|
-
component: SubsurfaceViewer,
|
|
8
|
-
title: "SubsurfaceViewer / Experimental Intersection View",
|
|
9
|
-
} as ComponentMeta<typeof SubsurfaceViewer>;
|
|
10
|
-
|
|
11
|
-
const StoryTemplate: ComponentStory<typeof SubsurfaceViewer> = (args) => {
|
|
12
|
-
return <SubsurfaceViewer {...args} />;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
const defaultProps = {
|
|
16
|
-
id: "SubsurfaceViewer",
|
|
17
|
-
views: {
|
|
18
|
-
layout: [1, 2] as [number, number],
|
|
19
|
-
showLabel: true,
|
|
20
|
-
viewports: [
|
|
21
|
-
{
|
|
22
|
-
id: "orbit_view",
|
|
23
|
-
name: "3d view",
|
|
24
|
-
show3D: true,
|
|
25
|
-
isSync: false,
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
id: "intersection_view",
|
|
29
|
-
name: "Intersection view",
|
|
30
|
-
show3D: false,
|
|
31
|
-
layerIds: ["enhanced-path-layer", "wells-layer"],
|
|
32
|
-
isSync: false,
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const polyline_data = {
|
|
39
|
-
type: "FeatureCollection",
|
|
40
|
-
features: [
|
|
41
|
-
{
|
|
42
|
-
type: "Feature",
|
|
43
|
-
geometry: {
|
|
44
|
-
type: "GeometryCollection",
|
|
45
|
-
geometries: [
|
|
46
|
-
{
|
|
47
|
-
type: "LineString",
|
|
48
|
-
coordinates: [
|
|
49
|
-
[500, 2000, -400],
|
|
50
|
-
[1500, 2000, -600],
|
|
51
|
-
[1700, 2500, -400],
|
|
52
|
-
],
|
|
53
|
-
},
|
|
54
|
-
],
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
// Intersection view example with sample polyline data
|
|
61
|
-
export const WithSamplePolylineData = StoryTemplate.bind({});
|
|
62
|
-
WithSamplePolylineData.args = {
|
|
63
|
-
...defaultProps,
|
|
64
|
-
bounds: [0, 0, 2000, 3000] as [number, number, number, number],
|
|
65
|
-
layers: [
|
|
66
|
-
{
|
|
67
|
-
"@@type": "UnfoldedGeoJsonLayer",
|
|
68
|
-
id: "enhanced-path-layer",
|
|
69
|
-
data: polyline_data,
|
|
70
|
-
lineWidthScale: 20,
|
|
71
|
-
lineBillboard: true,
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
"@@type": "AxesLayer",
|
|
75
|
-
id: "axes-layer",
|
|
76
|
-
bounds: [0, 0, 0, 2000, 3000, 1000],
|
|
77
|
-
},
|
|
78
|
-
],
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
// Intersection view example with wells data
|
|
82
|
-
export const WithWellsData = StoryTemplate.bind({});
|
|
83
|
-
WithWellsData.args = {
|
|
84
|
-
...defaultProps,
|
|
85
|
-
bounds: [432205, 6475078, 437720, 6481113] as [
|
|
86
|
-
number,
|
|
87
|
-
number,
|
|
88
|
-
number,
|
|
89
|
-
number
|
|
90
|
-
],
|
|
91
|
-
resources: {
|
|
92
|
-
wellsData: "./volve_wells.json",
|
|
93
|
-
},
|
|
94
|
-
layers: [
|
|
95
|
-
{
|
|
96
|
-
"@@type": "AxesLayer",
|
|
97
|
-
id: "axes-layer",
|
|
98
|
-
bounds: [432205, 6475078, 0, 437720, 6481113, 3500],
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"@@type": "WellsLayer",
|
|
102
|
-
data: "@@#resources.wellsData",
|
|
103
|
-
lineStyle: {
|
|
104
|
-
width: (object: Record<string, Record<string, unknown>>) => {
|
|
105
|
-
if (object["properties"]["name"] === "15/9-F-4") return 6;
|
|
106
|
-
return 0;
|
|
107
|
-
},
|
|
108
|
-
},
|
|
109
|
-
wellHeadStyle: {
|
|
110
|
-
size: (object: Record<string, Record<string, unknown>>) => {
|
|
111
|
-
if (object["properties"]["name"] === "15/9-F-4") return 8;
|
|
112
|
-
return 0;
|
|
113
|
-
},
|
|
114
|
-
},
|
|
115
|
-
},
|
|
116
|
-
],
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
const FencePolygonData = {
|
|
120
|
-
type: "FeatureCollection",
|
|
121
|
-
features: [
|
|
122
|
-
{
|
|
123
|
-
type: "Feature",
|
|
124
|
-
geometry: {
|
|
125
|
-
type: "GeometryCollection",
|
|
126
|
-
geometries: [
|
|
127
|
-
{
|
|
128
|
-
type: "Polygon",
|
|
129
|
-
coordinates: [
|
|
130
|
-
[
|
|
131
|
-
[500, 1000, -400],
|
|
132
|
-
[800, 1200, -400],
|
|
133
|
-
[1000, 1100, -400],
|
|
134
|
-
[1000, 1100, -600],
|
|
135
|
-
[800, 1200, -600],
|
|
136
|
-
[500, 1000, -600],
|
|
137
|
-
[500, 1000, -400],
|
|
138
|
-
],
|
|
139
|
-
],
|
|
140
|
-
},
|
|
141
|
-
],
|
|
142
|
-
},
|
|
143
|
-
},
|
|
144
|
-
],
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
// With fence polygon data
|
|
148
|
-
export const FencePolygon = StoryTemplate.bind({});
|
|
149
|
-
FencePolygon.args = {
|
|
150
|
-
...defaultProps,
|
|
151
|
-
bounds: [500, 1000, 1200, 1500] as [number, number, number, number],
|
|
152
|
-
layers: [
|
|
153
|
-
{
|
|
154
|
-
"@@type": "AxesLayer",
|
|
155
|
-
id: "axes-layer",
|
|
156
|
-
bounds: [300, 800, 400, 1300, 1600, 600],
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
"@@type": "UnfoldedGeoJsonLayer",
|
|
160
|
-
id: "enhanced-path-layer",
|
|
161
|
-
data: FencePolygonData,
|
|
162
|
-
lineWidthScale: 2,
|
|
163
|
-
lineBillboard: true,
|
|
164
|
-
stroked: true,
|
|
165
|
-
},
|
|
166
|
-
],
|
|
167
|
-
};
|
|
168
|
-
|
|
169
|
-
const IntersectionViewData = {
|
|
170
|
-
type: "FeatureCollection",
|
|
171
|
-
features: [
|
|
172
|
-
{
|
|
173
|
-
type: "Feature",
|
|
174
|
-
geometry: {
|
|
175
|
-
type: "GeometryCollection",
|
|
176
|
-
geometries: [
|
|
177
|
-
{
|
|
178
|
-
type: "Polygon",
|
|
179
|
-
coordinates: [
|
|
180
|
-
[
|
|
181
|
-
[500, 1000, -400],
|
|
182
|
-
[800, 1200, -400],
|
|
183
|
-
[1000, 1100, -400],
|
|
184
|
-
[1000, 1100, -600],
|
|
185
|
-
[800, 1200, -600],
|
|
186
|
-
[500, 1000, -600],
|
|
187
|
-
[500, 1000, -400],
|
|
188
|
-
],
|
|
189
|
-
],
|
|
190
|
-
},
|
|
191
|
-
],
|
|
192
|
-
},
|
|
193
|
-
properties: {
|
|
194
|
-
name: "Fence",
|
|
195
|
-
color: [235, 107, 52, 255],
|
|
196
|
-
},
|
|
197
|
-
},
|
|
198
|
-
{
|
|
199
|
-
type: "Feature",
|
|
200
|
-
geometry: {
|
|
201
|
-
type: "GeometryCollection",
|
|
202
|
-
geometries: [
|
|
203
|
-
{
|
|
204
|
-
type: "Point",
|
|
205
|
-
coordinates: [500, 1000, -400],
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
type: "LineString",
|
|
209
|
-
coordinates: [
|
|
210
|
-
[500, 1000, -400],
|
|
211
|
-
[575, 1050, -450],
|
|
212
|
-
[650, 1100, -450],
|
|
213
|
-
[725, 1150, -500],
|
|
214
|
-
[800, 1200, -500],
|
|
215
|
-
[900, 1150, -550],
|
|
216
|
-
[950, 1125, -550],
|
|
217
|
-
[1000, 1100, -550],
|
|
218
|
-
],
|
|
219
|
-
},
|
|
220
|
-
],
|
|
221
|
-
},
|
|
222
|
-
properties: {
|
|
223
|
-
name: "Well",
|
|
224
|
-
color: [52, 125, 235, 255],
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
{
|
|
228
|
-
type: "Feature",
|
|
229
|
-
geometry: {
|
|
230
|
-
type: "GeometryCollection",
|
|
231
|
-
geometries: [
|
|
232
|
-
{
|
|
233
|
-
type: "LineString",
|
|
234
|
-
coordinates: [
|
|
235
|
-
[500, 1000, -475],
|
|
236
|
-
[800, 1200, -475],
|
|
237
|
-
[1000, 1100, -475],
|
|
238
|
-
],
|
|
239
|
-
},
|
|
240
|
-
],
|
|
241
|
-
},
|
|
242
|
-
properties: {
|
|
243
|
-
name: "Surface 1",
|
|
244
|
-
color: [52, 235, 211, 255],
|
|
245
|
-
},
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
type: "Feature",
|
|
249
|
-
geometry: {
|
|
250
|
-
type: "GeometryCollection",
|
|
251
|
-
geometries: [
|
|
252
|
-
{
|
|
253
|
-
type: "LineString",
|
|
254
|
-
coordinates: [
|
|
255
|
-
[500, 1000, -525],
|
|
256
|
-
[800, 1200, -525],
|
|
257
|
-
[1000, 1100, -525],
|
|
258
|
-
],
|
|
259
|
-
},
|
|
260
|
-
],
|
|
261
|
-
},
|
|
262
|
-
properties: {
|
|
263
|
-
name: "Surface 2",
|
|
264
|
-
color: [32, 252, 3, 255],
|
|
265
|
-
},
|
|
266
|
-
},
|
|
267
|
-
],
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
// An intersection view example with sample surface, wells data laong with fence.
|
|
271
|
-
export const IntersectionViewExample = StoryTemplate.bind({});
|
|
272
|
-
IntersectionViewExample.args = {
|
|
273
|
-
...defaultProps,
|
|
274
|
-
bounds: [500, 1000, 1200, 1500] as [number, number, number, number],
|
|
275
|
-
layers: [
|
|
276
|
-
{
|
|
277
|
-
"@@type": "AxesLayer",
|
|
278
|
-
id: "axes-layer",
|
|
279
|
-
bounds: [300, 800, 400, 1300, 1600, 600],
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
"@@type": "UnfoldedGeoJsonLayer",
|
|
283
|
-
id: "enhanced-path-layer",
|
|
284
|
-
data: IntersectionViewData,
|
|
285
|
-
lineWidthScale: 1,
|
|
286
|
-
lineBillboard: true,
|
|
287
|
-
pointBillboard: true,
|
|
288
|
-
stroked: true,
|
|
289
|
-
getPointRadius: 3,
|
|
290
|
-
getLineColor: (d: Feature) => d.properties?.["color"],
|
|
291
|
-
getFillColor: (d: Feature) => d.properties?.["color"],
|
|
292
|
-
},
|
|
293
|
-
],
|
|
294
|
-
};
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { Layer, Position, Viewport } from "@deck.gl/core/typed";
|
|
2
|
-
import { GeoJsonLayer } from "@deck.gl/layers/typed";
|
|
3
|
-
import { Feature } from "geojson";
|
|
4
|
-
import { LineString } from "geojson";
|
|
5
|
-
import { isEqual, zip } from "lodash";
|
|
6
|
-
import { distance } from "mathjs";
|
|
7
|
-
import IntersectionViewport from "../../viewports/intersectionViewport";
|
|
8
|
-
|
|
9
|
-
const planeY = 2000;
|
|
10
|
-
|
|
11
|
-
function computeUnfoldedPath(worldCoordinates: Position[]): Position[] {
|
|
12
|
-
const z = worldCoordinates.map((v) => v[2]);
|
|
13
|
-
const delta = worldCoordinates.map((v, i, coordinates) => {
|
|
14
|
-
const prev = coordinates[i - 1] || v;
|
|
15
|
-
return distance([prev[0], prev[1]], [v[0], v[1]]);
|
|
16
|
-
});
|
|
17
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
-
const a: any[] = [];
|
|
19
|
-
delta.forEach((d) => {
|
|
20
|
-
const prev = a.at(-1) || 0;
|
|
21
|
-
a.push(d + prev);
|
|
22
|
-
});
|
|
23
|
-
const vAbscissa = zip(a, [...a].fill(planeY), z);
|
|
24
|
-
|
|
25
|
-
return vAbscissa as Position[];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function computeUnfoldedPolygon(coordinates: Position[]): Position[] {
|
|
29
|
-
const half = Math.floor(coordinates.length / 2);
|
|
30
|
-
const upper_line = coordinates.splice(0, half);
|
|
31
|
-
const lower_line = coordinates.splice(0, half);
|
|
32
|
-
const uul = computeUnfoldedPath(upper_line);
|
|
33
|
-
const ull = computeUnfoldedPath(lower_line.reverse());
|
|
34
|
-
const unfolded_coordinates = uul.concat(ull.reverse());
|
|
35
|
-
unfolded_coordinates.push(uul[0]);
|
|
36
|
-
|
|
37
|
-
return unfolded_coordinates;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function getUnfoldedPath(object: Feature): Position[] {
|
|
41
|
-
const worldCoordinates = (object.geometry as LineString)
|
|
42
|
-
.coordinates as Position[];
|
|
43
|
-
|
|
44
|
-
// check if the path is polygon i.e. closed
|
|
45
|
-
const is_closed = isEqual(worldCoordinates[0], worldCoordinates.at(-1));
|
|
46
|
-
if (is_closed) {
|
|
47
|
-
return computeUnfoldedPolygon(worldCoordinates);
|
|
48
|
-
} else {
|
|
49
|
-
return computeUnfoldedPath(worldCoordinates);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export default class UnfoldedGeoJsonLayer<
|
|
54
|
-
D extends Feature = Feature
|
|
55
|
-
> extends GeoJsonLayer<D> {
|
|
56
|
-
renderLayers(): Layer[] {
|
|
57
|
-
const layers = super.renderLayers() as Layer[];
|
|
58
|
-
|
|
59
|
-
const path_layers = layers
|
|
60
|
-
.flat()
|
|
61
|
-
.filter((layer) => layer?.constructor.name === "PathLayer");
|
|
62
|
-
|
|
63
|
-
path_layers.forEach((layer) => {
|
|
64
|
-
const unfolded_layer = layer.clone(
|
|
65
|
-
this.getSubLayerProps({
|
|
66
|
-
...layer,
|
|
67
|
-
id: layer.id + "-for-intersection-view",
|
|
68
|
-
getPath: (object: Feature): Position[] =>
|
|
69
|
-
getUnfoldedPath(object),
|
|
70
|
-
})
|
|
71
|
-
);
|
|
72
|
-
if (unfolded_layer) layers.push(unfolded_layer);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
return layers;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
filterSubLayer({
|
|
79
|
-
layer,
|
|
80
|
-
viewport,
|
|
81
|
-
}: {
|
|
82
|
-
layer: Layer;
|
|
83
|
-
viewport: Viewport;
|
|
84
|
-
}): boolean {
|
|
85
|
-
if (viewport.constructor === IntersectionViewport) {
|
|
86
|
-
return layer.id.search("-for-intersection-view") != -1;
|
|
87
|
-
}
|
|
88
|
-
return layer.id.search("-for-intersection-view") == -1;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
UnfoldedGeoJsonLayer.layerName = "UnfoldedGeoJsonLayer";
|