diff --git a/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs index b060287..474ebb5 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs @@ -222,5 +222,22 @@ namespace OSCADSharp.UnitTests Assert.IsTrue(script.Contains("d2 = mainColumn")); Assert.IsTrue(script.Contains("h = overallHeight")); } + + [TestMethod] + public void Cylinder_NegationOnConstructorVariablesProvidesExpectedOutput() + { + Variable wheelThickness = new Variable("wheelThickness", Inches.Eigth + Inches.Sixteenth); + Variable wheelDiameter = new Variable("wheelDiameter", Inches.ToMillimeters(1.5)); + Variable wheelHoleDiameter = new Variable("wheelHoleDiameter", Inches.Quarter); + + OSCADObject cyl = new Cylinder(wheelHoleDiameter - 1, wheelHoleDiameter - 1, wheelThickness + 2) + .Translate(0, -wheelDiameter / 2 + wheelHoleDiameter / 2, 0); + + string script = cyl.ToString(); + + Assert.IsTrue(script.Contains("translate(v = [0, -wheelDiameter / 2 + wheelHoleDiameter / 2, 0])")); + Assert.IsTrue(script.Contains("cylinder(center = false, d1 = wheelHoleDiameter - 1, d2 = wheelHoleDiameter - 1, h = wheelThickness + 2);")); + + } } } diff --git a/OSCADSharp/OSCADSharp/Scripting/Variable.cs b/OSCADSharp/OSCADSharp/Scripting/Variable.cs index 695c627..6ce1486 100644 --- a/OSCADSharp/OSCADSharp/Scripting/Variable.cs +++ b/OSCADSharp/OSCADSharp/Scripting/Variable.cs @@ -113,6 +113,27 @@ namespace OSCADSharp.Scripting return new Variable(String.Format("{0} - {1}", left.Name, right.Name), VariableCalculator.Subtract(left.Value, right.Value)); } + /// + /// Numerical negation on a variable + /// + /// + /// + public static Variable operator -(Variable right) + { + object value = null; + + if (VariableCalculator.IsNumeric(right.Value)) + { + value = -Convert.ToDouble(right.Value); + } + else if(VariableCalculator.IsVector(right.Value)) + { + value = ((Vector3)right.Value).Negate(); + } + + return new Variable(String.Format("-{0}", right.Name), value); + } + /// /// Subtracts a value from a variable ///