aboutsummaryrefslogtreecommitdiff
path: root/src/geometry/waabb.rs
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2020-09-22 15:29:29 +0200
committerCrozet Sébastien <developer@crozet.re>2020-09-28 15:27:25 +0200
commita7d77a01447d2b77694b2a957d000790af60b383 (patch)
tree7225a76f0e912651b2b115800bf0a620c44d6102 /src/geometry/waabb.rs
parent56f6051b047aded906b8a89cbc66672c6f1e698e (diff)
downloadrapier-a7d77a01447d2b77694b2a957d000790af60b383.tar.gz
rapier-a7d77a01447d2b77694b2a957d000790af60b383.tar.bz2
rapier-a7d77a01447d2b77694b2a957d000790af60b383.zip
Add non-topological WQuadtree update.
Diffstat (limited to 'src/geometry/waabb.rs')
-rw-r--r--src/geometry/waabb.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/geometry/waabb.rs b/src/geometry/waabb.rs
index c04514a..0a90801 100644
--- a/src/geometry/waabb.rs
+++ b/src/geometry/waabb.rs
@@ -150,6 +150,12 @@ impl WAABB {
}
}
+ pub fn dilate_by_factor(&mut self, factor: SimdFloat) {
+ let dilation = (self.maxs - self.mins) * factor;
+ self.mins -= dilation;
+ self.maxs += dilation;
+ }
+
pub fn replace(&mut self, i: usize, aabb: AABB<f32>) {
self.mins.replace(i, aabb.mins);
self.maxs.replace(i, aabb.maxs);
@@ -192,6 +198,24 @@ impl WAABB {
}
#[cfg(feature = "dim2")]
+ pub fn contains_lanewise(&self, other: &WAABB) -> SimdBool {
+ self.mins.x.simd_le(other.mins.x)
+ & self.mins.y.simd_le(other.mins.y)
+ & self.maxs.x.simd_ge(other.maxs.x)
+ & self.maxs.y.simd_ge(other.maxs.y)
+ }
+
+ #[cfg(feature = "dim3")]
+ pub fn contains_lanewise(&self, other: &WAABB) -> SimdBool {
+ self.mins.x.simd_le(other.mins.x)
+ & self.mins.y.simd_le(other.mins.y)
+ & self.mins.z.simd_le(other.mins.z)
+ & self.maxs.x.simd_ge(other.maxs.x)
+ & self.maxs.y.simd_ge(other.maxs.y)
+ & self.maxs.z.simd_ge(other.maxs.z)
+ }
+
+ #[cfg(feature = "dim2")]
pub fn intersects_lanewise(&self, other: &WAABB) -> SimdBool {
self.mins.x.simd_le(other.maxs.x)
& other.mins.x.simd_le(self.maxs.x)
@@ -208,6 +232,13 @@ impl WAABB {
& self.mins.z.simd_le(other.maxs.z)
& other.mins.z.simd_le(self.maxs.z)
}
+
+ pub fn to_merged_aabb(&self) -> AABB<f32> {
+ AABB::new(
+ self.mins.coords.map(|e| e.simd_horizontal_min()).into(),
+ self.maxs.coords.map(|e| e.simd_horizontal_max()).into(),
+ )
+ }
}
#[cfg(feature = "simd-is-enabled")]