From 80c400dee897b42f88590413d1ecfa42cfe6e41e Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Fri, 19 Feb 2016 17:33:30 -0800 Subject: [PATCH] Fix for an issue where Rotating/Translating an object, then using Scale would yield the wrong Position() value. --- OSCADSharp/OSCADSharp.ConsoleTests/Program.cs | 3 ++- .../OSCADSharp.UnitTests.csproj | 1 + .../Transforms/ScaleTests.cs | 23 +++++++++++++++++++ .../OSCADSharp/Transforms/ScaledObject.cs | 2 +- 4 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 OSCADSharp/OSCADSharp.UnitTests/Transforms/ScaleTests.cs diff --git a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs index ea57b78..4b37052 100644 --- a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs +++ b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs @@ -13,7 +13,8 @@ namespace OSCADSharp.ConsoleTests { static void Main(string[] args) { - var obj = new Cube() + new Sphere() + new Sphere().Translate(2, 2, 2) - new Cylinder(2, 5) + new Text3D("Hey hey!"); + var obj = new Cube(5, 5, 20) + .Translate(30, 0, 0).Rotate(0, 90, 0).Scale(2, 2, 2); var pos = obj.Position(); var cyl1 = new Cylinder(1, 100, true).Translate(pos); diff --git a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj index e721e83..d9bf4e0 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj +++ b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj @@ -65,6 +65,7 @@ + diff --git a/OSCADSharp/OSCADSharp.UnitTests/Transforms/ScaleTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Transforms/ScaleTests.cs new file mode 100644 index 0000000..efee6bb --- /dev/null +++ b/OSCADSharp/OSCADSharp.UnitTests/Transforms/ScaleTests.cs @@ -0,0 +1,23 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using OSCADSharp.Solids; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSCADSharp.UnitTests.Transforms +{ + [TestClass] + public class ScaleTests + { + [TestMethod] + public void Scale_TranslateRotateScaleStillYieldsCorrectPosition() + { + var obj = new Cube(5, 5, 20) + .Translate(30, 0, 0).Rotate(0, 90, 0).Scale(2, 2, 2); + + Assert.AreEqual(new Vector3(20, 5, -65), obj.Position()); + } + } +} diff --git a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs index ed30e60..fcba7c7 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ScaledObject.cs @@ -51,7 +51,7 @@ namespace OSCADSharp.Transforms public override Vector3 Position() { - return obj.Position(); + return obj.Position() * this.ScaleFactor; } } }