Palettes⁋
Palettes from manim

1 use env_logger::Env;
2 use ranim::color::palettes::manim::*;
3 use ranim::components::Anchor;
4 use ranim::glam::{dvec2, dvec3};
5 use ranim::items::group::Group;
6 use ranim::items::vitem::Rectangle;
7 use ranim::prelude::*;
8
9 #[scene]
10 struct PalettesScene;
11
12 impl TimelineConstructor for PalettesScene {
13 fn construct<'t: 'r, 'r>(
14 self,
15 timeline: &'t RanimTimeline,
16 _camera: &'r mut Rabject<'t, CameraFrame>,
17 ) {
18 let frame_size = dvec2(8.0 * 16.0 / 9.0, 8.0);
19 let padded_frame_size = frame_size * 0.9;
20
21 let colors = vec![
22 vec![BLUE_E, BLUE_D, BLUE_C, BLUE_B, BLUE_A],
23 vec![TEAL_E, TEAL_D, TEAL_C, TEAL_B, TEAL_A],
24 vec![GREEN_E, GREEN_D, GREEN_C, GREEN_B, GREEN_A],
25 vec![YELLOW_E, YELLOW_D, YELLOW_C, YELLOW_B, YELLOW_A],
26 vec![GOLD_E, GOLD_D, GOLD_C, GOLD_B, GOLD_A],
27 vec![RED_E, RED_D, RED_C, RED_B, RED_A],
28 vec![MAROON_E, MAROON_D, MAROON_C, MAROON_B, MAROON_A],
29 vec![PURPLE_E, PURPLE_D, PURPLE_C, PURPLE_B, PURPLE_A],
30 vec![GREY_E, GREY_D, GREY_C, GREY_B, GREY_A],
31 vec![WHITE, BLACK, GREEN_SCREEN],
32 vec![GREY_BROWN, LIGHT_BROWN, PINK, LIGHT_PINK, ORANGE],
33 ];
34
35 let padded_frame_start = dvec2(padded_frame_size.x / -2.0, padded_frame_size.y / -2.0);
36 let h_step = padded_frame_size.y / colors.len() as f64;
37
38 let squares = colors
39 .iter()
40 .enumerate()
41 .flat_map(|(i, row)| {
42 let y = i as f64 * h_step;
43 let w_step = padded_frame_size.x / row.len() as f64;
44 row.iter().enumerate().map(move |(j, color)| {
45 let x = j as f64 * w_step;
46 let mut square = Rectangle(w_step as f64, h_step as f64).build();
47 square
48 .put_anchor_on(
49 Anchor::edge(-1, -1, 0),
50 padded_frame_start.extend(0.0) + dvec3(x, y, 0.0),
51 )
52 .set_color(*color)
53 .set_stroke_width(0.0);
54 square
55 })
56 })
57 .collect::<Group<_>>();
58 let _squares = timeline.insert(squares);
59 timeline.forward(0.01);
60 }
61 }
62
63 fn main() {
64 #[cfg(debug_assertions)]
65 env_logger::Builder::from_env(Env::default().default_filter_or("palettes=trace")).init();
66 #[cfg(not(debug_assertions))]
67 env_logger::Builder::from_env(Env::default().default_filter_or("palettes=info, ranim=trace"))
68 .init();
69
70 let options = AppOptions::default();
71 render_scene_at_sec(PalettesScene, 0.0, "preview.png", &options);
72 render_scene_at_sec(PalettesScene, 0.0, "output.png", &options);
73 }
74