+ 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) static void Main(string[] args)
{ {
var obj = new Cube(5, 10, 20).Mirror(0, 0, 1).Mirror(0, 1, 0) //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) // .Rotate(15, -45, 120).Translate(-20, 10, 15).Rotate(90, 15, 25)
.Translate(-10, -20, -20).Rotate(-90, -90, -45); // .Translate(-10, -20, -20).Rotate(-90, -90, -45);
var pos = obj.Position(); var obj = new Cube() + new Sphere() + new Sphere().Translate(2, 2, 2) - new Cylinder(2, 5) + new Text3D("Hey hey!");
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.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() }); File.WriteAllLines("test.scad", new string[] { script.ToString() });
//Console.ReadKey(); //Console.ReadKey();

View File

@ -1,6 +1,7 @@
using System; using System;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using OSCADSharp.Solids; using OSCADSharp.Solids;
using System.Linq;
namespace OSCADSharp.UnitTests namespace OSCADSharp.UnitTests
{ {
@ -15,5 +16,25 @@ namespace OSCADSharp.UnitTests
var pos = diff.Position(); 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(")); 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> /// <returns></returns>
public static OSCADObject operator +(OSCADObject left, OSCADObject right) 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> /// <summary>
@ -318,7 +331,20 @@ namespace OSCADSharp
/// <returns></returns> /// <returns></returns>
public static OSCADObject operator -(OSCADObject left, OSCADObject right) 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 #endregion
} }