@webviz/subsurface-viewer 0.0.2-alpha.3 → 0.0.2-alpha.4
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.js +0 -4
- 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 +21 -19
- package/dist/components/Map.js +158 -245
- package/dist/components/Map.js.map +1 -1
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +2 -3
- 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.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 +4 -4
- 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 +2 -2
- 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 +2 -2
- 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/package.json +2 -2
- 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 +3 -3
- 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") {
|
|
@@ -76,14 +113,15 @@ function adjustCameraTarget(viewStates, scale, newScale) {
|
|
|
76
113
|
return vs;
|
|
77
114
|
}
|
|
78
115
|
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;
|
|
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;
|
|
@@ -453,7 +383,6 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
453
383
|
const onViewStateChange = useCallback(
|
|
454
384
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
455
385
|
({ viewId, viewState }) => {
|
|
456
|
-
var _a;
|
|
457
386
|
const viewports = (views === null || views === void 0 ? void 0 : views.viewports) || [];
|
|
458
387
|
const isSyncIds = viewports
|
|
459
388
|
.filter((item) => item.isSync)
|
|
@@ -469,14 +398,7 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
469
398
|
if (getCameraPosition) {
|
|
470
399
|
getCameraPosition(viewState);
|
|
471
400
|
}
|
|
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]);
|
|
401
|
+
}, [getCameraPosition, views === null || views === void 0 ? void 0 : views.viewports]);
|
|
480
402
|
if (!deckGLViews || isEmpty(deckGLViews) || isEmpty(deckGLLayers))
|
|
481
403
|
return null;
|
|
482
404
|
return (React.createElement("div", { onContextMenu: (event) => event.preventDefault() },
|
|
@@ -505,10 +427,8 @@ const Map = ({ id, layers, bounds, views, coords, scale, coordinateUnit, colorTa
|
|
|
505
427
|
setEditedData === null || setEditedData === void 0 ? void 0 : setEditedData(updated_prop);
|
|
506
428
|
},
|
|
507
429
|
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,
|
|
430
|
+
}, getCursor: ({ isDragging }) => isDragging ? "grabbing" : "default", getTooltip: getTooltip, ref: deckRef, onViewStateChange: onViewStateChange, onHover: onHover, onClick: onClick, onAfterRender: onAfterRender }, children),
|
|
431
|
+
(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
432
|
React.createElement(StatusIndicator, { layers: deckGLLayers, isLoaded: isLoaded }),
|
|
513
433
|
(coords === null || coords === void 0 ? void 0 : coords.visible) ? React.createElement(InfoCard, { pickInfos: hoverInfo }) : null,
|
|
514
434
|
errorText && (React.createElement("pre", { style: {
|
|
@@ -562,8 +482,8 @@ export function jsonToObject(data, enums = undefined) {
|
|
|
562
482
|
return jsonConverter.convert(filtered_data);
|
|
563
483
|
}
|
|
564
484
|
// return viewstate with computed bounds to fit the data in viewport
|
|
565
|
-
function getViewState(viewPortMargins, bounds_accessor, centerOfData, views,
|
|
566
|
-
var _a
|
|
485
|
+
function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, viewPort, deck) {
|
|
486
|
+
var _a;
|
|
567
487
|
let bounds = [0, 0, 1, 1];
|
|
568
488
|
if (typeof bounds_accessor == "function") {
|
|
569
489
|
bounds = bounds_accessor();
|
|
@@ -631,15 +551,19 @@ function getViewState(viewPortMargins, bounds_accessor, centerOfData, views, vie
|
|
|
631
551
|
fb_target = [fb.x - translate_x, fb.y - translate_y, z];
|
|
632
552
|
fb_zoom = fb.zoom;
|
|
633
553
|
}
|
|
634
|
-
const target =
|
|
635
|
-
const zoom =
|
|
554
|
+
const target = viewPort.target;
|
|
555
|
+
const zoom = viewPort.zoom;
|
|
636
556
|
const target_ = target !== null && target !== void 0 ? target : fb_target;
|
|
637
557
|
const zoom_ = zoom !== null && zoom !== void 0 ? zoom : fb_zoom;
|
|
558
|
+
const minZoom = minZoom3D;
|
|
559
|
+
const maxZoom = viewPort.show3D ? maxZoom3D : maxZoom2D;
|
|
638
560
|
const view_state = {
|
|
639
561
|
target: target_,
|
|
640
562
|
zoom: zoom_,
|
|
641
563
|
rotationX: 90,
|
|
642
564
|
rotationOrbit: 0,
|
|
565
|
+
minZoom,
|
|
566
|
+
maxZoom,
|
|
643
567
|
};
|
|
644
568
|
return view_state;
|
|
645
569
|
}
|
|
@@ -674,34 +598,28 @@ function getViewState3D(is3D, bounds, zoom, deck) {
|
|
|
674
598
|
zoom: zoom !== null && zoom !== void 0 ? zoom : fitted_bound.zoom * 1.2,
|
|
675
599
|
rotationX: 45,
|
|
676
600
|
rotationOrbit: 0,
|
|
601
|
+
minZoom: minZoom3D,
|
|
602
|
+
maxZoom: maxZoom3D,
|
|
677
603
|
};
|
|
678
604
|
return view_state;
|
|
679
605
|
}
|
|
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
|
-
}
|
|
606
|
+
// construct views and viewStates for DeckGL component
|
|
607
|
+
function createViewsAndViewStates(views, viewPortMargins, bounds, cameraPosition, boundingBox, deck) {
|
|
608
|
+
var _a, _b, _c, _d;
|
|
697
609
|
const deckgl_views = [];
|
|
698
|
-
|
|
699
|
-
const
|
|
700
|
-
const
|
|
701
|
-
|
|
702
|
-
const mPixels = (
|
|
610
|
+
let viewStates = {};
|
|
611
|
+
const centerOfData = boundingBoxCenter(boundingBox);
|
|
612
|
+
const widthViewPort = (_a = deck === null || deck === void 0 ? void 0 : deck.width) !== null && _a !== void 0 ? _a : 1;
|
|
613
|
+
const heightViewPort = (_b = deck === null || deck === void 0 ? void 0 : deck.height) !== null && _b !== void 0 ? _b : 1;
|
|
614
|
+
const mPixels = (_c = views === null || views === void 0 ? void 0 : views.marginPixels) !== null && _c !== void 0 ? _c : 0;
|
|
615
|
+
const isOk = deck &&
|
|
616
|
+
views &&
|
|
617
|
+
views.layout[0] >= 1 &&
|
|
618
|
+
views.layout[1] >= 1 &&
|
|
619
|
+
views.layout[0] * views.layout[1] <= views.viewports.length;
|
|
703
620
|
// if props for multiple viewport are not proper, return 2d view
|
|
704
|
-
if (!
|
|
621
|
+
if (!isOk) {
|
|
622
|
+
console.warn("Properties for multiple viewports are not properly defined.");
|
|
705
623
|
deckgl_views.push(new OrthographicView({
|
|
706
624
|
id: "main",
|
|
707
625
|
controller: { doubleClickZoom: false },
|
|
@@ -713,6 +631,14 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
|
|
|
713
631
|
far: +99999,
|
|
714
632
|
near: -99999,
|
|
715
633
|
}));
|
|
634
|
+
viewStates = Object.assign(Object.assign({}, viewStates), { ["dummy"]: {
|
|
635
|
+
target: [0, 0],
|
|
636
|
+
zoom: 0,
|
|
637
|
+
rotationX: 0,
|
|
638
|
+
rotationOrbit: 0,
|
|
639
|
+
minZoom: minZoom2D,
|
|
640
|
+
maxZoom: maxZoom2D,
|
|
641
|
+
} });
|
|
716
642
|
}
|
|
717
643
|
else {
|
|
718
644
|
let yPos = 0;
|
|
@@ -731,14 +657,16 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
|
|
|
731
657
|
for (let x = 1; x <= nX; x++) {
|
|
732
658
|
if (views.viewports == undefined ||
|
|
733
659
|
deckgl_views.length >= views.viewports.length) {
|
|
734
|
-
return deckgl_views;
|
|
660
|
+
return [deckgl_views, viewStates];
|
|
735
661
|
}
|
|
736
662
|
const currentViewport = views.viewports[deckgl_views.length];
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
663
|
+
let ViewType = ZScaleOrbitView;
|
|
664
|
+
if (!currentViewport.show3D) {
|
|
665
|
+
ViewType =
|
|
666
|
+
currentViewport.id === "intersection_view"
|
|
667
|
+
? IntersectionView
|
|
668
|
+
: OrthographicView;
|
|
669
|
+
}
|
|
742
670
|
const far = 9999;
|
|
743
671
|
const near = currentViewport.show3D ? 0.1 : -9999;
|
|
744
672
|
const Controller = currentViewport.show3D
|
|
@@ -759,37 +687,22 @@ function createViews(views, scaleUpFunction, scaleDownFunction, deck) {
|
|
|
759
687
|
far,
|
|
760
688
|
near,
|
|
761
689
|
}));
|
|
690
|
+
const isBoundsDefined = typeof bounds !== "undefined";
|
|
691
|
+
const isCameraPositionDefined = typeof cameraPosition !== "undefined" &&
|
|
692
|
+
Object.keys(cameraPosition).length !== 0;
|
|
693
|
+
let viewState = cameraPosition;
|
|
694
|
+
if (!isCameraPositionDefined) {
|
|
695
|
+
viewState = isBoundsDefined
|
|
696
|
+
? getViewState(viewPortMargins, bounds !== null && bounds !== void 0 ? bounds : [0, 0, 1, 1], centerOfData, views, currentViewport, deck)
|
|
697
|
+
: getViewState3D((_d = currentViewport.show3D) !== null && _d !== void 0 ? _d : false, boundingBox, currentViewport.zoom, deck);
|
|
698
|
+
}
|
|
699
|
+
viewStates = Object.assign(Object.assign({}, viewStates), { [currentViewport.id]: viewState });
|
|
762
700
|
xPos = xPos + w;
|
|
763
701
|
}
|
|
764
702
|
yPos = yPos + h;
|
|
765
703
|
}
|
|
766
704
|
}
|
|
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;
|
|
705
|
+
return [deckgl_views, viewStates];
|
|
793
706
|
}
|
|
794
707
|
function handleMouseEvent(type, infos, event) {
|
|
795
708
|
var _a;
|