diff --git a/crates/re_space_view_time_series/src/line_visualizer_system.rs b/crates/re_space_view_time_series/src/line_visualizer_system.rs index 08779ff5f754..a27b89858bb0 100644 --- a/crates/re_space_view_time_series/src/line_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/line_visualizer_system.rs @@ -99,7 +99,12 @@ impl SeriesLineSystem { for data_result in query.iter_visible_data_results(Self::identifier()) { let mut points = Vec::new(); - let time_range = determine_time_range(query, data_result, plot_bounds); + let time_range = determine_time_range( + query, + data_result, + plot_bounds, + ctx.app_options.experimental_plot_query_clamping, + ); { re_tracing::profile_scope!("primary", &data_result.entity_path.to_string()); diff --git a/crates/re_space_view_time_series/src/point_visualizer_system.rs b/crates/re_space_view_time_series/src/point_visualizer_system.rs index 3cb6aa32746f..6dd6bbb0be2c 100644 --- a/crates/re_space_view_time_series/src/point_visualizer_system.rs +++ b/crates/re_space_view_time_series/src/point_visualizer_system.rs @@ -99,7 +99,12 @@ impl SeriesPointSystem { for data_result in query.iter_visible_data_results(Self::identifier()) { let mut points = Vec::new(); - let time_range = determine_time_range(query, data_result, plot_bounds); + let time_range = determine_time_range( + query, + data_result, + plot_bounds, + ctx.app_options.experimental_plot_query_clamping, + ); { re_tracing::profile_scope!("primary", &data_result.entity_path.to_string()); diff --git a/crates/re_space_view_time_series/src/util.rs b/crates/re_space_view_time_series/src/util.rs index 480746fc52d7..d61eed33dd7c 100644 --- a/crates/re_space_view_time_series/src/util.rs +++ b/crates/re_space_view_time_series/src/util.rs @@ -30,6 +30,7 @@ pub fn determine_time_range( query: &ViewQuery<'_>, data_result: &re_viewer_context::DataResult, plot_bounds: Option, + enable_query_clamping: bool, ) -> TimeRange { let visible_history = match query.timeline.typ() { re_log_types::TimeType::Time => data_result.accumulated_properties().visible_history.nanos, @@ -51,7 +52,7 @@ pub fn determine_time_range( // the plot widget handles zoom after we provide it with data for the current frame, // this results in an extremely jarring frame delay. // Just try it out and you'll see what I mean. - if false { + if enable_query_clamping { if let Some(plot_bounds) = plot_bounds { time_range.min = TimeInt::max( time_range.min, diff --git a/crates/re_space_view_time_series/src/visualizer_system.rs b/crates/re_space_view_time_series/src/visualizer_system.rs index c90ce515702d..c8db567ff928 100644 --- a/crates/re_space_view_time_series/src/visualizer_system.rs +++ b/crates/re_space_view_time_series/src/visualizer_system.rs @@ -92,7 +92,12 @@ impl LegacyTimeSeriesSystem { for data_result in query.iter_visible_data_results(Self::identifier()) { let mut points = Vec::new(); - let time_range = determine_time_range(query, data_result, plot_bounds); + let time_range = determine_time_range( + query, + data_result, + plot_bounds, + ctx.app_options.experimental_plot_query_clamping, + ); { re_tracing::profile_scope!("primary", &data_result.entity_path.to_string()); diff --git a/crates/re_viewer/src/ui/rerun_menu.rs b/crates/re_viewer/src/ui/rerun_menu.rs index b0a6c04f41db..6055616b9e02 100644 --- a/crates/re_viewer/src/ui/rerun_menu.rs +++ b/crates/re_viewer/src/ui/rerun_menu.rs @@ -421,6 +421,14 @@ fn experimental_feature_ui( "Primary caching: range queries", ) .on_hover_text("Toggle primary caching for range queries.\nApplies to the 2D/3D point cloud, 2D/3D box, text log and time series space views."); + + re_ui + .checkbox( + ui, + &mut app_options.experimental_plot_query_clamping, + "Plots: query clamping", + ) + .on_hover_text("Toggle query clamping for the plot visualizers."); } #[cfg(debug_assertions)] diff --git a/crates/re_viewer_context/src/app_options.rs b/crates/re_viewer_context/src/app_options.rs index 799c247431f9..e710ba036e15 100644 --- a/crates/re_viewer_context/src/app_options.rs +++ b/crates/re_viewer_context/src/app_options.rs @@ -32,6 +32,9 @@ pub struct AppOptions { /// Applies to the 2D/3D point cloud, 2D/3D box, text log and time series space views. pub experimental_primary_caching_range: bool, + /// Toggle query clamping for the plot visualizers. + pub experimental_plot_query_clamping: bool, + /// Displays an overlay for debugging picking. pub show_picking_debug_overlay: bool, @@ -65,6 +68,8 @@ impl Default for AppOptions { experimental_primary_caching_latest_at: true, experimental_primary_caching_range: true, + experimental_plot_query_clamping: false, + show_picking_debug_overlay: false, inspect_blueprint_timeline: false,