feat: Add leftTranslateByVector2 method to Matrix4 (#351)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d599586..d3b8e92 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,7 @@
## 2.3.0-wip
+- Add `leftTranslateByVector2` method to `Matrix4`.
+ Equivalent to the `leftTranslate` set of methods, that multiplies this matrix by a translation matrix from the left.
- Added `Matrix4.leftMultiply` method.
- Add translateByVector2 method to Matrix4.
- Require `sdk: ^3.7.0`.
diff --git a/lib/src/vector_math/matrix4.dart b/lib/src/vector_math/matrix4.dart
index ff9e21c..90b6f55 100644
--- a/lib/src/vector_math/matrix4.dart
+++ b/lib/src/vector_math/matrix4.dart
@@ -842,6 +842,13 @@
@pragma('wasm:prefer-inline')
@pragma('vm:prefer-inline')
@pragma('dart2js:prefer-inline')
+ void leftTranslateByVector2(Vector2 v2) =>
+ leftTranslateByDouble(v2.x, v2.y, 0.0, 1.0);
+
+ /// Multiply this by a translation from the left.
+ @pragma('wasm:prefer-inline')
+ @pragma('vm:prefer-inline')
+ @pragma('dart2js:prefer-inline')
void leftTranslateByVector3(Vector3 v3) =>
leftTranslateByDouble(v3.x, v3.y, v3.z, 1.0);
diff --git a/lib/src/vector_math_64/matrix4.dart b/lib/src/vector_math_64/matrix4.dart
index 2ad5b51..bd7e532 100644
--- a/lib/src/vector_math_64/matrix4.dart
+++ b/lib/src/vector_math_64/matrix4.dart
@@ -842,6 +842,13 @@
@pragma('wasm:prefer-inline')
@pragma('vm:prefer-inline')
@pragma('dart2js:prefer-inline')
+ void leftTranslateByVector2(Vector2 v2) =>
+ leftTranslateByDouble(v2.x, v2.y, 0.0, 1.0);
+
+ /// Multiply this by a translation from the left.
+ @pragma('wasm:prefer-inline')
+ @pragma('vm:prefer-inline')
+ @pragma('dart2js:prefer-inline')
void leftTranslateByVector3(Vector3 v3) =>
leftTranslateByDouble(v3.x, v3.y, v3.z, 1.0);
diff --git a/test/matrix4_test.dart b/test/matrix4_test.dart
index fd3ea77..71440a6 100644
--- a/test/matrix4_test.dart
+++ b/test/matrix4_test.dart
@@ -862,6 +862,20 @@
expect(result.x, equals(3.0));
expect(result.y, equals(0.0));
expect(result.z, equals(0.0));
+
+ // Matrix4 alternative methods
+ final m2 = Matrix4.diagonal3Values(2.0, 3.0, 4.0);
+ final result2 = Matrix4.columns(
+ Vector4(2.0, 0.0, 0.0, 0.0),
+ Vector4(0.0, 3.0, 0.0, 0.0),
+ Vector4(0.0, 0.0, 4.0, 0.0),
+ Vector4(1.0, 0.0, 0.0, 1.0),
+ );
+
+ expect(m2.clone()..leftTranslateByDouble(1, 0, 0, 1), result2);
+ expect(m2.clone()..leftTranslateByVector2(Vector2(1, 0)), result2);
+ expect(m2.clone()..leftTranslateByVector3(Vector3(1, 0, 0)), result2);
+ expect(m2.clone()..leftTranslateByVector4(Vector4(1, 0, 0, 1)), result2);
}
void testMatrixClassifiers() {