+ 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
This commit is contained in:
Michael Smith 2016-03-06 18:09:21 -08:00
parent dd9ab94fa1
commit de013112db
18 changed files with 105 additions and 51 deletions

View File

@ -56,6 +56,7 @@
</Otherwise>
</Choose>
<ItemGroup>
<Compile Include="Scripting\VariableTests.cs" />
<Compile Include="SettingsTests.cs" />
<Compile Include="Solids\CubeTests.cs" />
<Compile Include="Solids\CylinderTests.cs" />

View File

@ -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);
}
}
}

View File

@ -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]

View File

@ -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)));
}
}
}

View File

@ -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<BindableBoolean>(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;
}
}
}

View File

@ -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);
}

View File

@ -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)
{
}
}
}

View File

@ -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
{

View File

@ -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);

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -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());

View File

@ -44,6 +44,7 @@
<ItemGroup>
<Compile Include="Internal\Bindings\BindableBoolean.cs" />
<Compile Include="Internal\Scripting\VariableCalculator.cs" />
<Compile Include="Internal\Scripting\CompoundVariable.cs" />
<Compile Include="Public\Settings\Dependencies.cs" />
<Compile Include="Internal\Files\DefaultFileInvoker.cs" />
<Compile Include="Internal\Files\DefaultFileWriter.cs" />

View File

@ -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
{
/// <summary>
/// Creates a new Variable with the specified name/value
/// Creates a new Variable with the specified text/value
/// </summary>
/// <param name="name">Name of the variable. This is the name that will appear in script output</param>
/// <param name="text">Text of the variable. This is the text that will appear in script output for this variable</param>
/// <param name="value">The variable's value</param>
public Variable(string name, object value)
/// <param name="addGlobal">A flag indicating whether to add this variable to Variables.Global</param>
public Variable(string text, object value, bool addGlobal = false)
{
this.Name = name;
this.Text = text;
this.Value = value;
if (addGlobal)
{
Variables.Global.Add(this);
}
}
/// <summary>
/// Name of the variable
/// Text of the variable
/// </summary>
public string Name { get; set; }
public string Text { get; set; }
/// <summary>
/// Value of the variable.
@ -36,12 +43,12 @@ namespace OSCADSharp
public object Value { get; set; }
/// <summary>
/// Gets this variable as a name = value string
/// Gets this variable as a text = value string
/// </summary>
/// <returns></returns>
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
/// <returns></returns>
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));
}
/// <summary>
@ -110,7 +117,7 @@ namespace OSCADSharp
/// <returns></returns>
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));
}
/// <summary>
@ -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);
}
/// <summary>
@ -164,7 +171,7 @@ namespace OSCADSharp
/// <returns></returns>
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));
}
/// <summary>
@ -197,7 +204,7 @@ namespace OSCADSharp
/// <returns></returns>
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));
}
/// <summary>

View File

@ -35,7 +35,7 @@ namespace OSCADSharp
/// <param name="variable"></param>
public void Add(Variable variable)
{
this.variables[variable.Name] = variable;
this.variables[variable.Text] = variable;
}
/// <summary>

View File

@ -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
{