+ Added some + and - operator tests

+ Adjusted behavior so that using + or - repeatedly adds to the same Union/Difference object instead of a nasty nested chain
This commit is contained in:
Michael Smith 2016-02-17 22:50:33 -08:00
parent 160986eb95
commit 69a739c12f
4 changed files with 80 additions and 11 deletions

View File

@ -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();

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}

View File

@ -307,7 +307,20 @@ namespace OSCADSharp
/// <returns></returns>
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 });
}
}
/// <summary>
@ -318,7 +331,20 @@ namespace OSCADSharp
/// <returns></returns>
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
}