Skip to main content

rvlib/
drawme.rs

1pub use crate::types::ThumbViews;
2use crate::{GeoFig, ViewMetaPair, tools_data::InstanceLabelDisplay, world::DataRaw};
3use rvimage_domain::{BbF, Canvas, Circle, TPtF};
4use std::default::Default;
5
6#[derive(Clone, Debug)]
7pub struct Stroke {
8    pub thickness: TPtF,
9    pub color: [u8; 3],
10}
11
12impl Stroke {
13    pub fn from_color(color: [u8; 3]) -> Self {
14        Stroke {
15            thickness: 2.0,
16            color,
17        }
18    }
19}
20
21#[derive(Clone, Debug)]
22pub struct BboxAnnotation {
23    pub geofig: GeoFig,
24    pub fill_color: Option<[u8; 3]>,
25    pub fill_alpha: u8,
26    pub outline: Stroke,
27    pub outline_alpha: u8,
28    pub label: Option<String>,
29    pub is_selected: Option<bool>,
30    pub highlight_circles: Vec<Circle>,
31    pub instance_label_display: InstanceLabelDisplay,
32}
33
34#[derive(Clone, Debug)]
35pub struct BrushAnnotation {
36    pub canvas: Canvas,
37    pub color: [u8; 3],
38    pub label: Option<String>,
39    pub is_selected: Option<bool>,
40    pub fill_alpha: u8,
41    pub instance_display_label: InstanceLabelDisplay,
42}
43
44#[derive(Clone, Debug)]
45pub enum Annotation {
46    Bbox(BboxAnnotation),
47    Brush(BrushAnnotation),
48}
49
50#[derive(Clone, Debug, Default)]
51pub enum Update<T> {
52    Yes(T),
53    #[default]
54    No,
55}
56
57// None -> hide main image
58pub type UpdateImage = Update<ViewMetaPair>;
59// thumbnails
60pub type UpdateThumbImages = Update<ThumbViews>;
61
62// permament annotations
63pub type UpdatePermAnnos = Update<Vec<Annotation>>;
64// temporary annotation
65pub type UpdateTmpAnno = Update<Annotation>;
66pub type UpdateZoomBox = Update<Option<BbF>>;
67
68impl UpdatePermAnnos {
69    pub fn clear() -> Self {
70        Self::Yes(vec![])
71    }
72}
73
74#[derive(Clone, Debug, Default)]
75pub struct ImageInfo {
76    pub filename: String,
77    pub shape_info: String,
78    pub pixel_value: String,
79    pub tool_info: String,
80    pub zoom_box_coords: String,
81}
82
83#[derive(Clone, Debug, Default)]
84pub struct UpdateView {
85    pub image: UpdateImage,
86    pub thumb_ims: UpdateThumbImages,
87    pub perm_annos: UpdatePermAnnos,
88    pub tmp_annos: UpdateTmpAnno,
89    pub zoom_box: UpdateZoomBox,
90    pub image_info: Option<ImageInfo>,
91
92    // to enable memory re-use.
93    pub tmp_anno_buffer: Option<Annotation>,
94}
95
96impl UpdateView {
97    pub fn new(image: &DataRaw, zoom_box: Option<BbF>) -> Self {
98        let im_uncropped_view = image.bg_to_uncropped_view();
99        let extra_ims = image.extra_im_to_extra_views();
100        UpdateView {
101            image: UpdateImage::Yes(im_uncropped_view),
102            thumb_ims: UpdateThumbImages::Yes(extra_ims),
103            perm_annos: UpdatePermAnnos::No,
104            tmp_annos: UpdateTmpAnno::No,
105            zoom_box: UpdateZoomBox::Yes(zoom_box),
106            image_info: None,
107            tmp_anno_buffer: None,
108        }
109    }
110    pub fn from_zoombox(zoom_box: Option<BbF>) -> Self {
111        UpdateView {
112            image: UpdateImage::No,
113            thumb_ims: UpdateThumbImages::No,
114            perm_annos: UpdatePermAnnos::No,
115            tmp_annos: UpdateTmpAnno::No,
116            zoom_box: UpdateZoomBox::Yes(zoom_box),
117            image_info: None,
118            tmp_anno_buffer: None,
119        }
120    }
121}