-
Notifications
You must be signed in to change notification settings - Fork 41
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor Map component to remove numerous useEffect Main motivation is to fix wrong view state computed when first rendering is done with hidden flag. First reproduced by application with tabbed layout where all the tabs are rendered using hidden flag. This use case has been added to the storybook to demonstrate the issue, along with a 'triggerHome' control (in a previous PR). The current PR brings: - onResize() function to handle resizing - use a React reducer to handle Z scaling Add support for PageUp/PageDown and Shift modifier - use a React reducer to compute the global 3D bounding box from the reportBoundingBox callback of the layers - introduce a ViewController class to generate the DeckGL views and viewState This brings all the computations in one place/one step by providing state change allowing to fine-tune the computations - use bounding box from the 'cameraPosition' (if set as zoom field) instead of the data bounding box Fixes: - initial viewState is correct, even when rendered with 'hidden' flag set to true - triggerHome now respects current zScale In the end, the final implementation drops down to 6 React useEffect, from the 16 initial ones ! Fix for #1820
- wsc-common@1.1.2
- wsc-common@1.1.1
- wsc-common@1.1.0
- wsc-common@1.0.15
- wsc-common@1.0.14
- wsc-common@1.0.13
- wsc-common@1.0.12
- wsc-common@1.0.11
- wsc-common@1.0.10
- wsc-common@1.0.9
- wsc-common@1.0.8
- wsc-common@1.0.7
- wsc-common@1.0.6
- wsc-common@1.0.5
- wsc-common@1.0.4
- wsc-common@1.0.3
- wsc-common@1.0.2
- wsc-common@1.0.1
- wsc-common@1.0.0
- wsc-common@0.8.9
- wsc-common@0.8.8
- wsc-common@0.8.7
- wsc-common@0.8.6
- wsc-common@0.8.5
- wsc-common@0.8.4
- wsc-common@0.8.3
- wsc-common@0.8.2
- wsc-common@0.8.1
- wsc-common@0.8.0
- wsc-common@0.7.3
- wsc-common@0.7.2
- wsc-common@0.7.1
- wsc-common@0.7.0
- wsc-common@0.6.6
- wsc-common@0.6.5
- wsc-common@0.6.4
- wsc-common@0.6.3
- wsc-common@0.6.2
- wsc-common@0.6.1
- wsc-common@0.6.0
- wsc-common@0.5.12
- wsc-common@0.5.11
- wsc-common@0.5.10
- wsc-common@0.5.9
- wsc-common@0.5.8
- wsc-common@0.5.7
- wsc-common@0.5.6
- wsc-common@0.5.5
- wsc-common@0.5.4
- wsc-common@0.5.3
- wsc-common@0.5.2
- wsc-common@0.5.1
- wsc-common@0.5.0
- wsc-common@0.4.4
- wsc-common@0.4.3
- wsc-common@0.4.2
- wsc-common@0.4.1
- well-log-viewer@2.3.3
- well-log-viewer@2.3.2
- well-log-viewer@2.3.1
- well-log-viewer@2.3.0
- well-log-viewer@2.2.6
- well-log-viewer@2.2.5
- well-log-viewer@2.2.4
- well-log-viewer@2.2.3
- well-log-viewer@2.2.2
- well-log-viewer@2.2.1
- well-log-viewer@2.2.0
- well-log-viewer@2.1.10
- well-log-viewer@2.1.9
- well-log-viewer@2.1.8
- well-log-viewer@2.1.7
- well-log-viewer@2.1.6
- well-log-viewer@2.1.5
- well-log-viewer@2.1.4
- well-log-viewer@2.1.3
- well-log-viewer@2.1.2
- well-log-viewer@2.1.1
- well-log-viewer@2.1.0
- well-log-viewer@2.0.1
- well-log-viewer@2.0.0
- well-log-viewer@1.13.11
- well-log-viewer@1.13.10
- well-log-viewer@1.13.9
- well-log-viewer@1.13.8
- well-log-viewer@1.13.7
- well-log-viewer@1.13.6
- well-log-viewer@1.13.5
- well-log-viewer@1.13.4
- well-log-viewer@1.13.3
- well-log-viewer@1.13.2
- well-log-viewer@1.13.1
- well-log-viewer@1.13.0
- well-log-viewer@1.12.7
- well-log-viewer@1.12.6
- well-log-viewer@1.12.5
- well-log-viewer@1.12.4
- well-log-viewer@1.12.3
- well-log-viewer@1.12.2
- well-log-viewer@1.12.1
- well-log-viewer@1.12.0
- well-log-viewer@1.11.0
- well-log-viewer@1.10.1
- well-log-viewer@1.10.0
- well-log-viewer@1.9.0
- well-log-viewer@1.8.2
- well-log-viewer@1.8.1
- well-log-viewer@1.8.0
- well-log-viewer@1.7.4
- well-log-viewer@1.7.3
- well-log-viewer@1.7.2
- well-log-viewer@1.7.1
- well-log-viewer@1.7.0
- well-log-viewer@1.6.0
- well-log-viewer@1.5.5
- well-log-viewer@1.5.4
- well-log-viewer@1.5.3
- well-log-viewer@1.5.2
- well-log-viewer@1.5.1
- well-log-viewer@1.5.0
- well-log-viewer@1.4.8
- well-log-viewer@1.4.7
- well-log-viewer@1.4.6
- well-log-viewer@1.4.5
- well-log-viewer@1.4.4
- well-log-viewer@1.4.3
- well-log-viewer@1.4.2
- well-log-viewer@1.4.1
- well-log-viewer@1.4.0
- well-log-viewer@1.3.9
- well-log-viewer@1.3.8
- well-log-viewer@1.3.7
- well-log-viewer@1.3.6
- well-log-viewer@1.3.5
- well-log-viewer@1.3.4
- well-log-viewer@1.3.3
- well-log-viewer@1.3.2
- well-log-viewer@1.3.1
- well-completions-plot@1.6.2
- well-completions-plot@1.6.1
- well-completions-plot@1.6.0
- well-completions-plot@1.5.20
- well-completions-plot@1.5.19
- well-completions-plot@1.5.18
- well-completions-plot@1.5.17
- well-completions-plot@1.5.16
- well-completions-plot@1.5.15
- well-completions-plot@1.5.14
- well-completions-plot@1.5.13
- well-completions-plot@1.5.12
- well-completions-plot@1.5.11
- well-completions-plot@1.5.10
- well-completions-plot@1.5.9
- well-completions-plot@1.5.8
- well-completions-plot@1.5.7
- well-completions-plot@1.5.6
- well-completions-plot@1.5.5
- well-completions-plot@1.5.4
- well-completions-plot@1.5.3
- well-completions-plot@1.5.2
- well-completions-plot@1.5.1
- well-completions-plot@1.5.0
- well-completions-plot@1.4.5
- well-completions-plot@1.4.4
- well-completions-plot@1.4.3
- well-completions-plot@1.4.2
- well-completions-plot@1.4.1
- well-completions-plot@1.4.0
- well-completions-plot@1.3.3
- well-completions-plot@1.3.2
- well-completions-plot@1.3.1
- well-completions-plot@1.3.0
- well-completions-plot@1.2.18
- well-completions-plot@1.2.17
- well-completions-plot@1.2.16
- well-completions-plot@1.2.15
- well-completions-plot@1.2.14
- well-completions-plot@1.2.13
- well-completions-plot@1.2.12
- well-completions-plot@1.2.11
- well-completions-plot@1.2.10
- well-completions-plot@1.2.9
- well-completions-plot@1.2.8
- well-completions-plot@1.2.7
- well-completions-plot@1.2.6
- well-completions-plot@1.2.5
- well-completions-plot@1.2.4
- well-completions-plot@1.2.3
- well-completions-plot@1.2.2
- well-completions-plot@1.2.1
- well-completions-plot@1.2.0
- well-completions-plot@1.1.4
- well-completions-plot@1.1.3
- well-completions-plot@1.1.2
- well-completions-plot@1.1.1
- subsurface-viewer@1.8.2
- subsurface-viewer@1.8.1
- subsurface-viewer@1.8.0
- subsurface-viewer@1.7.0
- subsurface-viewer@1.6.1
- subsurface-viewer@1.6.0
- subsurface-viewer@1.5.2
- subsurface-viewer@1.5.1
- subsurface-viewer@1.5.0
- subsurface-viewer@1.4.1
- subsurface-viewer@1.4.0
- subsurface-viewer@1.3.1
- subsurface-viewer@1.3.0
- subsurface-viewer@1.2.1
- subsurface-viewer@1.2.0
- subsurface-viewer@1.1.5
- subsurface-viewer@1.1.4
- subsurface-viewer@1.1.3
- subsurface-viewer@1.1.2
- subsurface-viewer@1.1.1
- subsurface-viewer@1.1.0
- subsurface-viewer@1.0.7
- subsurface-viewer@1.0.6
- subsurface-viewer@1.0.5
- subsurface-viewer@1.0.4
- subsurface-viewer@1.0.3
- subsurface-viewer@1.0.2
- subsurface-viewer@1.0.1
- subsurface-viewer@1.0.0
- subsurface-viewer@0.30.17
- subsurface-viewer@0.30.16
- subsurface-viewer@0.30.15
- subsurface-viewer@0.30.14
- subsurface-viewer@0.30.13
- subsurface-viewer@0.30.12
- subsurface-viewer@0.30.11
- subsurface-viewer@0.30.10
- subsurface-viewer@0.30.9
- subsurface-viewer@0.30.8
- subsurface-viewer@0.30.7
- subsurface-viewer@0.30.6
- subsurface-viewer@0.30.5
- subsurface-viewer@0.30.4
- subsurface-viewer@0.30.3
- subsurface-viewer@0.30.2
- subsurface-viewer@0.30.1
- subsurface-viewer@0.30.0
- subsurface-viewer@0.29.1
- subsurface-viewer@0.29.0
- subsurface-viewer@0.28.2
- subsurface-viewer@0.28.1
- subsurface-viewer@0.28.0
- subsurface-viewer@0.27.10
- subsurface-viewer@0.27.9
- subsurface-viewer@0.27.8
- subsurface-viewer@0.27.7
- subsurface-viewer@0.27.6
- subsurface-viewer@0.27.5
- subsurface-viewer@0.27.4
- subsurface-viewer@0.27.3
- subsurface-viewer@0.27.2
- subsurface-viewer@0.27.1
- subsurface-viewer@0.27.0
- subsurface-viewer@0.26.0
- subsurface-viewer@0.25.2
- subsurface-viewer@0.25.1
- subsurface-viewer@0.25.0
- subsurface-viewer@0.24.1
- subsurface-viewer@0.24.0
- subsurface-viewer@0.23.1
- subsurface-viewer@0.23.0
- subsurface-viewer@0.22.1
- subsurface-viewer@0.22.0
- subsurface-viewer@0.21.0
- subsurface-viewer@0.20.10
- subsurface-viewer@0.20.9
- subsurface-viewer@0.20.8
- subsurface-viewer@0.20.7
- subsurface-viewer@0.20.6
- subsurface-viewer@0.20.5
- subsurface-viewer@0.20.4
- subsurface-viewer@0.20.3
- subsurface-viewer@0.20.2
- subsurface-viewer@0.20.1
- subsurface-viewer@0.20.0
- subsurface-viewer@0.19.0
- subsurface-viewer@0.18.1
- subsurface-viewer@0.18.0
- subsurface-viewer@0.17.1
- subsurface-viewer@0.17.0
- subsurface-viewer@0.16.5
- subsurface-viewer@0.16.4
- subsurface-viewer@0.16.3
- subsurface-viewer@0.16.2
- subsurface-viewer@0.16.1
- subsurface-viewer@0.16.0
- subsurface-viewer@0.15.1
- subsurface-viewer@0.15.0
- subsurface-viewer@0.14.3
- subsurface-viewer@0.14.2
- subsurface-viewer@0.14.1
- subsurface-viewer@0.14.0
- subsurface-viewer@0.13.8
- subsurface-viewer@0.13.7
- subsurface-viewer@0.13.6
- subsurface-viewer@0.13.5
- subsurface-viewer@0.13.4
- subsurface-viewer@0.13.3
- subsurface-viewer@0.13.2
- subsurface-viewer@0.13.1
- subsurface-viewer@0.13.0
- subsurface-viewer@0.12.2
- subsurface-viewer@0.12.1
- subsurface-viewer@0.12.0
- group-tree-plot@1.4.2
- group-tree-plot@1.4.1
- group-tree-plot@1.4.0
- group-tree-plot@1.3.24
- group-tree-plot@1.3.23
- group-tree-plot@1.3.22
- group-tree-plot@1.3.21
- group-tree-plot@1.3.20
- group-tree-plot@1.3.19
- group-tree-plot@1.3.18
- group-tree-plot@1.3.17
- group-tree-plot@1.3.16
- group-tree-plot@1.3.15
- group-tree-plot@1.3.14
- group-tree-plot@1.3.13
- group-tree-plot@1.3.12
- group-tree-plot@1.3.11
- group-tree-plot@1.3.10
- group-tree-plot@1.3.9
- group-tree-plot@1.3.8
- group-tree-plot@1.3.7
- group-tree-plot@1.3.6
- group-tree-plot@1.3.5
- group-tree-plot@1.3.4
- group-tree-plot@1.3.3
- group-tree-plot@1.3.2
- group-tree-plot@1.3.1
- group-tree-plot@1.3.0
- group-tree-plot@1.2.3
- group-tree-plot@1.2.2
- group-tree-plot@1.2.1
- group-tree-plot@1.2.0
- group-tree-plot@1.1.18
- group-tree-plot@1.1.17
- group-tree-plot@1.1.16
- group-tree-plot@1.1.15
- group-tree-plot@1.1.14
- group-tree-plot@1.1.13
- group-tree-plot@1.1.12
- group-tree-plot@1.1.11
- group-tree-plot@1.1.10
- group-tree-plot@1.1.9
- group-tree-plot@1.1.8
- group-tree-plot@1.1.7
- group-tree-plot@1.1.6
- group-tree-plot@1.1.5
- group-tree-plot@1.1.4
- group-tree-plot@1.1.3
- group-tree-plot@1.1.2
- group-tree-plot@1.1.1
- group-tree-plot@1.1.0
- group-tree-plot@1.0.4
- group-tree-plot@1.0.3
- group-tree-plot@1.0.2
- group-tree-plot@1.0.1
- dash-components@1.0.4
- dash-components@1.0.3
Showing
9 changed files
with
1,011 additions
and
667 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -16,6 +16,7 @@ | |
"test": "jest --coverage", | ||
"test:update": "npm test -- --u", | ||
"test:watch": "npm test -- --watch", | ||
"test:debug": "node --inspect-brk ../../node_modules/jest/bin/jest.js --coverage=false --runInBand", | ||
"doc": "git clean -xdff docs && typedoc src" | ||
}, | ||
"author": "Equinor <[email protected]>", | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1,470 changes: 831 additions & 639 deletions
1,470
typescript/packages/subsurface-viewer/src/components/Map.tsx
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
typescript/packages/subsurface-viewer/src/utils/BoundingBox3D.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
import "jest"; | ||
|
||
import type { BoundingBox3D } from "./BoundingBox3D"; | ||
import { boxCenter, boxUnion } from "./BoundingBox3D"; | ||
|
||
describe("Test BoundingBox3D", () => { | ||
it("boxUnion default box", () => { | ||
const unitBox: BoundingBox3D = [0, 0, 0, 1, 1, 1]; | ||
const defaultBox: BoundingBox3D = [-1, -1, -1, 1, 1, 1]; | ||
const box1: BoundingBox3D = [0, 1, 2, 5, 6, 7]; | ||
const box2: BoundingBox3D = [1, 2, 3, 4, 5, 6]; | ||
expect(boxUnion(undefined, undefined)).toEqual(unitBox); | ||
expect(boxUnion(undefined, undefined, defaultBox)).toEqual(defaultBox); | ||
expect(boxUnion(box1, undefined, defaultBox)).toEqual(box1); | ||
expect(boxUnion(undefined, box2, defaultBox)).toEqual(box2); | ||
expect(boxUnion(box1, box2, defaultBox)).toEqual(box1); | ||
}); | ||
|
||
it("boxUnion without default box", () => { | ||
const box1: BoundingBox3D = [0, 1, 2, 5, 6, 7]; | ||
const box2: BoundingBox3D = [1, 2, 3, 4, 5, 6]; | ||
const box3: BoundingBox3D = [1, 2, 3, 6, 7, 8]; | ||
expect(boxUnion(box1, undefined)).toEqual(box1); | ||
expect(boxUnion(undefined, box2)).toEqual(box2); | ||
expect(boxUnion(box1, box2)).toEqual(box1); | ||
expect(boxUnion(box1, box3)).toEqual([0, 1, 2, 6, 7, 8]); | ||
}); | ||
|
||
it("boxCenter", () => { | ||
const box1: BoundingBox3D = [0, 1, 2, 5, 6, 7]; | ||
const box2: BoundingBox3D = [1, 2, 3, 4, 5, 6]; | ||
const box3: BoundingBox3D = [1, 2, 3, 6, 7, 8]; | ||
expect(boxCenter(box1)).toEqual([2.5, 3.5, 4.5]); | ||
expect(boxCenter(box2)).toEqual([2.5, 3.5, 4.5]); | ||
expect(boxCenter(box3)).toEqual([3.5, 4.5, 5.5]); | ||
}); | ||
}); |
53 changes: 53 additions & 0 deletions
53
typescript/packages/subsurface-viewer/src/utils/BoundingBox3D.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/** | ||
* 3D bounding box defined as [xmin, ymin, zmin, xmax, ymax, zmax]. | ||
*/ | ||
export type BoundingBox3D = [number, number, number, number, number, number]; | ||
|
||
/** | ||
* Returns the bounding box encompassing both boxes. | ||
* @param box1 first box. | ||
* @param box2 second box. | ||
* @param defaultBox in case both boxes are undefined. | ||
* @returns the bounding box encompassing both boxes. | ||
*/ | ||
export const boxUnion = ( | ||
box1: BoundingBox3D | undefined, | ||
box2: BoundingBox3D | undefined, | ||
defaultBox: BoundingBox3D = [0, 0, 0, 1, 1, 1] | ||
): BoundingBox3D => { | ||
if (box1 === undefined) { | ||
return box2 ?? defaultBox; | ||
} | ||
if (box2 === undefined) { | ||
return box1 ?? defaultBox; | ||
} | ||
|
||
const xmin = Math.min(box1[0], box2[0]); | ||
const ymin = Math.min(box1[1], box2[1]); | ||
const zmin = Math.min(box1[2], box2[2]); | ||
|
||
const xmax = Math.max(box1[3], box2[3]); | ||
const ymax = Math.max(box1[4], box2[4]); | ||
const zmax = Math.max(box1[5], box2[5]); | ||
return [xmin, ymin, zmin, xmax, ymax, zmax]; | ||
}; | ||
|
||
/** | ||
* Returns the center of the bounding box. | ||
* @param box1 bounding box. | ||
* @returns the center of the bounding box. | ||
*/ | ||
export const boxCenter = (box: BoundingBox3D): [number, number, number] => { | ||
const xmin = box[0]; | ||
const ymin = box[1]; | ||
const zmin = box[2]; | ||
|
||
const xmax = box[3]; | ||
const ymax = box[4]; | ||
const zmax = box[5]; | ||
return [ | ||
xmin + 0.5 * (xmax - xmin), | ||
ymin + 0.5 * (ymax - ymin), | ||
zmin + 0.5 * (zmax - zmin), | ||
]; | ||
}; |