From ce203a49b6e19f50b77e27be1b0431d6f6b1936b Mon Sep 17 00:00:00 2001 From: anders-hopland Date: Tue, 30 Jul 2024 11:12:36 +0200 Subject: [PATCH 1/6] Remove setCameraControlsOptions call as it does not work on new cameracontroller --- react-components/stories/SceneContainer.stories.tsx | 5 ----- 1 file changed, 5 deletions(-) diff --git a/react-components/stories/SceneContainer.stories.tsx b/react-components/stories/SceneContainer.stories.tsx index f5bd38d63f1..7e46d41d66d 100644 --- a/react-components/stories/SceneContainer.stories.tsx +++ b/react-components/stories/SceneContainer.stories.tsx @@ -79,11 +79,6 @@ const SceneContainerStoryContent = ({ const { fitCameraToSceneDefault } = useSceneDefaultCamera(sceneExternalId, sceneSpaceId); useEffect(() => { - (reveal.cameraManager as DefaultCameraManager).setCameraControlsOptions({ - changeCameraTargetOnClick: true, - mouseWheelAction: 'zoomToCursor' - }); - fitCameraToSceneDefault(); }, [reveal, fitCameraToSceneDefault]); return ( From 14990ee372b2f5ea6e3dd3ab5d5f0494d299d25e Mon Sep 17 00:00:00 2001 From: anders-hopland Date: Tue, 30 Jul 2024 13:22:11 +0200 Subject: [PATCH 2/6] Preserve pivot point when moving to Scene Camera Position --- react-components/src/hooks/useSceneDefaultCamera.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/react-components/src/hooks/useSceneDefaultCamera.tsx b/react-components/src/hooks/useSceneDefaultCamera.tsx index 3c696e00e2e..0961bed1388 100644 --- a/react-components/src/hooks/useSceneDefaultCamera.tsx +++ b/react-components/src/hooks/useSceneDefaultCamera.tsx @@ -44,7 +44,14 @@ export const useSceneDefaultCamera = ( return { fitCameraToSceneDefault: () => { + const initialCameraState = viewer.cameraManager.getCameraState(); + viewer.cameraManager.setCameraState({ position, target }); + + // Keep the camera target (pivot) in the same position + viewer.cameraManager.setCameraState({ + target: initialCameraState.target + }); }, isFetched: true }; From 3ad84f7cb32c184f4e257ccc9af0de7a60d6d9ff Mon Sep 17 00:00:00 2001 From: anders-hopland Date: Tue, 30 Jul 2024 13:48:48 +0200 Subject: [PATCH 3/6] Bump version --- react-components/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react-components/package.json b/react-components/package.json index 9d330f1bdbd..ee5c8d61ca9 100644 --- a/react-components/package.json +++ b/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@cognite/reveal-react-components", - "version": "0.55.0", + "version": "0.55.1", "exports": { ".": { "import": "./dist/index.js", From 5e1a7c0f5003432226394f5fca8984c7c8493dd8 Mon Sep 17 00:00:00 2001 From: anders-hopland Date: Tue, 30 Jul 2024 13:58:32 +0200 Subject: [PATCH 4/6] Fix lint --- react-components/stories/SceneContainer.stories.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/react-components/stories/SceneContainer.stories.tsx b/react-components/stories/SceneContainer.stories.tsx index 7e46d41d66d..7940179ffb9 100644 --- a/react-components/stories/SceneContainer.stories.tsx +++ b/react-components/stories/SceneContainer.stories.tsx @@ -14,7 +14,6 @@ import { useSceneDefaultCamera, withSuppressRevealEvents } from '../src'; -import { type DefaultCameraManager } from '@cognite/reveal'; import { ToolBar } from '@cognite/cogs.js'; import styled from 'styled-components'; From ea7034a9e9f4623f5fac913bb95b59daaeefdfa3 Mon Sep 17 00:00:00 2001 From: anders-hopland Date: Tue, 30 Jul 2024 15:01:31 +0200 Subject: [PATCH 5/6] Do not change pivot if the pivot is in origin --- .../src/hooks/useSceneDefaultCamera.tsx | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/react-components/src/hooks/useSceneDefaultCamera.tsx b/react-components/src/hooks/useSceneDefaultCamera.tsx index 0961bed1388..d9f2dc4591a 100644 --- a/react-components/src/hooks/useSceneDefaultCamera.tsx +++ b/react-components/src/hooks/useSceneDefaultCamera.tsx @@ -48,10 +48,19 @@ export const useSceneDefaultCamera = ( viewer.cameraManager.setCameraState({ position, target }); - // Keep the camera target (pivot) in the same position - viewer.cameraManager.setCameraState({ - target: initialCameraState.target - }); + // Check if camera pivot point is in origin + // If not, preserve the target + if ( + !( + initialCameraState.target.x === 0 && + initialCameraState.target.y === 0 && + initialCameraState.target.z === 0 + ) + ) { + viewer.cameraManager.setCameraState({ + target: initialCameraState.target + }); + } }, isFetched: true }; From 20d8d5be883c37a66fec6a3ce96c9b033968d842 Mon Sep 17 00:00:00 2001 From: anders-hopland Date: Wed, 31 Jul 2024 13:57:50 +0200 Subject: [PATCH 6/6] Set rotation instead of setting target twice in order to preserve pivot point --- .../src/hooks/useSceneDefaultCamera.tsx | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/react-components/src/hooks/useSceneDefaultCamera.tsx b/react-components/src/hooks/useSceneDefaultCamera.tsx index d9f2dc4591a..22b8fa735e9 100644 --- a/react-components/src/hooks/useSceneDefaultCamera.tsx +++ b/react-components/src/hooks/useSceneDefaultCamera.tsx @@ -46,20 +46,22 @@ export const useSceneDefaultCamera = ( fitCameraToSceneDefault: () => { const initialCameraState = viewer.cameraManager.getCameraState(); - viewer.cameraManager.setCameraState({ position, target }); - - // Check if camera pivot point is in origin - // If not, preserve the target + // Preserve pivot point if user has already set a pivot point + // If not, set the pivot point near the center of the scene + // When moving Scene to system space, we will extend the data + // model to store pos, rot and pivot if ( - !( - initialCameraState.target.x === 0 && - initialCameraState.target.y === 0 && - initialCameraState.target.z === 0 - ) + initialCameraState.target.x === 0 && + initialCameraState.target.y === 0 && + initialCameraState.target.z === 0 ) { - viewer.cameraManager.setCameraState({ - target: initialCameraState.target - }); + viewer.cameraManager.setCameraState({ position, target }); + } else { + const direction = new Vector3().subVectors(position, target).normalize(); + const rotation = new Euler().setFromVector3(direction); + const quaternion = new Quaternion().setFromEuler(rotation); + + viewer.cameraManager.setCameraState({ position, rotation: quaternion }); } }, isFetched: true