From 3f68e05507d2cbc4b56a876c2e273953f98d2917 Mon Sep 17 00:00:00 2001 From: Simasalabim1234 Date: Wed, 25 Mar 2026 17:48:17 +0100 Subject: [PATCH 1/2] update object information window when time stepping --- .../src/panels/ThreeDeeRender/RendererOverlay.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx b/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx index d0f4694144..8ef0e16d42 100644 --- a/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx +++ b/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx @@ -131,6 +131,18 @@ export function RendererOverlay(props: Props): React.JSX.Element { const [interactionsTabType, setInteractionsTabType] = useState(undefined); const renderer = useRenderer(); + // Increment a token on each rendered frame so that selectedObject recomputes + // with fresh renderable data when timestamp changes. + const [frameToken, setFrameToken] = useState(0); + useRendererEvent( + "endFrame", + useCallback(() => { + if (selectedRenderable != undefined) { + setFrameToken((prev) => prev + 1); + } + }, [selectedRenderable]), + ); + // Toggle object selection mode on/off in the renderer useEffect(() => { if (renderer) { @@ -206,7 +218,7 @@ export function RendererOverlay(props: Props): React.JSX.Element { instanceIndex: selectedRenderable.instanceIndex, } : undefined, - [selectedRenderable], + [selectedRenderable, frameToken], ); // Inform the Renderer when a renderable is selected From 45d6361435ea560bff1de7fb27317b0de9fe6858 Mon Sep 17 00:00:00 2001 From: Simasalabim1234 Date: Thu, 26 Mar 2026 11:31:38 +0100 Subject: [PATCH 2/2] fix lint error --- .../panels/ThreeDeeRender/RendererOverlay.tsx | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx b/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx index 8ef0e16d42..fd735bfc32 100644 --- a/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx +++ b/packages/suite-base/src/panels/ThreeDeeRender/RendererOverlay.tsx @@ -133,12 +133,12 @@ export function RendererOverlay(props: Props): React.JSX.Element { // Increment a token on each rendered frame so that selectedObject recomputes // with fresh renderable data when timestamp changes. - const [frameToken, setFrameToken] = useState(0); + const [, forceSelectedObjectRefresh] = useState(0); useRendererEvent( "endFrame", useCallback(() => { if (selectedRenderable != undefined) { - setFrameToken((prev) => prev + 1); + forceSelectedObjectRefresh((prev) => prev + 1); } }, [selectedRenderable]), ); @@ -197,29 +197,23 @@ export function RendererOverlay(props: Props): React.JSX.Element { // Once a single renderable is selected, convert it to the SelectionObject // format to populate the object inspection dialog () - const selectedObject = useMemo( - () => - selectedRenderable - ? { - object: { - pose: selectedRenderable.renderable.pose, - interactionData: { - topic: selectedRenderable.renderable.topic, - highlighted: true, - originalMessage: selectedRenderable.renderable.details(), - instanceDetails: - selectedRenderable.instanceIndex != undefined - ? selectedRenderable.renderable.instanceDetails( - selectedRenderable.instanceIndex, - ) - : undefined, - }, - }, - instanceIndex: selectedRenderable.instanceIndex, - } - : undefined, - [selectedRenderable, frameToken], - ); + const selectedObject: SelectionObject | undefined = selectedRenderable + ? { + object: { + pose: selectedRenderable.renderable.pose, + interactionData: { + topic: selectedRenderable.renderable.topic, + highlighted: true, + originalMessage: selectedRenderable.renderable.details(), + instanceDetails: + selectedRenderable.instanceIndex != undefined + ? selectedRenderable.renderable.instanceDetails(selectedRenderable.instanceIndex) + : undefined, + }, + }, + instanceIndex: selectedRenderable.instanceIndex, + } + : undefined; // Inform the Renderer when a renderable is selected useEffect(() => {