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