Skip to content

Commit 8404179

Browse files
committed
remove old data density graph ui
1 parent afbb5b0 commit 8404179

File tree

6 files changed

+59
-343
lines changed

6 files changed

+59
-343
lines changed

crates/viewer/re_time_panel/src/data_density_graph.rs

+2-183
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@ use egui::{epaint::Vertex, lerp, pos2, remap, Color32, NumExt as _, Rect, Shape}
1212
use re_chunk_store::Chunk;
1313
use re_chunk_store::RangeQuery;
1414
use re_data_ui::item_ui;
15-
use re_entity_db::TimeHistogram;
1615
use re_log_types::EntityPath;
1716
use re_log_types::TimeInt;
1817
use re_log_types::Timeline;
19-
use re_log_types::{ComponentPath, ResolvedTimeRange, TimeReal};
18+
use re_log_types::{ComponentPath, ResolvedTimeRange};
2019
use re_types::ComponentName;
2120
use re_viewer_context::{Item, TimeControl, UiLayout, ViewerContext};
2221

@@ -374,7 +373,7 @@ fn smooth(density: &[f32]) -> Vec<f32> {
374373
// ----------------------------------------------------------------------------
375374

376375
#[allow(clippy::too_many_arguments)]
377-
pub fn data_density_graph_ui2(
376+
pub fn data_density_graph_ui(
378377
data_density_graph_painter: &mut DataDensityGraphPainter,
379378
ctx: &ViewerContext<'_>,
380379
time_ctrl: &TimeControl,
@@ -736,148 +735,6 @@ fn visit_relevant_chunks(
736735
}
737736
}
738737

739-
#[allow(clippy::too_many_arguments)]
740-
pub fn data_density_graph_ui(
741-
data_density_graph_painter: &mut DataDensityGraphPainter,
742-
ctx: &ViewerContext<'_>,
743-
time_ctrl: &mut TimeControl,
744-
db: &re_entity_db::EntityDb,
745-
time_area_response: &egui::Response,
746-
time_area_painter: &egui::Painter,
747-
ui: &egui::Ui,
748-
time_histogram: &TimeHistogram,
749-
row_rect: Rect,
750-
time_ranges_ui: &TimeRangesUi,
751-
item: &TimePanelItem,
752-
) {
753-
re_tracing::profile_function!();
754-
755-
let pointer_pos = ui.input(|i| i.pointer.hover_pos());
756-
let interact_radius_sq = ui.style().interaction.resize_grab_radius_side.powi(2);
757-
let center_y = row_rect.center().y;
758-
759-
// Density over x-axis in UI points.
760-
let mut density_graph = DensityGraph::new(row_rect.x_range());
761-
762-
let mut num_hovered_messages = 0;
763-
let mut hovered_time_range = ResolvedTimeRange::EMPTY;
764-
765-
{
766-
let mut add_data_point = |time_range: ResolvedTimeRange, count: usize| {
767-
if count == 0 {
768-
return;
769-
}
770-
771-
if let (Some(min_x), Some(max_x)) = (
772-
time_ranges_ui.x_from_time_f32(time_range.min().into()),
773-
time_ranges_ui.x_from_time_f32(time_range.max().into()),
774-
) {
775-
density_graph.add_range((min_x, max_x), count as _);
776-
777-
// Hover:
778-
if let Some(pointer_pos) = pointer_pos {
779-
let center_x = (min_x + max_x) / 2.0;
780-
let distance_sq = pos2(center_x, center_y).distance_sq(pointer_pos);
781-
let is_hovered = distance_sq < interact_radius_sq;
782-
783-
if is_hovered {
784-
hovered_time_range = hovered_time_range.union(time_range);
785-
num_hovered_messages += count;
786-
}
787-
}
788-
} else {
789-
// We (correctly) assume the time range is narrow, and can be approximated with its center:
790-
let time_real = TimeReal::from(time_range.center());
791-
if let Some(x) = time_ranges_ui.x_from_time_f32(time_real) {
792-
density_graph.add_point(x, count as _);
793-
794-
if let Some(pointer_pos) = pointer_pos {
795-
let distance_sq = pos2(x, center_y).distance_sq(pointer_pos);
796-
let is_hovered = distance_sq < interact_radius_sq;
797-
798-
if is_hovered {
799-
hovered_time_range = hovered_time_range.union(time_range);
800-
num_hovered_messages += count;
801-
}
802-
}
803-
}
804-
}
805-
};
806-
807-
let visible_time_range = time_ranges_ui
808-
.time_range_from_x_range((row_rect.left() - MARGIN_X)..=(row_rect.right() + MARGIN_X));
809-
810-
// The more zoomed out we are, the bigger chunks of time_histogram we can process at a time.
811-
// Larger chunks is faster.
812-
let chunk_size_in_ui_points = 4.0;
813-
let time_chunk_size =
814-
(chunk_size_in_ui_points / time_ranges_ui.points_per_time).round() as _;
815-
let ranges: Vec<_> = {
816-
re_tracing::profile_scope!("time_histogram.range");
817-
time_histogram
818-
.range(
819-
visible_time_range.min().as_i64()..=visible_time_range.max().as_i64(),
820-
time_chunk_size,
821-
)
822-
.collect()
823-
};
824-
825-
re_tracing::profile_scope!("add_data_point");
826-
for (time_range, num_messages_at_time) in ranges {
827-
add_data_point(
828-
ResolvedTimeRange::new(time_range.min, time_range.max),
829-
num_messages_at_time as _,
830-
);
831-
}
832-
}
833-
834-
let hovered_x_range = (time_ranges_ui
835-
.x_from_time_f32(hovered_time_range.min().into())
836-
.unwrap_or(f32::MAX)
837-
- MARGIN_X)
838-
..=(time_ranges_ui
839-
.x_from_time_f32(hovered_time_range.max().into())
840-
.unwrap_or(f32::MIN)
841-
+ MARGIN_X);
842-
843-
density_graph.buckets = smooth(&density_graph.buckets);
844-
845-
density_graph.paint(
846-
data_density_graph_painter,
847-
row_rect.y_range(),
848-
time_area_painter,
849-
graph_color(ctx, &item.to_item(), ui),
850-
hovered_x_range,
851-
);
852-
853-
if 0 < num_hovered_messages {
854-
ctx.selection_state().set_hovered(item.to_item());
855-
856-
if time_area_response.clicked_by(egui::PointerButton::Primary) {
857-
ctx.selection_state().set_selection(item.to_item());
858-
time_ctrl.set_time(hovered_time_range.min());
859-
time_ctrl.pause();
860-
} else if ui.ctx().dragged_id().is_none() && 0 < num_hovered_messages {
861-
egui::show_tooltip_at_pointer(
862-
ui.ctx(),
863-
ui.layer_id(),
864-
egui::Id::new("data_tooltip"),
865-
|ui| {
866-
show_row_ids_tooltip(
867-
ctx,
868-
ui,
869-
time_ctrl,
870-
db,
871-
item,
872-
hovered_time_range,
873-
num_hovered_messages,
874-
);
875-
},
876-
);
877-
}
878-
}
879-
}
880-
881738
fn graph_color(ctx: &ViewerContext<'_>, item: &Item, ui: &egui::Ui) -> Color32 {
882739
let is_selected = ctx.selection().contains_item(item);
883740
if is_selected {
@@ -896,41 +753,3 @@ fn make_brighter(color: Color32) -> Color32 {
896753
b.saturating_add(64),
897754
)
898755
}
899-
900-
fn show_row_ids_tooltip(
901-
ctx: &ViewerContext<'_>,
902-
ui: &mut egui::Ui,
903-
time_ctrl: &TimeControl,
904-
db: &re_entity_db::EntityDb,
905-
item: &TimePanelItem,
906-
time_range: ResolvedTimeRange,
907-
num_events: usize,
908-
) {
909-
use re_data_ui::DataUi as _;
910-
911-
if num_events == 1 {
912-
ui.label(format!("{num_events} event"));
913-
} else {
914-
ui.label(format!("{num_events} events"));
915-
}
916-
917-
let ui_layout = UiLayout::Tooltip;
918-
let query = re_chunk_store::LatestAtQuery::new(*time_ctrl.timeline(), time_range.center());
919-
920-
let TimePanelItem {
921-
entity_path,
922-
component_name,
923-
} = item;
924-
925-
if let Some(component_name) = component_name {
926-
let component_path = ComponentPath::new(entity_path.clone(), *component_name);
927-
item_ui::component_path_button(ctx, ui, &component_path, db);
928-
ui.add_space(8.0);
929-
component_path.data_ui(ctx, ui, ui_layout, &query, db);
930-
} else {
931-
let instance_path = re_entity_db::InstancePath::entity_all(entity_path.clone());
932-
item_ui::instance_path_button(ctx, &query, db, ui, None, &instance_path);
933-
ui.add_space(8.0);
934-
instance_path.data_ui(ctx, ui, ui_layout, &query, db);
935-
}
936-
}

0 commit comments

Comments
 (0)