meshellaneous 0.0.5

Miscellaneous Mesh utilities
Documentation
use glam::Vec3;

use crate::{
    plane::{Plane, Side},
    traits::Intersect,
    Ray, Segment,
};

#[test]
pub fn side_above() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let side = plane.side(Vec3::new(0.0, 1.0, 0.0));
    assert_eq!(side, Side::Above);
}

#[test]
pub fn side_below() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let side = plane.side(Vec3::new(0.0, -1.0, 0.0));
    assert_eq!(side, Side::Below);
}

#[test]
pub fn side_coplanar() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let side = plane.side(Vec3::new(1.0, 0.0, 0.0));
    assert_eq!(side, Side::Coplanar);
}

#[test]
pub fn intersect_ray() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let ray: Ray = (Vec3::new(0.0, 1.0, 0.1), Vec3::new(0.0, -1.0, 0.0));

    assert_eq!(plane.intersects(&ray), Some(Vec3::new(0.0, 0.0, 0.1)));
}

#[test]
pub fn intersect_ray_parallel() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let ray: Ray = (Vec3::new(0.0, 1.0, 0.1), Vec3::new(1.0, 0.0, 0.0));

    assert_eq!(plane.intersects(&ray), None);
}

#[test]
pub fn intersect_segment() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let segment: Segment = [Vec3::new(0.0, 1.0, 0.1), Vec3::new(0.0, -1.0, -0.1)];

    assert_eq!(plane.intersects(&segment), Some(Vec3::ZERO));
}

#[test]
pub fn intersect_segment_parallel() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let segment: Segment = [Vec3::new(0.0, 1.0, 0.1), Vec3::new(1.0, 1.0, 0.1)];

    assert_eq!(plane.intersects(&segment), None);
}

#[test]
pub fn intersect_segment_away() {
    let plane = Plane::new(Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 1.0, 0.0));
    let segment: Segment = [Vec3::new(0.0, 1.0, 0.1), Vec3::new(0.0, 2.0, 0.1)];

    assert_eq!(plane.intersects(&segment), None);
}