experimental SVG-based video rendering engine made for music videos. React to MIDI or arbitrary signals from your DAW through "probe" VSTs
1use itertools::Itertools;
2use measure_time::debug_time;
3
4use super::{renderable::SVGRenderable, svg};
5use crate::Layer;
6
7impl SVGRenderable for Layer {
8 fn render_to_svg(
9 &self,
10 colormap: crate::ColorMapping,
11 cell_size: usize,
12 object_sizes: crate::graphics::objects::ObjectSizes,
13 id: &str,
14 ) -> anyhow::Result<svg::Node> {
15 debug_time!("render_to_svg/layer");
16 let mut group = svg::tag("g").class("layer").dataset("layer", &self.name);
17 for (object_id, object) in
18 self.objects.iter().sorted_by_key(|(oid, _)| (*oid).clone())
19 {
20 group.add(object.render_to_svg(
21 colormap.clone(),
22 cell_size,
23 object_sizes,
24 &format!("{}--{}", id, object_id),
25 )?);
26 }
27 Ok(group.into())
28 }
29}