From 3393e0020bd29c44a35bd89a5684964519ae7500 Mon Sep 17 00:00:00 2001 From: Gwen Le Bihan Date: Sun, 17 Nov 2024 21:43:35 +0100 Subject: [PATCH] :3 --- src/main.rs | 21 ++++++++++++++- src/objects.rs | 18 ++++++++++++- transfem/1.svg | 65 +++++++++++++++++++++++++++++++++++++++++++++++ transfem/gen.fish | 1 + 4 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 transfem/1.svg create mode 100644 transfem/gen.fish diff --git a/src/main.rs b/src/main.rs index 183178c..534e3f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,7 +16,26 @@ pub fn run(args: cli::Args) -> Result<()> { let mut canvas = canvas_from_cli(&args); if args.cmd_image && !args.cmd_video { - canvas = examples::title(); + let bgcol = match rand::thread_rng().gen_range(1..=3) { + 1 => Color::White, + 2 => Color::Pink, + 3 => Color::Cyan, + _ => unreachable!(), + }; + canvas.set_background(bgcol); + canvas.add_or_replace_layer(canvas.random_layer("feur")); + + for (_, obj) in canvas.layer("feur").objects.iter_mut() { + obj.change_color(match (bgcol, rand::thread_rng().gen_bool(0.5)) { + (Color::White, true) => Color::Pink, + (Color::White, false) => Color::Cyan, + (Color::Pink, true) => Color::White, + (Color::Pink, false) => Color::Cyan, + (Color::Cyan, true) => Color::White, + (Color::Cyan, false) => Color::Pink, + _ => unreachable!(), + }); + } let rendered = canvas.render(true)?; if args.arg_file.ends_with(".svg") { diff --git a/src/objects.rs b/src/objects.rs index a9fb0f7..3eafc06 100644 --- a/src/objects.rs +++ b/src/objects.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use crate::{ColorMapping, Fill, Filter, Point, Region, Transformation}; +use crate::{Color, ColorMapping, Fill, Filter, Point, Region, Transformation}; use itertools::Itertools; use wasm_bindgen::prelude::*; @@ -66,6 +66,22 @@ impl ColoredObject { self.filters.clear(); } + pub fn change_color(&mut self, color: Color) { + match self.fill { + None => (), + Some(Fill::Solid(_)) => self.fill = Some(Fill::Solid(color)), + Some(Fill::Translucent(_, opacity)) => { + self.fill = Some(Fill::Translucent(color, opacity)) + } + Some(Fill::Hatched(_, pattern, spacing, angle)) => { + self.fill = Some(Fill::Hatched(color, pattern, spacing, angle)) + } + Some(Fill::Dotted(_, radius, spacing)) => { + self.fill = Some(Fill::Dotted(color, radius, spacing)) + } + } + } + pub fn render( &self, cell_size: usize, diff --git a/transfem/1.svg b/transfem/1.svg new file mode 100644 index 0000000..2f60b35 --- /dev/null +++ b/transfem/1.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/transfem/gen.fish b/transfem/gen.fish new file mode 100644 index 0000000..677422d --- /dev/null +++ b/transfem/gen.fish @@ -0,0 +1 @@ +just && while true; ./shapemaker image transfem/1.svg -c pink:#F5A9B8 -c cyan:#5BCEFA --objects-count 5..30; sleep 0.125; end