diff --git a/OSCADSharp/OSCADSharp.UnitTests/MirrorTests.cs b/OSCADSharp/OSCADSharp.UnitTests/MirrorTests.cs index 1f972cb..dc2747b 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/MirrorTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/MirrorTests.cs @@ -31,5 +31,14 @@ namespace OSCADSharp.UnitTests pos.Z = -pos.Z; Assert.AreEqual(pos, zMirror.Position()); } + + [TestMethod] + [ExpectedException(typeof(NotSupportedException))] + public void Mirror_MultiAxisPositionThrowsNotSupportedException() + { + var cube = new Cube(5, 10, 20); + + var pos = cube.Mirror(1, 1, 0).Position(); + } } } diff --git a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs index 2412980..05f4dc7 100644 --- a/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/MirroredObject.cs @@ -55,6 +55,11 @@ namespace OSCADSharp.Transforms // fix mirrored positions for multiple-axis mirroring public override Vector3 Position() { + if (this.isMoreThanOneAxis()) + { + throw new NotSupportedException("Getting the position of an object that's been mirrored on more than one axis is not currently supported."); + } + var pos = obj.Position(); double x = this.Normal.X != 0 ? pos.X * -1 : pos.X; @@ -63,5 +68,11 @@ namespace OSCADSharp.Transforms return new Vector3(x, y, z); } + + private bool isMoreThanOneAxis() + { + return (this.Normal.X != 0 && (this.Normal.Y != 0 || this.Normal.Z != 0)) || + (this.Normal.Y != 0 && (this.Normal.X != 0 || this.Normal.Z != 0)); + } } }