truchet 0.1.1

Library for truchet tiling
Documentation
use std::path::Path;

use image::GrayImage;
use svg::node::element::Group;
use truchet::{image::Image, vec2::Vec2, svg::node::element::SVG, to_svg::ToSVG};

struct ImageAdapter {
    image: GrayImage
}

impl ImageAdapter {
    fn new(image: GrayImage) -> Self { Self { image } }
}

impl Image for ImageAdapter {
    fn size(&self) -> Vec2<usize> {
        return Vec2::new(self.image.dimensions().0 as usize, self.image.dimensions().1 as usize);
    }

    fn get_pixel_brightness(&self, pos: Vec2<usize>) -> f32 {
        return self.image.get_pixel(pos.x() as u32, pos.y() as u32).0[0] as f32 / 255.0;
    }
}

fn main() {
    // Read image from fs
    let dog_path = Path::new(".")
        .join("examples")
        .join("dog.jpg");
    let image = image::open(dog_path).unwrap();
    let grayscale_image = ImageAdapter::new(image.into_luma8());

    // Generate "tiles" image
    let truchet = truchet::truchet_image::generate(&grayscale_image, truchet::generator::circles(Vec2::new(6, 6)));

    // Convert to svg and save to fs
    let svg = truchet.to_svg_node();
    let g = Group::new()
        .set("transform", "scale(10 10)")
        .add(svg);
    let svg_doc = SVG::new()
        .add(g)
        .set("height", "10000px")
        .set("width", "10000px");
    truchet::svg::save("./examples/dog_truchet.svg", &svg_doc).expect("Should save to file");
}