lyon_path_builder 0.8.6

Utilities to build vector paths.
Documentation

Lyon path builder

Tools to build path objects from a sequence of imperative commands.

Examples

The following example shows the Builder struct from the lyon_path crate using the FlatPathBuilder interface.

use lyon_path::Path;
use lyon_core::math::{point};
use lyon_path_builder::*;

// Create a builder object to build the path.
let mut builder = Path::builder();

// Build a simple path using the FlatPathBuilder interface.
builder.move_to(point(0.0, 0.0));
builder.line_to(point(1.0, 2.0));
builder.line_to(point(2.0, 0.0));
builder.line_to(point(1.0, 1.0));
builder.close();

// Finish building and create the actual path object.
let path = builder.build();

The next example uses the PathBuilder trait, which adds some simple curves to the FlatPathBuilder trait.

let mut builder = Path::builder();

builder.move_to(point(0.0, 0.0));
builder.line_to(point(1.0, 0.0));
builder.quadratic_bezier_to(point(2.0, 0.0), point(2.0, 1.0));
builder.cubic_bezier_to(point(2.0, 2.0), point(0.0, 2.0), point(0.0, 0.0));
builder.close();

let path = builder.build();

The SvgBuilder Adds to PathBuilder the rest of the SVG path commands.

These SVG commands can approximated with the simpler set of commands supported by PathBuilder. Therefore it is possible to create an SvgBuilder adapter on top of a PathBuilder using the with_svg method:

let mut builder = Path::builder().with_svg();

builder.move_to(point(0.0, 0.0));
builder.horizontal_line_to(1.0);
builder.relative_quadratic_bezier_to(point(1.0, 0.0), point(1.0, 1.0));
builder.smooth_relative_quadratic_bezier_to(point(-1.0, 1.0));

let path = builder.build();

To build a path that approximates curves with a sequence of line segments, use the flattened method:

let tolerance = 0.05;// maximum distance between a curve and its approximation.
let mut builder = Path::builder().flattened(tolerance);

builder.move_to(point(0.0, 0.0));
builder.quadratic_bezier_to(point(1.0, 0.0), point(1.0, 1.0));
builder.close();

// The resulting path contains only MoveTo, LineTo and Close events.
let path = builder.build();