From 5a61dd2199f0a797a29201ed73a971d05550be69 Mon Sep 17 00:00:00 2001 From: Mike Smith Date: Sun, 14 Feb 2016 18:45:31 -0800 Subject: [PATCH] Fix for Hull and Minkowski not adding the basis object to the children affected by the Hull/Minkowski operation. --- OSCADSharp/OSCADSharp.ConsoleTests/Program.cs | 10 ++++--- OSCADSharp/OSCADSharp.UnitTests/HullTests.cs | 28 +++++++++++++++++++ .../OSCADSharp.UnitTests.csproj | 1 + OSCADSharp/OSCADSharp/OSCADObject.cs | 16 +++++------ 4 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 OSCADSharp/OSCADSharp.UnitTests/HullTests.cs diff --git a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs index a28f438..778f730 100644 --- a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs +++ b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs @@ -13,12 +13,14 @@ namespace OSCADSharp.ConsoleTests { static void Main(string[] args) { - var cube = new Cube(null, true).Translate(10, 0, 5).Scale(1, 1, 5); - var sphere = new Sphere().Mimic(cube).Translate(0, 0, 10); - string script = cube.Hull(sphere, new Cylinder()).ToString(); + var cube = new Cube(); + var sphere = new Sphere().Translate(0, 0, 2); + var hull = cube.Hull(sphere); + + string script = hull.ToString(); File.WriteAllLines("test.scad", new string[] { script.ToString() }); - Console.ReadKey(); + //Console.ReadKey(); } } } diff --git a/OSCADSharp/OSCADSharp.UnitTests/HullTests.cs b/OSCADSharp/OSCADSharp.UnitTests/HullTests.cs new file mode 100644 index 0000000..174698e --- /dev/null +++ b/OSCADSharp/OSCADSharp.UnitTests/HullTests.cs @@ -0,0 +1,28 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using OSCADSharp.Solids; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSCADSharp.UnitTests +{ + + [TestClass] + public class HullTests + { + [TestMethod] + public void Hull_BasisObjectAppearsInHullChildren() + { + var cube = new Cube(); + var sphere = new Sphere().Translate(0, 0, 2); + var hull = cube.Hull(sphere); + + var children = hull.Children(); + + Assert.IsTrue(children.Contains(cube)); + Assert.IsTrue(children.Contains(sphere)); + } + } +} diff --git a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj index 8f35a50..31cac6c 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj +++ b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj @@ -54,6 +54,7 @@ + diff --git a/OSCADSharp/OSCADSharp/OSCADObject.cs b/OSCADSharp/OSCADSharp/OSCADObject.cs index fa32235..d3034a0 100644 --- a/OSCADSharp/OSCADSharp/OSCADObject.cs +++ b/OSCADSharp/OSCADSharp/OSCADObject.cs @@ -139,9 +139,9 @@ namespace OSCADSharp /// /// Nodes to sum with /// A minkowski sum - public OSCADObject Minkowski(params OSCADObject[] nodes) + public OSCADObject Minkowski(params OSCADObject[] objects) { - return new MinkowskiedObject(nodes); + return doBlockStatement("Minkowski", objects, (children) => { return new MinkowskiedObject(children); }); } /// @@ -149,9 +149,9 @@ namespace OSCADSharp /// /// Nodes to hull /// Hull of nodes - public OSCADObject Hull(params OSCADObject[] nodes) + public OSCADObject Hull(params OSCADObject[] objects) { - return new HulledObject(nodes); + return doBlockStatement("Hull", objects, (children) => { return new HulledObject(children); }); } #endregion @@ -164,7 +164,7 @@ namespace OSCADSharp /// public OSCADObject Union(params OSCADObject[] objects) { - return doBoolean("Union", objects, (children) => { return new Union(children); }); + return doBlockStatement("Union", objects, (children) => { return new Union(children); }); } /// @@ -175,7 +175,7 @@ namespace OSCADSharp /// public OSCADObject Difference(params OSCADObject[] objects) { - return doBoolean("Difference", objects, (children) => { return new Difference(children); }); + return doBlockStatement("Difference", objects, (children) => { return new Difference(children); }); } /// @@ -187,10 +187,10 @@ namespace OSCADSharp /// public OSCADObject Intersection(params OSCADObject[] objects) { - return doBoolean("Intersection", objects, (children) => { return new Intersection(children); }); + return doBlockStatement("Intersection", objects, (children) => { return new Intersection(children); }); } - private OSCADObject doBoolean(string name, OSCADObject[] objects, Func, OSCADObject> factory) + private OSCADObject doBlockStatement(string name, OSCADObject[] objects, Func, OSCADObject> factory) { if (objects == null || objects.Length < 1) {