ncollide3d/bounding_volume/
aabb_support_map.rs

1use crate::bounding_volume;
2use crate::bounding_volume::{HasBoundingVolume, AABB};
3use crate::math::Isometry;
4use crate::shape::{Capsule, Segment};
5#[cfg(feature = "dim3")]
6use crate::shape::{Cone, Cylinder};
7use na::RealField;
8
9#[cfg(feature = "dim3")]
10impl<N: RealField + Copy> HasBoundingVolume<N, AABB<N>> for Cone<N> {
11    #[inline]
12    fn bounding_volume(&self, m: &Isometry<N>) -> AABB<N> {
13        bounding_volume::support_map_aabb(m, self)
14    }
15
16    #[inline]
17    fn local_bounding_volume(&self) -> AABB<N> {
18        bounding_volume::local_support_map_aabb(self)
19    }
20}
21
22#[cfg(feature = "dim3")]
23impl<N: RealField + Copy> HasBoundingVolume<N, AABB<N>> for Cylinder<N> {
24    #[inline]
25    fn bounding_volume(&self, m: &Isometry<N>) -> AABB<N> {
26        bounding_volume::support_map_aabb(m, self)
27    }
28
29    #[inline]
30    fn local_bounding_volume(&self) -> AABB<N> {
31        bounding_volume::local_support_map_aabb(self)
32    }
33}
34
35impl<N: RealField + Copy> HasBoundingVolume<N, AABB<N>> for Capsule<N> {
36    #[inline]
37    fn bounding_volume(&self, m: &Isometry<N>) -> AABB<N> {
38        bounding_volume::support_map_aabb(m, self)
39    }
40
41    #[inline]
42    fn local_bounding_volume(&self) -> AABB<N> {
43        bounding_volume::local_support_map_aabb(self)
44    }
45}
46
47impl<N: RealField + Copy> HasBoundingVolume<N, AABB<N>> for Segment<N> {
48    #[inline]
49    fn bounding_volume(&self, m: &Isometry<N>) -> AABB<N> {
50        // SPEED: optimize this
51        bounding_volume::support_map_aabb(m, self)
52    }
53
54    #[inline]
55    fn local_bounding_volume(&self) -> AABB<N> {
56        bounding_volume::local_support_map_aabb(self)
57    }
58}