# wmap-renderer A rust renderer for `wmap` formatted wardley maps parsed with [`wmap-parser`][wmap-parser-rust]. ## Features - Can render to PNG or SVG. - Rendering logic attempts to replicate [map][map]'s output. ## Installation Add it to your project with cargo add ```bash cargo add wmap-renderer ``` ## Usage ```rust use wmap_renderer::{render_to_png, render_to_svg, Configuration, StageType}; let map_source = r#" Computer (90, 20) Silicon Ore (80, 90) Computer -> Silicon Ore "#; let map = wmap_parser::parse(map_source); let config = Configuration::default(); // Render to PNG let png_data = render_to_png(&map, StageType::Activities, &config)?; std::fs::write("map.png", png_data)?; // Render to SVG let svg_data = render_to_svg(&map, StageType::Activities, &config)?; std::fs::write("map.svg", svg_data)?; ``` ## Configuration The renderer lets you configure sizes, colors, and font. ```rust let mut config = Configuration::default(); config.theme.colors.vertex = "#FF0000".to_string(); config.theme.sizes.vertex_size = 30.0; config.options.show_background = false; ``` ## Development ### Running Examples ```bash make examples ``` ### Running Tests ```bash make test ``` ## Performance The drawing is not optimized for live-editing. It's relatively quick to generate a single image. On an M1 Pro mac, our xample map renders in about ~2ms, while a larger map with slightly under 2000 entities does so in ~140ms. Turning off smart labels doesn't have a big effect on medium to small maps, but in our large map test it renders in ~97ms instead. You can run the benchmarks by using: ```bash make benchmark ```