use crate::prelude::*;
use approx::ulps_eq;
#[allow(dead_code)] pub(super) fn aabb_to_vec<T>(aabb: T) -> Vec<T::Vector>
where
T: Aabb2,
T::Vector: GenericVector2,
{
if !aabb.is_empty() {
let min = aabb.min();
let max = aabb.max();
vec![
min,
T::Vector::new_2d(max.x(), min.y()),
max,
T::Vector::new_2d(min.x(), max.y()),
min,
]
} else {
Vec::default()
}
}
#[allow(dead_code)] pub(super) fn aabb2_partial_eq<T>(aabb1: &T, aabb2: &T) -> bool
where
T: Aabb2,
T::Vector: GenericVector2,
{
match (aabb1.is_empty(), aabb2.is_empty()) {
(false, false) => {
let min1 = aabb1.min();
let min2 = aabb2.min();
let max1 = aabb1.max();
let max2 = aabb2.max();
ulps_eq!(min1.x(), min2.x())
&& ulps_eq!(min1.y(), min2.y())
&& ulps_eq!(max1.x(), max2.x())
&& ulps_eq!(max1.y(), max2.y())
}
(true, true) => true,
_ => false,
}
}
#[allow(dead_code)] pub(super) fn aabb3_partial_eq<T>(aabb1: &T, aabb2: &T) -> bool
where
T: Aabb3,
T::Vector: GenericVector3,
{
match (aabb1.is_empty(), aabb2.is_empty()) {
(false, false) => {
let min1 = aabb1.min();
let min2 = aabb2.min();
let max1 = aabb1.max();
let max2 = aabb2.max();
ulps_eq!(min1.x(), min2.x())
&& ulps_eq!(min1.y(), min2.y())
&& ulps_eq!(min1.z(), min2.z())
&& ulps_eq!(max1.x(), max2.x())
&& ulps_eq!(max1.y(), max2.y())
&& ulps_eq!(max1.z(), max2.z())
}
(true, true) => true,
_ => false,
}
}
#[allow(dead_code)] pub(super) fn from_plane_to_xy<T: GenericVector3>(
source_plane: Plane,
) -> <T as GenericVector3>::Affine {
match source_plane {
Plane::XY => {
<T as GenericVector3>::Affine::identity()
}
Plane::XZ => {
<T as GenericVector3>::Affine::from_cols_array(&[
T::Scalar::ONE,
T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ZERO, T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ONE,
T::Scalar::ZERO, T::Scalar::ZERO,
T::Scalar::ONE,
T::Scalar::ZERO,
T::Scalar::ZERO, T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ONE, ])
}
Plane::YZ => {
<T as GenericVector3>::Affine::from_cols_array(&[
T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ONE,
T::Scalar::ZERO, T::Scalar::ZERO,
T::Scalar::ONE,
T::Scalar::ZERO,
T::Scalar::ZERO, T::Scalar::ONE,
T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ZERO, T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ONE, ])
}
}
}
#[allow(dead_code)] pub(super) fn from_translation<T: GenericVector3>(translation: T) -> T::Affine {
<T as GenericVector3>::Affine::from_cols_array(&[
T::Scalar::ONE,
T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ZERO, T::Scalar::ZERO,
T::Scalar::ZERO,
T::Scalar::ONE,
T::Scalar::ZERO, T::Scalar::ZERO,
T::Scalar::ONE,
T::Scalar::ZERO,
T::Scalar::ZERO, translation.x(),
translation.y(),
translation.z(),
T::Scalar::ONE, ])
}