···
439
439
return self.height() as f32 / self.width() as f32;
440
440
}
441
441
442
442
+
pub fn remove_all_objects_in(&mut self, region: &Region) {
443
443
+
self.layers
444
444
+
.iter_mut()
445
445
+
.for_each(|layer| layer.remove_all_objects_in(region));
446
446
+
}
447
447
+
442
448
/// returns a list of all unique filters used throughout the canvas
443
449
/// used to only generate one definition per filter
444
450
///
···
4
4
5
5
pub fn dna_analysis_machine() -> Canvas {
6
6
let mut canvas = Canvas::new(vec!["root"]);
7
7
+
8
8
+
canvas.colormap = ColorMapping {
9
9
+
black: "#000000".into(),
10
10
+
white: "#ffffff".into(),
11
11
+
red: "#cf0a2b".into(),
12
12
+
green: "#22e753".into(),
13
13
+
blue: "#2734e6".into(),
14
14
+
yellow: "#f8e21e".into(),
15
15
+
orange: "#f05811".into(),
16
16
+
purple: "#6a24ec".into(),
17
17
+
brown: "#a05634".into(),
18
18
+
pink: "#e92e76".into(),
19
19
+
gray: "#81a0a8".into(),
20
20
+
cyan: "#4fecec".into(),
21
21
+
};
22
22
+
7
23
canvas.set_grid_size(16, 9);
8
24
canvas.set_background(Color::Black);
9
25
let mut hatches_layer = Layer::new("root");
···
1
1
-
use crate::{ColorMapping, ColoredObject, Fill, Filter, Object, ObjectSizes};
1
1
+
use crate::{ColorMapping, ColoredObject, Containable, Fill, Filter, Object, ObjectSizes, Region};
2
2
use anyhow::Context;
3
3
use std::collections::HashMap;
4
4
use wasm_bindgen::prelude::*;
5
5
+
use web_sys::js_sys::RegExp;
5
6
6
7
#[derive(Debug, Clone, Default)]
7
8
// #[wasm_bindgen(getter_with_clone)]
···
34
35
pub fn replace(&mut self, with: Layer) -> () {
35
36
self.objects = with.objects.clone();
36
37
self.flush();
38
38
+
}
39
39
+
40
40
+
pub fn remove_all_objects_in(&mut self, region: &Region) {
41
41
+
self.objects
42
42
+
.retain(|_, ColoredObject(o, ..)| !o.region().within(region))
37
43
}
38
44
39
45
pub fn paint_all_objects(&mut self, fill: Fill) {
···
13
13
let mut canvas = canvas_from_cli(&args);
14
14
15
15
if args.cmd_image && !args.cmd_video {
16
16
-
canvas.root().add_object(
17
17
-
"hello",
18
18
-
Object::Text(Anchor(3, 4), "hello world!".into(), 16.0)
19
19
-
.color(Fill::Solid(Color::Black)),
20
20
-
);
21
21
-
canvas.set_background(Color::White);
16
16
+
// canvas.root().add_object(
17
17
+
// "hello",
18
18
+
// Object::Text(Anchor(3, 4), "hello world!".into(), 16.0)
19
19
+
// .color(Fill::Solid(Color::Black)),
20
20
+
// );
21
21
+
// canvas.set_background(Color::White);
22
22
+
canvas = examples::dna_analysis_machine();
22
23
let rendered = canvas.render(&vec!["*"], true);
23
24
if args.arg_file.ends_with(".svg") {
24
25
std::fs::write(args.arg_file, rendered).unwrap();
···
159
159
Object::Text(anchor, _, _) | Object::Dot(anchor) | Object::SmallCircle(anchor) => {
160
160
(anchor, anchor).into()
161
161
}
162
162
-
Object::BigCircle(center) => (center, center).into(), // FIXME will be wrong lmao,
162
162
+
Object::BigCircle(center) => Region::from((center, center)),
163
163
Object::RawSVG(_) => {
164
164
unimplemented!()
165
165
}
···
11
11
pub fn translated(&self, dx: i32, dy: i32) -> Self {
12
12
Self((self.0 as i32 + dx) as usize, (self.1 as i32 + dy) as usize)
13
13
}
14
14
+
15
15
+
pub fn region(&self) -> Region {
16
16
+
Region {
17
17
+
start: self.clone(),
18
18
+
end: self.clone(),
19
19
+
}
20
20
+
}
14
21
}
15
22
16
23
impl From<(usize, usize)> for Point {
···
129
136
fn from(value: (&CenterAnchor, &CenterAnchor)) -> Self {
130
137
Region {
131
138
start: (value.0 .0, value.0 .1).into(),
132
132
-
end: (value.1 .0, value.1 .1).into(),
139
139
+
end: (value.1 .0 - 1, value.1 .1 - 1).into(),
133
140
}
134
141
}
135
142
}
···
8
8
9
9
use crate::{
10
10
examples, layer, Anchor, Canvas, CenterAnchor, Color, ColorMapping, Fill, Filter, FilterType,
11
11
-
HatchDirection, Layer, Object, Point,
11
11
+
HatchDirection, Layer, Object, Point, Region,
12
12
};
13
13
14
14
static WEB_CANVAS: Lazy<Mutex<Canvas>> = Lazy::new(|| Mutex::new(Canvas::default_settings()));
···
59
59
cyan: "#4fecec".into(),
60
60
};
61
61
62
62
+
canvas.remove_all_objects_in(&Region::from_topleft(Point(8, 2), (2, 2)));
63
63
+
canvas.remove_all_objects_in(&Point(11, 7).region());
64
64
+
62
65
*WEB_CANVAS.lock().unwrap() = canvas;
63
66
render_canvas_at(String::from("body"));
64
67
65
68
Ok(())
69
69
+
}
70
70
+
71
71
+
#[wasm_bindgen]
72
72
+
pub fn map_to_midi_controller() {
73
73
+
66
74
}
67
75
68
76
#[wasm_bindgen]