diff --git a/src/components/EngineStream.tsx b/src/components/EngineStream.tsx index 1c1ce7e86..92e3fe5f8 100644 --- a/src/components/EngineStream.tsx +++ b/src/components/EngineStream.tsx @@ -29,15 +29,9 @@ import { useSelector } from '@xstate/react' import type { MouseEventHandler } from 'react' import { useEffect, useRef, useState } from 'react' import { useRouteLoaderData } from 'react-router-dom' -import { isPlaywright } from '@src/lib/isPlaywright' -import { - engineStreamZoomToFit, - engineViewIsometricWithGeometryPresent, - engineViewIsometricWithoutGeometryPresent, -} from '@src/lib/utils' -import { DEFAULT_DEFAULT_LENGTH_UNIT } from '@src/lib/constants' import { createThumbnailPNGOnDesktop } from '@src/lib/screenshot' import type { SettingsViaQueryString } from '@src/lib/settings/settingsTypes' +import { resetCameraPosition } from '@src/lib/resetCameraPosition' export const EngineStream = (props: { pool: string | null @@ -104,31 +98,7 @@ export const EngineStream = (props: { kmp .then(async () => { - // Gotcha: Playwright E2E tests will be zoom_to_fit, when you try to recreate the e2e test manually - // your localhost will do view_isometric. Turn this boolean on to have the same experience when manually - // debugging e2e tests - - // We need a padding of 0.1 for zoom_to_fit for all E2E tests since they were originally - // written with zoom_to_fit with padding 0.1 - const padding = 0.1 - if (isPlaywright()) { - await engineStreamZoomToFit({ engineCommandManager, padding }) - } else { - // If the scene is empty you cannot use view_isometric, it will not move the camera - if (kclManager.isAstBodyEmpty(kclManager.ast)) { - await engineViewIsometricWithoutGeometryPresent({ - engineCommandManager, - unit: - kclManager.fileSettings.defaultLengthUnit || - DEFAULT_DEFAULT_LENGTH_UNIT, - }) - } else { - await engineViewIsometricWithGeometryPresent({ - engineCommandManager, - padding, - }) - } - } + await resetCameraPosition() if (project && project.path) { createThumbnailPNGOnDesktop({ diff --git a/src/components/ViewControlMenu.tsx b/src/components/ViewControlMenu.tsx index e8c3ce88b..74bbf37e1 100644 --- a/src/components/ViewControlMenu.tsx +++ b/src/components/ViewControlMenu.tsx @@ -13,6 +13,7 @@ import { VIEW_NAMES_SEMANTIC } from '@src/lib/constants' import { sceneInfra } from '@src/lib/singletons' import { reportRejection } from '@src/lib/trap' import { useSettings } from '@src/lib/singletons' +import { resetCameraPosition } from '@src/lib/resetCameraPosition' export function useViewControlMenuItems() { const { state: modelingState, send: modelingSend } = useModelingContext() @@ -38,7 +39,7 @@ export function useViewControlMenuItems() { , { - sceneInfra.camControls.resetCameraPosition().catch(reportRejection) + resetCameraPosition().catch(reportRejection) }} disabled={shouldLockView} > diff --git a/src/lib/resetCameraPosition.ts b/src/lib/resetCameraPosition.ts new file mode 100644 index 000000000..3cf531708 --- /dev/null +++ b/src/lib/resetCameraPosition.ts @@ -0,0 +1,40 @@ +import { DEFAULT_DEFAULT_LENGTH_UNIT } from '@src/lib/constants' +import { isPlaywright } from '@src/lib/isPlaywright' +import { engineCommandManager, kclManager } from '@src/lib/singletons' +import { + engineStreamZoomToFit, + engineViewIsometricWithoutGeometryPresent, + engineViewIsometricWithGeometryPresent, +} from '@src/lib/utils' + +/** + * Reset the camera position to a baseline, which is isometric for + * normal users and a deprecated "front-down" view for playwright tests. + * + * Gotcha: Playwright E2E tests will be zoom_to_fit, when you try to recreate the e2e test manually + * your localhost will do view_isometric. Turn this boolean on to have the same experience when manually + * debugging e2e tests + */ +export async function resetCameraPosition() { + // We need a padding of 0.1 for zoom_to_fit for all E2E tests since they were originally + // written with zoom_to_fit with padding 0.1 + const padding = 0.1 + if (isPlaywright()) { + await engineStreamZoomToFit({ engineCommandManager, padding }) + } else { + // If the scene is empty you cannot use view_isometric, it will not move the camera + if (kclManager.isAstBodyEmpty(kclManager.ast)) { + await engineViewIsometricWithoutGeometryPresent({ + engineCommandManager, + unit: + kclManager.fileSettings.defaultLengthUnit || + DEFAULT_DEFAULT_LENGTH_UNIT, + }) + } else { + await engineViewIsometricWithGeometryPresent({ + engineCommandManager, + padding, + }) + } + } +}