@webviz/subsurface-viewer 0.0.1-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/DashSubsurfaceViewer.d.ts +56 -0
- package/dist/DashSubsurfaceViewer.js +160 -0
- package/dist/DashSubsurfaceViewer.js.map +1 -0
- package/dist/SubsurfaceViewer.d.ts +65 -0
- package/dist/SubsurfaceViewer.js +208 -0
- package/dist/SubsurfaceViewer.js.map +1 -0
- package/dist/assets/glTF/north_arrow/scene.bin +0 -0
- package/dist/assets/glTF/north_arrow/scene.gltf +315 -0
- package/dist/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
- package/dist/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
- package/dist/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
- package/dist/components/ColorLegend.d.ts +26 -0
- package/dist/components/ColorLegend.js +19 -0
- package/dist/components/ColorLegend.js.map +1 -0
- package/dist/components/ColorLegends.d.ts +12 -0
- package/dist/components/ColorLegends.js +10 -0
- package/dist/components/ColorLegends.js.map +1 -0
- package/dist/components/DistanceScale.d.ts +12 -0
- package/dist/components/DistanceScale.js +45 -0
- package/dist/components/DistanceScale.js.map +1 -0
- package/dist/components/InfoCard.d.ts +11 -0
- package/dist/components/InfoCard.js +149 -0
- package/dist/components/InfoCard.js.map +1 -0
- package/dist/components/Map.d.ts +158 -0
- package/dist/components/Map.js +867 -0
- package/dist/components/Map.js.map +1 -0
- package/dist/components/StatusIndicator.d.ts +8 -0
- package/dist/components/StatusIndicator.js +20 -0
- package/dist/components/StatusIndicator.js.map +1 -0
- package/dist/components/ViewAnnotation.d.ts +7 -0
- package/dist/components/ViewAnnotation.js +13 -0
- package/dist/components/ViewAnnotation.js.map +1 -0
- package/dist/components/ViewFooter.d.ts +6 -0
- package/dist/components/ViewFooter.js +21 -0
- package/dist/components/ViewFooter.js.map +1 -0
- package/dist/components/settings/DrawModeSelector.d.ts +18 -0
- package/dist/components/settings/DrawModeSelector.js +20 -0
- package/dist/components/settings/DrawModeSelector.js.map +1 -0
- package/dist/components/settings/LayerProperty.d.ts +6 -0
- package/dist/components/settings/LayerProperty.js +39 -0
- package/dist/components/settings/LayerProperty.js.map +1 -0
- package/dist/components/settings/LayerSettingsButton.d.ts +7 -0
- package/dist/components/settings/LayerSettingsButton.js +51 -0
- package/dist/components/settings/LayerSettingsButton.js.map +1 -0
- package/dist/components/settings/LayersButton.d.ts +8 -0
- package/dist/components/settings/LayersButton.js +45 -0
- package/dist/components/settings/LayersButton.js.map +1 -0
- package/dist/components/settings/NumericInput.d.ts +20 -0
- package/dist/components/settings/NumericInput.js +25 -0
- package/dist/components/settings/NumericInput.js.map +1 -0
- package/dist/components/settings/Settings.d.ts +7 -0
- package/dist/components/settings/Settings.js +39 -0
- package/dist/components/settings/Settings.js.map +1 -0
- package/dist/components/settings/SliderInput.d.ts +29 -0
- package/dist/components/settings/SliderInput.js +21 -0
- package/dist/components/settings/SliderInput.js.map +1 -0
- package/dist/components/settings/ToggleButton.d.ts +17 -0
- package/dist/components/settings/ToggleButton.js +19 -0
- package/dist/components/settings/ToggleButton.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/inputSchema/ColorTables.json +51 -0
- package/dist/inputSchema/FaultPolygons.json +80 -0
- package/dist/inputSchema/Grid.json +39 -0
- package/dist/inputSchema/PieChart.json +72 -0
- package/dist/inputSchema/WellLog.json +126 -0
- package/dist/inputSchema/WellLogTemplate.json +136 -0
- package/dist/inputSchema/WellLogs.json +5 -0
- package/dist/inputSchema/Wells.json +106 -0
- package/dist/inputSchema/schemaValidationUtil.d.ts +5 -0
- package/dist/inputSchema/schemaValidationUtil.js +48 -0
- package/dist/inputSchema/schemaValidationUtil.js.map +1 -0
- package/dist/inputSchema/validator.d.ts +1 -0
- package/dist/inputSchema/validator.js +64 -0
- package/dist/inputSchema/validator.js.map +1 -0
- package/dist/inputSchema/wellCompletions.json +108 -0
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +37 -0
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js +86 -0
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -0
- package/dist/layers/axes/axes-fragment.glsl.d.ts +2 -0
- package/dist/layers/axes/axes-fragment.glsl.js +15 -0
- package/dist/layers/axes/axes-fragment.glsl.js.map +1 -0
- package/dist/layers/axes/axesLayer.d.ts +38 -0
- package/dist/layers/axes/axesLayer.js +485 -0
- package/dist/layers/axes/axesLayer.js.map +1 -0
- package/dist/layers/axes/boxLayer.d.ts +20 -0
- package/dist/layers/axes/boxLayer.js +52 -0
- package/dist/layers/axes/boxLayer.js.map +1 -0
- package/dist/layers/axes/grid-vertex.glsl.d.ts +2 -0
- package/dist/layers/axes/grid-vertex.glsl.js +14 -0
- package/dist/layers/axes/grid-vertex.glsl.js.map +1 -0
- package/dist/layers/axes2d/axes2DLayer.d.ts +58 -0
- package/dist/layers/axes2d/axes2DLayer.js +613 -0
- package/dist/layers/axes2d/axes2DLayer.js.map +1 -0
- package/dist/layers/axes2d/font-atlas.png +0 -0
- package/dist/layers/axes2d/label-fragment.glsl.d.ts +2 -0
- package/dist/layers/axes2d/label-fragment.glsl.js +38 -0
- package/dist/layers/axes2d/label-fragment.glsl.js.map +1 -0
- package/dist/layers/axes2d/label-vertex.glsl.d.ts +2 -0
- package/dist/layers/axes2d/label-vertex.glsl.js +21 -0
- package/dist/layers/axes2d/label-vertex.glsl.js.map +1 -0
- package/dist/layers/axes2d/line-fragment.glsl.d.ts +2 -0
- package/dist/layers/axes2d/line-fragment.glsl.js +15 -0
- package/dist/layers/axes2d/line-fragment.glsl.js.map +1 -0
- package/dist/layers/axes2d/line-vertex.glsl.d.ts +2 -0
- package/dist/layers/axes2d/line-vertex.glsl.js +14 -0
- package/dist/layers/axes2d/line-vertex.glsl.js.map +1 -0
- package/dist/layers/colormap/colormap.fs.glsl.d.ts +2 -0
- package/dist/layers/colormap/colormap.fs.glsl.js +42 -0
- package/dist/layers/colormap/colormap.fs.glsl.js.map +1 -0
- package/dist/layers/colormap/colormapLayer.d.ts +24 -0
- package/dist/layers/colormap/colormapLayer.js +150 -0
- package/dist/layers/colormap/colormapLayer.js.map +1 -0
- package/dist/layers/drawing/drawingLayer.d.ts +17 -0
- package/dist/layers/drawing/drawingLayer.js +202 -0
- package/dist/layers/drawing/drawingLayer.js.map +1 -0
- package/dist/layers/fault_polygons/faultPolygonsLayer.d.ts +9 -0
- package/dist/layers/fault_polygons/faultPolygonsLayer.js +43 -0
- package/dist/layers/fault_polygons/faultPolygonsLayer.js.map +1 -0
- package/dist/layers/grid3d/fragment.fs.glsl.d.ts +2 -0
- package/dist/layers/grid3d/fragment.fs.glsl.js +109 -0
- package/dist/layers/grid3d/fragment.fs.glsl.js.map +1 -0
- package/dist/layers/grid3d/fragment_lines.glsl.d.ts +2 -0
- package/dist/layers/grid3d/fragment_lines.glsl.js +21 -0
- package/dist/layers/grid3d/fragment_lines.glsl.js.map +1 -0
- package/dist/layers/grid3d/grid3dLayer.d.ts +73 -0
- package/dist/layers/grid3d/grid3dLayer.js +134 -0
- package/dist/layers/grid3d/grid3dLayer.js.map +1 -0
- package/dist/layers/grid3d/privateLayer.d.ts +73 -0
- package/dist/layers/grid3d/privateLayer.js +174 -0
- package/dist/layers/grid3d/privateLayer.js.map +1 -0
- package/dist/layers/grid3d/vertex.glsl.d.ts +2 -0
- package/dist/layers/grid3d/vertex.glsl.js +43 -0
- package/dist/layers/grid3d/vertex.glsl.js.map +1 -0
- package/dist/layers/grid3d/vertex_lines.glsl.d.ts +2 -0
- package/dist/layers/grid3d/vertex_lines.glsl.js +16 -0
- package/dist/layers/grid3d/vertex_lines.glsl.js.map +1 -0
- package/dist/layers/grid3d/webworker.d.ts +4 -0
- package/dist/layers/grid3d/webworker.js +140 -0
- package/dist/layers/grid3d/webworker.js.map +1 -0
- package/dist/layers/hillshading2d/hillshading2d.fs.glsl.d.ts +2 -0
- package/dist/layers/hillshading2d/hillshading2d.fs.glsl.js +62 -0
- package/dist/layers/hillshading2d/hillshading2d.fs.glsl.js.map +1 -0
- package/dist/layers/hillshading2d/hillshading2dLayer.d.ts +22 -0
- package/dist/layers/hillshading2d/hillshading2dLayer.js +101 -0
- package/dist/layers/hillshading2d/hillshading2dLayer.js.map +1 -0
- package/dist/layers/index.d.ts +34 -0
- package/dist/layers/index.js +19 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/intersection/unfoldedGeoJsonLayer.d.ts +10 -0
- package/dist/layers/intersection/unfoldedGeoJsonLayer.js +64 -0
- package/dist/layers/intersection/unfoldedGeoJsonLayer.js.map +1 -0
- package/dist/layers/map/fragment.fs.glsl.d.ts +2 -0
- package/dist/layers/map/fragment.fs.glsl.js +127 -0
- package/dist/layers/map/fragment.fs.glsl.js.map +1 -0
- package/dist/layers/map/fragment_lines.glsl.d.ts +2 -0
- package/dist/layers/map/fragment_lines.glsl.js +21 -0
- package/dist/layers/map/fragment_lines.glsl.js.map +1 -0
- package/dist/layers/map/mapLayer.d.ts +120 -0
- package/dist/layers/map/mapLayer.js +275 -0
- package/dist/layers/map/mapLayer.js.map +1 -0
- package/dist/layers/map/privateMapLayer.d.ts +76 -0
- package/dist/layers/map/privateMapLayer.js +190 -0
- package/dist/layers/map/privateMapLayer.js.map +1 -0
- package/dist/layers/map/vertex.glsl.d.ts +2 -0
- package/dist/layers/map/vertex.glsl.js +45 -0
- package/dist/layers/map/vertex.glsl.js.map +1 -0
- package/dist/layers/map/vertex_lines.glsl.d.ts +2 -0
- package/dist/layers/map/vertex_lines.glsl.js +16 -0
- package/dist/layers/map/vertex_lines.glsl.js.map +1 -0
- package/dist/layers/map/webworker.d.ts +4 -0
- package/dist/layers/map/webworker.js +362 -0
- package/dist/layers/map/webworker.js.map +1 -0
- package/dist/layers/northarrow/northArrow3DLayer.d.ts +20 -0
- package/dist/layers/northarrow/northArrow3DLayer.js +144 -0
- package/dist/layers/northarrow/northArrow3DLayer.js.map +1 -0
- package/dist/layers/northarrow/northarrow-fragment.glsl.d.ts +2 -0
- package/dist/layers/northarrow/northarrow-fragment.glsl.js +15 -0
- package/dist/layers/northarrow/northarrow-fragment.glsl.js.map +1 -0
- package/dist/layers/northarrow/northarrow-vertex.glsl.d.ts +2 -0
- package/dist/layers/northarrow/northarrow-vertex.glsl.js +14 -0
- package/dist/layers/northarrow/northarrow-vertex.glsl.js.map +1 -0
- package/dist/layers/piechart/fragment.glsl.d.ts +2 -0
- package/dist/layers/piechart/fragment.glsl.js +43 -0
- package/dist/layers/piechart/fragment.glsl.js.map +1 -0
- package/dist/layers/piechart/pieChartLayer.d.ts +40 -0
- package/dist/layers/piechart/pieChartLayer.js +174 -0
- package/dist/layers/piechart/pieChartLayer.js.map +1 -0
- package/dist/layers/piechart/vertex.glsl.d.ts +2 -0
- package/dist/layers/piechart/vertex.glsl.js +43 -0
- package/dist/layers/piechart/vertex.glsl.js.map +1 -0
- package/dist/layers/points/pointsLayer.d.ts +34 -0
- package/dist/layers/points/pointsLayer.js +78 -0
- package/dist/layers/points/pointsLayer.js.map +1 -0
- package/dist/layers/polylines/polylinesLayer.d.ts +50 -0
- package/dist/layers/polylines/polylinesLayer.js +157 -0
- package/dist/layers/polylines/polylinesLayer.js.map +1 -0
- package/dist/layers/selectable_geojson/selectableGeoJsonLayer.d.ts +6 -0
- package/dist/layers/selectable_geojson/selectableGeoJsonLayer.js +22 -0
- package/dist/layers/selectable_geojson/selectableGeoJsonLayer.js.map +1 -0
- package/dist/layers/shader_modules/decoder.d.ts +15 -0
- package/dist/layers/shader_modules/decoder.fs.glsl.d.ts +2 -0
- package/dist/layers/shader_modules/decoder.fs.glsl.js +40 -0
- package/dist/layers/shader_modules/decoder.fs.glsl.js.map +1 -0
- package/dist/layers/shader_modules/decoder.js +29 -0
- package/dist/layers/shader_modules/decoder.js.map +1 -0
- package/dist/layers/shader_modules/index.d.ts +1 -0
- package/dist/layers/shader_modules/index.js +2 -0
- package/dist/layers/shader_modules/index.js.map +1 -0
- package/dist/layers/terrain/map3DLayer.d.ts +42 -0
- package/dist/layers/terrain/map3DLayer.js +324 -0
- package/dist/layers/terrain/map3DLayer.js.map +1 -0
- package/dist/layers/terrain/terrainMapLayer.d.ts +45 -0
- package/dist/layers/terrain/terrainMapLayer.js +183 -0
- package/dist/layers/terrain/terrainMapLayer.js.map +1 -0
- package/dist/layers/terrain/terrainmap.fs.glsl.d.ts +2 -0
- package/dist/layers/terrain/terrainmap.fs.glsl.js +134 -0
- package/dist/layers/terrain/terrainmap.fs.glsl.js.map +1 -0
- package/dist/layers/triangle/fragment.fs.glsl.d.ts +2 -0
- package/dist/layers/triangle/fragment.fs.glsl.js +126 -0
- package/dist/layers/triangle/fragment.fs.glsl.js.map +1 -0
- package/dist/layers/triangle/fragment_lines.glsl.d.ts +2 -0
- package/dist/layers/triangle/fragment_lines.glsl.js +21 -0
- package/dist/layers/triangle/fragment_lines.glsl.js.map +1 -0
- package/dist/layers/triangle/privateTriangleLayer.d.ts +70 -0
- package/dist/layers/triangle/privateTriangleLayer.js +108 -0
- package/dist/layers/triangle/privateTriangleLayer.js.map +1 -0
- package/dist/layers/triangle/test_data/surfacePoints.d.ts +2 -0
- package/dist/layers/triangle/test_data/surfacePoints.js +4345 -0
- package/dist/layers/triangle/test_data/surfacePoints.js.map +1 -0
- package/dist/layers/triangle/test_data/surfaceTriangles.d.ts +2 -0
- package/dist/layers/triangle/test_data/surfaceTriangles.js +7393 -0
- package/dist/layers/triangle/test_data/surfaceTriangles.js.map +1 -0
- package/dist/layers/triangle/triangleLayer.d.ts +60 -0
- package/dist/layers/triangle/triangleLayer.js +170 -0
- package/dist/layers/triangle/triangleLayer.js.map +1 -0
- package/dist/layers/triangle/vertex.glsl.d.ts +2 -0
- package/dist/layers/triangle/vertex.glsl.js +35 -0
- package/dist/layers/triangle/vertex.glsl.js.map +1 -0
- package/dist/layers/triangle/vertex_lines.glsl.d.ts +2 -0
- package/dist/layers/triangle/vertex_lines.glsl.js +16 -0
- package/dist/layers/triangle/vertex_lines.glsl.js.map +1 -0
- package/dist/layers/triangle/webworker.d.ts +4 -0
- package/dist/layers/triangle/webworker.js +132 -0
- package/dist/layers/triangle/webworker.js.map +1 -0
- package/dist/layers/utils/layerTools.d.ts +52 -0
- package/dist/layers/utils/layerTools.js +91 -0
- package/dist/layers/utils/layerTools.js.map +1 -0
- package/dist/layers/utils/propertyMapTools.d.ts +8 -0
- package/dist/layers/utils/propertyMapTools.js +21 -0
- package/dist/layers/utils/propertyMapTools.js.map +1 -0
- package/dist/layers/wells/utils/spline.d.ts +28 -0
- package/dist/layers/wells/utils/spline.js +236 -0
- package/dist/layers/wells/utils/spline.js.map +1 -0
- package/dist/layers/wells/wellsLayer.d.ts +89 -0
- package/dist/layers/wells/wellsLayer.js +939 -0
- package/dist/layers/wells/wellsLayer.js.map +1 -0
- package/dist/package.json +35 -0
- package/dist/redux/actions.d.ts +1 -0
- package/dist/redux/actions.js +3 -0
- package/dist/redux/actions.js.map +1 -0
- package/dist/redux/reducer.d.ts +11 -0
- package/dist/redux/reducer.js +28 -0
- package/dist/redux/reducer.js.map +1 -0
- package/dist/redux/store.d.ts +4 -0
- package/dist/redux/store.js +10 -0
- package/dist/redux/store.js.map +1 -0
- package/dist/redux/types.d.ts +43 -0
- package/dist/redux/types.js +79 -0
- package/dist/redux/types.js.map +1 -0
- package/dist/storybook/SubsurfaceViewer.stories.d.ts +455 -0
- package/dist/storybook/SubsurfaceViewer.stories.js +537 -0
- package/dist/storybook/SubsurfaceViewer.stories.js.map +1 -0
- package/dist/storybook/components/InfoCard.stories.d.ts +48 -0
- package/dist/storybook/components/InfoCard.stories.js +36 -0
- package/dist/storybook/components/InfoCard.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.d.ts +31 -0
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js +30 -0
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.d.ts +31 -0
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js +30 -0
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.d.ts +20 -0
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js +66 -0
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.d.ts +65 -0
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js +94 -0
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js.map +1 -0
- package/dist/storybook/components/settings/LayerSettingsButton.stories.d.ts +34 -0
- package/dist/storybook/components/settings/LayerSettingsButton.stories.js +31 -0
- package/dist/storybook/components/settings/LayerSettingsButton.stories.js.map +1 -0
- package/dist/storybook/components/settings/NumericInput.stories.d.ts +14 -0
- package/dist/storybook/components/settings/NumericInput.stories.js +15 -0
- package/dist/storybook/components/settings/NumericInput.stories.js.map +1 -0
- package/dist/storybook/components/settings/ToggleButton.stories.d.ts +13 -0
- package/dist/storybook/components/settings/ToggleButton.stories.js +14 -0
- package/dist/storybook/components/settings/ToggleButton.stories.js.map +1 -0
- package/dist/storybook/schemaValidation/sampleData.d.ts +122 -0
- package/dist/storybook/schemaValidation/sampleData.js +172 -0
- package/dist/storybook/schemaValidation/sampleData.js.map +1 -0
- package/dist/storybook/schemaValidation/schemaValidation.stories.d.ts +31 -0
- package/dist/storybook/schemaValidation/schemaValidation.stories.js +42 -0
- package/dist/storybook/schemaValidation/schemaValidation.stories.js.map +1 -0
- package/dist/utils/configuration.d.ts +631 -0
- package/dist/utils/configuration.js +36 -0
- package/dist/utils/configuration.js.map +1 -0
- package/dist/utils/fit-bounds.d.ts +15 -0
- package/dist/utils/fit-bounds.js +66 -0
- package/dist/utils/fit-bounds.js.map +1 -0
- package/dist/utils/measurement.d.ts +6 -0
- package/dist/utils/measurement.js +47 -0
- package/dist/utils/measurement.js.map +1 -0
- package/dist/utils/northArrow.d.ts +113 -0
- package/dist/utils/northArrow.js +5 -0
- package/dist/utils/northArrow.js.map +1 -0
- package/dist/utils/specExtractor.d.ts +3 -0
- package/dist/utils/specExtractor.js +24 -0
- package/dist/utils/specExtractor.js.map +1 -0
- package/dist/viewports/index.d.ts +1 -0
- package/dist/viewports/index.js +2 -0
- package/dist/viewports/index.js.map +1 -0
- package/dist/viewports/intersectionViewport.d.ts +35 -0
- package/dist/viewports/intersectionViewport.js +65 -0
- package/dist/viewports/intersectionViewport.js.map +1 -0
- package/dist/views/index.d.ts +1 -0
- package/dist/views/index.js +2 -0
- package/dist/views/index.js.map +1 -0
- package/dist/views/intersectionView.d.ts +18 -0
- package/dist/views/intersectionView.js +17 -0
- package/dist/views/intersectionView.js.map +1 -0
- package/package.json +35 -0
- package/src/DashSubsurfaceViewer.tsx +270 -0
- package/src/SubsurfaceViewer.stories.tsx +449 -0
- package/src/SubsurfaceViewer.test.tsx +98 -0
- package/src/SubsurfaceViewer.tsx +356 -0
- package/src/__snapshots__/SubsurfaceViewer.test.tsx.snap +178 -0
- package/src/assets/glTF/north_arrow/scene.bin +0 -0
- package/src/assets/glTF/north_arrow/scene.gltf +315 -0
- 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 +32 -0
- package/src/components/ColorLegend.tsx +80 -0
- package/src/components/ColorLegends.test.tsx +97 -0
- package/src/components/ColorLegends.tsx +46 -0
- package/src/components/DistanceScale.stories.tsx +28 -0
- package/src/components/DistanceScale.test.tsx +36 -0
- package/src/components/DistanceScale.tsx +84 -0
- package/src/components/InfoCard.test.tsx +110 -0
- package/src/components/InfoCard.tsx +263 -0
- package/src/components/Map.test.tsx +142 -0
- package/src/components/Map.tsx +1435 -0
- package/src/components/StatusIndicator.test.tsx +14 -0
- package/src/components/StatusIndicator.tsx +38 -0
- package/src/components/ViewAnnotation.tsx +16 -0
- package/src/components/ViewFooter.test.tsx +12 -0
- package/src/components/ViewFooter.tsx +30 -0
- package/src/components/__snapshots__/ColorLegends.test.tsx.snap +15 -0
- package/src/components/__snapshots__/DistanceScale.test.tsx.snap +33 -0
- package/src/components/__snapshots__/InfoCard.test.tsx.snap +561 -0
- package/src/components/__snapshots__/Map.test.tsx.snap +119 -0
- package/src/components/__snapshots__/StatusIndicator.test.tsx.snap +3 -0
- package/src/components/__snapshots__/ViewFooter.test.tsx.snap +7 -0
- package/src/components/settings/DrawModeSelector.test.tsx +45 -0
- package/src/components/settings/DrawModeSelector.tsx +58 -0
- package/src/components/settings/DrawModeSelector_performance.test.tsx +35 -0
- package/src/components/settings/LayerProperty.test.tsx +35 -0
- package/src/components/settings/LayerProperty.tsx +153 -0
- package/src/components/settings/LayerProperty_performance.test.tsx +39 -0
- package/src/components/settings/LayerSettingsButton.test.tsx +133 -0
- package/src/components/settings/LayerSettingsButton.tsx +95 -0
- package/src/components/settings/LayersButton.test.tsx +102 -0
- package/src/components/settings/LayersButton.tsx +97 -0
- package/src/components/settings/NumericInput.test.tsx +25 -0
- package/src/components/settings/NumericInput.tsx +67 -0
- package/src/components/settings/Settings.tsx +71 -0
- package/src/components/settings/SliderInput.test.tsx +28 -0
- package/src/components/settings/SliderInput.tsx +71 -0
- package/src/components/settings/ToggleButton.test.tsx +25 -0
- package/src/components/settings/ToggleButton.tsx +53 -0
- package/src/components/settings/__snapshots__/DrawModeSelector.test.tsx.snap +124 -0
- package/src/components/settings/__snapshots__/LayerProperty.test.tsx.snap +124 -0
- package/src/components/settings/__snapshots__/LayerSettingsButton.test.tsx.snap +36 -0
- package/src/components/settings/__snapshots__/LayersButton.test.tsx.snap +83 -0
- package/src/components/settings/__snapshots__/NumericInput.test.tsx.snap +123 -0
- package/src/components/settings/__snapshots__/SliderInput.test.tsx.snap +244 -0
- package/src/components/settings/__snapshots__/ToggleButton.test.tsx.snap +182 -0
- package/src/custom.d.ts +9 -0
- package/src/index.ts +5 -0
- package/src/inputSchema/ColorTables.json +51 -0
- package/src/inputSchema/FaultPolygons.json +80 -0
- package/src/inputSchema/Grid.json +39 -0
- package/src/inputSchema/PieChart.json +72 -0
- package/src/inputSchema/WellLog.json +126 -0
- package/src/inputSchema/WellLogTemplate.json +136 -0
- package/src/inputSchema/WellLogs.json +5 -0
- package/src/inputSchema/Wells.json +106 -0
- package/src/inputSchema/schemaValidationUtil.tsx +55 -0
- package/src/inputSchema/validator.tsx +72 -0
- package/src/inputSchema/wellCompletions.json +108 -0
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.stories.tsx +172 -0
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.tsx +136 -0
- package/src/layers/axes/axes-fragment.glsl.ts +15 -0
- package/src/layers/axes/axesLayer.stories.tsx +87 -0
- package/src/layers/axes/axesLayer.ts +692 -0
- package/src/layers/axes/boxLayer.ts +71 -0
- package/src/layers/axes/grid-vertex.glsl.ts +14 -0
- package/src/layers/axes2d/axes2DLayer.stories.tsx +150 -0
- package/src/layers/axes2d/axes2DLayer.ts +841 -0
- package/src/layers/axes2d/font-atlas.png +0 -0
- package/src/layers/axes2d/label-fragment.glsl.js +37 -0
- package/src/layers/axes2d/label-vertex.glsl.js +20 -0
- package/src/layers/axes2d/line-fragment.glsl.js +14 -0
- package/src/layers/axes2d/line-vertex.glsl.js +13 -0
- package/src/layers/colormap/colormap.fs.glsl.ts +42 -0
- package/src/layers/colormap/colormapLayer.ts +247 -0
- package/src/layers/drawing/drawingLayer.tsx +256 -0
- package/src/layers/fault_polygons/faultPolygonsLayer.ts +54 -0
- package/src/layers/grid3d/fragment.fs.glsl.ts +109 -0
- package/src/layers/grid3d/fragment_lines.glsl.ts +21 -0
- package/src/layers/grid3d/grid3dLayer.stories.tsx +172 -0
- package/src/layers/grid3d/grid3dLayer.ts +248 -0
- package/src/layers/grid3d/privateLayer.ts +292 -0
- package/src/layers/grid3d/vertex.glsl.ts +43 -0
- package/src/layers/grid3d/vertex_lines.glsl.ts +15 -0
- package/src/layers/grid3d/webworker.ts +173 -0
- package/src/layers/hillshading2d/hillshading2d.fs.glsl.ts +62 -0
- package/src/layers/hillshading2d/hillshading2dLayer.ts +172 -0
- package/src/layers/index.ts +35 -0
- package/src/layers/intersection/intersectionView.stories.tsx +294 -0
- package/src/layers/intersection/unfoldedGeoJsonLayer.ts +92 -0
- package/src/layers/map/fragment.fs.glsl.ts +127 -0
- package/src/layers/map/fragment_lines.glsl.ts +21 -0
- package/src/layers/map/mapLayer.stories.tsx +1369 -0
- package/src/layers/map/mapLayer.ts +470 -0
- package/src/layers/map/privateMapLayer.ts +317 -0
- package/src/layers/map/vertex.glsl.ts +45 -0
- package/src/layers/map/vertex_lines.glsl.ts +15 -0
- package/src/layers/map/webworker.ts +479 -0
- package/src/layers/northarrow/northArrow.stories.tsx +108 -0
- package/src/layers/northarrow/northArrow3DLayer.ts +204 -0
- package/src/layers/northarrow/northarrow-fragment.glsl.js +14 -0
- package/src/layers/northarrow/northarrow-vertex.glsl.js +13 -0
- package/src/layers/piechart/fragment.glsl.js +42 -0
- package/src/layers/piechart/pieChartLayer.ts +246 -0
- package/src/layers/piechart/vertex.glsl.js +42 -0
- package/src/layers/points/pointsLayer.stories.tsx +141 -0
- package/src/layers/points/pointsLayer.ts +143 -0
- package/src/layers/polylines/polylinesLayer.stories.tsx +144 -0
- package/src/layers/polylines/polylinesLayer.ts +263 -0
- package/src/layers/selectable_geojson/selectableGeoJsonLayer.ts +25 -0
- package/src/layers/shader_modules/decoder.fs.glsl.ts +41 -0
- package/src/layers/shader_modules/decoder.ts +46 -0
- package/src/layers/shader_modules/index.ts +1 -0
- package/src/layers/terrain/map3DLayer.stories.tsx +340 -0
- package/src/layers/terrain/map3DLayer.ts +556 -0
- package/src/layers/terrain/terrainMapLayer.ts +334 -0
- package/src/layers/terrain/terrainmap.fs.glsl.ts +134 -0
- package/src/layers/triangle/fragment.fs.glsl.ts +126 -0
- package/src/layers/triangle/fragment_lines.glsl.ts +21 -0
- package/src/layers/triangle/privateTriangleLayer.ts +203 -0
- package/src/layers/triangle/test_data/surfacePoints.ts +4344 -0
- package/src/layers/triangle/test_data/surfaceTriangles.ts +7392 -0
- package/src/layers/triangle/triangleLayer.stories.tsx +191 -0
- package/src/layers/triangle/triangleLayer.ts +273 -0
- package/src/layers/triangle/vertex.glsl.ts +35 -0
- package/src/layers/triangle/vertex_lines.glsl.ts +15 -0
- package/src/layers/triangle/webworker.ts +165 -0
- package/src/layers/utils/glsl.d.ts +4 -0
- package/src/layers/utils/layerTools.ts +182 -0
- package/src/layers/utils/propertyMapTools.ts +43 -0
- package/src/layers/wells/utils/spline.ts +318 -0
- package/src/layers/wells/wellsLayer.stories.tsx +625 -0
- package/src/layers/wells/wellsLayer.ts +1377 -0
- package/src/redux/actions.ts +8 -0
- package/src/redux/reducer.ts +43 -0
- package/src/redux/store.ts +15 -0
- package/src/redux/types.ts +114 -0
- package/src/storybook/SubsurfaceViewer.stories.jsx +644 -0
- package/src/storybook/components/InfoCard.stories.jsx +39 -0
- package/src/storybook/components/colorLegends/ContinuousLegend.stories.jsx +32 -0
- package/src/storybook/components/colorLegends/DiscreteLegend.stories.jsx +33 -0
- package/src/storybook/components/colorLegends/IndividualScaleForMap.stories.jsx +99 -0
- package/src/storybook/components/colorLegends/SingleScaleForMap.stories.jsx +120 -0
- package/src/storybook/components/settings/LayerSettingsButton.stories.jsx +34 -0
- package/src/storybook/components/settings/NumericInput.stories.jsx +17 -0
- package/src/storybook/components/settings/ToggleButton.stories.jsx +16 -0
- package/src/storybook/schemaValidation/sampleData.js +177 -0
- package/src/storybook/schemaValidation/schemaValidation.stories.jsx +91 -0
- package/src/test/TestWrapper.tsx +13 -0
- package/src/utils/configuration.ts +61 -0
- package/src/utils/fit-bounds.js +85 -0
- package/src/utils/measurement.ts +61 -0
- package/src/utils/northArrow.ts +4 -0
- package/src/utils/specExtractor.ts +36 -0
- package/src/viewports/index.js +1 -0
- package/src/viewports/intersectionViewport.ts +137 -0
- package/src/views/index.js +1 -0
- package/src/views/intersectionView.ts +38 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,867 @@
|
|
|
1
|
+
import { JSONConfiguration, JSONConverter } from "@deck.gl/json/typed";
|
|
2
|
+
import DeckGL from "@deck.gl/react/typed";
|
|
3
|
+
import { OrthographicView, OrbitView, } from "@deck.gl/core/typed";
|
|
4
|
+
import React, { useEffect, useState, useCallback, useRef } from "react";
|
|
5
|
+
import JSON_CONVERTER_CONFIG from "../utils/configuration";
|
|
6
|
+
import InfoCard from "./InfoCard";
|
|
7
|
+
import DistanceScale from "./DistanceScale";
|
|
8
|
+
import StatusIndicator from "./StatusIndicator";
|
|
9
|
+
import fitBounds from "../utils/fit-bounds";
|
|
10
|
+
import { validateColorTables, validateLayers, } from "../inputSchema/schemaValidationUtil";
|
|
11
|
+
import { getLayersByType } from "../layers/utils/layerTools";
|
|
12
|
+
import { getWellLayerByTypeAndSelectedWells } from "../layers/utils/layerTools";
|
|
13
|
+
import { WellsLayer, Axes2DLayer, NorthArrow3DLayer } from "../layers";
|
|
14
|
+
import { isEmpty, isEqual } from "lodash";
|
|
15
|
+
import { cloneDeep } from "lodash";
|
|
16
|
+
import { colorTables } from "@emerson-eps/color-tables";
|
|
17
|
+
import { getModelMatrixScale } from "../layers/utils/layerTools";
|
|
18
|
+
import { OrbitController, OrthographicController } from "@deck.gl/core/typed";
|
|
19
|
+
import IntersectionView from "../views/intersectionView";
|
|
20
|
+
function addBoundingBoxes(b1, b2) {
|
|
21
|
+
const boxDefault = [0, 0, 0, 1, 1, 1];
|
|
22
|
+
if (typeof b1 === "undefined" || typeof b2 === "undefined") {
|
|
23
|
+
return boxDefault;
|
|
24
|
+
}
|
|
25
|
+
if (isEqual(b1, boxDefault)) {
|
|
26
|
+
return b2;
|
|
27
|
+
}
|
|
28
|
+
const xmin = Math.min(b1[0], b2[0]);
|
|
29
|
+
const ymin = Math.min(b1[1], b2[1]);
|
|
30
|
+
const zmin = Math.min(b1[2], b2[2]);
|
|
31
|
+
const xmax = Math.max(b1[3], b2[3]);
|
|
32
|
+
const ymax = Math.max(b1[4], b2[4]);
|
|
33
|
+
const zmax = Math.max(b1[5], b2[5]);
|
|
34
|
+
return [xmin, ymin, zmin, xmax, ymax, zmax];
|
|
35
|
+
}
|
|
36
|
+
function boundingBoxCenter(box) {
|
|
37
|
+
const xmin = box[0];
|
|
38
|
+
const ymin = box[1];
|
|
39
|
+
const zmin = box[2];
|
|
40
|
+
const xmax = box[3];
|
|
41
|
+
const ymax = box[4];
|
|
42
|
+
const zmax = box[5];
|
|
43
|
+
return [
|
|
44
|
+
xmin + 0.5 * (xmax - xmin),
|
|
45
|
+
ymin + 0.5 * (ymax - ymin),
|
|
46
|
+
zmin + 0.5 * (zmax - zmin),
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
export function useHoverInfo() {
|
|
50
|
+
const [hoverInfo, setHoverInfo] = React.useState([]);
|
|
51
|
+
const callback = React.useCallback((pickEvent) => {
|
|
52
|
+
setHoverInfo(pickEvent.infos);
|
|
53
|
+
}, []);
|
|
54
|
+
return [hoverInfo, callback];
|
|
55
|
+
}
|
|
56
|
+
function defaultTooltip(info) {
|
|
57
|
+
var _a, _b, _c;
|
|
58
|
+
if (info === null || info === void 0 ? void 0 : info.logName) {
|
|
59
|
+
return info === null || info === void 0 ? void 0 : info.logName;
|
|
60
|
+
}
|
|
61
|
+
else if (((_a = info.layer) === null || _a === void 0 ? void 0 : _a.id) === "drawing-layer") {
|
|
62
|
+
return (_b = info.propertyValue) === null || _b === void 0 ? void 0 : _b.toFixed(2);
|
|
63
|
+
}
|
|
64
|
+
const feat = info.object;
|
|
65
|
+
return (_c = feat === null || feat === void 0 ? void 0 : feat.properties) === null || _c === void 0 ? void 0 : _c["name"];
|
|
66
|
+
}
|
|
67
|
+
function adjustCameraTarget(viewStates, scale, newScale) {
|
|
68
|
+
const vs = cloneDeep(viewStates);
|
|
69
|
+
for (const key in vs) {
|
|
70
|
+
if (typeof vs[key].target !== "undefined") {
|
|
71
|
+
const t = vs[key].target;
|
|
72
|
+
const z = newScale * (t[2] / scale);
|
|
73
|
+
vs[key].target = [t[0], t[1], z];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return vs;
|
|
77
|
+
}
|
|
78
|
+
const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTables, setEditedData, checkDatafileSchema, onMouseEvent, selection, children, getTooltip = defaultTooltip, cameraPosition, getCameraPosition, triggerHome, triggerResetMultipleWells, }) => {
|
|
79
|
+
var _a, _b, _c, _d, _e;
|
|
80
|
+
const isCameraPositionDefined = typeof cameraPosition !== "undefined" &&
|
|
81
|
+
Object.keys(cameraPosition).length !== 0;
|
|
82
|
+
const deckRef = useRef(null);
|
|
83
|
+
const bboxInitial = [0, 0, 0, 1, 1, 1];
|
|
84
|
+
const boundsInitial = React.useMemo(() => bounds !== null && bounds !== void 0 ? bounds : [0, 0, 1, 1], [bounds]);
|
|
85
|
+
// state for views prop of DeckGL component
|
|
86
|
+
const [viewsProps, setViewsProps] = useState([]);
|
|
87
|
+
const [alteredLayers, setAlteredLayers] = useState([]);
|
|
88
|
+
const [viewPortMargins, setViewPortMargins] = useState({
|
|
89
|
+
left: 0,
|
|
90
|
+
right: 0,
|
|
91
|
+
top: 0,
|
|
92
|
+
bottom: 0,
|
|
93
|
+
});
|
|
94
|
+
const [didUserChangeCamera, setDidUserChangeCamera] = useState(false);
|
|
95
|
+
const [reportedBoundingBox, setReportedBoundingBox] = useState(bboxInitial);
|
|
96
|
+
const [reportedBoundingBoxAcc, setReportedBoundingBoxAcc] = useState(bboxInitial);
|
|
97
|
+
const initialViewState = getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, 0, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck);
|
|
98
|
+
// Local help function.
|
|
99
|
+
const calcDefaultViewStates = useCallback((boundingBox, input) => {
|
|
100
|
+
const center = boundingBoxCenter(boundingBox // note this may include axesLayer
|
|
101
|
+
);
|
|
102
|
+
const updatedViewProps = input ? input : viewsProps;
|
|
103
|
+
const isBoundsDefined = typeof bounds !== "undefined";
|
|
104
|
+
const viewStateMap = updatedViewProps.map((item, index) => {
|
|
105
|
+
var _a, _b, _c, _d, _e, _f;
|
|
106
|
+
const is3D = (_c = (_b = (_a = views === null || views === void 0 ? void 0 : views.viewports) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.show3D) !== null && _c !== void 0 ? _c : false;
|
|
107
|
+
const viewState = isBoundsDefined
|
|
108
|
+
? getViewState(viewPortMargins, boundsInitial, center, views, index, (_d = deckRef.current) === null || _d === void 0 ? void 0 : _d.deck)
|
|
109
|
+
: getViewState3D(is3D, boundingBox, (_e = views === null || views === void 0 ? void 0 : views.viewports) === null || _e === void 0 ? void 0 : _e[index].zoom, (_f = deckRef.current) === null || _f === void 0 ? void 0 : _f.deck);
|
|
110
|
+
const minZoom = is3D ? -12 : -12;
|
|
111
|
+
const maxZoom = is3D ? +12 : +4;
|
|
112
|
+
return [item.id, Object.assign(Object.assign({}, viewState), { minZoom, maxZoom })];
|
|
113
|
+
});
|
|
114
|
+
const tempViewStates = Object.fromEntries(viewStateMap);
|
|
115
|
+
setDidUserChangeCamera(false);
|
|
116
|
+
setViewStates(tempViewStates);
|
|
117
|
+
}, [bounds, boundsInitial, views, viewPortMargins, viewsProps]);
|
|
118
|
+
// set initial view state based on supplied bounds and zoom in viewState
|
|
119
|
+
const [viewStates, setViewStates] = useState({
|
|
120
|
+
"main-view_2D": cameraPosition !== null && cameraPosition !== void 0 ? cameraPosition : {},
|
|
121
|
+
});
|
|
122
|
+
const [firstViewStateId, setFirstViewStatesId] = useState("main-view_2D");
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
let tempViewStates = {};
|
|
125
|
+
if (isCameraPositionDefined) {
|
|
126
|
+
tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, cameraPosition]));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
const isBoundsDefined = typeof bounds !== "undefined";
|
|
130
|
+
tempViewStates = Object.fromEntries(viewsProps.map((item, index) => {
|
|
131
|
+
var _a, _b, _c, _d, _e, _f;
|
|
132
|
+
let viewState = viewStates[item.id];
|
|
133
|
+
if (typeof viewState === "undefined") {
|
|
134
|
+
viewState = isBoundsDefined
|
|
135
|
+
? getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, index, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck)
|
|
136
|
+
: getViewState3D((_d = (_c = (_b = views === null || views === void 0 ? void 0 : views.viewports) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.show3D) !== null && _d !== void 0 ? _d : false, reportedBoundingBoxAcc, (_e = views === null || views === void 0 ? void 0 : views.viewports) === null || _e === void 0 ? void 0 : _e[index].zoom, (_f = deckRef.current) === null || _f === void 0 ? void 0 : _f.deck);
|
|
137
|
+
}
|
|
138
|
+
return [item.id, viewState];
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
if (viewsProps[0] !== undefined) {
|
|
142
|
+
setFirstViewStatesId(viewsProps[0].id);
|
|
143
|
+
}
|
|
144
|
+
setViewStates(tempViewStates);
|
|
145
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
146
|
+
}, [
|
|
147
|
+
boundsInitial,
|
|
148
|
+
cameraPosition,
|
|
149
|
+
isCameraPositionDefined,
|
|
150
|
+
viewPortMargins,
|
|
151
|
+
views === null || views === void 0 ? void 0 : views.viewports,
|
|
152
|
+
viewsProps,
|
|
153
|
+
]);
|
|
154
|
+
// calculate view state on deckgl context load (based on viewport size)
|
|
155
|
+
const onLoad = useCallback(() => {
|
|
156
|
+
let tempViewStates = {};
|
|
157
|
+
if (isCameraPositionDefined) {
|
|
158
|
+
tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, cameraPosition]));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
tempViewStates = Object.fromEntries(viewsProps.map((item, index) => {
|
|
162
|
+
var _a;
|
|
163
|
+
return [
|
|
164
|
+
item.id,
|
|
165
|
+
getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, index, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck),
|
|
166
|
+
];
|
|
167
|
+
}));
|
|
168
|
+
if (viewsProps[0] !== undefined) {
|
|
169
|
+
setFirstViewStatesId(viewsProps[0].id);
|
|
170
|
+
}
|
|
171
|
+
setViewStates(tempViewStates);
|
|
172
|
+
}
|
|
173
|
+
}, [
|
|
174
|
+
isCameraPositionDefined,
|
|
175
|
+
viewsProps,
|
|
176
|
+
cameraPosition,
|
|
177
|
+
viewPortMargins,
|
|
178
|
+
boundsInitial,
|
|
179
|
+
reportedBoundingBoxAcc,
|
|
180
|
+
views,
|
|
181
|
+
]);
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
if (typeof triggerHome !== "undefined") {
|
|
184
|
+
calcDefaultViewStates(reportedBoundingBoxAcc);
|
|
185
|
+
}
|
|
186
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
187
|
+
}, [triggerHome]);
|
|
188
|
+
useEffect(() => {
|
|
189
|
+
const union_of_reported_bboxes = addBoundingBoxes(reportedBoundingBoxAcc, reportedBoundingBox);
|
|
190
|
+
setReportedBoundingBoxAcc(union_of_reported_bboxes);
|
|
191
|
+
// If "bounds" or "cameraPosition" is not defined "viewState" will be
|
|
192
|
+
// calculated based on the union of the reported bounding boxes from each layer.
|
|
193
|
+
if (!didUserChangeCamera && !isCameraPositionDefined) {
|
|
194
|
+
calcDefaultViewStates(union_of_reported_bboxes);
|
|
195
|
+
}
|
|
196
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
197
|
+
}, [reportedBoundingBox]);
|
|
198
|
+
// react on bounds prop change
|
|
199
|
+
useEffect(() => {
|
|
200
|
+
const isBoundsDefined = typeof bounds !== "undefined";
|
|
201
|
+
let tempViewStates = {};
|
|
202
|
+
if (!isCameraPositionDefined) {
|
|
203
|
+
tempViewStates = Object.fromEntries(viewsProps.map((item, index) => {
|
|
204
|
+
var _a, _b, _c, _d, _e, _f;
|
|
205
|
+
return [
|
|
206
|
+
item.id,
|
|
207
|
+
isBoundsDefined
|
|
208
|
+
? getViewState(viewPortMargins, boundsInitial, boundingBoxCenter(reportedBoundingBoxAcc), views, index, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck)
|
|
209
|
+
: getViewState3D((_d = (_c = (_b = views === null || views === void 0 ? void 0 : views.viewports) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.show3D) !== null && _d !== void 0 ? _d : false, reportedBoundingBoxAcc, (_e = views === null || views === void 0 ? void 0 : views.viewports) === null || _e === void 0 ? void 0 : _e[index].zoom, (_f = deckRef.current) === null || _f === void 0 ? void 0 : _f.deck),
|
|
210
|
+
];
|
|
211
|
+
}));
|
|
212
|
+
if (viewsProps[0] !== undefined) {
|
|
213
|
+
setFirstViewStatesId(viewsProps[0].id);
|
|
214
|
+
}
|
|
215
|
+
setViewStates(tempViewStates);
|
|
216
|
+
}
|
|
217
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
218
|
+
}, [boundsInitial, cameraPosition, views === null || views === void 0 ? void 0 : views.viewports, viewsProps]);
|
|
219
|
+
// react on cameraPosition prop change
|
|
220
|
+
useEffect(() => {
|
|
221
|
+
let tempViewStates = {};
|
|
222
|
+
if (isCameraPositionDefined) {
|
|
223
|
+
tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, cameraPosition]));
|
|
224
|
+
setViewStates(tempViewStates);
|
|
225
|
+
if (viewsProps[0] !== undefined) {
|
|
226
|
+
setFirstViewStatesId(viewsProps[0].id);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (cameraPosition === null) {
|
|
230
|
+
tempViewStates = Object.fromEntries(viewsProps.map((item) => [item.id, initialViewState]));
|
|
231
|
+
setViewStates(tempViewStates);
|
|
232
|
+
}
|
|
233
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
234
|
+
}, [cameraPosition, viewsProps]);
|
|
235
|
+
// Used for scaling in z direction using arrow keys.
|
|
236
|
+
const [scaleZ, setScaleZ] = useState(1);
|
|
237
|
+
const [scaleZUp, setScaleZUp] = useState(1);
|
|
238
|
+
const [scaleZDown, setScaleZDown] = useState(1);
|
|
239
|
+
const scaleUpFunction = () => {
|
|
240
|
+
setScaleZUp(Math.random());
|
|
241
|
+
};
|
|
242
|
+
const scaleDownFunction = () => {
|
|
243
|
+
setScaleZDown(Math.random());
|
|
244
|
+
};
|
|
245
|
+
useEffect(() => {
|
|
246
|
+
const newScaleZ = scaleZ * 1.05;
|
|
247
|
+
setScaleZ(newScaleZ);
|
|
248
|
+
// Make camera target follow the scaling.
|
|
249
|
+
const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
|
|
250
|
+
setViewStates(vs);
|
|
251
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
252
|
+
}, [scaleZUp]);
|
|
253
|
+
useEffect(() => {
|
|
254
|
+
const newScaleZ = scaleZ * 0.95;
|
|
255
|
+
setScaleZ(newScaleZ);
|
|
256
|
+
// Make camera target follow the scaling.
|
|
257
|
+
const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
|
|
258
|
+
setViewStates(vs);
|
|
259
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
260
|
+
}, [scaleZDown]);
|
|
261
|
+
useEffect(() => {
|
|
262
|
+
const viewProps = getViews(views);
|
|
263
|
+
setViewsProps(viewProps);
|
|
264
|
+
if (!bounds) {
|
|
265
|
+
calcDefaultViewStates(reportedBoundingBoxAcc);
|
|
266
|
+
}
|
|
267
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
268
|
+
}, [views]);
|
|
269
|
+
useEffect(() => {
|
|
270
|
+
if (layers == undefined)
|
|
271
|
+
return;
|
|
272
|
+
// Margins on the viewport are extracted from a potenial axes2D layer.
|
|
273
|
+
const axes2DLayer = layers === null || layers === void 0 ? void 0 : layers.find((e) => {
|
|
274
|
+
return (e === null || e === void 0 ? void 0 : e.constructor) === Axes2DLayer;
|
|
275
|
+
});
|
|
276
|
+
const left = axes2DLayer && axes2DLayer.props.isLeftRuler
|
|
277
|
+
? axes2DLayer.props.marginH
|
|
278
|
+
: 0;
|
|
279
|
+
const right = axes2DLayer && axes2DLayer.props.isRightRuler
|
|
280
|
+
? axes2DLayer.props.marginH
|
|
281
|
+
: 0;
|
|
282
|
+
const top = axes2DLayer && axes2DLayer.props.isTopRuler
|
|
283
|
+
? axes2DLayer.props.marginV
|
|
284
|
+
: 0;
|
|
285
|
+
const bottom = axes2DLayer && axes2DLayer.props.isBottomRuler
|
|
286
|
+
? axes2DLayer.props.marginV
|
|
287
|
+
: 0;
|
|
288
|
+
setViewPortMargins({ left, right, top, bottom });
|
|
289
|
+
const m = getModelMatrixScale(scaleZ);
|
|
290
|
+
const layers_copy = layers.map((item) => {
|
|
291
|
+
if ((item === null || item === void 0 ? void 0 : item.constructor.name) === NorthArrow3DLayer.name)
|
|
292
|
+
return item;
|
|
293
|
+
const layer = item;
|
|
294
|
+
// Set "modelLayer" matrix to reflect correct z scaling.
|
|
295
|
+
const scaledLayer = layer.clone({ modelMatrix: m });
|
|
296
|
+
// Inject "setReportedBoundingBox" function into layer for it to report
|
|
297
|
+
// back its respective bounding box.
|
|
298
|
+
const boundedLayer = scaledLayer.clone({
|
|
299
|
+
setReportedBoundingBox: setReportedBoundingBox,
|
|
300
|
+
});
|
|
301
|
+
return boundedLayer !== null && boundedLayer !== void 0 ? boundedLayer : scaledLayer;
|
|
302
|
+
});
|
|
303
|
+
setAlteredLayers(layers_copy);
|
|
304
|
+
}, [scaleZ, layers /*dispatch*/]);
|
|
305
|
+
const [deckGLLayers, setDeckGLLayers] = useState([]);
|
|
306
|
+
useEffect(() => {
|
|
307
|
+
setDeckGLLayers(alteredLayers);
|
|
308
|
+
}, [alteredLayers]);
|
|
309
|
+
useEffect(() => {
|
|
310
|
+
var _a, _b, _c;
|
|
311
|
+
const layers = (_b = (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck) === null || _b === void 0 ? void 0 : _b.props.layers;
|
|
312
|
+
if (layers) {
|
|
313
|
+
const wellslayer = (_c = getLayersByType(layers, WellsLayer.name)) === null || _c === void 0 ? void 0 : _c[0];
|
|
314
|
+
wellslayer === null || wellslayer === void 0 ? void 0 : wellslayer.setSelection(selection === null || selection === void 0 ? void 0 : selection.well, selection === null || selection === void 0 ? void 0 : selection.selection);
|
|
315
|
+
}
|
|
316
|
+
}, [selection]);
|
|
317
|
+
// multiple well layers
|
|
318
|
+
const [multipleWells, setMultipleWells] = useState([]);
|
|
319
|
+
const [selectedWell, setSelectedWell] = useState("");
|
|
320
|
+
const [shiftHeld, setShiftHeld] = useState(false);
|
|
321
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
322
|
+
function downHandler({ key }) {
|
|
323
|
+
if (key === "Shift") {
|
|
324
|
+
setShiftHeld(true);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
328
|
+
function upHandler({ key }) {
|
|
329
|
+
if (key === "Shift") {
|
|
330
|
+
setShiftHeld(false);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
useEffect(() => {
|
|
334
|
+
window.addEventListener("keydown", downHandler);
|
|
335
|
+
window.addEventListener("keyup", upHandler);
|
|
336
|
+
return () => {
|
|
337
|
+
window.removeEventListener("keydown", downHandler);
|
|
338
|
+
window.removeEventListener("keyup", upHandler);
|
|
339
|
+
};
|
|
340
|
+
}, []);
|
|
341
|
+
useEffect(() => {
|
|
342
|
+
var _a, _b, _c;
|
|
343
|
+
const layers = (_b = (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck) === null || _b === void 0 ? void 0 : _b.props.layers;
|
|
344
|
+
if (layers) {
|
|
345
|
+
const wellslayer = (_c = getWellLayerByTypeAndSelectedWells(layers, "WellsLayer", selectedWell)) === null || _c === void 0 ? void 0 : _c[0];
|
|
346
|
+
wellslayer === null || wellslayer === void 0 ? void 0 : wellslayer.setMultiSelection(multipleWells);
|
|
347
|
+
}
|
|
348
|
+
}, [multipleWells, selectedWell]);
|
|
349
|
+
useEffect(() => {
|
|
350
|
+
if (typeof triggerResetMultipleWells !== "undefined") {
|
|
351
|
+
setMultipleWells([]);
|
|
352
|
+
}
|
|
353
|
+
}, [triggerResetMultipleWells]);
|
|
354
|
+
const getPickingInfos = useCallback((pickInfo,
|
|
355
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
356
|
+
event) => {
|
|
357
|
+
var _a;
|
|
358
|
+
if ((coords === null || coords === void 0 ? void 0 : coords.multiPicking) && ((_a = pickInfo.layer) === null || _a === void 0 ? void 0 : _a.context.deck)) {
|
|
359
|
+
const pickInfos = pickInfo.layer.context.deck.pickMultipleObjects({
|
|
360
|
+
x: event.offsetCenter.x,
|
|
361
|
+
y: event.offsetCenter.y,
|
|
362
|
+
depth: coords.pickDepth ? coords.pickDepth : undefined,
|
|
363
|
+
});
|
|
364
|
+
pickInfos.forEach((item) => {
|
|
365
|
+
var _a, _b;
|
|
366
|
+
if (item.properties) {
|
|
367
|
+
let unit = (_b = (_a = item.sourceLayer) === null || _a === void 0 ? void 0 : _a.props.data) === null || _b === void 0 ? void 0 : _b.unit;
|
|
368
|
+
if (unit == undefined)
|
|
369
|
+
unit = " ";
|
|
370
|
+
item.properties.forEach((element) => {
|
|
371
|
+
if (element.name.includes("MD") ||
|
|
372
|
+
element.name.includes("TVD")) {
|
|
373
|
+
element.value =
|
|
374
|
+
Number(element.value)
|
|
375
|
+
.toFixed(2)
|
|
376
|
+
.toString() +
|
|
377
|
+
" " +
|
|
378
|
+
unit;
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
return pickInfos;
|
|
384
|
+
}
|
|
385
|
+
return [pickInfo];
|
|
386
|
+
}, [coords === null || coords === void 0 ? void 0 : coords.multiPicking, coords === null || coords === void 0 ? void 0 : coords.pickDepth]);
|
|
387
|
+
/**
|
|
388
|
+
* call onMouseEvent callback
|
|
389
|
+
*/
|
|
390
|
+
const callOnMouseEvent = useCallback((type, infos, event) => {
|
|
391
|
+
if (!onMouseEvent)
|
|
392
|
+
return;
|
|
393
|
+
const ev = handleMouseEvent(type, infos, event);
|
|
394
|
+
onMouseEvent(ev);
|
|
395
|
+
}, [onMouseEvent]);
|
|
396
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
397
|
+
const [hoverInfo, setHoverInfo] = useState([]);
|
|
398
|
+
const onHover = useCallback((pickInfo, event) => {
|
|
399
|
+
const infos = getPickingInfos(pickInfo, event);
|
|
400
|
+
setHoverInfo(infos); // for InfoCard pickInfos
|
|
401
|
+
callOnMouseEvent === null || callOnMouseEvent === void 0 ? void 0 : callOnMouseEvent("hover", infos, event);
|
|
402
|
+
}, [callOnMouseEvent, getPickingInfos]);
|
|
403
|
+
const onClick = useCallback((pickInfo, event) => {
|
|
404
|
+
const infos = getPickingInfos(pickInfo, event);
|
|
405
|
+
callOnMouseEvent === null || callOnMouseEvent === void 0 ? void 0 : callOnMouseEvent("click", infos, event);
|
|
406
|
+
}, [callOnMouseEvent, getPickingInfos]);
|
|
407
|
+
const [isLoaded, setIsLoaded] = useState(false);
|
|
408
|
+
const onAfterRender = useCallback(() => {
|
|
409
|
+
if (deckGLLayers) {
|
|
410
|
+
const state = deckGLLayers.every((layer) => layer.isLoaded);
|
|
411
|
+
setIsLoaded(state);
|
|
412
|
+
}
|
|
413
|
+
}, [deckGLLayers]);
|
|
414
|
+
// validate layers data
|
|
415
|
+
const [errorText, setErrorText] = useState();
|
|
416
|
+
useEffect(() => {
|
|
417
|
+
var _a, _b;
|
|
418
|
+
const layers = (_b = (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck) === null || _b === void 0 ? void 0 : _b.props.layers;
|
|
419
|
+
// this ensures to validate the schemas only once
|
|
420
|
+
if (checkDatafileSchema && layers && isLoaded) {
|
|
421
|
+
try {
|
|
422
|
+
validateLayers(layers);
|
|
423
|
+
colorTables && validateColorTables(colorTables);
|
|
424
|
+
}
|
|
425
|
+
catch (e) {
|
|
426
|
+
setErrorText(String(e));
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
else
|
|
430
|
+
setErrorText(undefined);
|
|
431
|
+
}, [
|
|
432
|
+
checkDatafileSchema,
|
|
433
|
+
colorTables,
|
|
434
|
+
(_c = (_b = deckRef === null || deckRef === void 0 ? void 0 : deckRef.current) === null || _b === void 0 ? void 0 : _b.deck) === null || _c === void 0 ? void 0 : _c.props.layers,
|
|
435
|
+
isLoaded,
|
|
436
|
+
]);
|
|
437
|
+
const layerFilter = useCallback((args) => {
|
|
438
|
+
// display all the layers if views are not specified correctly
|
|
439
|
+
if (!views || !views.viewports || !views.layout)
|
|
440
|
+
return true;
|
|
441
|
+
const cur_view = views.viewports.find(({ id }) => args.viewport.id && id === args.viewport.id);
|
|
442
|
+
if ((cur_view === null || cur_view === void 0 ? void 0 : cur_view.layerIds) && cur_view.layerIds.length > 0) {
|
|
443
|
+
const layer_ids = cur_view.layerIds;
|
|
444
|
+
return layer_ids.some((layer_id) => {
|
|
445
|
+
const t = layer_id === args.layer.id;
|
|
446
|
+
return t;
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
}, [views]);
|
|
453
|
+
const onViewStateChange = useCallback(
|
|
454
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
455
|
+
({ viewId, viewState }) => {
|
|
456
|
+
var _a;
|
|
457
|
+
const viewports = (views === null || views === void 0 ? void 0 : views.viewports) || [];
|
|
458
|
+
const isSyncIds = viewports
|
|
459
|
+
.filter((item) => item.isSync)
|
|
460
|
+
.map((item) => item.id);
|
|
461
|
+
if (isSyncIds === null || isSyncIds === void 0 ? void 0 : isSyncIds.includes(viewId)) {
|
|
462
|
+
const viewStateTable = views === null || views === void 0 ? void 0 : views.viewports.filter((item) => item.isSync).map((item) => [item.id, viewState]);
|
|
463
|
+
const tempViewStates = Object.fromEntries(viewStateTable !== null && viewStateTable !== void 0 ? viewStateTable : []);
|
|
464
|
+
setViewStates((currentViewStates) => (Object.assign(Object.assign({}, currentViewStates), tempViewStates)));
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
setViewStates((currentViewStates) => (Object.assign(Object.assign({}, currentViewStates), { [viewId]: viewState })));
|
|
468
|
+
}
|
|
469
|
+
if (getCameraPosition) {
|
|
470
|
+
getCameraPosition(viewState);
|
|
471
|
+
}
|
|
472
|
+
setFirstViewStatesId((_a = viewsProps[0]) === null || _a === void 0 ? void 0 : _a.id);
|
|
473
|
+
setDidUserChangeCamera(true);
|
|
474
|
+
}, [getCameraPosition, views === null || views === void 0 ? void 0 : views.viewports, viewsProps]);
|
|
475
|
+
const deckGLViews = React.useMemo(() => {
|
|
476
|
+
var _a;
|
|
477
|
+
return createViews(views, scaleUpFunction, scaleDownFunction, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck);
|
|
478
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
479
|
+
}, [views, views, (_d = deckRef.current) === null || _d === void 0 ? void 0 : _d.deck]);
|
|
480
|
+
if (!deckGLViews || isEmpty(deckGLViews) || isEmpty(deckGLLayers))
|
|
481
|
+
return null;
|
|
482
|
+
return (React.createElement("div", { onContextMenu: (event) => event.preventDefault() },
|
|
483
|
+
React.createElement(DeckGL, { id: id, viewState: viewStates, views: deckGLViews, layerFilter: layerFilter, layers: deckGLLayers,
|
|
484
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
485
|
+
// @ts-expect-error
|
|
486
|
+
userData: {
|
|
487
|
+
setEditedData: (updated_prop) => {
|
|
488
|
+
setSelectedWell(updated_prop["selectedWell"]);
|
|
489
|
+
if (Object.keys(updated_prop).includes("selectedWell")) {
|
|
490
|
+
if (shiftHeld) {
|
|
491
|
+
if (multipleWells.includes(updated_prop["selectedWell"])) {
|
|
492
|
+
const temp = multipleWells.filter((item) => item !==
|
|
493
|
+
updated_prop["selectedWell"]);
|
|
494
|
+
setMultipleWells(temp);
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
const temp = multipleWells.concat(updated_prop["selectedWell"]);
|
|
498
|
+
setMultipleWells(temp);
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
setMultipleWells([]);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
setEditedData === null || setEditedData === void 0 ? void 0 : setEditedData(updated_prop);
|
|
506
|
+
},
|
|
507
|
+
colorTables: colorTables,
|
|
508
|
+
}, getCursor: ({ isDragging }) => isDragging ? "grabbing" : "default", getTooltip: getTooltip, ref: deckRef, onViewStateChange: onViewStateChange, onHover: onHover, onClick: onClick, onLoad: onLoad, onAfterRender: onAfterRender }, children),
|
|
509
|
+
(scale === null || scale === void 0 ? void 0 : scale.visible) ? (React.createElement(DistanceScale, Object.assign({}, scale, { zoom: viewStates[firstViewStateId] === undefined
|
|
510
|
+
? -5
|
|
511
|
+
: viewStates[firstViewStateId].zoom, scaleUnit: coordinateUnit, style: (_e = scale.cssStyle) !== null && _e !== void 0 ? _e : {} }))) : null,
|
|
512
|
+
React.createElement(StatusIndicator, { layers: deckGLLayers, isLoaded: isLoaded }),
|
|
513
|
+
(coords === null || coords === void 0 ? void 0 : coords.visible) ? React.createElement(InfoCard, { pickInfos: hoverInfo }) : null,
|
|
514
|
+
errorText && (React.createElement("pre", { style: {
|
|
515
|
+
flex: "0, 0",
|
|
516
|
+
color: "rgb(255, 64, 64)",
|
|
517
|
+
backgroundColor: "rgb(255, 255, 192)",
|
|
518
|
+
} }, errorText))));
|
|
519
|
+
};
|
|
520
|
+
Map.defaultProps = {
|
|
521
|
+
coords: {
|
|
522
|
+
visible: true,
|
|
523
|
+
multiPicking: true,
|
|
524
|
+
pickDepth: 10,
|
|
525
|
+
},
|
|
526
|
+
scale: {
|
|
527
|
+
visible: true,
|
|
528
|
+
incrementValue: 100,
|
|
529
|
+
widthPerUnit: 100,
|
|
530
|
+
cssStyle: { top: 10, left: 10 },
|
|
531
|
+
},
|
|
532
|
+
toolbar: {
|
|
533
|
+
visible: false,
|
|
534
|
+
},
|
|
535
|
+
coordinateUnit: "m",
|
|
536
|
+
views: {
|
|
537
|
+
layout: [1, 1],
|
|
538
|
+
showLabel: false,
|
|
539
|
+
viewports: [{ id: "main-view", show3D: false, layerIds: [] }],
|
|
540
|
+
},
|
|
541
|
+
colorTables: colorTables,
|
|
542
|
+
checkDatafileSchema: false,
|
|
543
|
+
};
|
|
544
|
+
export default Map;
|
|
545
|
+
// ------------- Helper functions ---------- //
|
|
546
|
+
// Add the resources as an enum in the Json Configuration and then convert the spec to actual objects.
|
|
547
|
+
// See https://deck.gl/docs/api-reference/json/overview for more details.
|
|
548
|
+
export function jsonToObject(data, enums = undefined) {
|
|
549
|
+
if (!data)
|
|
550
|
+
return [];
|
|
551
|
+
const configuration = new JSONConfiguration(JSON_CONVERTER_CONFIG);
|
|
552
|
+
enums === null || enums === void 0 ? void 0 : enums.forEach((enumeration) => {
|
|
553
|
+
if (enumeration) {
|
|
554
|
+
configuration.merge({
|
|
555
|
+
enumerations: Object.assign({}, enumeration),
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
const jsonConverter = new JSONConverter({ configuration });
|
|
560
|
+
// remove empty data/layer object
|
|
561
|
+
const filtered_data = data.filter((value) => Object.keys(value).length !== 0);
|
|
562
|
+
return jsonConverter.convert(filtered_data);
|
|
563
|
+
}
|
|
564
|
+
// return viewstate with computed bounds to fit the data in viewport
|
|
565
|
+
function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, viewPortIndex, deck) {
|
|
566
|
+
var _a, _b, _c, _d, _e;
|
|
567
|
+
let bounds = [0, 0, 1, 1];
|
|
568
|
+
if (typeof bounds_accessor == "function") {
|
|
569
|
+
bounds = bounds_accessor();
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
bounds = bounds_accessor;
|
|
573
|
+
}
|
|
574
|
+
let w = bounds[2] - bounds[0]; // right - left
|
|
575
|
+
let h = bounds[3] - bounds[1]; // top - bottom
|
|
576
|
+
const z = centerOfData[2];
|
|
577
|
+
const fb = fitBounds({ width: w, height: h, bounds });
|
|
578
|
+
let fb_target = [fb.x, fb.y, z];
|
|
579
|
+
let fb_zoom = fb.zoom;
|
|
580
|
+
if (deck) {
|
|
581
|
+
// If there are margins/rulers in the viewport (axes2DLayer) we have to account for that.
|
|
582
|
+
// Camera target should be in the middle of viewport minus the rulers.
|
|
583
|
+
const w_bounds = w;
|
|
584
|
+
const h_bounds = h;
|
|
585
|
+
const ml = viewPortMargins.left;
|
|
586
|
+
const mr = viewPortMargins.right;
|
|
587
|
+
const mb = viewPortMargins.bottom;
|
|
588
|
+
const mt = viewPortMargins.top;
|
|
589
|
+
// Subtract margins.
|
|
590
|
+
const marginH = (ml > 0 ? ml : 0) + (mr > 0 ? mr : 0);
|
|
591
|
+
const marginV = (mb > 0 ? mb : 0) + (mt > 0 ? mt : 0);
|
|
592
|
+
w = deck.width - marginH; // width of the viewport minus margin.
|
|
593
|
+
h = deck.height - marginV;
|
|
594
|
+
// Special case if matrix views.
|
|
595
|
+
// Use width and heigt for a subview instead of full viewport.
|
|
596
|
+
if (typeof (views === null || views === void 0 ? void 0 : views.layout) !== "undefined") {
|
|
597
|
+
const [nY, nX] = views.layout;
|
|
598
|
+
const isMatrixViews = nX !== 1 || nY !== 1;
|
|
599
|
+
if (isMatrixViews) {
|
|
600
|
+
const mPixels = (_a = views === null || views === void 0 ? void 0 : views.marginPixels) !== null && _a !== void 0 ? _a : 0;
|
|
601
|
+
const w_ = 99.5 / nX; // Using 99.5% of viewport to avoid flickering of deckgl canvas
|
|
602
|
+
const h_ = 99.5 / nY;
|
|
603
|
+
const marginHorPercentage = 100 * 100 * (mPixels / (w_ * deck.width)); //percentage of sub view
|
|
604
|
+
const marginVerPercentage = 100 * 100 * (mPixels / (h_ * deck.height));
|
|
605
|
+
const sub_w = (w_ / 100) * deck.width;
|
|
606
|
+
const sub_h = (h_ / 100) * deck.height;
|
|
607
|
+
w = sub_w * (1 - 2 * (marginHorPercentage / 100)) - marginH;
|
|
608
|
+
h = sub_h * (1 - 2 * (marginVerPercentage / 100)) - marginV;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
const port_aspect = h / w;
|
|
612
|
+
const bounds_aspect = h_bounds / w_bounds;
|
|
613
|
+
const m_pr_pixel = bounds_aspect > port_aspect ? h_bounds / h : w_bounds / w;
|
|
614
|
+
let translate_x = 0;
|
|
615
|
+
if (ml > 0 && mr === 0) {
|
|
616
|
+
// left margin and no right margin
|
|
617
|
+
translate_x = 0.5 * ml * m_pr_pixel;
|
|
618
|
+
}
|
|
619
|
+
else if (ml === 0 && mr > 0) {
|
|
620
|
+
// no left margin but right margin
|
|
621
|
+
translate_x = -0.5 * mr * m_pr_pixel;
|
|
622
|
+
}
|
|
623
|
+
let translate_y = 0;
|
|
624
|
+
if (mb > 0 && mt === 0) {
|
|
625
|
+
translate_y = 0.5 * mb * m_pr_pixel;
|
|
626
|
+
}
|
|
627
|
+
else if (mb === 0 && mt > 0) {
|
|
628
|
+
translate_y = -0.5 * mt * m_pr_pixel;
|
|
629
|
+
}
|
|
630
|
+
const fb = fitBounds({ width: w, height: h, bounds });
|
|
631
|
+
fb_target = [fb.x - translate_x, fb.y - translate_y, z];
|
|
632
|
+
fb_zoom = fb.zoom;
|
|
633
|
+
}
|
|
634
|
+
const target = (_c = (_b = views === null || views === void 0 ? void 0 : views.viewports) === null || _b === void 0 ? void 0 : _b[viewPortIndex]) === null || _c === void 0 ? void 0 : _c.target;
|
|
635
|
+
const zoom = (_e = (_d = views === null || views === void 0 ? void 0 : views.viewports) === null || _d === void 0 ? void 0 : _d[viewPortIndex]) === null || _e === void 0 ? void 0 : _e.zoom;
|
|
636
|
+
const target_ = target !== null && target !== void 0 ? target : fb_target;
|
|
637
|
+
const zoom_ = zoom !== null && zoom !== void 0 ? zoom : fb_zoom;
|
|
638
|
+
const view_state = {
|
|
639
|
+
target: target_,
|
|
640
|
+
zoom: zoom_,
|
|
641
|
+
rotationX: 90,
|
|
642
|
+
rotationOrbit: 0,
|
|
643
|
+
};
|
|
644
|
+
return view_state;
|
|
645
|
+
}
|
|
646
|
+
///////////////////////////////////////////////////////////////////////////////////////////
|
|
647
|
+
// return viewstate with computed bounds to fit the data in viewport
|
|
648
|
+
function getViewState3D(is3D, bounds, zoom, deck) {
|
|
649
|
+
const xMin = bounds[0];
|
|
650
|
+
const yMin = bounds[1];
|
|
651
|
+
const zMin = bounds[2];
|
|
652
|
+
const xMax = bounds[3];
|
|
653
|
+
const yMax = bounds[4];
|
|
654
|
+
const zMax = bounds[5];
|
|
655
|
+
let width = xMax - xMin;
|
|
656
|
+
let height = yMax - yMin;
|
|
657
|
+
if (deck) {
|
|
658
|
+
width = deck.width;
|
|
659
|
+
height = deck.height;
|
|
660
|
+
}
|
|
661
|
+
const target = [
|
|
662
|
+
xMin + (xMax - xMin) / 2,
|
|
663
|
+
yMin + (yMax - yMin) / 2,
|
|
664
|
+
is3D ? zMin + (zMax - zMin) / 2 : 0,
|
|
665
|
+
];
|
|
666
|
+
const bounds2D = [xMin, yMin, xMax, yMax];
|
|
667
|
+
const fitted_bound = fitBounds({
|
|
668
|
+
width,
|
|
669
|
+
height,
|
|
670
|
+
bounds: bounds2D,
|
|
671
|
+
});
|
|
672
|
+
const view_state = {
|
|
673
|
+
target,
|
|
674
|
+
zoom: zoom !== null && zoom !== void 0 ? zoom : fitted_bound.zoom * 1.2,
|
|
675
|
+
rotationX: 45,
|
|
676
|
+
rotationOrbit: 0,
|
|
677
|
+
};
|
|
678
|
+
return view_state;
|
|
679
|
+
}
|
|
680
|
+
// construct views object for DeckGL component
|
|
681
|
+
function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
|
|
682
|
+
var _a;
|
|
683
|
+
// Use modified controller to handle key events.
|
|
684
|
+
class ZScaleOrbitController extends OrbitController {
|
|
685
|
+
handleEvent(event) {
|
|
686
|
+
if (event.type === "keydown" && event.key === "ArrowUp") {
|
|
687
|
+
scaleUpFunction();
|
|
688
|
+
return true;
|
|
689
|
+
}
|
|
690
|
+
else if (event.type === "keydown" && event.key === "ArrowDown") {
|
|
691
|
+
scaleDownFunction();
|
|
692
|
+
return true;
|
|
693
|
+
}
|
|
694
|
+
return super.handleEvent(event);
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
const deckgl_views = [];
|
|
698
|
+
const widthViewPort = deck === null || deck === void 0 ? void 0 : deck.width;
|
|
699
|
+
const heightViewPort = deck === null || deck === void 0 ? void 0 : deck.height;
|
|
700
|
+
const isDeckDefined = typeof widthViewPort !== "undefined" &&
|
|
701
|
+
typeof heightViewPort !== "undefined";
|
|
702
|
+
const mPixels = (_a = views === null || views === void 0 ? void 0 : views.marginPixels) !== null && _a !== void 0 ? _a : 0;
|
|
703
|
+
// if props for multiple viewport are not proper, return 2d view
|
|
704
|
+
if (!views || !views.viewports || !views.layout || !isDeckDefined) {
|
|
705
|
+
deckgl_views.push(new OrthographicView({
|
|
706
|
+
id: "main",
|
|
707
|
+
controller: { doubleClickZoom: false },
|
|
708
|
+
x: "0%",
|
|
709
|
+
y: "0%",
|
|
710
|
+
width: "100%",
|
|
711
|
+
height: "100%",
|
|
712
|
+
flipY: false,
|
|
713
|
+
far: +99999,
|
|
714
|
+
near: -99999,
|
|
715
|
+
}));
|
|
716
|
+
}
|
|
717
|
+
else {
|
|
718
|
+
let yPos = 0;
|
|
719
|
+
const [nY, nX] = views.layout;
|
|
720
|
+
const w = 99.5 / nX; // Using 99.5% of viewport to avoid flickering of deckgl canvas
|
|
721
|
+
const h = 99.5 / nY;
|
|
722
|
+
const singleView = nX === 1 && nY === 1;
|
|
723
|
+
const marginHorPercentage = singleView // percentage of sub view
|
|
724
|
+
? 0
|
|
725
|
+
: 100 * 100 * (mPixels / (w * widthViewPort));
|
|
726
|
+
const marginVerPercentage = singleView
|
|
727
|
+
? 0
|
|
728
|
+
: 100 * 100 * (mPixels / (h * heightViewPort));
|
|
729
|
+
for (let y = 1; y <= nY; y++) {
|
|
730
|
+
let xPos = 0;
|
|
731
|
+
for (let x = 1; x <= nX; x++) {
|
|
732
|
+
if (views.viewports == undefined ||
|
|
733
|
+
deckgl_views.length >= views.viewports.length) {
|
|
734
|
+
return deckgl_views;
|
|
735
|
+
}
|
|
736
|
+
const currentViewport = views.viewports[deckgl_views.length];
|
|
737
|
+
const ViewType = currentViewport.show3D
|
|
738
|
+
? OrbitView
|
|
739
|
+
: currentViewport.id === "intersection_view"
|
|
740
|
+
? IntersectionView
|
|
741
|
+
: OrthographicView;
|
|
742
|
+
const far = 9999;
|
|
743
|
+
const near = currentViewport.show3D ? 0.1 : -9999;
|
|
744
|
+
const Controller = currentViewport.show3D
|
|
745
|
+
? ZScaleOrbitController
|
|
746
|
+
: OrthographicController;
|
|
747
|
+
const controller = {
|
|
748
|
+
type: Controller,
|
|
749
|
+
doubleClickZoom: false,
|
|
750
|
+
};
|
|
751
|
+
deckgl_views.push(new ViewType({
|
|
752
|
+
id: currentViewport.id,
|
|
753
|
+
controller: controller,
|
|
754
|
+
x: xPos + marginHorPercentage / nX + "%",
|
|
755
|
+
y: yPos + marginVerPercentage / nY + "%",
|
|
756
|
+
width: w * (1 - 2 * (marginHorPercentage / 100)) + "%",
|
|
757
|
+
height: h * (1 - 2 * (marginVerPercentage / 100)) + "%",
|
|
758
|
+
flipY: false,
|
|
759
|
+
far,
|
|
760
|
+
near,
|
|
761
|
+
}));
|
|
762
|
+
xPos = xPos + w;
|
|
763
|
+
}
|
|
764
|
+
yPos = yPos + h;
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
return deckgl_views;
|
|
768
|
+
}
|
|
769
|
+
// construct views object for DeckGL component
|
|
770
|
+
function getViews(views) {
|
|
771
|
+
const deckgl_views = [];
|
|
772
|
+
// if props for multiple viewport are not proper, return 2d view
|
|
773
|
+
if (!views || !views.viewports || !views.layout) {
|
|
774
|
+
deckgl_views.push({
|
|
775
|
+
id: "main",
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
else {
|
|
779
|
+
const [nY, nX] = views.layout;
|
|
780
|
+
for (let y = 1; y <= nY; y++) {
|
|
781
|
+
for (let x = 1; x <= nX; x++) {
|
|
782
|
+
if (views.viewports == undefined ||
|
|
783
|
+
deckgl_views.length >= views.viewports.length)
|
|
784
|
+
return deckgl_views;
|
|
785
|
+
const cur_viewport = views.viewports[deckgl_views.length];
|
|
786
|
+
deckgl_views.push({
|
|
787
|
+
id: cur_viewport.id,
|
|
788
|
+
});
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
return deckgl_views;
|
|
793
|
+
}
|
|
794
|
+
function handleMouseEvent(type, infos, event) {
|
|
795
|
+
var _a;
|
|
796
|
+
const ev = {
|
|
797
|
+
type: type,
|
|
798
|
+
infos: infos,
|
|
799
|
+
};
|
|
800
|
+
if (ev.type === "click") {
|
|
801
|
+
if (event.rightButton)
|
|
802
|
+
ev.type = "contextmenu";
|
|
803
|
+
}
|
|
804
|
+
for (const info of infos) {
|
|
805
|
+
if (info.coordinate) {
|
|
806
|
+
ev.x = info.coordinate[0];
|
|
807
|
+
ev.y = info.coordinate[1];
|
|
808
|
+
}
|
|
809
|
+
if (info.layer && info.layer.id === "wells-layer") {
|
|
810
|
+
// info.object is Feature or WellLog;
|
|
811
|
+
{
|
|
812
|
+
// try to use Object info (see DeckGL getToolTip callback)
|
|
813
|
+
const feat = info.object;
|
|
814
|
+
const properties = feat === null || feat === void 0 ? void 0 : feat.properties;
|
|
815
|
+
if (properties) {
|
|
816
|
+
ev.wellname = properties["name"];
|
|
817
|
+
ev.wellcolor = properties["color"];
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
if (!ev.wellname)
|
|
821
|
+
if (info.object) {
|
|
822
|
+
ev.wellname = (_a = info.object.header) === null || _a === void 0 ? void 0 : _a["well"]; // object is WellLog
|
|
823
|
+
}
|
|
824
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
825
|
+
if (info.properties) {
|
|
826
|
+
for (const property of info.properties) {
|
|
827
|
+
if (!ev.wellcolor)
|
|
828
|
+
ev.wellcolor = property.color;
|
|
829
|
+
let propname = property.name;
|
|
830
|
+
if (propname) {
|
|
831
|
+
const sep = propname.indexOf(" ");
|
|
832
|
+
if (sep >= 0) {
|
|
833
|
+
if (!ev.wellname) {
|
|
834
|
+
ev.wellname = propname.substring(sep + 1);
|
|
835
|
+
}
|
|
836
|
+
propname = propname.substring(0, sep);
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
const names_md = [
|
|
840
|
+
"DEPTH",
|
|
841
|
+
"DEPT",
|
|
842
|
+
"MD" /*Measured Depth*/,
|
|
843
|
+
"TDEP" /*"Tool DEPth"*/,
|
|
844
|
+
"MD_RKB" /*Rotary Relly Bushing*/,
|
|
845
|
+
]; // aliases for MD
|
|
846
|
+
const names_tvd = [
|
|
847
|
+
"TVD" /*True Vertical Depth*/,
|
|
848
|
+
"TVDSS" /*SubSea*/,
|
|
849
|
+
"DVER" /*"VERtical Depth"*/,
|
|
850
|
+
"TVD_MSL" /*below Mean Sea Level*/,
|
|
851
|
+
]; // aliases for MD
|
|
852
|
+
if (names_md.find((name) => name == propname))
|
|
853
|
+
ev.md = parseFloat(property.value);
|
|
854
|
+
else if (names_tvd.find((name) => name == propname))
|
|
855
|
+
ev.tvd = parseFloat(property.value);
|
|
856
|
+
if (ev.md !== undefined &&
|
|
857
|
+
ev.tvd !== undefined &&
|
|
858
|
+
ev.wellname !== undefined)
|
|
859
|
+
break;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
break;
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
return ev;
|
|
866
|
+
}
|
|
867
|
+
//# sourceMappingURL=Map.js.map
|