54 releases

new 0.8.18-pre Feb 19, 2024
0.8.16-pre Oct 23, 2023
0.8.13-pre Jul 27, 2023
0.7.3 Mar 10, 2023
0.4.11 Jul 30, 2021

#29 in Rendering

Download history 112/week @ 2023-10-30 20/week @ 2023-11-06 60/week @ 2023-11-13 125/week @ 2023-11-20 210/week @ 2023-11-27 4/week @ 2023-12-04 34/week @ 2023-12-11 59/week @ 2023-12-18 113/week @ 2023-12-25 56/week @ 2024-01-01 22/week @ 2024-01-08 63/week @ 2024-01-15 126/week @ 2024-01-22 330/week @ 2024-01-29 102/week @ 2024-02-05 409/week @ 2024-02-12

970 downloads per month

MIT license

165KB
4K SLoC

dessin

dessin is library aimed at building complex drawings, combine them, move them and export them as PDF or SVG.

Getting started

Add dessin and dessin-svg to your project dependencies

cargo add dessin dessin-svg

Documentation on docs.rs

Overview

use dessin::prelude::*;
use dessin_svg::ToSVG;

#[derive(Default)]
struct MyShape {
  text: String
}
impl MyShape {
  fn say_this(&mut self, what: &str) {
    self.text = format!("{} And check this out: `{what}`", self.text);
  }
}
impl From<MyShape> for Shape {
  fn from(value: MyShape) -> Self {
    dessin!(Text: #(
      fill={Color::RED}
      text={value.text}
    )).into()
  }
}

let dessin = dessin!(for x in {0..10}: {
  let radius = x as f32 * 10.;

  dessin!(group: [
    { Circle: #(
      fill={Color::RED}
      radius={radius}
      translate={[x as f32 * 5., 10.]}
    ) }
    { Text: #(
      fill={Color::BLACK}
      font_size={10.}
      text={"Hi !"}
    ) }
  ])
});

let dessin = dessin!(group: [
  { var { dessin }: (
    scale={[2., 2.]}
  ) }
  { MyShape: (
    say_this={"Hello world"}
  ) }
]);

let svg = dessin.to_svg().unwrap();

Dependencies

~19MB
~187K SLoC