@@ -4,15 +4,17 @@ use std::{collections::HashMap, env::VarError, path::Path};
44
55use dora_node_api:: {
66 arrow:: {
7- array:: { Array , AsArray , Float32Array , Float64Array , StringArray , UInt16Array , UInt8Array } ,
7+ array:: { Array , AsArray , Float64Array , StringArray , UInt16Array , UInt8Array } ,
88 datatypes:: Float32Type ,
99 } ,
1010 dora_core:: config:: DataId ,
1111 into_vec, DoraNode , Event , Parameter ,
1212} ;
1313use eyre:: { eyre, Context , Result } ;
1414
15- use rerun:: { components:: ImageBuffer , external:: log:: warn, ImageFormat , Points3D , SpawnOptions } ;
15+ use rerun:: {
16+ components:: ImageBuffer , external:: log:: warn, ImageFormat , Points2D , Points3D , SpawnOptions ,
17+ } ;
1618pub mod boxes2d;
1719pub mod series;
1820pub mod urdf;
@@ -374,6 +376,33 @@ pub fn lib_main() -> Result<()> {
374376 } ) ;
375377 let points = Points3D :: new ( points) . with_radii ( vec ! [ 0.013 ; colors. len( ) ] ) ;
376378
379+ rec. log ( dataid. as_str ( ) , & points. with_colors ( colors) )
380+ . context ( "could not log points" ) ?;
381+ }
382+ } else if id. as_str ( ) . contains ( "points2d" ) {
383+ // Get color or assign random color in cache
384+ let color = color_cache. get ( & id) ;
385+ let color = if let Some ( color) = color {
386+ color. clone ( )
387+ } else {
388+ let color =
389+ rerun:: Color :: from_rgb ( rand:: random :: < u8 > ( ) , 180 , rand:: random :: < u8 > ( ) ) ;
390+
391+ color_cache. insert ( id. clone ( ) , color. clone ( ) ) ;
392+ color
393+ } ;
394+ let dataid = id;
395+
396+ // get a random color
397+ if let Ok ( buffer) = into_vec :: < f32 > ( & data) {
398+ let mut points = vec ! [ ] ;
399+ let mut colors = vec ! [ ] ;
400+ buffer. chunks ( 2 ) . for_each ( |chunk| {
401+ points. push ( ( chunk[ 0 ] , chunk[ 1 ] ) ) ;
402+ colors. push ( color) ;
403+ } ) ;
404+ let points = Points2D :: new ( points) ;
405+
377406 rec. log ( dataid. as_str ( ) , & points. with_colors ( colors) )
378407 . context ( "could not log points" ) ?;
379408 }
0 commit comments