Module lyon_tessellation::path_stroke [] [src]

Path stroke tessellator

Tessellation routines for path stroke operations.

Overview

The stroke tessellation algorithm simply generates a strip of triangles along the path. This method is fast and simple to implement, howerver it means that if the path overlap with itself (for example in the case of a self-intersecting path), some triangles will overlap in the interesecting region, which may not be the desired behavior. This needs to be kept in mind when rendering transparent SVG strokes since the spec mandates that each point along a semi-transparent path is shaded once no matter how many times the path overlaps with itself at this location.

The main interface is the StrokeTessellator, which exposes a similar interface to its fill equivalent.

This stroke tessellator takes an iterator of path events as inputs as well as a StrokeOption, and produces its outputs using a BezierGeometryBuilder.

See the geometry_builder module documentation for more details about how to output custom vertex layouts.

Examples

// Create a simple path.
let mut path_builder = Path::builder();
path_builder.move_to(point(0.0, 0.0));
path_builder.line_to(point(1.0, 2.0));
path_builder.line_to(point(2.0, 0.0));
path_builder.line_to(point(1.0, 1.0));
path_builder.close();
let path = path_builder.build();

// Create the destination vertex and index buffers.
let mut buffers: VertexBuffers<Vertex> = VertexBuffers::new();

{
    // Create the destination vertex and index buffers.
    let mut vertex_builder = simple_builder(&mut buffers);

    // Create the tessellator.
    let mut tessellator = StrokeTessellator::new();

    // Compute the tessellation.
    let result = tessellator.tessellate(
        path.path_iter().flattened(0.05),
        &StrokeOptions::default(),
        &mut vertex_builder
    );
    assert!(result.is_ok());
}

println!("The generated vertices are: {:?}.", &buffers.vertices[..]);
println!("The generated indices are: {:?}.", &buffers.indices[..]);

Structs

StrokeBuilder

A builder that tessellates a stroke directly without allocating any intermediate data structure.

StrokeOptions

Parameters for the tessellator.

StrokeTessellator

A Context object that can tessellate stroke operations for complex paths.

Enums

LineCap

Line cap as defined by the SVG specification.

LineJoin

Line join as defined by the SVG specification.

Type Definitions

StrokeResult