Add builder methods to Transform (#2778)

# Objective

Make it easier to construct transforms. E.g.

```rs
Transform::from_xyz(0.0, 0.0, 10.0).with_scale(Vec3::splat(2.0))
```

I found myself writing an extension method to do this so I don't have to write:

```rs
Transform {
  translation: Vec3::new(0.0, 0.0, 10.0),
  scale: Vec3::splat(2.0),
  ..Default::default()
}
```

## Solution

Add *builder style* methods to `Transform`.

Methods:

- `with_translation`
- `with_rotation`
- `with_scale`

I also added these methods to `GlobalTransform`. But they are probably less useful there.
This commit is contained in:
Matthias Seiffert 2021-09-09 00:46:39 +00:00
parent e317058677
commit 2f6c464f4b
2 changed files with 42 additions and 0 deletions

View file

@ -105,6 +105,27 @@ impl GlobalTransform {
self
}
#[doc(hidden)]
#[inline]
pub fn with_translation(mut self, translation: Vec3) -> Self {
self.translation = translation;
self
}
#[doc(hidden)]
#[inline]
pub fn with_rotation(mut self, rotation: Quat) -> Self {
self.rotation = rotation;
self
}
#[doc(hidden)]
#[inline]
pub fn with_scale(mut self, scale: Vec3) -> Self {
self.scale = scale;
self
}
/// Returns the 3d affine transformation matrix from this transforms translation,
/// rotation, and scale.
#[inline]

View file

@ -117,6 +117,27 @@ impl Transform {
self
}
/// Returns this [`Transform`] with a new translation.
#[inline]
pub fn with_translation(mut self, translation: Vec3) -> Self {
self.translation = translation;
self
}
/// Returns this [`Transform`] with a new rotation.
#[inline]
pub fn with_rotation(mut self, rotation: Quat) -> Self {
self.rotation = rotation;
self
}
/// Returns this [`Transform`] with a new scale.
#[inline]
pub fn with_scale(mut self, scale: Vec3) -> Self {
self.scale = scale;
self
}
/// Returns the 3d affine transformation matrix from this transforms translation,
/// rotation, and scale.
#[inline]