From 6e4c018df7fdff396f8aae845a8811dd4675d7ca Mon Sep 17 00:00:00 2001 From: Michael L Smith Date: Sat, 5 Mar 2016 15:26:14 -0800 Subject: [PATCH] Fix for Cube/TranslatedObject cloning of bindings --- .../OSCADSharp.UnitTests/Solids/CubeTests.cs | 3 ++- OSCADSharp/OSCADSharp/Bindings/BindableBoolean.cs | 8 ++++++++ OSCADSharp/OSCADSharp/Bindings/BindableVector.cs | 8 ++++---- OSCADSharp/OSCADSharp/Solids/Cube.cs | 12 +++++++++--- .../OSCADSharp/Transforms/TranslatedObject.cs | 15 ++++++++++++--- 5 files changed, 35 insertions(+), 11 deletions(-) diff --git a/OSCADSharp/OSCADSharp.UnitTests/Solids/CubeTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Solids/CubeTests.cs index 2c4c43f..e7b5652 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Solids/CubeTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Solids/CubeTests.cs @@ -189,7 +189,8 @@ namespace OSCADSharp.UnitTests string script = clone.ToString(); - + Assert.IsTrue(script.Contains("translate(v = [xOffset")); + Assert.IsTrue(script.Contains("size = [15, 5, myHeight]")); } } } diff --git a/OSCADSharp/OSCADSharp/Bindings/BindableBoolean.cs b/OSCADSharp/OSCADSharp/Bindings/BindableBoolean.cs index 0951efc..74e0730 100644 --- a/OSCADSharp/OSCADSharp/Bindings/BindableBoolean.cs +++ b/OSCADSharp/OSCADSharp/Bindings/BindableBoolean.cs @@ -42,6 +42,14 @@ namespace OSCADSharp.Bindings this.bindings.Add(this, property, stringifiedVar); } + public BindableBoolean Clone() + { + var clone = new BindableBoolean(this.boundProperty); + clone.bindings = this.bindings; + + return clone; + } + public override string ToString() { return this.bindings.Get(this.boundProperty).BoundVariable.Name; diff --git a/OSCADSharp/OSCADSharp/Bindings/BindableVector.cs b/OSCADSharp/OSCADSharp/Bindings/BindableVector.cs index 8af9c08..62e0050 100644 --- a/OSCADSharp/OSCADSharp/Bindings/BindableVector.cs +++ b/OSCADSharp/OSCADSharp/Bindings/BindableVector.cs @@ -56,10 +56,10 @@ namespace OSCADSharp.Bindings public new BindableVector Clone() { - return new BindableVector(base.Clone()) - { - bindings = this.bindings - }; + var clone = new BindableVector(base.Clone()); + clone.bindings = this.bindings.Clone(); + + return clone; } } } diff --git a/OSCADSharp/OSCADSharp/Solids/Cube.cs b/OSCADSharp/OSCADSharp/Solids/Cube.cs index f7811da..d6345d6 100644 --- a/OSCADSharp/OSCADSharp/Solids/Cube.cs +++ b/OSCADSharp/OSCADSharp/Solids/Cube.cs @@ -114,13 +114,19 @@ namespace OSCADSharp.Solids /// public override OSCADObject Clone() { - return new Cube() + var size = this.size as BindableVector; + var center = this.centerBinding.Clone(); + + var clone = new Cube() { Name = this.Name, - Size = ((BindableVector)this.Size).Clone(), - Center = this.Center, + size = size.Clone(), + center = this.Center, + centerBinding = center, bindings = this.bindings.Clone() }; + + return clone; } /// diff --git a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs index d6863e8..d65d711 100644 --- a/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/TranslatedObject.cs @@ -15,7 +15,7 @@ namespace OSCADSharp.Transforms internal class TranslatedObject : SingleStatementObject { internal Vector3 Vector { get; set; } - + /// /// Creates a translated object /// @@ -40,6 +40,10 @@ namespace OSCADSharp.Transforms this.BindIfVariableNotNull("z", z); } + internal TranslatedObject(OSCADObject obj) : base(obj) + { + } + public override string ToString() { string translation = this.bindings.Contains("vector") ? this.bindings.Get("vector").BoundVariable.Name : this.Vector.ToString(); @@ -51,11 +55,16 @@ namespace OSCADSharp.Transforms public override OSCADObject Clone() { - return new TranslatedObject(this.obj.Clone(), this.Vector) + var bindableVec = this.Vector as BindableVector; + + var clone = new TranslatedObject(this.obj.Clone()) { Name = this.Name, - bindings = this.bindings.Clone() + bindings = this.bindings.Clone(), + Vector = bindableVec != null ? bindableVec.Clone() : this.Vector.Clone() }; + + return clone; } public override Vector3 Position()