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
}