@webviz/subsurface-viewer 0.0.2-alpha.3 → 0.0.2-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SubsurfaceViewer.d.ts +4 -0
- package/dist/SubsurfaceViewer.js +2 -6
- package/dist/SubsurfaceViewer.js.map +1 -1
- package/dist/components/ColorLegend.d.ts +1 -1
- package/dist/components/ColorLegends.d.ts +1 -1
- package/dist/components/InfoCard.js.map +1 -1
- package/dist/components/Map.d.ts +25 -19
- package/dist/components/Map.js +166 -248
- package/dist/components/Map.js.map +1 -1
- package/dist/inputSchema/WellLogTemplate.json +0 -5
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +5 -6
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js +2 -5
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -1
- package/dist/layers/axes/axesLayer.d.ts +2 -2
- package/dist/layers/axes/axesLayer.js.map +1 -1
- package/dist/layers/axes/boxLayer.d.ts +2 -2
- package/dist/layers/axes/boxLayer.js.map +1 -1
- package/dist/layers/axes2d/axes2DLayer.d.ts +2 -2
- package/dist/layers/axes2d/axes2DLayer.js +53 -21
- package/dist/layers/axes2d/axes2DLayer.js.map +1 -1
- package/dist/layers/drawing/drawingLayer.d.ts +2 -2
- package/dist/layers/drawing/drawingLayer.js +1 -2
- package/dist/layers/drawing/drawingLayer.js.map +1 -1
- package/dist/layers/grid3d/grid3dLayer.d.ts +5 -4
- package/dist/layers/grid3d/grid3dLayer.js +14 -1
- package/dist/layers/grid3d/grid3dLayer.js.map +1 -1
- package/dist/layers/grid3d/privateLayer.d.ts +2 -2
- package/dist/layers/grid3d/privateLayer.js +6 -3
- package/dist/layers/grid3d/privateLayer.js.map +1 -1
- package/dist/layers/map/mapLayer.d.ts +3 -2
- package/dist/layers/map/mapLayer.js +16 -5
- package/dist/layers/map/mapLayer.js.map +1 -1
- package/dist/layers/map/privateMapLayer.d.ts +2 -2
- package/dist/layers/map/privateMapLayer.js +2 -0
- package/dist/layers/map/privateMapLayer.js.map +1 -1
- package/dist/layers/northarrow/northArrow3DLayer.d.ts +2 -2
- package/dist/layers/northarrow/northArrow3DLayer.js.map +1 -1
- package/dist/layers/piechart/pieChartLayer.d.ts +1 -1
- package/dist/layers/points/pointsLayer.d.ts +2 -2
- package/dist/layers/points/pointsLayer.js.map +1 -1
- package/dist/layers/polylines/polylinesLayer.d.ts +2 -2
- package/dist/layers/polylines/polylinesLayer.js.map +1 -1
- package/dist/layers/terrain/map3DLayer.d.ts +4 -4
- package/dist/layers/terrain/map3DLayer.js.map +1 -1
- package/dist/layers/terrain/terrainMapLayer.js +6 -3
- package/dist/layers/terrain/terrainMapLayer.js.map +1 -1
- package/dist/layers/triangle/privateTriangleLayer.d.ts +2 -2
- package/dist/layers/triangle/privateTriangleLayer.js.map +1 -1
- package/dist/layers/triangle/triangleLayer.d.ts +3 -2
- package/dist/layers/triangle/triangleLayer.js +14 -1
- package/dist/layers/triangle/triangleLayer.js.map +1 -1
- package/dist/layers/utils/layerTools.d.ts +2 -2
- package/dist/layers/wells/wellsLayer.d.ts +3 -3
- package/dist/layers/wells/wellsLayer.js.map +1 -1
- package/dist/utils/fit-bounds.d.ts +0 -1
- package/dist/utils/fit-bounds.js +0 -3
- package/dist/utils/fit-bounds.js.map +1 -1
- package/dist/utils/specExtractor.d.ts +1 -1
- package/dist/utils/specExtractor.js.map +1 -1
- package/package.json +49 -36
- package/dist/assets/glTF/north_arrow/scene.bin +0 -0
- package/dist/assets/glTF/north_arrow/scene.gltf +0 -315
- package/dist/inputSchema/wellCompletions.json +0 -108
- package/dist/package.json +0 -38
- package/dist/storybook/SubsurfaceViewer.stories.d.ts +0 -455
- package/dist/storybook/SubsurfaceViewer.stories.js +0 -537
- package/dist/storybook/SubsurfaceViewer.stories.js.map +0 -1
- package/dist/storybook/components/InfoCard.stories.d.ts +0 -48
- package/dist/storybook/components/InfoCard.stories.js +0 -36
- package/dist/storybook/components/InfoCard.stories.js.map +0 -1
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.d.ts +0 -31
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js +0 -30
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js.map +0 -1
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.d.ts +0 -31
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js +0 -30
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js.map +0 -1
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.d.ts +0 -20
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js +0 -66
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js.map +0 -1
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.d.ts +0 -65
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js +0 -94
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js.map +0 -1
- package/dist/storybook/components/settings/LayerSettingsButton.stories.d.ts +0 -34
- package/dist/storybook/components/settings/LayerSettingsButton.stories.js +0 -31
- package/dist/storybook/components/settings/LayerSettingsButton.stories.js.map +0 -1
- package/dist/storybook/components/settings/NumericInput.stories.d.ts +0 -14
- package/dist/storybook/components/settings/NumericInput.stories.js +0 -15
- package/dist/storybook/components/settings/NumericInput.stories.js.map +0 -1
- package/dist/storybook/components/settings/ToggleButton.stories.d.ts +0 -13
- package/dist/storybook/components/settings/ToggleButton.stories.js +0 -14
- package/dist/storybook/components/settings/ToggleButton.stories.js.map +0 -1
- package/dist/storybook/schemaValidation/schemaValidation.stories.d.ts +0 -31
- package/dist/storybook/schemaValidation/schemaValidation.stories.js +0 -42
- package/dist/storybook/schemaValidation/schemaValidation.stories.js.map +0 -1
package/dist/components/Map.js
CHANGED
|
@@ -17,6 +17,43 @@ import { colorTables } from "@emerson-eps/color-tables";
|
|
|
17
17
|
import { getModelMatrixScale } from "../layers/utils/layerTools";
|
|
18
18
|
import { OrbitController, OrthographicController } from "@deck.gl/core/typed";
|
|
19
19
|
import IntersectionView from "../views/intersectionView";
|
|
20
|
+
const minZoom3D = -12;
|
|
21
|
+
const maxZoom3D = 12;
|
|
22
|
+
const minZoom2D = -12;
|
|
23
|
+
const maxZoom2D = 4;
|
|
24
|
+
class ZScaleOrbitController extends OrbitController {
|
|
25
|
+
static setZScaleUpReference(setZScaleUp) {
|
|
26
|
+
ZScaleOrbitController.setZScaleUp = setZScaleUp;
|
|
27
|
+
}
|
|
28
|
+
static setZScaleDownReference(setZScaleDown) {
|
|
29
|
+
ZScaleOrbitController.setZScaleDown = setZScaleDown;
|
|
30
|
+
}
|
|
31
|
+
handleEvent(event) {
|
|
32
|
+
if (ZScaleOrbitController.setZScaleUp === null) {
|
|
33
|
+
return super.handleEvent(event);
|
|
34
|
+
}
|
|
35
|
+
if (ZScaleOrbitController.setZScaleUp &&
|
|
36
|
+
event.type === "keydown" &&
|
|
37
|
+
event.key === "ArrowUp") {
|
|
38
|
+
ZScaleOrbitController.setZScaleUp(Math.random());
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
else if (ZScaleOrbitController.setZScaleDown &&
|
|
42
|
+
event.type === "keydown" &&
|
|
43
|
+
event.key === "ArrowDown") {
|
|
44
|
+
ZScaleOrbitController.setZScaleDown(Math.random());
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return super.handleEvent(event);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
ZScaleOrbitController.setZScaleUp = null;
|
|
51
|
+
ZScaleOrbitController.setZScaleDown = null;
|
|
52
|
+
class ZScaleOrbitView extends OrbitView {
|
|
53
|
+
get ControllerType() {
|
|
54
|
+
return ZScaleOrbitController;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
20
57
|
function addBoundingBoxes(b1, b2) {
|
|
21
58
|
const boxDefault = [0, 0, 0, 1, 1, 1];
|
|
22
59
|
if (typeof b1 === "undefined" || typeof b2 === "undefined") {
|
|
@@ -75,15 +112,16 @@ function adjustCameraTarget(viewStates, scale, newScale) {
|
|
|
75
112
|
}
|
|
76
113
|
return vs;
|
|
77
114
|
}
|
|
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;
|
|
115
|
+
const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTables, setEditedData, checkDatafileSchema, onMouseEvent, selection, children, getTooltip = defaultTooltip, cameraPosition, getCameraPosition, isLoadedCallback, triggerHome, triggerResetMultipleWells, }) => {
|
|
116
|
+
var _a, _b, _c, _d, _e, _f;
|
|
82
117
|
const deckRef = useRef(null);
|
|
83
118
|
const bboxInitial = [0, 0, 0, 1, 1, 1];
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const [
|
|
119
|
+
// Deck.gl View's and viewStates as input to Deck.gl
|
|
120
|
+
const [deckGLViews, setDeckGLViews] = useState([]);
|
|
121
|
+
const [viewStates, setViewStates] = useState({});
|
|
122
|
+
const [reportedBoundingBox, setReportedBoundingBox] = useState(bboxInitial);
|
|
123
|
+
const [reportedBoundingBoxAcc, setReportedBoundingBoxAcc] = useState(bboxInitial);
|
|
124
|
+
const [deckGLLayers, setDeckGLLayers] = useState([]);
|
|
87
125
|
const [alteredLayers, setAlteredLayers] = useState([]);
|
|
88
126
|
const [viewPortMargins, setViewPortMargins] = useState({
|
|
89
127
|
left: 0,
|
|
@@ -91,184 +129,65 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
91
129
|
top: 0,
|
|
92
130
|
bottom: 0,
|
|
93
131
|
});
|
|
94
|
-
|
|
95
|
-
const [
|
|
96
|
-
const [
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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");
|
|
132
|
+
// Used for scaling in z direction using arrow keys.
|
|
133
|
+
const [scaleZ, setScaleZ] = useState(1);
|
|
134
|
+
const [scaleZUp, setScaleZUp] = useState(Number.MAX_VALUE);
|
|
135
|
+
const [scaleZDown, setScaleZDown] = useState(Number.MAX_VALUE);
|
|
136
|
+
React.useEffect(() => {
|
|
137
|
+
ZScaleOrbitController.setZScaleUpReference(setScaleZUp);
|
|
138
|
+
}, [setScaleZUp]);
|
|
139
|
+
React.useEffect(() => {
|
|
140
|
+
ZScaleOrbitController.setZScaleDownReference(setScaleZDown);
|
|
141
|
+
}, [setScaleZDown]);
|
|
142
|
+
// Calculate a set of Deck.gl View's and viewStates as input to Deck.gl
|
|
123
143
|
useEffect(() => {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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
|
|
144
|
+
var _a;
|
|
145
|
+
const [Views, viewStates] = createViewsAndViewStates(views, viewPortMargins, bounds, cameraPosition, reportedBoundingBoxAcc, (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck);
|
|
146
|
+
setDeckGLViews(Views);
|
|
147
|
+
setViewStates(viewStates);
|
|
146
148
|
}, [
|
|
147
|
-
|
|
149
|
+
bounds,
|
|
148
150
|
cameraPosition,
|
|
149
|
-
isCameraPositionDefined,
|
|
150
|
-
viewPortMargins,
|
|
151
151
|
views === null || views === void 0 ? void 0 : views.viewports,
|
|
152
|
-
|
|
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,
|
|
152
|
+
(_a = deckRef === null || deckRef === void 0 ? void 0 : deckRef.current) === null || _a === void 0 ? void 0 : _a.deck,
|
|
153
|
+
reportedBoundingBox,
|
|
179
154
|
reportedBoundingBoxAcc,
|
|
180
155
|
views,
|
|
156
|
+
viewPortMargins,
|
|
157
|
+
triggerHome,
|
|
181
158
|
]);
|
|
182
159
|
useEffect(() => {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
}
|
|
186
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
187
|
-
}, [triggerHome]);
|
|
160
|
+
setDeckGLLayers(alteredLayers);
|
|
161
|
+
}, [alteredLayers]);
|
|
188
162
|
useEffect(() => {
|
|
189
163
|
const union_of_reported_bboxes = addBoundingBoxes(reportedBoundingBoxAcc, reportedBoundingBox);
|
|
190
164
|
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
165
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
197
166
|
}, [reportedBoundingBox]);
|
|
198
|
-
// react on bounds prop change
|
|
199
167
|
useEffect(() => {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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);
|
|
168
|
+
if (scaleZUp !== Number.MAX_VALUE) {
|
|
169
|
+
const newScaleZ = scaleZ * 1.05;
|
|
170
|
+
setScaleZ(newScaleZ);
|
|
171
|
+
// Make camera target follow the scaling.
|
|
172
|
+
const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
|
|
173
|
+
setViewStates(vs);
|
|
216
174
|
}
|
|
217
175
|
// 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
176
|
}, [scaleZUp]);
|
|
253
177
|
useEffect(() => {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
}, [scaleZDown]);
|
|
261
|
-
useEffect(() => {
|
|
262
|
-
const viewProps = getViews(views);
|
|
263
|
-
setViewsProps(viewProps);
|
|
264
|
-
if (!bounds) {
|
|
265
|
-
calcDefaultViewStates(reportedBoundingBoxAcc);
|
|
178
|
+
if (scaleZUp !== Number.MAX_VALUE) {
|
|
179
|
+
const newScaleZ = scaleZ * 0.95;
|
|
180
|
+
setScaleZ(newScaleZ);
|
|
181
|
+
// Make camera target follow the scaling.
|
|
182
|
+
const vs = adjustCameraTarget(viewStates, scaleZ, newScaleZ);
|
|
183
|
+
setViewStates(vs);
|
|
266
184
|
}
|
|
267
185
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
268
|
-
}, [
|
|
186
|
+
}, [scaleZDown]);
|
|
269
187
|
useEffect(() => {
|
|
270
|
-
if (layers
|
|
188
|
+
if (typeof layers === "undefined") {
|
|
271
189
|
return;
|
|
190
|
+
}
|
|
272
191
|
// Margins on the viewport are extracted from a potenial axes2D layer.
|
|
273
192
|
const axes2DLayer = layers === null || layers === void 0 ? void 0 : layers.find((e) => {
|
|
274
193
|
return (e === null || e === void 0 ? void 0 : e.constructor) === Axes2DLayer;
|
|
@@ -286,26 +205,37 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
286
205
|
? axes2DLayer.props.marginV
|
|
287
206
|
: 0;
|
|
288
207
|
setViewPortMargins({ left, right, top, bottom });
|
|
289
|
-
const m = getModelMatrixScale(scaleZ);
|
|
290
208
|
const layers_copy = layers.map((item) => {
|
|
291
|
-
if ((item === null || item === void 0 ? void 0 : item.constructor.name) === NorthArrow3DLayer.name)
|
|
209
|
+
if ((item === null || item === void 0 ? void 0 : item.constructor.name) === NorthArrow3DLayer.name) {
|
|
292
210
|
return item;
|
|
293
|
-
|
|
294
|
-
// Set "modelLayer" matrix to reflect correct z scaling.
|
|
295
|
-
const scaledLayer = layer.clone({ modelMatrix: m });
|
|
211
|
+
}
|
|
296
212
|
// Inject "setReportedBoundingBox" function into layer for it to report
|
|
297
213
|
// back its respective bounding box.
|
|
298
|
-
|
|
214
|
+
return item.clone({
|
|
215
|
+
// eslint-disable-next-line
|
|
216
|
+
// @ts-ignore
|
|
299
217
|
setReportedBoundingBox: setReportedBoundingBox,
|
|
300
218
|
});
|
|
301
|
-
return boundedLayer !== null && boundedLayer !== void 0 ? boundedLayer : scaledLayer;
|
|
302
219
|
});
|
|
303
220
|
setAlteredLayers(layers_copy);
|
|
304
|
-
}, [
|
|
305
|
-
const [deckGLLayers, setDeckGLLayers] = useState([]);
|
|
221
|
+
}, [layers]);
|
|
306
222
|
useEffect(() => {
|
|
307
|
-
|
|
308
|
-
|
|
223
|
+
if (typeof layers === "undefined") {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const m = getModelMatrixScale(scaleZ);
|
|
227
|
+
const layers_copy = deckGLLayers.map((item) => {
|
|
228
|
+
if ((item === null || item === void 0 ? void 0 : item.constructor.name) === NorthArrow3DLayer.name) {
|
|
229
|
+
return item;
|
|
230
|
+
}
|
|
231
|
+
// Set "modelLayer" matrix to reflect correct z scaling.
|
|
232
|
+
return item.clone({
|
|
233
|
+
modelMatrix: m,
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
setDeckGLLayers(layers_copy);
|
|
237
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
238
|
+
}, [scaleZ]);
|
|
309
239
|
useEffect(() => {
|
|
310
240
|
var _a, _b, _c;
|
|
311
241
|
const layers = (_b = (_a = deckRef.current) === null || _a === void 0 ? void 0 : _a.deck) === null || _b === void 0 ? void 0 : _b.props.layers;
|
|
@@ -407,10 +337,15 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
407
337
|
const [isLoaded, setIsLoaded] = useState(false);
|
|
408
338
|
const onAfterRender = useCallback(() => {
|
|
409
339
|
if (deckGLLayers) {
|
|
410
|
-
const state = deckGLLayers.every((layer) =>
|
|
340
|
+
const state = deckGLLayers.every((layer) => {
|
|
341
|
+
return layer.isLoaded;
|
|
342
|
+
});
|
|
411
343
|
setIsLoaded(state);
|
|
344
|
+
if (typeof isLoadedCallback !== "undefined") {
|
|
345
|
+
isLoadedCallback(state);
|
|
346
|
+
}
|
|
412
347
|
}
|
|
413
|
-
}, [deckGLLayers]);
|
|
348
|
+
}, [deckGLLayers, isLoadedCallback]);
|
|
414
349
|
// validate layers data
|
|
415
350
|
const [errorText, setErrorText] = useState();
|
|
416
351
|
useEffect(() => {
|
|
@@ -453,7 +388,6 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
453
388
|
const onViewStateChange = useCallback(
|
|
454
389
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
455
390
|
({ viewId, viewState }) => {
|
|
456
|
-
var _a;
|
|
457
391
|
const viewports = (views === null || views === void 0 ? void 0 : views.viewports) || [];
|
|
458
392
|
const isSyncIds = viewports
|
|
459
393
|
.filter((item) => item.isSync)
|
|
@@ -469,14 +403,7 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
469
403
|
if (getCameraPosition) {
|
|
470
404
|
getCameraPosition(viewState);
|
|
471
405
|
}
|
|
472
|
-
|
|
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]);
|
|
406
|
+
}, [getCameraPosition, views === null || views === void 0 ? void 0 : views.viewports]);
|
|
480
407
|
if (!deckGLViews || isEmpty(deckGLViews) || isEmpty(deckGLLayers))
|
|
481
408
|
return null;
|
|
482
409
|
return (React.createElement("div", { onContextMenu: (event) => event.preventDefault() },
|
|
@@ -505,10 +432,8 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
505
432
|
setEditedData === null || setEditedData === void 0 ? void 0 : setEditedData(updated_prop);
|
|
506
433
|
},
|
|
507
434
|
colorTables: colorTables,
|
|
508
|
-
}, getCursor: ({ isDragging }) => isDragging ? "grabbing" : "default", getTooltip: getTooltip, ref: deckRef, onViewStateChange: onViewStateChange, onHover: onHover, onClick: onClick,
|
|
509
|
-
(scale === null || scale === void 0 ? void 0 : scale.visible) ? (React.createElement(DistanceScale, Object.assign({}, scale, { zoom: viewStates[
|
|
510
|
-
? -5
|
|
511
|
-
: viewStates[firstViewStateId].zoom, scaleUnit: coordinateUnit, style: (_e = scale.cssStyle) !== null && _e !== void 0 ? _e : {} }))) : null,
|
|
435
|
+
}, getCursor: ({ isDragging }) => isDragging ? "grabbing" : "default", getTooltip: getTooltip, ref: deckRef, onViewStateChange: onViewStateChange, onHover: onHover, onClick: onClick, onAfterRender: onAfterRender }, children),
|
|
436
|
+
(scale === null || scale === void 0 ? void 0 : scale.visible) ? (React.createElement(DistanceScale, Object.assign({}, scale, { zoom: (_e = (_d = viewStates[Object.keys(viewStates)[0]]) === null || _d === void 0 ? void 0 : _d.zoom) !== null && _e !== void 0 ? _e : -5, scaleUnit: coordinateUnit, style: (_f = scale.cssStyle) !== null && _f !== void 0 ? _f : {} }))) : null,
|
|
512
437
|
React.createElement(StatusIndicator, { layers: deckGLLayers, isLoaded: isLoaded }),
|
|
513
438
|
(coords === null || coords === void 0 ? void 0 : coords.visible) ? React.createElement(InfoCard, { pickInfos: hoverInfo }) : null,
|
|
514
439
|
errorText && (React.createElement("pre", { style: {
|
|
@@ -562,8 +487,8 @@ export function jsonToObject(data, enums = undefined) {
|
|
|
562
487
|
return jsonConverter.convert(filtered_data);
|
|
563
488
|
}
|
|
564
489
|
// return viewstate with computed bounds to fit the data in viewport
|
|
565
|
-
function getViewState(viewPortMargins, bounds_accessor, centerOfData, views,
|
|
566
|
-
var _a
|
|
490
|
+
function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, viewPort, deck) {
|
|
491
|
+
var _a;
|
|
567
492
|
let bounds = [0, 0, 1, 1];
|
|
568
493
|
if (typeof bounds_accessor == "function") {
|
|
569
494
|
bounds = bounds_accessor();
|
|
@@ -631,15 +556,19 @@ function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, vie
|
|
|
631
556
|
fb_target = [fb.x - translate_x, fb.y - translate_y, z];
|
|
632
557
|
fb_zoom = fb.zoom;
|
|
633
558
|
}
|
|
634
|
-
const target =
|
|
635
|
-
const zoom =
|
|
559
|
+
const target = viewPort.target;
|
|
560
|
+
const zoom = viewPort.zoom;
|
|
636
561
|
const target_ = target !== null && target !== void 0 ? target : fb_target;
|
|
637
562
|
const zoom_ = zoom !== null && zoom !== void 0 ? zoom : fb_zoom;
|
|
563
|
+
const minZoom = minZoom3D;
|
|
564
|
+
const maxZoom = viewPort.show3D ? maxZoom3D : maxZoom2D;
|
|
638
565
|
const view_state = {
|
|
639
566
|
target: target_,
|
|
640
567
|
zoom: zoom_,
|
|
641
568
|
rotationX: 90,
|
|
642
569
|
rotationOrbit: 0,
|
|
570
|
+
minZoom,
|
|
571
|
+
maxZoom,
|
|
643
572
|
};
|
|
644
573
|
return view_state;
|
|
645
574
|
}
|
|
@@ -674,34 +603,28 @@ function getViewState3D(is3D, bounds, zoom, deck) {
|
|
|
674
603
|
zoom: zoom !== null && zoom !== void 0 ? zoom : fitted_bound.zoom * 1.2,
|
|
675
604
|
rotationX: 45,
|
|
676
605
|
rotationOrbit: 0,
|
|
606
|
+
minZoom: minZoom3D,
|
|
607
|
+
maxZoom: maxZoom3D,
|
|
677
608
|
};
|
|
678
609
|
return view_state;
|
|
679
610
|
}
|
|
680
|
-
// construct views
|
|
681
|
-
function
|
|
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
|
-
}
|
|
611
|
+
// construct views and viewStates for DeckGL component
|
|
612
|
+
function createViewsAndViewStates(views, viewPortMargins, bounds, cameraPosition, boundingBox, deck) {
|
|
613
|
+
var _a, _b, _c, _d;
|
|
697
614
|
const deckgl_views = [];
|
|
698
|
-
|
|
699
|
-
const
|
|
700
|
-
const
|
|
701
|
-
|
|
702
|
-
const mPixels = (
|
|
615
|
+
let viewStates = {};
|
|
616
|
+
const centerOfData = boundingBoxCenter(boundingBox);
|
|
617
|
+
const widthViewPort = (_a = deck === null || deck === void 0 ? void 0 : deck.width) !== null && _a !== void 0 ? _a : 1;
|
|
618
|
+
const heightViewPort = (_b = deck === null || deck === void 0 ? void 0 : deck.height) !== null && _b !== void 0 ? _b : 1;
|
|
619
|
+
const mPixels = (_c = views === null || views === void 0 ? void 0 : views.marginPixels) !== null && _c !== void 0 ? _c : 0;
|
|
620
|
+
const isOk = deck &&
|
|
621
|
+
views &&
|
|
622
|
+
views.layout[0] >= 1 &&
|
|
623
|
+
views.layout[1] >= 1 &&
|
|
624
|
+
views.layout[0] * views.layout[1] <= views.viewports.length;
|
|
703
625
|
// if props for multiple viewport are not proper, return 2d view
|
|
704
|
-
if (!
|
|
626
|
+
if (!isOk) {
|
|
627
|
+
console.warn("Properties for multiple viewports are not properly defined.");
|
|
705
628
|
deckgl_views.push(new OrthographicView({
|
|
706
629
|
id: "main",
|
|
707
630
|
controller: { doubleClickZoom: false },
|
|
@@ -713,6 +636,14 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
|
|
|
713
636
|
far: +99999,
|
|
714
637
|
near: -99999,
|
|
715
638
|
}));
|
|
639
|
+
viewStates = Object.assign(Object.assign({}, viewStates), { ["dummy"]: {
|
|
640
|
+
target: [0, 0],
|
|
641
|
+
zoom: 0,
|
|
642
|
+
rotationX: 0,
|
|
643
|
+
rotationOrbit: 0,
|
|
644
|
+
minZoom: minZoom2D,
|
|
645
|
+
maxZoom: maxZoom2D,
|
|
646
|
+
} });
|
|
716
647
|
}
|
|
717
648
|
else {
|
|
718
649
|
let yPos = 0;
|
|
@@ -731,14 +662,16 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
|
|
|
731
662
|
for (let x = 1; x <= nX; x++) {
|
|
732
663
|
if (views.viewports == undefined ||
|
|
733
664
|
deckgl_views.length >= views.viewports.length) {
|
|
734
|
-
return deckgl_views;
|
|
665
|
+
return [deckgl_views, viewStates];
|
|
735
666
|
}
|
|
736
667
|
const currentViewport = views.viewports[deckgl_views.length];
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
668
|
+
let ViewType = ZScaleOrbitView;
|
|
669
|
+
if (!currentViewport.show3D) {
|
|
670
|
+
ViewType =
|
|
671
|
+
currentViewport.id === "intersection_view"
|
|
672
|
+
? IntersectionView
|
|
673
|
+
: OrthographicView;
|
|
674
|
+
}
|
|
742
675
|
const far = 9999;
|
|
743
676
|
const near = currentViewport.show3D ? 0.1 : -9999;
|
|
744
677
|
const Controller = currentViewport.show3D
|
|
@@ -759,37 +692,22 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
|
|
|
759
692
|
far,
|
|
760
693
|
near,
|
|
761
694
|
}));
|
|
695
|
+
const isBoundsDefined = typeof bounds !== "undefined";
|
|
696
|
+
const isCameraPositionDefined = typeof cameraPosition !== "undefined" &&
|
|
697
|
+
Object.keys(cameraPosition).length !== 0;
|
|
698
|
+
let viewState = cameraPosition;
|
|
699
|
+
if (!isCameraPositionDefined) {
|
|
700
|
+
viewState = isBoundsDefined
|
|
701
|
+
? getViewState(viewPortMargins, bounds !== null && bounds !== void 0 ? bounds : [0, 0, 1, 1], centerOfData, views, currentViewport, deck)
|
|
702
|
+
: getViewState3D((_d = currentViewport.show3D) !== null && _d !== void 0 ? _d : false, boundingBox, currentViewport.zoom, deck);
|
|
703
|
+
}
|
|
704
|
+
viewStates = Object.assign(Object.assign({}, viewStates), { [currentViewport.id]: viewState });
|
|
762
705
|
xPos = xPos + w;
|
|
763
706
|
}
|
|
764
707
|
yPos = yPos + h;
|
|
765
708
|
}
|
|
766
709
|
}
|
|
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;
|
|
710
|
+
return [deckgl_views, viewStates];
|
|
793
711
|
}
|
|
794
712
|
function handleMouseEvent(type, infos, event) {
|
|
795
713
|
var _a;
|