splinosaurus 0.2.2

flexible spline and surface library
Documentation
use nalgebra::Vector2;
use splinosaurus::control_points::ControlVec;
use splinosaurus::export::BoundingBox;
use splinosaurus::splines::{BSpline, Spline};
use svg::node::element::path::Data;
use svg::node::element::Path;
use svg::Document;

fn main() {
    let grid = ControlVec::new(
        2,
        vec![
            Vector2::new(100., 100.),
            Vector2::new(200., 300.),
            Vector2::new(300., 100.),
            Vector2::new(400., 200.),
        ],
    );
    let spline = BSpline::new(grid);

    let bbox = BoundingBox::new(spline.control_points());
    let mut data = Data::new();
    for (i, p) in spline.quantize(0.01).enumerate() {
        if i == 0 {
            data = data.move_to((p.x, p.y));
        } else {
            data = data.line_to((p.x, p.y));
        }
    }

    let path = Path::new()
        .set("fill", "none")
        .set("stroke", "black")
        .set("stroke-width", 3)
        .set("d", data);

    let document = Document::new()
        .set(
            "viewBox",
            (bbox.min().x, bbox.min().y, bbox.max().x, bbox.max().y),
        )
        .add(path);

    svg::save("image.svg", &document).unwrap();
}