diff --git a/src/components/ModelingMachineProvider.tsx b/src/components/ModelingMachineProvider.tsx index c2dfbfe0d..af2a31fd6 100644 --- a/src/components/ModelingMachineProvider.tsx +++ b/src/components/ModelingMachineProvider.tsx @@ -142,7 +142,9 @@ export const ModelingMachineProvider = ({ kclManager.executeCode().then(() => { if (engineCommandManager.engineConnection?.idleMode) return - store.videoElement?.play() + store.videoElement?.play().catch((e) => { + console.warn('Video playing was prevented', e) + }) }) })() }, diff --git a/src/components/SettingsAuthProvider.tsx b/src/components/SettingsAuthProvider.tsx index d6767944b..3bc37aabd 100644 --- a/src/components/SettingsAuthProvider.tsx +++ b/src/components/SettingsAuthProvider.tsx @@ -175,11 +175,35 @@ export const SettingsAuthProviderBase = ({ id: `${event.type}.success`, }) }, - 'Execute AST': () => { - kclManager.isFirstRender = true - kclManager.executeCode(true).then(() => { - kclManager.isFirstRender = false - }) + 'Execute AST': (context, event) => { + try { + const allSettingsIncludesUnitChange = + event.type === 'Set all settings' && + event.settings?.modeling?.defaultUnit?.current !== + context.modeling.defaultUnit.current + const resetSettingsIncludesUnitChange = + event.type === 'Reset settings' && + context.modeling.defaultUnit.current !== + settings?.modeling?.defaultUnit?.default + + if ( + event.type === 'set.modeling.defaultUnit' || + allSettingsIncludesUnitChange || + resetSettingsIncludesUnitChange + ) { + kclManager.isFirstRender = true + kclManager.executeCode(true).then(() => { + kclManager.isFirstRender = false + }) + } else { + // For any future logging we'd like to do + // console.log( + // 'Not re-executing AST because the settings change did not affect the code interpretation' + // ) + } + } catch (e) { + console.error('Error executing AST after settings change', e) + } }, }, services: { diff --git a/src/components/Stream.tsx b/src/components/Stream.tsx index 46fdc94b5..7931c1d17 100644 --- a/src/components/Stream.tsx +++ b/src/components/Stream.tsx @@ -156,7 +156,10 @@ export const Stream = () => { useEffect(() => { setIsFirstRender(kclManager.isFirstRender) - if (!kclManager.isFirstRender) videoRef.current?.play() + if (!kclManager.isFirstRender) + videoRef.current?.play().catch((e) => { + console.warn('Video playing was prevented', e) + }) setIsFreezeFrame(!kclManager.isFirstRender) }, [kclManager.isFirstRender]) @@ -170,8 +173,12 @@ export const Stream = () => { if (!mediaStream) return // Do not immediately play the stream! - videoRef.current.srcObject = mediaStream - videoRef.current.pause() + try { + videoRef.current.srcObject = mediaStream + videoRef.current.pause() + } catch (e) { + console.warn('Attempted to pause stream while play was still loading', e) + } send({ type: 'Set context', diff --git a/src/lang/KclSingleton.ts b/src/lang/KclSingleton.ts index 530797581..3f53e9357 100644 --- a/src/lang/KclSingleton.ts +++ b/src/lang/KclSingleton.ts @@ -224,6 +224,7 @@ export class KclManager { sceneInfra.modelingSend({ type: 'code edit during sketch' }) defaultSelectionFilter(programMemory, this.engineCommandManager) + await this.engineCommandManager.waitForAllCommands() if (zoomToFit) { let zoomObjectId: string | undefined = '' @@ -243,6 +244,15 @@ export class KclManager { padding: 0.1, // padding around the objects }, }) + await this.engineCommandManager.sendSceneCommand({ + type: 'modeling_cmd_req', + cmd_id: uuidv4(), + cmd: { + type: 'zoom_to_fit', + object_ids: zoomObjectId ? [zoomObjectId] : [], // leave empty to zoom to all objects + padding: 0.1, // padding around the objects + }, + }) } this.isExecuting = false diff --git a/src/machines/modelingMachine.ts b/src/machines/modelingMachine.ts index b27cff74a..f228aaae3 100644 --- a/src/machines/modelingMachine.ts +++ b/src/machines/modelingMachine.ts @@ -1082,7 +1082,9 @@ export const modelingMachine = createMachine( }, }) if (!engineCommandManager.engineConnection?.idleMode) { - store.videoElement?.play() + store.videoElement?.play().catch((e) => { + console.warn('Video playing was prevented', e) + }) } if (updatedAst?.selections) { editorManager.selectRange(updatedAst?.selections)