Index: ui/gfx/transform_unittest.cc |
diff --git a/ui/gfx/transform_unittest.cc b/ui/gfx/transform_unittest.cc |
index 9518c666a87f101e0888441ef7680dcd7641d653..83255388f237dac8f47cdafddee8711370f25e88 100644 |
--- a/ui/gfx/transform_unittest.cc |
+++ b/ui/gfx/transform_unittest.cc |
@@ -16,6 +16,7 @@ |
#include "ui/gfx/point.h" |
#include "ui/gfx/point3_f.h" |
#include "ui/gfx/transform_util.h" |
+#include "ui/gfx/vector3d_f.h" |
namespace gfx { |
@@ -116,10 +117,12 @@ TEST(XFormTest, Equality) { |
lhs = Transform(); |
rhs = Transform(); |
for (int i = 1; i < 100; ++i) { |
- lhs.SetTranslate(i, i); |
- rhs.SetTranslate(-i, -i); |
+ lhs.MakeIdentity(); |
+ rhs.MakeIdentity(); |
+ lhs.Translate(i, i); |
+ rhs.Translate(-i, -i); |
EXPECT_TRUE(lhs != rhs); |
- rhs.ConcatTranslate(2*i, 2*i); |
+ rhs.Translate(2*i, 2*i); |
EXPECT_TRUE(lhs == rhs); |
} |
} |
@@ -145,7 +148,9 @@ TEST(XFormTest, ConcatTranslate) { |
Transform xform; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
const TestCase& value = test_cases[i]; |
- xform.ConcatTranslate(value.tx, value.ty); |
+ Transform translation; |
+ translation.Translate(value.tx, value.ty); |
+ xform = translation * xform; |
Point3F p1(value.x1, value.y1, 0); |
Point3F p2(value.x2, value.y2, 0); |
xform.TransformPoint(p1); |
@@ -172,7 +177,9 @@ TEST(XFormTest, ConcatScale) { |
Transform xform; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
const TestCase& value = test_cases[i]; |
- xform.ConcatScale(value.scale, value.scale); |
+ Transform scale; |
+ scale.Scale(value.scale, value.scale); |
+ xform = scale * xform; |
Point3F p1(value.before, value.before, 0); |
Point3F p2(value.after, value.after, 0); |
xform.TransformPoint(p1); |
@@ -201,7 +208,9 @@ TEST(XFormTest, ConcatRotate) { |
Transform xform; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
const TestCase& value = test_cases[i]; |
- xform.ConcatRotate(value.degrees); |
+ Transform rotation; |
+ rotation.Rotate(value.degrees); |
+ xform = rotation * xform; |
Point3F p1(value.x1, value.y1, 0); |
Point3F p2(value.x2, value.y2, 0); |
xform.TransformPoint(p1); |
@@ -235,17 +244,17 @@ TEST(XFormTest, SetTranslate) { |
case 0: |
p1.SetPoint(value.x1, 0, 0); |
p2.SetPoint(value.x2, 0, 0); |
- xform.SetTranslateX(value.tx); |
+ xform.Translate(value.tx, 0.0); |
break; |
case 1: |
p1.SetPoint(0, value.y1, 0); |
p2.SetPoint(0, value.y2, 0); |
- xform.SetTranslateY(value.ty); |
+ xform.Translate(0.0, value.ty); |
break; |
case 2: |
p1.SetPoint(value.x1, value.y1, 0); |
p2.SetPoint(value.x2, value.y2, 0); |
- xform.SetTranslate(value.tx, value.ty); |
+ xform.Translate(value.tx, value.ty); |
break; |
} |
p0 = p1; |
@@ -282,17 +291,17 @@ TEST(XFormTest, SetScale) { |
case 0: |
p1.SetPoint(value.before, 0, 0); |
p2.SetPoint(value.after, 0, 0); |
- xform.SetScaleX(value.s); |
+ xform.Scale(value.s, 1.0); |
break; |
case 1: |
p1.SetPoint(0, value.before, 0); |
p2.SetPoint(0, value.after, 0); |
- xform.SetScaleY(value.s); |
+ xform.Scale(1.0, value.s); |
break; |
case 2: |
p1.SetPoint(value.before, value.before, 0); |
p2.SetPoint(value.after, value.after, 0); |
- xform.SetScale(value.s, value.s); |
+ xform.Scale(value.s, value.s); |
break; |
} |
p0 = p1; |
@@ -333,7 +342,7 @@ TEST(XFormTest, SetRotate) { |
Point3F p2(value.xprime, value.yprime, 0); |
p0 = p1; |
Transform xform; |
- xform.SetRotate(value.degree); |
+ xform.Rotate(value.degree); |
// just want to make sure that we don't crash in the case of NaN. |
if (value.degree == value.degree) { |
xform.TransformPoint(p1); |
@@ -366,7 +375,9 @@ TEST(XFormTest, ConcatTranslate2D) { |
Transform xform; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
const TestCase& value = test_cases[i]; |
- xform.ConcatTranslate(value.tx, value.ty); |
+ Transform translation; |
+ translation.Translate(value.tx, value.ty); |
+ xform = translation * xform; |
Point p1(value.x1, value.y1); |
Point p2(value.x2, value.y2); |
xform.TransformPoint(p1); |
@@ -394,7 +405,9 @@ TEST(XFormTest, ConcatScale2D) { |
Transform xform; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
const TestCase& value = test_cases[i]; |
- xform.ConcatScale(value.scale, value.scale); |
+ Transform scale; |
+ scale.Scale(value.scale, value.scale); |
+ xform = scale * xform; |
Point p1(value.before, value.before); |
Point p2(value.after, value.after); |
xform.TransformPoint(p1); |
@@ -424,7 +437,9 @@ TEST(XFormTest, ConcatRotate2D) { |
Transform xform; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
const TestCase& value = test_cases[i]; |
- xform.ConcatRotate(value.degrees); |
+ Transform rotation; |
+ rotation.Rotate(value.degrees); |
+ xform = rotation * xform; |
Point p1(value.x1, value.y1); |
Point p2(value.x2, value.y2); |
xform.TransformPoint(p1); |
@@ -461,18 +476,18 @@ TEST(XFormTest, SetTranslate2D) { |
case 0: |
p1.SetPoint(value.x1, 0); |
p2.SetPoint(value.x2, 0); |
- xform.SetTranslateX(value.tx + j * epsilon); |
+ xform.Translate(value.tx + j * epsilon, 0.0); |
break; |
case 1: |
p1.SetPoint(0, value.y1); |
p2.SetPoint(0, value.y2); |
- xform.SetTranslateY(value.ty + j * epsilon); |
+ xform.Translate(0.0, value.ty + j * epsilon); |
break; |
case 2: |
p1.SetPoint(value.x1, value.y1); |
p2.SetPoint(value.x2, value.y2); |
- xform.SetTranslate(value.tx + j * epsilon, |
- value.ty + j * epsilon); |
+ xform.Translate(value.tx + j * epsilon, |
+ value.ty + j * epsilon); |
break; |
} |
p0 = p1; |
@@ -514,20 +529,20 @@ TEST(XFormTest, SetScale2D) { |
case 0: |
p1.SetPoint(value.before, 0); |
p2.SetPoint(value.after, 0); |
- xform.SetScaleX(value.s + j * epsilon); |
+ xform.Scale(value.s + j * epsilon, 1.0); |
break; |
case 1: |
p1.SetPoint(0, value.before); |
p2.SetPoint(0, value.after); |
- xform.SetScaleY(value.s + j * epsilon); |
+ xform.Scale(1.0, value.s + j * epsilon); |
break; |
case 2: |
p1.SetPoint(value.before, |
value.before); |
p2.SetPoint(value.after, |
value.after); |
- xform.SetScale(value.s + j * epsilon, |
- value.s + j * epsilon); |
+ xform.Scale(value.s + j * epsilon, |
+ value.s + j * epsilon); |
break; |
} |
p0 = p1; |
@@ -571,7 +586,7 @@ TEST(XFormTest, SetRotate2D) { |
Point pt(value.x, value.y); |
Transform xform; |
// should be invariant to small floating point errors. |
- xform.SetRotate(value.degree + j * epsilon); |
+ xform.Rotate(value.degree + j * epsilon); |
// just want to make sure that we don't crash in the case of NaN. |
if (value.degree == value.degree) { |
xform.TransformPoint(pt); |
@@ -589,7 +604,7 @@ TEST(XFormTest, BlendTranslate) { |
Transform from; |
for (int i = 0; i < 10; ++i) { |
Transform to; |
- to.SetTranslate3d(1, 1, 1); |
+ to.Translate3d(1, 1, 1); |
double t = i / 9.0; |
EXPECT_TRUE(to.Blend(from, t)); |
EXPECT_FLOAT_EQ(t, to.matrix().get(0, 3)); |
@@ -599,22 +614,22 @@ TEST(XFormTest, BlendTranslate) { |
} |
TEST(XFormTest, BlendRotate) { |
- Point3F axes[] = { |
- Point3F(1, 0, 0), |
- Point3F(0, 1, 0), |
- Point3F(0, 0, 1), |
- Point3F(1, 1, 1) |
+ Vector3dF axes[] = { |
+ Vector3dF(1, 0, 0), |
+ Vector3dF(0, 1, 0), |
+ Vector3dF(0, 0, 1), |
+ Vector3dF(1, 1, 1) |
}; |
Transform from; |
for (size_t index = 0; index < ARRAYSIZE_UNSAFE(axes); ++index) { |
for (int i = 0; i < 10; ++i) { |
Transform to; |
- to.SetRotateAbout(axes[index], 90); |
+ to.RotateAbout(axes[index], 90); |
double t = i / 9.0; |
EXPECT_TRUE(to.Blend(from, t)); |
Transform expected; |
- expected.SetRotateAbout(axes[index], 90 * t); |
+ expected.RotateAbout(axes[index], 90 * t); |
EXPECT_TRUE(MatricesAreNearlyEqual(expected, to)); |
} |
@@ -622,16 +637,16 @@ TEST(XFormTest, BlendRotate) { |
} |
TEST(XFormTest, CannotBlend180DegreeRotation) { |
- Point3F axes[] = { |
- Point3F(1, 0, 0), |
- Point3F(0, 1, 0), |
- Point3F(0, 0, 1), |
- Point3F(1, 1, 1) |
+ Vector3dF axes[] = { |
+ Vector3dF(1, 0, 0), |
+ Vector3dF(0, 1, 0), |
+ Vector3dF(0, 0, 1), |
+ Vector3dF(1, 1, 1) |
}; |
Transform from; |
for (size_t index = 0; index < ARRAYSIZE_UNSAFE(axes); ++index) { |
Transform to; |
- to.SetRotateAbout(axes[index], 180); |
+ to.RotateAbout(axes[index], 180); |
EXPECT_FALSE(to.Blend(from, 0.5)); |
} |
} |
@@ -640,7 +655,7 @@ TEST(XFormTest, BlendScale) { |
Transform from; |
for (int i = 0; i < 10; ++i) { |
Transform to; |
- to.SetScale3d(5, 4, 3); |
+ to.Scale3d(5, 4, 3); |
double t = i / 9.0; |
EXPECT_TRUE(to.Blend(from, t)); |
EXPECT_FLOAT_EQ(t * 4 + 1, to.matrix().get(0, 0)); |
@@ -653,12 +668,12 @@ TEST(XFormTest, BlendSkew) { |
Transform from; |
for (int i = 0; i < 2; ++i) { |
Transform to; |
- to.SetSkewX(20); |
- to.PreconcatSkewY(10); |
+ to.SkewX(20); |
+ to.SkewY(10); |
double t = i; |
Transform expected; |
- expected.SetSkewX(t * 20); |
- expected.PreconcatSkewY(t * 10); |
+ expected.SkewX(t * 20); |
+ expected.SkewY(t * 10); |
EXPECT_TRUE(to.Blend(from, t)); |
EXPECT_TRUE(MatricesAreNearlyEqual(expected, to)); |
} |
@@ -666,13 +681,13 @@ TEST(XFormTest, BlendSkew) { |
TEST(XFormTest, BlendPerspective) { |
Transform from; |
- from.SetPerspectiveDepth(200); |
+ from.ApplyPerspectiveDepth(200); |
for (int i = 0; i < 2; ++i) { |
Transform to; |
- to.SetPerspectiveDepth(800); |
+ to.ApplyPerspectiveDepth(800); |
double t = i; |
Transform expected; |
- expected.SetPerspectiveDepth(t * 600 + 200); |
+ expected.ApplyPerspectiveDepth(t * 600 + 200); |
EXPECT_TRUE(to.Blend(from, t)); |
EXPECT_TRUE(MatricesAreNearlyEqual(expected, to)); |
} |
@@ -695,16 +710,16 @@ TEST(XFormTest, CannotBlendSingularMatrix) { |
TEST(XFormTest, VerifyBlendForTranslation) |
{ |
Transform from; |
- from.PreconcatTranslate3d(100, 200, 100); |
+ from.Translate3d(100, 200, 100); |
Transform to; |
- to.PreconcatTranslate3d(200, 100, 300); |
+ to.Translate3d(200, 100, 300); |
to.Blend(from, 0); |
EXPECT_EQ(from, to); |
to = Transform(); |
- to.PreconcatTranslate3d(200, 100, 300); |
+ to.Translate3d(200, 100, 300); |
to.Blend(from, 0.25); |
EXPECT_ROW1_EQ(1, 0, 0, 125, to); |
EXPECT_ROW2_EQ(0, 1, 0, 175, to); |
@@ -712,7 +727,7 @@ TEST(XFormTest, VerifyBlendForTranslation) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatTranslate3d(200, 100, 300); |
+ to.Translate3d(200, 100, 300); |
to.Blend(from, 0.5); |
EXPECT_ROW1_EQ(1, 0, 0, 150, to); |
EXPECT_ROW2_EQ(0, 1, 0, 150, to); |
@@ -720,7 +735,7 @@ TEST(XFormTest, VerifyBlendForTranslation) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatTranslate3d(200, 100, 300); |
+ to.Translate3d(200, 100, 300); |
to.Blend(from, 1); |
EXPECT_ROW1_EQ(1, 0, 0, 200, to); |
EXPECT_ROW2_EQ(0, 1, 0, 100, to); |
@@ -731,16 +746,16 @@ TEST(XFormTest, VerifyBlendForTranslation) |
TEST(XFormTest, VerifyBlendForScale) |
{ |
Transform from; |
- from.PreconcatScale3d(100, 200, 100); |
+ from.Scale3d(100, 200, 100); |
Transform to; |
- to.PreconcatScale3d(200, 100, 300); |
+ to.Scale3d(200, 100, 300); |
to.Blend(from, 0); |
EXPECT_EQ(from, to); |
to = Transform(); |
- to.PreconcatScale3d(200, 100, 300); |
+ to.Scale3d(200, 100, 300); |
to.Blend(from, 0.25); |
EXPECT_ROW1_EQ(125, 0, 0, 0, to); |
EXPECT_ROW2_EQ(0, 175, 0, 0, to); |
@@ -748,7 +763,7 @@ TEST(XFormTest, VerifyBlendForScale) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatScale3d(200, 100, 300); |
+ to.Scale3d(200, 100, 300); |
to.Blend(from, 0.5); |
EXPECT_ROW1_EQ(150, 0, 0, 0, to); |
EXPECT_ROW2_EQ(0, 150, 0, 0, to); |
@@ -756,7 +771,7 @@ TEST(XFormTest, VerifyBlendForScale) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatScale3d(200, 100, 300); |
+ to.Scale3d(200, 100, 300); |
to.Blend(from, 1); |
EXPECT_ROW1_EQ(200, 0, 0, 0, to); |
EXPECT_ROW2_EQ(0, 100, 0, 0, to); |
@@ -767,16 +782,16 @@ TEST(XFormTest, VerifyBlendForScale) |
TEST(XFormTest, VerifyBlendForSkewX) |
{ |
Transform from; |
- from.PreconcatSkewX(0); |
+ from.SkewX(0); |
Transform to; |
- to.PreconcatSkewX(45); |
+ to.SkewX(45); |
to.Blend(from, 0); |
EXPECT_EQ(from, to); |
to = Transform(); |
- to.PreconcatSkewX(45); |
+ to.SkewX(45); |
to.Blend(from, 0.5); |
EXPECT_ROW1_EQ(1, 0.5, 0, 0, to); |
EXPECT_ROW2_EQ(0, 1, 0, 0, to); |
@@ -784,7 +799,7 @@ TEST(XFormTest, VerifyBlendForSkewX) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatSkewX(45); |
+ to.SkewX(45); |
to.Blend(from, 0.25); |
EXPECT_ROW1_EQ(1, 0.25, 0, 0, to); |
EXPECT_ROW2_EQ(0, 1, 0, 0, to); |
@@ -792,7 +807,7 @@ TEST(XFormTest, VerifyBlendForSkewX) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatSkewX(45); |
+ to.SkewX(45); |
to.Blend(from, 1); |
EXPECT_ROW1_EQ(1, 1, 0, 0, to); |
EXPECT_ROW2_EQ(0, 1, 0, 0, to); |
@@ -820,16 +835,16 @@ TEST(XFormTest, VerifyBlendForSkewY) |
// error. |
Transform from; |
- from.PreconcatSkewY(0); |
+ from.SkewY(0); |
Transform to; |
- to.PreconcatSkewY(45); |
+ to.SkewY(45); |
to.Blend(from, 0); |
EXPECT_EQ(from, to); |
to = Transform(); |
- to.PreconcatSkewY(45); |
+ to.SkewY(45); |
to.Blend(from, 0.25); |
EXPECT_ROW1_NEAR(1.0823489449280947471976333, |
0.0464370719145053845178239, |
@@ -847,7 +862,7 @@ TEST(XFormTest, VerifyBlendForSkewY) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatSkewY(45); |
+ to.SkewY(45); |
to.Blend(from, 0.5); |
EXPECT_ROW1_NEAR(1.1152212925809066312865525, |
0.0676495144007326631996335, |
@@ -865,7 +880,7 @@ TEST(XFormTest, VerifyBlendForSkewY) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatSkewY(45); |
+ to.SkewY(45); |
to.Blend(from, 1); |
EXPECT_ROW1_NEAR(1, 0, 0, 0, to, LOOSE_ERROR_THRESHOLD); |
EXPECT_ROW2_NEAR(1, 1, 0, 0, to, LOOSE_ERROR_THRESHOLD); |
@@ -881,17 +896,17 @@ TEST(XFormTest, VerifyBlendForRotationAboutX) |
// Euler angles. |
Transform from; |
- from.PreconcatRotateAbout(Point3F(1, 0, 0), 0); |
+ from.RotateAbout(Vector3dF(1, 0, 0), 0); |
Transform to; |
- to.PreconcatRotateAbout(Point3F(1, 0, 0), 90); |
+ to.RotateAbout(Vector3dF(1, 0, 0), 90); |
to.Blend(from, 0); |
EXPECT_EQ(from, to); |
double expectedRotationAngle = 22.5 * M_PI / 180.0; |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(1, 0, 0), 90); |
+ to.RotateAbout(Vector3dF(1, 0, 0), 90); |
to.Blend(from, 0.25); |
EXPECT_ROW1_NEAR(1, 0, 0, 0, to, ERROR_THRESHOLD); |
EXPECT_ROW2_NEAR(0, |
@@ -910,7 +925,7 @@ TEST(XFormTest, VerifyBlendForRotationAboutX) |
expectedRotationAngle = 45 * M_PI / 180.0; |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(1, 0, 0), 90); |
+ to.RotateAbout(Vector3dF(1, 0, 0), 90); |
to.Blend(from, 0.5); |
EXPECT_ROW1_NEAR(1, 0, 0, 0, to, ERROR_THRESHOLD); |
EXPECT_ROW2_NEAR(0, |
@@ -928,7 +943,7 @@ TEST(XFormTest, VerifyBlendForRotationAboutX) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(1, 0, 0), 90); |
+ to.RotateAbout(Vector3dF(1, 0, 0), 90); |
to.Blend(from, 1); |
EXPECT_ROW1_NEAR(1, 0, 0, 0, to, ERROR_THRESHOLD); |
EXPECT_ROW2_NEAR(0, 0, -1, 0, to, ERROR_THRESHOLD); |
@@ -939,17 +954,17 @@ TEST(XFormTest, VerifyBlendForRotationAboutX) |
TEST(XFormTest, VerifyBlendForRotationAboutY) |
{ |
Transform from; |
- from.PreconcatRotateAbout(Point3F(0, 1, 0), 0); |
+ from.RotateAbout(Vector3dF(0, 1, 0), 0); |
Transform to; |
- to.PreconcatRotateAbout(Point3F(0, 1, 0), 90); |
+ to.RotateAbout(Vector3dF(0, 1, 0), 90); |
to.Blend(from, 0); |
EXPECT_EQ(from, to); |
double expectedRotationAngle = 22.5 * M_PI / 180.0; |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(0, 1, 0), 90); |
+ to.RotateAbout(Vector3dF(0, 1, 0), 90); |
to.Blend(from, 0.25); |
EXPECT_ROW1_NEAR(std::cos(expectedRotationAngle), |
0, |
@@ -968,7 +983,7 @@ TEST(XFormTest, VerifyBlendForRotationAboutY) |
expectedRotationAngle = 45 * M_PI / 180.0; |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(0, 1, 0), 90); |
+ to.RotateAbout(Vector3dF(0, 1, 0), 90); |
to.Blend(from, 0.5); |
EXPECT_ROW1_NEAR(std::cos(expectedRotationAngle), |
0, |
@@ -986,7 +1001,7 @@ TEST(XFormTest, VerifyBlendForRotationAboutY) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(0, 1, 0), 90); |
+ to.RotateAbout(Vector3dF(0, 1, 0), 90); |
to.Blend(from, 1); |
EXPECT_ROW1_NEAR(0, 0, 1, 0, to, ERROR_THRESHOLD); |
EXPECT_ROW2_NEAR(0, 1, 0, 0, to, ERROR_THRESHOLD); |
@@ -997,17 +1012,17 @@ TEST(XFormTest, VerifyBlendForRotationAboutY) |
TEST(XFormTest, VerifyBlendForRotationAboutZ) |
{ |
Transform from; |
- from.PreconcatRotateAbout(Point3F(0, 0, 1), 0); |
+ from.RotateAbout(Vector3dF(0, 0, 1), 0); |
Transform to; |
- to.PreconcatRotateAbout(Point3F(0, 0, 1), 90); |
+ to.RotateAbout(Vector3dF(0, 0, 1), 90); |
to.Blend(from, 0); |
EXPECT_EQ(from, to); |
double expectedRotationAngle = 22.5 * M_PI / 180.0; |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(0, 0, 1), 90); |
+ to.RotateAbout(Vector3dF(0, 0, 1), 90); |
to.Blend(from, 0.25); |
EXPECT_ROW1_NEAR(std::cos(expectedRotationAngle), |
-std::sin(expectedRotationAngle), |
@@ -1026,7 +1041,7 @@ TEST(XFormTest, VerifyBlendForRotationAboutZ) |
expectedRotationAngle = 45 * M_PI / 180.0; |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(0, 0, 1), 90); |
+ to.RotateAbout(Vector3dF(0, 0, 1), 90); |
to.Blend(from, 0.5); |
EXPECT_ROW1_NEAR(std::cos(expectedRotationAngle), |
-std::sin(expectedRotationAngle), |
@@ -1044,7 +1059,7 @@ TEST(XFormTest, VerifyBlendForRotationAboutZ) |
EXPECT_ROW4_EQ(0, 0, 0, 1, to); |
to = Transform(); |
- to.PreconcatRotateAbout(Point3F(0, 0, 1), 90); |
+ to.RotateAbout(Vector3dF(0, 0, 1), 90); |
to.Blend(from, 1); |
EXPECT_ROW1_NEAR(0, -1, 0, 0, to, ERROR_THRESHOLD); |
EXPECT_ROW2_NEAR(1, 0, 0, 0, to, ERROR_THRESHOLD); |
@@ -1067,11 +1082,11 @@ TEST(XFormTest, VerifyBlendForCompositeTransform) |
Transform to; |
Transform expectedEndOfAnimation; |
- expectedEndOfAnimation.PreconcatPerspectiveDepth(1); |
- expectedEndOfAnimation.PreconcatTranslate3d(10, 20, 30); |
- expectedEndOfAnimation.PreconcatRotateAbout(Point3F(0, 0, 1), 25); |
- expectedEndOfAnimation.PreconcatSkewY(45); |
- expectedEndOfAnimation.PreconcatScale3d(6, 7, 8); |
+ expectedEndOfAnimation.ApplyPerspectiveDepth(1); |
+ expectedEndOfAnimation.Translate3d(10, 20, 30); |
+ expectedEndOfAnimation.RotateAbout(Vector3dF(0, 0, 1), 25); |
+ expectedEndOfAnimation.SkewY(45); |
+ expectedEndOfAnimation.Scale3d(6, 7, 8); |
to = expectedEndOfAnimation; |
to.Blend(from, 0); |
@@ -1101,20 +1116,6 @@ TEST(XFormTest, VerifyBlendForCompositeTransform) |
EXPECT_TRUE(MatricesAreNearlyEqual(normalizedExpectedEndOfAnimation, to)); |
} |
-TEST(XFormTest, SetScaleZ) |
-{ |
- Transform scaled; |
- scaled.SetScaleZ(2); |
- EXPECT_FLOAT_EQ(2, scaled.matrix().get(2, 2)); |
-} |
- |
-TEST(XFormTest, SetTranslateZ) |
-{ |
- Transform translated; |
- translated.SetTranslateZ(2); |
- EXPECT_FLOAT_EQ(2, translated.matrix().get(2, 3)); |
-} |
- |
TEST(XFormTest, DecomposedTransformCtor) |
{ |
DecomposedTransform decomp; |
@@ -1132,6 +1133,31 @@ TEST(XFormTest, DecomposedTransformCtor) |
EXPECT_TRUE(MatricesAreNearlyEqual(identity, composed)); |
} |
+TEST(XFormTest, FactorTRS) { |
+ for (int degrees = 0; degrees < 180; ++degrees) { |
+ // build a transformation matrix. |
+ gfx::Transform transform; |
+ transform.Translate(degrees * 2, -degrees * 3); |
+ transform.Rotate(degrees); |
+ transform.Scale(degrees + 1, 2 * degrees + 1); |
+ |
+ // factor the matrix |
+ DecomposedTransform decomp; |
+ bool success = DecomposeTransform(&decomp, transform); |
+ EXPECT_TRUE(success); |
+ EXPECT_FLOAT_EQ(decomp.translate[0], degrees * 2); |
+ EXPECT_FLOAT_EQ(decomp.translate[1], -degrees * 3); |
+ double rotation = std::acos(decomp.quaternion[3]) * 360.0 / M_PI; |
+ while (rotation < 0.0) |
+ rotation += 360.0; |
+ while (rotation > 360.0) |
+ rotation -= 360.0; |
+ EXPECT_FLOAT_EQ(rotation, degrees); |
+ EXPECT_FLOAT_EQ(decomp.scale[0], degrees + 1); |
+ EXPECT_FLOAT_EQ(decomp.scale[1], 2 * degrees + 1); |
+ } |
+} |
+ |
} // namespace |
} // namespace gfx |