diff --git a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs index 778f730..da9aad6 100644 --- a/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs +++ b/OSCADSharp/OSCADSharp.ConsoleTests/Program.cs @@ -13,11 +13,15 @@ namespace OSCADSharp.ConsoleTests { static void Main(string[] args) { - var cube = new Cube(); - var sphere = new Sphere().Translate(0, 0, 2); - var hull = cube.Hull(sphere); + var cube = new Cube(50, 50, 50).Translate(10, 10, 0); - string script = hull.ToString(); + var pos = cube.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 = cube.Union(axisHelper).ToString(); File.WriteAllLines("test.scad", new string[] { script.ToString() }); //Console.ReadKey(); diff --git a/OSCADSharp/OSCADSharp.UnitTests/CubeTests.cs b/OSCADSharp/OSCADSharp.UnitTests/CubeTests.cs index 9af5d5f..2968f8a 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/CubeTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/CubeTests.cs @@ -53,5 +53,37 @@ namespace OSCADSharp.UnitTests Assert.IsTrue(script.StartsWith("cube(")); Assert.IsTrue(script.EndsWith(");")); } + + [TestMethod] + public void Cube_InitialPositionForNonCenteredCubeIsHalfLengthWidthAndHeight() + { + var cube = new Cube(10, 10, 10); + + Assert.IsTrue(cube.Position() == new Vector3(5, 5, 5)); + } + + [TestMethod] + public void Cube_InitialPositionIfCenteredIsOrigin() + { + var cube = new Cube(25, 25, 25, true); + + Assert.AreEqual(new Vector3(), cube.Position()); + } + + [TestMethod] + public void Cube_PositionMovesWithCubeOnTranslate() + { + var cube = new Cube(50, 50, 50).Translate(10, 10, 0); + + Assert.AreEqual(new Vector3(35, 35, 25), cube.Position()); + } + + [TestMethod] + public void Cube_PositionMovesWithCubeOnNegativeTranslate() + { + var cube = new Cube(50, 50, 50, true).Translate(-5, 0, -15); + + Assert.AreEqual(new Vector3(-5, 0, -15), cube.Position()); + } } } diff --git a/OSCADSharp/OSCADSharp/OSCADObject.cs b/OSCADSharp/OSCADSharp/OSCADObject.cs index 9205685..4ee907e 100644 --- a/OSCADSharp/OSCADSharp/OSCADObject.cs +++ b/OSCADSharp/OSCADSharp/OSCADObject.cs @@ -204,7 +204,6 @@ namespace OSCADSharp #endregion #region Utility Methods - protected Vector3 position; /// /// Returns the computed position of this object. /// diff --git a/OSCADSharp/OSCADSharp/Solids/Cube.cs b/OSCADSharp/OSCADSharp/Solids/Cube.cs index 70f8869..6945e1a 100644 --- a/OSCADSharp/OSCADSharp/Solids/Cube.cs +++ b/OSCADSharp/OSCADSharp/Solids/Cube.cs @@ -79,7 +79,17 @@ namespace OSCADSharp.Solids public override Vector3 Position() { - throw new NotImplementedException(); + Vector3 position; + if(this.Center == false) + { + position = new Vector3(this.Size.X / 2, this.Size.Y / 2, this.Size.Z / 2); + } + else + { + position = new Vector3(); + } + + return position; } #endregion } diff --git a/OSCADSharp/OSCADSharp/Spatial/Vector3.cs b/OSCADSharp/OSCADSharp/Spatial/Vector3.cs index 22d1192..dbf858c 100644 --- a/OSCADSharp/OSCADSharp/Spatial/Vector3.cs +++ b/OSCADSharp/OSCADSharp/Spatial/Vector3.cs @@ -46,7 +46,31 @@ namespace OSCADSharp return new Vector3(this.X, this.Y, this.Z); } - #region Operators + #region Operators/Overrides + public override bool Equals(object obj) + { + return this.GetHashCode() == obj.GetHashCode(); + } + + public override int GetHashCode() + { + return this.ToString().GetHashCode(); + } + + public static bool operator ==(Vector3 left, Vector3 right) + { + return left.X == right.X && + left.Y == right.Y && + left.Z == right.Z; + } + + public static bool operator !=(Vector3 left, Vector3 right) + { + return !(left.X == right.X && + left.Y == right.Y && + left.Z == right.Z); + } + public static Vector3 operator +(Vector3 left, Vector3 right) { return new Vector3(left.X + right.X, left.Y + right.Y, left.Z + right.Z); diff --git a/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs b/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs index 5583e33..6c6a047 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ColoredObject.cs @@ -53,7 +53,7 @@ namespace OSCADSharp.Transforms public override Vector3 Position() { - throw new NotImplementedException(); + return this.obj.Position(); } } } diff --git a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs index 78b3d47..e9f0c81 100644 --- a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs @@ -48,7 +48,7 @@ namespace OSCADSharp.Transforms public override Vector3 Position() { - throw new NotImplementedException(); + return this.obj.Position() + this.Vector; } } }