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);
}
}
}