diff --git a/crates/re_space_view_spatial/src/parts/entity_iterator.rs b/crates/re_space_view_spatial/src/parts/entity_iterator.rs index 6946a1a1ba38..6879ee7e1c77 100644 --- a/crates/re_space_view_spatial/src/parts/entity_iterator.rs +++ b/crates/re_space_view_spatial/src/parts/entity_iterator.rs @@ -3,12 +3,16 @@ use re_query::{query_archetype_with_history, ArchetypeView, QueryError}; use re_renderer::DepthOffset; use re_types::Archetype; use re_viewer_context::{ - NamedViewSystem, SpaceViewSystemExecutionError, ViewContextCollection, ViewQuery, ViewerContext, + NamedViewSystem, SpaceViewClass, SpaceViewSystemExecutionError, ViewContextCollection, + ViewQuery, ViewerContext, }; -use crate::contexts::{ - AnnotationSceneContext, EntityDepthOffsets, PrimitiveCounter, SharedRenderBuilders, - SpatialSceneEntityContext, TransformContext, +use crate::{ + contexts::{ + AnnotationSceneContext, EntityDepthOffsets, PrimitiveCounter, SharedRenderBuilders, + SpatialSceneEntityContext, TransformContext, + }, + SpatialSpaceView3D, }; /// Iterates through all entity views for a given archetype. @@ -39,7 +43,18 @@ where let counter = view_ctx.get::()?; for (ent_path, props) in query.iter_entities_for_system(System::name()) { - let Some(world_from_entity) = transforms.reference_from_entity(ent_path) else { + // The transform that considers pinholes only makes sense if this is a 3D space-view + let world_from_entity = if view_ctx.space_view_class_name() == SpatialSpaceView3D.name() { + transforms.reference_from_entity(ent_path) + } else { + transforms.reference_from_entity_ignoring_pinhole( + ent_path, + &ctx.store_db.entity_db.data_store, + &query.latest_at_query(), + ) + }; + + let Some(world_from_entity) = world_from_entity else { continue; }; let entity_context = SpatialSceneEntityContext { diff --git a/crates/re_space_view_spatial/src/parts/images.rs b/crates/re_space_view_spatial/src/parts/images.rs index c5a0783effac..c5eba134cb9d 100644 --- a/crates/re_space_view_spatial/src/parts/images.rs +++ b/crates/re_space_view_spatial/src/parts/images.rs @@ -30,7 +30,7 @@ use crate::{ parts::SIZE_BOOST_IN_POINTS_FOR_POINT_OUTLINES, query_pinhole, view_kind::SpatialSpaceViewKind, - SpatialSpaceView2D, + SpatialSpaceView2D, SpatialSpaceView3D, }; use super::{entity_iterator::process_archetype_views, SpatialViewPartData}; @@ -214,7 +214,13 @@ impl ImagesPart { ) -> Result<(), QueryError> { re_tracing::profile_function!(); - let parent_pinhole_path = transforms.parent_pinhole(ent_path); + // Parent pinhole should only be relevant to 3D views + let parent_pinhole_path = if ent_context.space_view_class_name == SpatialSpaceView3D.name() + { + transforms.parent_pinhole(ent_path) + } else { + None + }; // If this isn't an image, return // TODO(jleibs): The ArchetypeView should probably do this for us. @@ -323,7 +329,13 @@ impl ImagesPart { } let meaning = TensorDataMeaning::Depth; - let parent_pinhole_path = transforms.parent_pinhole(ent_path); + // Parent pinhole should only be relevant to 3D views + let parent_pinhole_path = if ent_context.space_view_class_name == SpatialSpaceView3D.name() + { + transforms.parent_pinhole(ent_path) + } else { + None + }; // Instance ids of tensors refer to entries inside the tensor. for (tensor, color, draw_order) in itertools::izip!( @@ -439,7 +451,13 @@ impl ImagesPart { ) -> Result<(), QueryError> { re_tracing::profile_function!(); - let parent_pinhole_path = transforms.parent_pinhole(ent_path); + // Parent pinhole should only be relevant to 3D views + let parent_pinhole_path = if ent_context.space_view_class_name == SpatialSpaceView3D.name() + { + transforms.parent_pinhole(ent_path) + } else { + None + }; // If this isn't an image, return // TODO(jleibs): The ArchetypeView should probably to this for us.