From de013112db03f0b88081a87e1894b88f2b21aab1 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sun, 6 Mar 2016 18:09:21 -0800 Subject: [PATCH] + Renamed Variable.Name to Variable.Text + Added CompoundVariable as result from operations on variables + Added constructor flag for Variable to optionally add it to globals on creation --- .../OSCADSharp.UnitTests.csproj | 1 + .../Scripting/VariableTests.cs | 30 ++++++++++++++ .../Solids/CylinderTests.cs | 16 ++++---- .../Solids/Text3DTests.cs | 24 ++++++------ .../Internal/Bindings/BindableBoolean.cs | 4 +- .../Internal/Bindings/BindableVector.cs | 6 +-- .../Internal/Scripting/CompoundVariable.cs | 15 +++++++ .../Internal/Scripting/StatementBuilder.cs | 2 +- .../Internal/Transforms/ColoredObject.cs | 4 +- .../Internal/Transforms/MirroredObject.cs | 2 +- .../Internal/Transforms/ResizedObject.cs | 2 +- .../Internal/Transforms/RotatedObject.cs | 2 +- .../Internal/Transforms/ScaledObject.cs | 2 +- .../Internal/Transforms/TranslatedObject.cs | 2 +- OSCADSharp/OSCADSharp/OSCADSharp.csproj | 1 + .../OSCADSharp/Public/Scripting/Variable.cs | 39 +++++++++++-------- .../OSCADSharp/Public/Scripting/Variables.cs | 2 +- OSCADSharp/OSCADSharp/Public/Solids/Text3D.cs | 2 +- 18 files changed, 105 insertions(+), 51 deletions(-) create mode 100644 OSCADSharp/OSCADSharp.UnitTests/Scripting/VariableTests.cs create mode 100644 OSCADSharp/OSCADSharp/Internal/Scripting/CompoundVariable.cs diff --git a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj index 0d6119f..3b7cf6c 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj +++ b/OSCADSharp/OSCADSharp.UnitTests/OSCADSharp.UnitTests.csproj @@ -56,6 +56,7 @@ + diff --git a/OSCADSharp/OSCADSharp.UnitTests/Scripting/VariableTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Scripting/VariableTests.cs new file mode 100644 index 0000000..ab973c0 --- /dev/null +++ b/OSCADSharp/OSCADSharp.UnitTests/Scripting/VariableTests.cs @@ -0,0 +1,30 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSCADSharp.UnitTests.Scripting +{ + [TestClass] + public class VariableTests + { + [TestMethod] + public void Variables_CreatingVariableWithTrueForGlobalAddsGlobals() + { + var myVariable = new Variable("overallWidth", Inches.ToMillimeters(3.5), true); + + Assert.AreEqual(Variables.Global.Get("overallWidth"), myVariable); + } + + [TestMethod] + public void Variables_ComputingAVariableValueResultsInACompoundVariable() + { + var compound = new Variable("x", 5) / 12; + + string type = compound.GetType().ToString(); + Assert.AreEqual("OSCADSharp.Scripting.CompoundVariable", type); + } + } +} diff --git a/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs index bfa95e3..97bf045 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs @@ -115,8 +115,8 @@ namespace OSCADSharp.UnitTests Assert.AreEqual(Convert.ToDouble(radius1.Value), obj.Radius1); Assert.AreEqual(Convert.ToDouble(radius2.Value), obj.Radius2); - Assert.IsTrue(script.Contains(String.Format("r1 = {0}", radius1.Name))); - Assert.IsTrue(script.Contains(String.Format("r2 = {0}", radius2.Name))); + Assert.IsTrue(script.Contains(String.Format("r1 = {0}", radius1.Text))); + Assert.IsTrue(script.Contains(String.Format("r2 = {0}", radius2.Text))); } [TestMethod] @@ -133,8 +133,8 @@ namespace OSCADSharp.UnitTests Assert.AreEqual(Convert.ToDouble(d1.Value), obj.Diameter1); Assert.AreEqual(Convert.ToDouble(d2.Value), obj.Diameter2); - Assert.IsTrue(script.Contains(String.Format("d1 = {0}", d1.Name))); - Assert.IsTrue(script.Contains(String.Format("d2 = {0}", d2.Name))); + Assert.IsTrue(script.Contains(String.Format("d1 = {0}", d1.Text))); + Assert.IsTrue(script.Contains(String.Format("d2 = {0}", d2.Text))); } [TestMethod] @@ -149,16 +149,16 @@ namespace OSCADSharp.UnitTests string script = obj.ToString(); Assert.AreEqual(Convert.ToDouble(radius.Value), obj.Radius); - Assert.IsTrue(script.Contains(String.Format("r = {0}", radius.Name))); - Assert.IsFalse(script.Contains(String.Format("d = {0}", diameter.Name))); + Assert.IsTrue(script.Contains(String.Format("r = {0}", radius.Text))); + Assert.IsFalse(script.Contains(String.Format("d = {0}", diameter.Text))); obj.Bind("Diameter", diameter); script = obj.ToString(); Assert.AreEqual(Convert.ToDouble(diameter.Value), obj.Diameter); - Assert.IsTrue(script.Contains(String.Format("d = {0}", diameter.Name))); - Assert.IsFalse(script.Contains(String.Format("r = {0}", radius.Name))); + Assert.IsTrue(script.Contains(String.Format("d = {0}", diameter.Text))); + Assert.IsFalse(script.Contains(String.Format("r = {0}", radius.Text))); } [TestMethod] diff --git a/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs index bbc212b..a767056 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs @@ -41,8 +41,8 @@ namespace OSCADSharp.UnitTests Assert.AreEqual(text.Value, obj.Text); Assert.IsTrue(size.Value.ToString() == obj.Size.ToString()); - Assert.IsTrue(script.Contains(String.Format("text(\"{0}\"", text.Name))); - Assert.IsTrue(script.Contains(String.Format("size = {0}", size.Name))); + Assert.IsTrue(script.Contains(String.Format("text(\"{0}\"", text.Text))); + Assert.IsTrue(script.Contains(String.Format("size = {0}", size.Text))); } [TestMethod] @@ -60,8 +60,8 @@ namespace OSCADSharp.UnitTests Assert.AreEqual(font.Value, obj.Font); Assert.IsTrue(spacing.Value.ToString() == obj.Spacing.ToString()); - Assert.IsTrue(script.Contains(String.Format("font = {0}", font.Name))); - Assert.IsTrue(script.Contains(String.Format("spacing = {0}", spacing.Name))); + Assert.IsTrue(script.Contains(String.Format("font = {0}", font.Text))); + Assert.IsTrue(script.Contains(String.Format("spacing = {0}", spacing.Text))); } [TestMethod] @@ -79,8 +79,8 @@ namespace OSCADSharp.UnitTests Assert.AreEqual(direction.Value, obj.TextDirection); Assert.AreEqual(language.Value, obj.Language); - Assert.IsTrue(script.Contains(String.Format("direction = {0}", direction.Name))); - Assert.IsTrue(script.Contains(String.Format("language = {0}", language.Name))); + Assert.IsTrue(script.Contains(String.Format("direction = {0}", direction.Text))); + Assert.IsTrue(script.Contains(String.Format("language = {0}", language.Text))); } [TestMethod] @@ -93,8 +93,8 @@ namespace OSCADSharp.UnitTests string script = txt.ToString(); - Assert.IsTrue(script.Contains(String.Format("text(\"{0}\"", text.Name))); - Assert.IsTrue(script.Contains(String.Format("size = {0}", size.Name))); + Assert.IsTrue(script.Contains(String.Format("text(\"{0}\"", text.Text))); + Assert.IsTrue(script.Contains(String.Format("size = {0}", size.Text))); } [TestMethod] @@ -111,10 +111,10 @@ namespace OSCADSharp.UnitTests string script = clone.ToString(); - Assert.IsTrue(script.Contains(String.Format("text(\"{0}\"", text.Name))); - Assert.IsTrue(script.Contains(String.Format("size = {0}", size.Name))); - Assert.IsTrue(script.Contains(String.Format("mirror(xMirror)", size.Name))); - Assert.IsTrue(script.Contains(String.Format("resize([15, 15, zSize])", size.Name))); + Assert.IsTrue(script.Contains(String.Format("text(\"{0}\"", text.Text))); + Assert.IsTrue(script.Contains(String.Format("size = {0}", size.Text))); + Assert.IsTrue(script.Contains(String.Format("mirror(xMirror)", size.Text))); + Assert.IsTrue(script.Contains(String.Format("resize([15, 15, zSize])", size.Text))); } } } diff --git a/OSCADSharp/OSCADSharp/Internal/Bindings/BindableBoolean.cs b/OSCADSharp/OSCADSharp/Internal/Bindings/BindableBoolean.cs index 74e0730..e3dd0ac 100644 --- a/OSCADSharp/OSCADSharp/Internal/Bindings/BindableBoolean.cs +++ b/OSCADSharp/OSCADSharp/Internal/Bindings/BindableBoolean.cs @@ -38,7 +38,7 @@ namespace OSCADSharp.Bindings public void Bind(string property, Variable variable) { this.IsBound = true; - var stringifiedVar = new Variable(variable.Name, variable.Value.ToString().ToLower()); + var stringifiedVar = new Variable(variable.Text, variable.Value.ToString().ToLower()); this.bindings.Add(this, property, stringifiedVar); } @@ -52,7 +52,7 @@ namespace OSCADSharp.Bindings public override string ToString() { - return this.bindings.Get(this.boundProperty).BoundVariable.Name; + return this.bindings.Get(this.boundProperty).BoundVariable.Text; } } } diff --git a/OSCADSharp/OSCADSharp/Internal/Bindings/BindableVector.cs b/OSCADSharp/OSCADSharp/Internal/Bindings/BindableVector.cs index 62e0050..46ebc2b 100644 --- a/OSCADSharp/OSCADSharp/Internal/Bindings/BindableVector.cs +++ b/OSCADSharp/OSCADSharp/Internal/Bindings/BindableVector.cs @@ -47,9 +47,9 @@ namespace OSCADSharp.Bindings public override string ToString() { - string x = this.bindings.Contains("x") ? this.bindings.Get("x").BoundVariable.Name : this.X.ToString(); - string y = this.bindings.Contains("y") ? this.bindings.Get("y").BoundVariable.Name : this.Y.ToString(); - string z = this.bindings.Contains("z") ? this.bindings.Get("z").BoundVariable.Name : this.Z.ToString(); + string x = this.bindings.Contains("x") ? this.bindings.Get("x").BoundVariable.Text : this.X.ToString(); + string y = this.bindings.Contains("y") ? this.bindings.Get("y").BoundVariable.Text : this.Y.ToString(); + string z = this.bindings.Contains("z") ? this.bindings.Get("z").BoundVariable.Text : this.Z.ToString(); return String.Format("[{0}, {1}, {2}]", x, y, z); } diff --git a/OSCADSharp/OSCADSharp/Internal/Scripting/CompoundVariable.cs b/OSCADSharp/OSCADSharp/Internal/Scripting/CompoundVariable.cs new file mode 100644 index 0000000..fa1b9ea --- /dev/null +++ b/OSCADSharp/OSCADSharp/Internal/Scripting/CompoundVariable.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OSCADSharp.Scripting +{ + internal class CompoundVariable : Variable + { + public CompoundVariable(string name, object value) : base(name, value, false) + { + } + } +} diff --git a/OSCADSharp/OSCADSharp/Internal/Scripting/StatementBuilder.cs b/OSCADSharp/OSCADSharp/Internal/Scripting/StatementBuilder.cs index 47ff6d2..8d7ab13 100644 --- a/OSCADSharp/OSCADSharp/Internal/Scripting/StatementBuilder.cs +++ b/OSCADSharp/OSCADSharp/Internal/Scripting/StatementBuilder.cs @@ -47,7 +47,7 @@ namespace OSCADSharp.Scripting if(useBinding) { - SB.Append(this.bindings.Get(name).BoundVariable.Name); + SB.Append(this.bindings.Get(name).BoundVariable.Text); } else { diff --git a/OSCADSharp/OSCADSharp/Internal/Transforms/ColoredObject.cs b/OSCADSharp/OSCADSharp/Internal/Transforms/ColoredObject.cs index 8b90f47..82e0807 100644 --- a/OSCADSharp/OSCADSharp/Internal/Transforms/ColoredObject.cs +++ b/OSCADSharp/OSCADSharp/Internal/Transforms/ColoredObject.cs @@ -44,9 +44,9 @@ namespace OSCADSharp.Transforms public override string ToString() { - string colorName = this.bindings.Contains("color") ? this.bindings.Get("color").BoundVariable.Name : + string colorName = this.bindings.Contains("color") ? this.bindings.Get("color").BoundVariable.Text : "\""+this.ColorName+"\""; - string opacity = this.bindings.Contains("opacity") ? this.bindings.Get("opacity").BoundVariable.Name + string opacity = this.bindings.Contains("opacity") ? this.bindings.Get("opacity").BoundVariable.Text : this.Opacity.ToString(); string colorCommand = String.Format("color({0}, {1})", colorName, opacity); diff --git a/OSCADSharp/OSCADSharp/Internal/Transforms/MirroredObject.cs b/OSCADSharp/OSCADSharp/Internal/Transforms/MirroredObject.cs index 2eba83a..21954c2 100644 --- a/OSCADSharp/OSCADSharp/Internal/Transforms/MirroredObject.cs +++ b/OSCADSharp/OSCADSharp/Internal/Transforms/MirroredObject.cs @@ -45,7 +45,7 @@ namespace OSCADSharp.Transforms public override string ToString() { - string normal = this.bindings.Contains("normal") ? this.bindings.Get("normal").BoundVariable.Name : this.Normal.ToString(); + string normal = this.bindings.Contains("normal") ? this.bindings.Get("normal").BoundVariable.Text : this.Normal.ToString(); string mirrorCommand = String.Format("mirror({0})", normal); var formatter = new SingleBlockFormatter(mirrorCommand, this.obj.ToString()); diff --git a/OSCADSharp/OSCADSharp/Internal/Transforms/ResizedObject.cs b/OSCADSharp/OSCADSharp/Internal/Transforms/ResizedObject.cs index 2b78c57..1d68128 100644 --- a/OSCADSharp/OSCADSharp/Internal/Transforms/ResizedObject.cs +++ b/OSCADSharp/OSCADSharp/Internal/Transforms/ResizedObject.cs @@ -49,7 +49,7 @@ namespace OSCADSharp.Transforms public override string ToString() { - string size = this.bindings.Contains("size") ? this.bindings.Get("size").BoundVariable.Name : this.Size.ToString(); + string size = this.bindings.Contains("size") ? this.bindings.Get("size").BoundVariable.Text : this.Size.ToString(); string resizeCommand = String.Format("resize({0})", size); var formatter = new SingleBlockFormatter(resizeCommand, this.obj.ToString()); diff --git a/OSCADSharp/OSCADSharp/Internal/Transforms/RotatedObject.cs b/OSCADSharp/OSCADSharp/Internal/Transforms/RotatedObject.cs index 0af5f60..5586d82 100644 --- a/OSCADSharp/OSCADSharp/Internal/Transforms/RotatedObject.cs +++ b/OSCADSharp/OSCADSharp/Internal/Transforms/RotatedObject.cs @@ -45,7 +45,7 @@ namespace OSCADSharp.Transforms public override string ToString() { - string angle = this.bindings.Contains("angle") ? this.bindings.Get("angle").BoundVariable.Name : this.Angle.ToString(); + string angle = this.bindings.Contains("angle") ? this.bindings.Get("angle").BoundVariable.Text : this.Angle.ToString(); string rotateCommand = String.Format("rotate({0})", angle.ToString()); var formatter = new SingleBlockFormatter(rotateCommand, this.obj.ToString()); diff --git a/OSCADSharp/OSCADSharp/Internal/Transforms/ScaledObject.cs b/OSCADSharp/OSCADSharp/Internal/Transforms/ScaledObject.cs index 18a856b..27e283a 100644 --- a/OSCADSharp/OSCADSharp/Internal/Transforms/ScaledObject.cs +++ b/OSCADSharp/OSCADSharp/Internal/Transforms/ScaledObject.cs @@ -45,7 +45,7 @@ namespace OSCADSharp.Transforms public override string ToString() { - string scale = this.bindings.Contains("scalefactor") ? this.bindings.Get("scalefactor").BoundVariable.Name : this.ScaleFactor.ToString(); + string scale = this.bindings.Contains("scalefactor") ? this.bindings.Get("scalefactor").BoundVariable.Text : this.ScaleFactor.ToString(); string scaleCommand = String.Format("scale(v = {0})", scale); var formatter = new SingleBlockFormatter(scaleCommand, this.obj.ToString()); diff --git a/OSCADSharp/OSCADSharp/Internal/Transforms/TranslatedObject.cs b/OSCADSharp/OSCADSharp/Internal/Transforms/TranslatedObject.cs index d65d711..25b919e 100644 --- a/OSCADSharp/OSCADSharp/Internal/Transforms/TranslatedObject.cs +++ b/OSCADSharp/OSCADSharp/Internal/Transforms/TranslatedObject.cs @@ -46,7 +46,7 @@ namespace OSCADSharp.Transforms public override string ToString() { - string translation = this.bindings.Contains("vector") ? this.bindings.Get("vector").BoundVariable.Name : this.Vector.ToString(); + string translation = this.bindings.Contains("vector") ? this.bindings.Get("vector").BoundVariable.Text : this.Vector.ToString(); string translateCommmand = String.Format("translate(v = {0})", translation); var formatter = new SingleBlockFormatter(translateCommmand, this.obj.ToString()); diff --git a/OSCADSharp/OSCADSharp/OSCADSharp.csproj b/OSCADSharp/OSCADSharp/OSCADSharp.csproj index 3f956e0..a5dbd9c 100644 --- a/OSCADSharp/OSCADSharp/OSCADSharp.csproj +++ b/OSCADSharp/OSCADSharp/OSCADSharp.csproj @@ -44,6 +44,7 @@ + diff --git a/OSCADSharp/OSCADSharp/Public/Scripting/Variable.cs b/OSCADSharp/OSCADSharp/Public/Scripting/Variable.cs index 2d3abda..159469a 100644 --- a/OSCADSharp/OSCADSharp/Public/Scripting/Variable.cs +++ b/OSCADSharp/OSCADSharp/Public/Scripting/Variable.cs @@ -1,4 +1,5 @@ -using System; +using OSCADSharp.Scripting; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -13,20 +14,26 @@ namespace OSCADSharp public class Variable { /// - /// Creates a new Variable with the specified name/value + /// Creates a new Variable with the specified text/value /// - /// Name of the variable. This is the name that will appear in script output + /// Text of the variable. This is the text that will appear in script output for this variable /// The variable's value - public Variable(string name, object value) + /// A flag indicating whether to add this variable to Variables.Global + public Variable(string text, object value, bool addGlobal = false) { - this.Name = name; + this.Text = text; this.Value = value; + + if (addGlobal) + { + Variables.Global.Add(this); + } } /// - /// Name of the variable + /// Text of the variable /// - public string Name { get; set; } + public string Text { get; set; } /// /// Value of the variable. @@ -36,12 +43,12 @@ namespace OSCADSharp public object Value { get; set; } /// - /// Gets this variable as a name = value string + /// Gets this variable as a text = value string /// /// public override string ToString() { - return string.Format("{0} = {1}", this.Name, this.Value.ToString()); + return string.Format("{0} = {1}", this.Text, this.Value.ToString()); } #region Operators @@ -49,7 +56,7 @@ namespace OSCADSharp { if (VariableCalculator.IsNumeric(right)) { - return new Variable(String.Format("{0} {1} {2}", left.Name, oprtor, right.ToString()), + return new CompoundVariable(String.Format("{0} {1} {2}", left.Text, oprtor, right.ToString()), calcMethod(left.Value, right)); } @@ -61,7 +68,7 @@ namespace OSCADSharp { if (VariableCalculator.IsNumeric(left)) { - return new Variable(String.Format("{0} {1} {2}", left.ToString(), oprtor, right.Name), + return new CompoundVariable(String.Format("{0} {1} {2}", left.ToString(), oprtor, right.Text), calcMethod(left, right.Value)); } @@ -77,7 +84,7 @@ namespace OSCADSharp /// public static Variable operator +(Variable left, Variable right) { - return new Variable(String.Format("{0} + {1}", left.Name, right.Name), VariableCalculator.Add(left.Value, right.Value)); + return new CompoundVariable(String.Format("{0} + {1}", left.Text, right.Text), VariableCalculator.Add(left.Value, right.Value)); } /// @@ -110,7 +117,7 @@ namespace OSCADSharp /// public static Variable operator -(Variable left, Variable right) { - return new Variable(String.Format("{0} - {1}", left.Name, right.Name), VariableCalculator.Subtract(left.Value, right.Value)); + return new CompoundVariable(String.Format("{0} - {1}", left.Text, right.Text), VariableCalculator.Subtract(left.Value, right.Value)); } /// @@ -131,7 +138,7 @@ namespace OSCADSharp value = ((Vector3)right.Value).Negate(); } - return new Variable(String.Format("-{0}", right.Name), value); + return new CompoundVariable(String.Format("-{0}", right.Text), value); } /// @@ -164,7 +171,7 @@ namespace OSCADSharp /// public static Variable operator *(Variable left, Variable right) { - return new Variable(String.Format("{0} * {1}", left.Name, right.Name), VariableCalculator.Multiply(left.Value, right.Value)); + return new CompoundVariable(String.Format("{0} * {1}", left.Text, right.Text), VariableCalculator.Multiply(left.Value, right.Value)); } /// @@ -197,7 +204,7 @@ namespace OSCADSharp /// public static Variable operator /(Variable left, Variable right) { - return new Variable(String.Format("{0} / {1}", left.Name, right.Name), VariableCalculator.Divide(left.Value, right.Value)); + return new CompoundVariable(String.Format("{0} / {1}", left.Text, right.Text), VariableCalculator.Divide(left.Value, right.Value)); } /// diff --git a/OSCADSharp/OSCADSharp/Public/Scripting/Variables.cs b/OSCADSharp/OSCADSharp/Public/Scripting/Variables.cs index b480cb9..fd1b34a 100644 --- a/OSCADSharp/OSCADSharp/Public/Scripting/Variables.cs +++ b/OSCADSharp/OSCADSharp/Public/Scripting/Variables.cs @@ -35,7 +35,7 @@ namespace OSCADSharp /// public void Add(Variable variable) { - this.variables[variable.Name] = variable; + this.variables[variable.Text] = variable; } /// diff --git a/OSCADSharp/OSCADSharp/Public/Solids/Text3D.cs b/OSCADSharp/OSCADSharp/Public/Solids/Text3D.cs index d31ea7c..24fbab5 100644 --- a/OSCADSharp/OSCADSharp/Public/Solids/Text3D.cs +++ b/OSCADSharp/OSCADSharp/Public/Solids/Text3D.cs @@ -122,7 +122,7 @@ namespace OSCADSharp sb.Append("\""); if (this.bindings.Contains("text")) { - sb.Append(this.bindings.Get("text").BoundVariable.Name); + sb.Append(this.bindings.Get("text").BoundVariable.Text); } else {