[−][src]Crate draw
draw
is a simple 2D vector drawing library.
Canvas
is a container that defines the size and top-level components of your drawing.Drawing
defines the position, style, and sub-components of a drawing.Shape
defines the geometry of an individual shape such as aCircle
orLine
.Style
defines the fill and stroke of a drawing.
The general flow for creating a piece of art is:
- Create a
Canvas
- Create
Drawing
objects and add them to the Canvasdisplay_list
. - Position and style the drawings
- Render and save the
Canvas
to whatever output format you want. (SVG, PNG, etc...)
Basic Example
use draw::{Canvas, Drawing, Shape, Style, Fill, Stroke, RGB}; use draw::render::{self, svg::SvgRenderer}; // create a canvas to draw on let mut canvas = Canvas::new(100, 100); // create a rectangle let mut rect = Drawing::new(Shape::Rectangle { width: 50, height: 50, }); // move it around rect.position.x = 25.0; rect.position.y = 25.0; // give it a cool style rect.style = Style { fill: Some(Fill { color: RGB::new(0, 0, 0), }), stroke: Some(Stroke { width: 2, color: RGB::new(255, 0, 0), }), }; // add it to the canvas canvas.display_list.add(rect); // save the canvas as an svg render::save( &canvas, "tests/svg/basic_end_to_end.svg", SvgRenderer::new(), ) .expect("Failed to save");
Re-exports
pub use crate::canvas::Canvas; |
pub use crate::render::svg::SvgRenderer; |
pub use crate::shape::LineBuilder; |
pub use crate::shape::Shape; |
pub use crate::style::Color; |
pub use crate::style::Fill; |
pub use crate::style::Stroke; |
pub use crate::style::Style; |
Modules
canvas | Top level container for a drawing. |
render | Renders Canvas objects to bytes, allows for saving to disk. |
shape | Shape data |
style | Vector object styles; Fill and Stroke data |
Structs
DisplayList | A sorted Vec of Drawings, ordered from bottom to top. |
Drawing | A drawing composes a |
Type Definitions
DrawingId | Drawings are stored in a vector; this |
Position | An alias for float positioning. Note that SVGs look crisper when objects are positioned
on integer bounds, so you may just want to stick to whole numbers. A more advanced version
of this library would just directly use |
RGB | An alias for RGB |