+ Parameterized bindings for Translate

This commit is contained in:
Michael Smith 2016-03-02 21:23:38 -08:00
parent 534bba1408
commit 627d60c314
3 changed files with 128 additions and 0 deletions

View File

@ -35,5 +35,17 @@ namespace OSCADSharp.UnitTests.Transforms
string script = cube.ToString();
Assert.IsTrue(script.Contains("v = vec"));
}
[TestMethod]
public void Translate_CanBindVectorsByParameters()
{
var y = new Variable("yAmt", -35);
var z = new Variable("zAmt", 40);
var cube = new Cube().Translate(-5, y, z);
string script = cube.ToString();
Assert.IsTrue(script.Contains("v = [-5, yAmt, zAmt]"));
}
}
}

View File

@ -534,6 +534,7 @@ namespace OSCADSharp
}
#endregion
#region Translate
/// <summary>
/// Translates an object by the specified amount
/// </summary>
@ -544,6 +545,16 @@ namespace OSCADSharp
return new TranslatedObject(this, translation);
}
/// <summary>
/// Translates an object by the specified amount with a variable
/// </summary>
/// <param name="translation">The vector upon which to translate (move object(s))</param>
/// <returns>A translated object</returns>
public OSCADObject Translate(Variable translation)
{
return new TranslatedObject(this, translation);
}
/// <summary>
/// Translates an object by the specified amount
/// </summary>
@ -556,6 +567,92 @@ namespace OSCADSharp
return this.Translate(new Vector3(x, y, z));
}
/// <summary>
/// Translates an object by the specified amount with one or more variables
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns>A translated object</returns>
public OSCADObject Translate(Variable x, Variable y, Variable z)
{
return new TranslatedObject(this, new Vector3(), x, y, z);
}
/// <summary>
/// Translates an object by the specified amount with one or more variables
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns>A translated object</returns>
public OSCADObject Translate(Variable x, double y, double z)
{
return new TranslatedObject(this, new Vector3(0, y, z), x, null, null);
}
/// <summary>
/// Translates an object by the specified amount with one or more variables
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns>A translated object</returns>
public OSCADObject Translate(double x, Variable y, double z)
{
return new TranslatedObject(this, new Vector3(x, 0, z), null, y, null);
}
/// <summary>
/// Translates an object by the specified amount with one or more variables
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns>A translated object</returns>
public OSCADObject Translate(double x, double y, Variable z)
{
return new TranslatedObject(this, new Vector3(x, y, 0), null, null, z);
}
/// <summary>
/// Translates an object by the specified amount with one or more variables
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns>A translated object</returns>
public OSCADObject Translate(Variable x, double y, Variable z)
{
return new TranslatedObject(this, new Vector3(0, y, 0), x, null, z);
}
/// <summary>
/// Translates an object by the specified amount with one or more variables
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns>A translated object</returns>
public OSCADObject Translate(double x, Variable y, Variable z)
{
return new TranslatedObject(this, new Vector3(x, 0, 0), null, y, z);
}
/// <summary>
/// Translates an object by the specified amount with one or more variables
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="z"></param>
/// <returns>A translated object</returns>
public OSCADObject Translate(Variable x, Variable y, double z)
{
return new TranslatedObject(this, new Vector3(0, 0, z), x, y, null);
}
#endregion
#region Minkowski/Hull
/// <summary>
/// Creates a minkowski sum of child nodes (including this object)
/// </summary>
@ -577,6 +674,8 @@ namespace OSCADSharp
}
#endregion
#endregion
#region Boolean Operations
/// <summary>
/// Creates a union of all its child nodes. This is the sum of all children (logical or).

View File

@ -26,6 +26,23 @@ namespace OSCADSharp.Transforms
this.Vector = new BindableVector(vector);
}
internal TranslatedObject(OSCADObject obj, Variable normal) : base(obj)
{
this.Bind("vector", normal);
}
internal TranslatedObject(OSCADObject obj, Vector3 vector, Variable x, Variable y, Variable z) : base(obj)
{
this.Vector = new BindableVector(vector);
if (x != null)
this.Bind("x", x);
if (y != null)
this.Bind("y", y);
if (z != null)
this.Bind("z", z);
}
public override string ToString()
{
string translation = this.bindings.Contains("vector") ? this.bindings.Get("vector").BoundVariable.Name : this.Vector.ToString();