mirror of
https://github.com/eliasstepanik/OSCADSharpDotnet7.git
synced 2026-01-20 18:08:26 +00:00
Refactored Variables to be a dictionary of string:variable, added new accessor methods, then refactored to fix OSCADObject.ToFile's top section variable output test
This commit is contained in:
parent
6b628d9bca
commit
59e1042345
@ -14,7 +14,8 @@ namespace OSCADSharp.ConsoleTests
|
|||||||
{
|
{
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
Variables.Global["$fn"] = 100;
|
Variables.Global.Add("$fn", 100);
|
||||||
|
|
||||||
var obj = new Sphere(30);
|
var obj = new Sphere(30);
|
||||||
|
|
||||||
var pos = obj.Position();
|
var pos = obj.Position();
|
||||||
|
|||||||
@ -160,7 +160,7 @@ namespace OSCADSharp.UnitTests
|
|||||||
{
|
{
|
||||||
var cube = new Cube();
|
var cube = new Cube();
|
||||||
string[] output = null;
|
string[] output = null;
|
||||||
Variables.Global["$fn"] = 100;
|
Variables.Global.Add("$fn", 100);
|
||||||
|
|
||||||
var mock = new Mock<IFileWriter>();
|
var mock = new Mock<IFileWriter>();
|
||||||
mock.Setup(_wrtr => _wrtr.WriteAllLines(It.IsAny<string>(), It.IsAny<string[]>()))
|
mock.Setup(_wrtr => _wrtr.WriteAllLines(It.IsAny<string>(), It.IsAny<string[]>()))
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||||
using OSCADSharp.Solids;
|
using OSCADSharp.Solids;
|
||||||
|
using OSCADSharp.Scripting;
|
||||||
|
|
||||||
namespace OSCADSharp.UnitTests
|
namespace OSCADSharp.UnitTests
|
||||||
{
|
{
|
||||||
@ -115,5 +116,20 @@ namespace OSCADSharp.UnitTests
|
|||||||
Assert.IsTrue(script.Contains("$fa"));
|
Assert.IsTrue(script.Contains("$fa"));
|
||||||
Assert.IsTrue(script.Contains("$fs"));
|
Assert.IsTrue(script.Contains("$fs"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public void Sphere_RadiusVariableBoundAppearsInOutput()
|
||||||
|
{
|
||||||
|
string variableName = "mySphereRadius";
|
||||||
|
double radius = 15;
|
||||||
|
|
||||||
|
Variables.Global.Add(variableName, radius);
|
||||||
|
|
||||||
|
var sphere = new Sphere();
|
||||||
|
sphere.Bind("Radius", Variables.Global["mySphereRadius"]);
|
||||||
|
|
||||||
|
string script = sphere.ToString();
|
||||||
|
// Assert.IsTrue(script.Contains("r = mySphereRadius"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,17 @@ namespace OSCADSharp.Scripting
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class Variable
|
public class Variable
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new Variable with the specified name/value
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name">Name of the variable. This is the name that will appear in script output</param>
|
||||||
|
/// <param name="value">The variable's value</param>
|
||||||
|
public Variable(string name, object value)
|
||||||
|
{
|
||||||
|
this.Name = name;
|
||||||
|
this.Value = value;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Name of the variable
|
/// Name of the variable
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -22,6 +33,15 @@ namespace OSCADSharp.Scripting
|
|||||||
///
|
///
|
||||||
/// Must be compatible with the data type being assigned to.
|
/// Must be compatible with the data type being assigned to.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public object Value { get; set; }
|
public object Value { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets this variable as a name = value string
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return string.Format("{0} = {1}", this.Name, this.Value.ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,15 +17,45 @@ namespace OSCADSharp.Scripting
|
|||||||
/// top of OpenSCAD scripts
|
/// top of OpenSCAD scripts
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static Variables Global = new Variables();
|
public static Variables Global = new Variables();
|
||||||
|
private ConcurrentDictionary<string, Variable> variables = new ConcurrentDictionary<string, Variable>();
|
||||||
|
|
||||||
private ConcurrentDictionary<string, object> variables = new ConcurrentDictionary<string, object>();
|
/// <summary>
|
||||||
|
/// Adds a variable to the collection
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
public void Add(string name, object value)
|
||||||
|
{
|
||||||
|
this.variables[name] = new Variable(name, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Removes a variable from the collection
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
public Variable Remove(string name)
|
||||||
|
{
|
||||||
|
Variable value;
|
||||||
|
this.variables.TryRemove(name, out value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a variable by name
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="name"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Variable Get(string name)
|
||||||
|
{
|
||||||
|
return this.variables[name];
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Assigns or gets a variable's value
|
/// Assigns or gets a variable's value
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public object this[string name] // long is a 64-bit integer
|
public Variable this[string name] // long is a 64-bit integer
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@ -65,10 +95,8 @@ namespace OSCADSharp.Scripting
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.Append(kvp.Key);
|
sb.Append(kvp.Value.ToString());
|
||||||
sb.Append(" = ");
|
|
||||||
sb.Append(kvp.Value);
|
|
||||||
sb.Append(";");
|
sb.Append(";");
|
||||||
sb.Append(Environment.NewLine);
|
sb.Append(Environment.NewLine);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,7 +11,7 @@ namespace OSCADSharp.Solids
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// A Sphere geometry
|
/// A Sphere geometry
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Sphere : OSCADObject
|
public class Sphere : OSCADObject, IBindable
|
||||||
{
|
{
|
||||||
#region Attributes
|
#region Attributes
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -118,6 +118,18 @@ namespace OSCADSharp.Solids
|
|||||||
return new Bounds(new Vector3(-this.Radius, -this.Radius, -this.Radius),
|
return new Bounds(new Vector3(-this.Radius, -this.Radius, -this.Radius),
|
||||||
new Vector3(this.Radius, this.Radius, this.Radius));
|
new Vector3(this.Radius, this.Radius, this.Radius));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Bindings bindings = new Bindings();
|
||||||
|
/// <summary>
|
||||||
|
/// Binds a a variable to a property on this object
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="property">A string specifying the property such as "Diameter" or "Radius"</param>
|
||||||
|
/// <param name="variable">The variable to bind the to. This variable will appear in script output in lieu of the
|
||||||
|
/// literal value of the property</param>
|
||||||
|
public void Bind(string property, Variable variable)
|
||||||
|
{
|
||||||
|
this.bindings.Add(property, variable);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user