diff --git a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs index 1516b69..40907f9 100644 --- a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs +++ b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs @@ -13,17 +13,19 @@ namespace OSCADSharp.ConsoleTests { static void Main(string[] args) { - var obj = new Cube(5, 10, 20).Mirror(0, 0, 1).Mirror(0, 1, 0) - .Rotate(15, -45, 120).Translate(-20, 10, 15).Rotate(90, 15, 25) - .Translate(-10, -20, -20).Rotate(-90, -90, -45); + //var obj = new Cube(5, 10, 20).Mirror(0, 0, 1).Mirror(0, 1, 0) + // .Rotate(15, -45, 120).Translate(-20, 10, 15).Rotate(90, 15, 25) + // .Translate(-10, -20, -20).Rotate(-90, -90, -45); - var pos = obj.Position(); - var cyl1 = new Cylinder(1, 100, true).Translate(pos); - var cyl2 = new Cylinder(1, 100, true).Rotate(0, 90, 0).Translate(pos); - var cyl3 = new Cylinder(1, 100, true).Rotate(90, 0, 0).Translate(pos); - var axisHelper = cyl1.Union(cyl2, cyl3).Color("Red"); + var obj = new Cube() + new Sphere() + new Sphere().Translate(2, 2, 2) - new Cylinder(2, 5) + new Text3D("Hey hey!"); - string script = obj.Union(axisHelper).ToString(); + //var pos = obj.Position(); + //var cyl1 = new Cylinder(1, 100, true).Translate(pos); + //var cyl2 = new Cylinder(1, 100, true).Rotate(0, 90, 0).Translate(pos); + //var cyl3 = new Cylinder(1, 100, true).Rotate(90, 0, 0).Translate(pos); + //var axisHelper = cyl1.Union(cyl2, cyl3).Color("Red"); + + string script = obj.ToString(); //obj.Union(axisHelper).ToString(); File.WriteAllLines("test.scad", new string[] { script.ToString() }); //Console.ReadKey(); diff --git a/OSCADSharp/OSCADSharp.UnitTests/DifferenceTests.cs b/OSCADSharp/OSCADSharp.UnitTests/DifferenceTests.cs index 16b5c31..391dccf 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/DifferenceTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/DifferenceTests.cs @@ -1,6 +1,7 @@ using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using OSCADSharp.Solids; +using System.Linq; namespace OSCADSharp.UnitTests { @@ -15,5 +16,25 @@ namespace OSCADSharp.UnitTests var pos = diff.Position(); } + + [TestMethod] + public void Difference_MinusOperatorCreatesDifferenceObject() + { + var obj = new Cube() - new Sphere(); + var diff = new Sphere().Difference(new Cube()); + + Assert.IsTrue(obj.GetType() == diff.GetType()); + } + + [TestMethod] + public void Difference_ChainingMinusOperationAddsToTheSameDifferenceObject() + { + var obj = new Cube() - new Sphere() - new Text3D("WOW!") - new Cylinder().Translate(1, 2, 5); + var diff = new Sphere().Difference(new Cube()); + + var childrenThatAreDiffs = obj.Children().Where(child => child.GetType() == diff.GetType()).Count(); + + Assert.AreEqual(0, childrenThatAreDiffs); + } } } diff --git a/OSCADSharp/OSCADSharp.UnitTests/UnionTests.cs b/OSCADSharp/OSCADSharp.UnitTests/UnionTests.cs index 487d0c7..037d325 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/UnionTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/UnionTests.cs @@ -48,5 +48,25 @@ namespace OSCADSharp.UnitTests Assert.IsTrue(script.IndexOf("cube(") < script.IndexOf("cylinder(")); } + + [TestMethod] + public void Union_AddingObjectsCreatesUnion() + { + var obj = new Cube() + new Cylinder(); + var union = new Cube().Union(new Cylinder()); + + Assert.IsTrue(obj.GetType() == union.GetType()); + } + + [TestMethod] + public void Union_ChainingAdditionAddsToTheSameUnion() + { + var obj = new Cube() + new Sphere() + new Text3D("WOW!") + new Cylinder().Translate(1, 2, 5); + var union = new Sphere().Union(new Cube()); + + var unionChildrenCount = obj.Children().Where(child => child.GetType() == union.GetType()).Count(); + + Assert.AreEqual(0, unionChildrenCount); + } } } diff --git a/OSCADSharp/OSCADSharp/OSCADObject.cs b/OSCADSharp/OSCADSharp/OSCADObject.cs index 927d06c..4908489 100644 --- a/OSCADSharp/OSCADSharp/OSCADObject.cs +++ b/OSCADSharp/OSCADSharp/OSCADObject.cs @@ -307,7 +307,20 @@ namespace OSCADSharp /// public static OSCADObject operator +(OSCADObject left, OSCADObject right) { - return new Union(new OSCADObject[] {left, right }); + if(left.GetType() == typeof(Union)) + { + left.children.Add(right); + return left; + } + else if(right.GetType() == typeof(Union)) + { + right.children.Add(left); + return right; + } + else + { + return new Union(new OSCADObject[] {left, right }); + } } /// @@ -318,7 +331,20 @@ namespace OSCADSharp /// public static OSCADObject operator -(OSCADObject left, OSCADObject right) { - return new Difference(new OSCADObject[] {left, right }); + if (left.GetType() == typeof(Difference)) + { + left.children.Add(right); + return left; + } + else if (right.GetType() == typeof(Difference)) + { + right.children.Add(left); + return right; + } + else + { + return new Difference(new OSCADObject[] {left, right }); + } } #endregion }