# 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#" Tea (90, 50) Cup (80, 40) Tea -> Cup "#; 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 uses the same default configuration as the JavaScript version: - **Map Size**: 1300×1000 pixels (with 42px padding) - **Colors**: #0F261F for axes/vertices/labels, #FA2B00 for inertia, #4F8FE6 for evolution - **Fonts**: "Helvetica Neue, Helvetica, Arial, sans-serif" - **Sizes**: 25×25px vertices, 10px arrowheads, 0.5px line width All configuration options can be customized: ```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; ``` ## Running Examples ```bash cargo run --example generate_map ``` This will generate `example.png`, `example.svg`, and `example_cynefin.png` in the project root. ## Running Tests ```bash cargo test ``` All 22 tests should pass (17 unit tests + 5 integration tests). ## 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 ``` ## Dependencies - **cairo-rs**: Vector graphics rendering (PNG, SVG support) - **geo**: Geometric algorithms (concave hull for groups) - **wmap-parser**: Wardley map source parser (local dependency) - **thiserror**: Error handling - **tempfile**: SVG output (temporary file handling) ## Implementation Status ### Completed Features - ✅ All rendering features (axes, vertices, dependencies, notes, inertias, evolutions, groups) - ✅ Background evolution stage patterns - ✅ All 21 stage types - ✅ All 4 vertex shapes - ✅ PNG and SVG output - ✅ Concave hull for groups - ✅ Configuration system matching JS defaults - ✅ Comprehensive test suite - ✅ Example programs ## License See LICENSE file. [wmap-parser-rust]: https://crates.io/crates/wmap-parser [map]: https://map.tranquil.systems