diff --git a/OSCADSharp/OSCADSharp.UnitTests/Transforms/TranslateTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Transforms/TranslateTests.cs index bc239ab..e763866 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Transforms/TranslateTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Transforms/TranslateTests.cs @@ -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]")); + } } } diff --git a/OSCADSharp/OSCADSharp/OSCADObject.cs b/OSCADSharp/OSCADSharp/OSCADObject.cs index 991626f..6b3584a 100644 --- a/OSCADSharp/OSCADSharp/OSCADObject.cs +++ b/OSCADSharp/OSCADSharp/OSCADObject.cs @@ -534,6 +534,7 @@ namespace OSCADSharp } #endregion + #region Translate /// /// Translates an object by the specified amount /// @@ -544,6 +545,16 @@ namespace OSCADSharp return new TranslatedObject(this, translation); } + /// + /// Translates an object by the specified amount with a variable + /// + /// The vector upon which to translate (move object(s)) + /// A translated object + public OSCADObject Translate(Variable translation) + { + return new TranslatedObject(this, translation); + } + /// /// Translates an object by the specified amount /// @@ -556,6 +567,92 @@ namespace OSCADSharp return this.Translate(new Vector3(x, y, z)); } + /// + /// Translates an object by the specified amount with one or more variables + /// + /// + /// + /// + /// A translated object + public OSCADObject Translate(Variable x, Variable y, Variable z) + { + return new TranslatedObject(this, new Vector3(), x, y, z); + } + + /// + /// Translates an object by the specified amount with one or more variables + /// + /// + /// + /// + /// A translated object + public OSCADObject Translate(Variable x, double y, double z) + { + return new TranslatedObject(this, new Vector3(0, y, z), x, null, null); + } + + /// + /// Translates an object by the specified amount with one or more variables + /// + /// + /// + /// + /// A translated object + public OSCADObject Translate(double x, Variable y, double z) + { + return new TranslatedObject(this, new Vector3(x, 0, z), null, y, null); + } + + /// + /// Translates an object by the specified amount with one or more variables + /// + /// + /// + /// + /// A translated object + public OSCADObject Translate(double x, double y, Variable z) + { + return new TranslatedObject(this, new Vector3(x, y, 0), null, null, z); + } + + /// + /// Translates an object by the specified amount with one or more variables + /// + /// + /// + /// + /// A translated object + public OSCADObject Translate(Variable x, double y, Variable z) + { + return new TranslatedObject(this, new Vector3(0, y, 0), x, null, z); + } + + /// + /// Translates an object by the specified amount with one or more variables + /// + /// + /// + /// + /// A translated object + public OSCADObject Translate(double x, Variable y, Variable z) + { + return new TranslatedObject(this, new Vector3(x, 0, 0), null, y, z); + } + + /// + /// Translates an object by the specified amount with one or more variables + /// + /// + /// + /// + /// A translated object + 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 /// /// Creates a minkowski sum of child nodes (including this object) /// @@ -577,6 +674,8 @@ namespace OSCADSharp } #endregion + #endregion + #region Boolean Operations /// /// Creates a union of all its child nodes. This is the sum of all children (logical or). diff --git a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs index 7092059..0b498e3 100644 --- a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs @@ -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();