diff --git a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs index 650ae6b..a0748ee 100644 --- a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs +++ b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs @@ -13,7 +13,7 @@ namespace OSCADSharp.ConsoleTests { static void Main(string[] args) { - var obj = new Text3D("Hello, it's Meeeee."); + var obj = new Cube(5, 10, 20).Mirror(0, 0, 1); var pos = obj.Position(); var cyl1 = new Cylinder(1, 100, true).Translate(pos); diff --git a/OSCADSharp/OSCADSharp.UnitTests/MirrorTests.cs b/OSCADSharp/OSCADSharp.UnitTests/MirrorTests.cs new file mode 100644 index 0000000..1f972cb --- /dev/null +++ b/OSCADSharp/OSCADSharp.UnitTests/MirrorTests.cs @@ -0,0 +1,35 @@ +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 +{ + [TestClass] + public class MirrorTests + { + [TestMethod] + public void Mirror_SingleAxisMirrorInvertsPosition() + { + var cube = new Cube(5, 10, 20); + var xMirror = cube.Clone().Mirror(1, 0, 0); + var yMirror = cube.Clone().Mirror(0, 1, 0); + var zMirror = cube.Clone().Mirror(0, 0, 1); + + var pos = cube.Position().Clone(); + pos.X = -pos.X; + Assert.AreEqual(pos, xMirror.Position()); + + pos = cube.Position().Clone(); + pos.Y = -pos.Y; + Assert.AreEqual(pos, yMirror.Position()); + + pos = cube.Position().Clone(); + pos.Z = -pos.Z; + Assert.AreEqual(pos, zMirror.Position()); + } + } +} diff --git a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj index 6822582..b2e1d2e 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj +++ b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj @@ -56,6 +56,7 @@ + diff --git a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs index 7eb1793..2412980 100644 --- a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs @@ -1,4 +1,5 @@ using OSCADSharp.Scripting; +using OSCADSharp.Spatial; using System; using System.Collections.Generic; using System.Linq; @@ -50,9 +51,17 @@ namespace OSCADSharp.Transforms return new MirroredObject(obj, this.Normal); } + // TODO: This will yield incorrect positions if mirroring on multiple axes + // fix mirrored positions for multiple-axis mirroring public override Vector3 Position() { - throw new NotImplementedException(); + var pos = obj.Position(); + + double x = this.Normal.X != 0 ? pos.X * -1 : pos.X; + double y = this.Normal.Y != 0 ? pos.Y * -1 : pos.Y; + double z = this.Normal.Z != 0 ? pos.Z * -1 : pos.Z; + + return new Vector3(x, y, z); } } }