@@ -12,11 +12,10 @@ use egui::{epaint::Vertex, lerp, pos2, remap, Color32, NumExt as _, Rect, Shape}
12
12
use re_chunk_store:: Chunk ;
13
13
use re_chunk_store:: RangeQuery ;
14
14
use re_data_ui:: item_ui;
15
- use re_entity_db:: TimeHistogram ;
16
15
use re_log_types:: EntityPath ;
17
16
use re_log_types:: TimeInt ;
18
17
use re_log_types:: Timeline ;
19
- use re_log_types:: { ComponentPath , ResolvedTimeRange , TimeReal } ;
18
+ use re_log_types:: { ComponentPath , ResolvedTimeRange } ;
20
19
use re_types:: ComponentName ;
21
20
use re_viewer_context:: { Item , TimeControl , UiLayout , ViewerContext } ;
22
21
@@ -374,7 +373,7 @@ fn smooth(density: &[f32]) -> Vec<f32> {
374
373
// ----------------------------------------------------------------------------
375
374
376
375
#[ allow( clippy:: too_many_arguments) ]
377
- pub fn data_density_graph_ui2 (
376
+ pub fn data_density_graph_ui (
378
377
data_density_graph_painter : & mut DataDensityGraphPainter ,
379
378
ctx : & ViewerContext < ' _ > ,
380
379
time_ctrl : & TimeControl ,
@@ -736,148 +735,6 @@ fn visit_relevant_chunks(
736
735
}
737
736
}
738
737
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
-
881
738
fn graph_color ( ctx : & ViewerContext < ' _ > , item : & Item , ui : & egui:: Ui ) -> Color32 {
882
739
let is_selected = ctx. selection ( ) . contains_item ( item) ;
883
740
if is_selected {
@@ -896,41 +753,3 @@ fn make_brighter(color: Color32) -> Color32 {
896
753
b. saturating_add ( 64 ) ,
897
754
)
898
755
}
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