From efc981579f9f88739eb8a2966f9e7314c760fd7d Mon Sep 17 00:00:00 2001 From: Mike Smith Date: Sun, 7 Feb 2016 21:07:58 -0800 Subject: [PATCH] Added Union (first Boolean operation) --- OSCADSharp/OSCADSharp.ConsoleTests/Program.cs | 10 ++++- OSCADSharp/OSCADSharp/Booleans/Union.cs | 38 +++++++++++++++++++ OSCADSharp/OSCADSharp/OSCADObject.cs | 17 ++++++++- OSCADSharp/OSCADSharp/OSCADSharp.csproj | 1 + 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 OSCADSharp/OSCADSharp/Booleans/Union.cs 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 @@ +