1pub use crate::types::ExtraViews;
2use crate::{tools_data::InstanceLabelDisplay, types::ViewImage, world::DataRaw, GeoFig};
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
57pub type UpdateImage = Update<ViewImage>;
58pub type UpdateExtraImages = Update<ExtraViews>;
59
60pub type UpdatePermAnnos = Update<Vec<Annotation>>;
62pub type UpdateTmpAnno = Update<Annotation>;
64pub type UpdateZoomBox = Update<Option<BbF>>;
65
66impl UpdatePermAnnos {
67 pub fn clear() -> Self {
68 Self::Yes(vec![])
69 }
70}
71
72#[derive(Clone, Debug, Default)]
73pub struct ImageInfo {
74 pub filename: String,
75 pub shape_info: String,
76 pub pixel_value: String,
77 pub tool_info: String,
78 pub zoom_box_coords: String,
79}
80
81#[derive(Clone, Debug, Default)]
82pub struct UpdateView {
83 pub image: UpdateImage,
84 pub extra_ims: UpdateExtraImages,
85 pub perm_annos: UpdatePermAnnos,
86 pub tmp_annos: UpdateTmpAnno,
87 pub zoom_box: UpdateZoomBox,
88 pub image_info: Option<ImageInfo>,
89
90 pub tmp_anno_buffer: Option<Annotation>,
92}
93
94impl UpdateView {
95 pub fn new(image: &DataRaw, zoom_box: Option<BbF>) -> Self {
96 let im_uncropped_view = image.bg_to_uncropped_view();
97 let extra_ims = image.extra_im_to_extra_views();
98 UpdateView {
99 image: UpdateImage::Yes(im_uncropped_view),
100 extra_ims: UpdateExtraImages::Yes(extra_ims),
101 perm_annos: UpdatePermAnnos::No,
102 tmp_annos: UpdateTmpAnno::No,
103 zoom_box: UpdateZoomBox::Yes(zoom_box),
104 image_info: None,
105 tmp_anno_buffer: None,
106 }
107 }
108 pub fn from_zoombox(zoom_box: Option<BbF>) -> Self {
109 UpdateView {
110 image: UpdateImage::No,
111 extra_ims: UpdateExtraImages::No,
112 perm_annos: UpdatePermAnnos::No,
113 tmp_annos: UpdateTmpAnno::No,
114 zoom_box: UpdateZoomBox::Yes(zoom_box),
115 image_info: None,
116 tmp_anno_buffer: None,
117 }
118 }
119}