nalgebra/geometry/
transform_construction.rs

1use num::One;
2
3use simba::scalar::RealField;
4
5use crate::base::allocator::Allocator;
6use crate::base::dimension::{DimNameAdd, DimNameSum, U1};
7use crate::base::{Const, DefaultAllocator, OMatrix};
8
9use crate::geometry::{TCategory, Transform};
10
11impl<T: RealField, C: TCategory, const D: usize> Default for Transform<T, C, D>
12where
13    Const<D>: DimNameAdd<U1>,
14    DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
15{
16    fn default() -> Self {
17        Self::identity()
18    }
19}
20
21impl<T: RealField, C: TCategory, const D: usize> Transform<T, C, D>
22where
23    Const<D>: DimNameAdd<U1>,
24    DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
25{
26    /// Creates a new identity transform.
27    ///
28    /// # Example
29    ///
30    /// ```
31    /// # use nalgebra::{Transform2, Projective2, Affine2, Transform3, Projective3, Affine3, Point2, Point3};
32    ///
33    /// let pt = Point2::new(1.0, 2.0);
34    /// let t = Projective2::identity();
35    /// assert_eq!(t * pt, pt);
36    ///
37    /// let aff = Affine2::identity();
38    /// assert_eq!(aff * pt, pt);
39    ///
40    /// let aff = Transform2::identity();
41    /// assert_eq!(aff * pt, pt);
42    ///
43    /// // Also works in 3D.
44    /// let pt = Point3::new(1.0, 2.0, 3.0);
45    /// let t = Projective3::identity();
46    /// assert_eq!(t * pt, pt);
47    ///
48    /// let aff = Affine3::identity();
49    /// assert_eq!(aff * pt, pt);
50    ///
51    /// let aff = Transform3::identity();
52    /// assert_eq!(aff * pt, pt);
53    /// ```
54    #[inline]
55    pub fn identity() -> Self {
56        Self::from_matrix_unchecked(OMatrix::<
57            _,
58            DimNameSum<Const<D>, U1>,
59            DimNameSum<Const<D>, U1>,
60        >::identity())
61    }
62}
63
64impl<T: RealField, C: TCategory, const D: usize> One for Transform<T, C, D>
65where
66    Const<D>: DimNameAdd<U1>,
67    DefaultAllocator: Allocator<DimNameSum<Const<D>, U1>, DimNameSum<Const<D>, U1>>,
68{
69    /// Creates a new identity transform.
70    #[inline]
71    fn one() -> Self {
72        Self::identity()
73    }
74}