diff --git a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs
index 768a30e..fcf0791 100644
--- a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs
+++ b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs
@@ -25,7 +25,15 @@ namespace OSCADSharp.ConsoleTests
.Scale(1, 1, 2)
.Translate(10, 5, 2);
- Console.WriteLine(cube.ToString());
+ OSCADObject cylinder = new Cylinder()
+ {
+ Diameter = 25.4,
+ Height = 50.8
+ }.Translate(10, 5, 2);
+
+ var combined = cube.Union(cylinder);
+
+ Console.WriteLine(combined.ToString());
Console.ReadKey();
}
}
diff --git a/OSCADSharp/OSCADSharp/Booleans/Union.cs b/OSCADSharp/OSCADSharp/Booleans/Union.cs
new file mode 100644
index 0000000..48b6f65
--- /dev/null
+++ b/OSCADSharp/OSCADSharp/Booleans/Union.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OSCADSharp.Booleans
+{
+ ///
+ /// A union of child nodes. This is the sum of all children (logical or).
+ ///
+ internal class Union : OSCADObject
+ {
+ private IEnumerable children;
+
+ ///
+ /// Create a union that is the combination of all children
+ ///
+ /// OSCADObjects to combine
+ internal Union(IEnumerable children)
+ {
+ this.children = children;
+ }
+
+ public override string ToString()
+ {
+ string unionCommand = "union()";
+ StringBuilder sb = new StringBuilder();
+ foreach (var child in this.children)
+ {
+ sb.AppendLine(child.ToString());
+ }
+
+ var formatter = new BlockFormatter(unionCommand, sb.ToString());
+ return formatter.ToString();
+ }
+ }
+}
diff --git a/OSCADSharp/OSCADSharp/OSCADObject.cs b/OSCADSharp/OSCADSharp/OSCADObject.cs
index 5a808f3..6ba8083 100644
--- a/OSCADSharp/OSCADSharp/OSCADObject.cs
+++ b/OSCADSharp/OSCADSharp/OSCADObject.cs
@@ -1,4 +1,5 @@
-using OSCADSharp.Transforms;
+using OSCADSharp.Booleans;
+using OSCADSharp.Transforms;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -133,5 +134,19 @@ namespace OSCADSharp
return this.Translate(new Vector3(x, y, z));
}
#endregion
+
+ #region Boolean Operations
+ public OSCADObject Union(params OSCADObject[] objects)
+ {
+ if (objects == null || objects.Length < 1)
+ {
+ throw new ArgumentException("Union requires at least one non-null entities");
+ }
+
+ IEnumerable children = new List() { this };
+ children = children.Concat(objects);
+ return new Union(children);
+ }
+ #endregion
}
}
diff --git a/OSCADSharp/OSCADSharp/OSCADSharp.csproj b/OSCADSharp/OSCADSharp/OSCADSharp.csproj
index d8eebd4..1ad1a1e 100644
--- a/OSCADSharp/OSCADSharp/OSCADSharp.csproj
+++ b/OSCADSharp/OSCADSharp/OSCADSharp.csproj
@@ -41,6 +41,7 @@
+