offroad 0.5.7

2D offsetting for arc polylines/polygons.
Documentation
use togo::prelude::*;
use offroad::{offset::offset_arcline_to_arcline, prelude::OffsetCfg};

fn main() {
    // Configuration for offsetting
    let mut cfg = OffsetCfg::default();
    let mut svg = SVG::new(300.0, 300.0, Some("/tmp/arcline.svg"));
    cfg.svg = Some(&mut svg);
    // Show original arcline in SVG output
    cfg.svg_orig = true;
    // Show final offset arclines in SVG output
    cfg.svg_final = true;

    let arc0 = arc_from_bulge(point(40.0, 100.0), point(140.0, 200.0), 0.0);
    let arc1 = arc_from_bulge(point(140.0, 200.0), point(240.0, 100.0), 0.5);
    let arc2 = arc_from_bulge(point(240.0, 100.0), point(40.0, 100.0), 1.3);
    let arcs_orig = vec![arc0, arc1, arc2];

    // Translate to fit in the SVG viewport
    //let poly = polyline_translate(&arcs_orig, point(40.0, 100.0));

    // Internal offsetting
    //let arcs_orig = polyline_reverse(&arcs_orig);
    let offset_arclines = offset_arcline_to_arcline(&arcs_orig, 15.0, &mut cfg);

    println!("Input arcline has {} vertices", arcs_orig.len());
    println!("Output has {} arclines", offset_arclines.len());
    for (i, arcline) in offset_arclines.iter().enumerate() {
        println!("Arcline {}: {} vertices", i, arcline.len());
    }

    if let Some(svg) = cfg.svg.as_mut() {
        // Write svg to file
        svg.write_stroke_width(0.1);
    }
    assert!(
        offset_arclines.len() == 1,
        "Wrong number of offset arclines generated"
    );
}