signed_distance_fields 1.0.6

A implementation of SDFs (signed distance fields) and some operators to play with these SDFs
Documentation
use math_vector::Vector;
use signed_distance_fields::{objects::{SignedDistanceField, primitives::Rectangle, operators::transforms::{Translate, Rotate, Scale, Matrix}}, Domain, render::{self, text_mappers}};

fn main() {
    let domain = Domain {
        p0: Vector { x: -10.0, y: -10.0, z: 0.0 },
        p1: Vector { x: 10.0, y: 10.0, z: 0.0 },
        steps: Vector { x: 100, y: 50, z: 0 }
    };
    
    let none = none();

    println!(
        "None:\n{}",
        render::text(&none, &domain, &text_mappers::default)
    );

    println!(
        "Translate:\n{}",
        render::text(&translate(&none), &domain, &text_mappers::default)
    );
    
    println!(
        "Rotate:\n{}",
        render::text(&rotate(&none), &domain, &text_mappers::default)
    );

    println!(
        "Scale:\n{}",
        render::text(&scale(&none), &domain, &text_mappers::default)
    );

    println!(
        "Matrix:\n{}",
        render::text(&matrix(&none), &domain, &text_mappers::default)
    );
}

fn none() -> impl SignedDistanceField {
    Rectangle { w: 7.5, h: 15.0 }
}


fn translate<'a>(rectangle: &'a dyn SignedDistanceField) -> impl SignedDistanceField + 'a {
    Translate { 
        sdf: Box::new(rectangle),
        p: Vector {
            x: -5.0,
            y: 3.0,
            z: 0.0
        }
    } 
}

fn rotate<'a>(rectangle: &'a dyn SignedDistanceField) -> impl SignedDistanceField + 'a {
    Rotate { 
        sdf: Box::new(rectangle),
        axis: Vector {
            x: 0.0,
            y: 0.0,
            z: 1.0
        },
        alpha: 5.0
    }
}

fn scale<'a>(rectangle: &'a dyn SignedDistanceField) -> impl SignedDistanceField + 'a {
    Scale { 
        sdf: Box::new(rectangle),
        scale: Vector {
            x: 0.5,
            y: 2.0,
            z: 1.0
        }
    }
}

fn matrix<'a>(rectangle: &'a dyn SignedDistanceField) -> impl SignedDistanceField + 'a {
    Matrix {
        sdf: Box::new(rectangle),
        matrix: [
            [1.0, -1.1], 
            [0.3, -2.0]
        ]
    }
}