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
///