diff --git a/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs index 1ef54aa..b060287 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Solids/CylinderTests.cs @@ -198,5 +198,29 @@ namespace OSCADSharp.UnitTests Assert.IsTrue(script.Contains("h = overallHeight")); } + + [TestMethod] + public void Cylinder_CloningCylinderClonesBindings() + { + var diam = new Variable("mainColumn", Inches.Half); + var height = new Variable("overallHeight", Inches.Quarter); + var center = new Variable("isCentered", true); + var color = new Variable("myColor", "Blue"); + var rotation = new Variable("myRot", new Vector3(90, 90, -90)); + + OSCADObject cyl = new Cylinder(diam, diam, height, center); + cyl = cyl.Rotate(rotation).Color(color); + + var clone = cyl.Clone(); + + string script = clone.ToString(); + + Assert.IsTrue(script.Contains("color(myColor")); + Assert.IsTrue(script.Contains("rotate(myRot)")); + Assert.IsTrue(script.Contains("center = isCentered")); + Assert.IsTrue(script.Contains("d1 = mainColumn")); + Assert.IsTrue(script.Contains("d2 = mainColumn")); + Assert.IsTrue(script.Contains("h = overallHeight")); + } } } diff --git a/OSCADSharp/OSCADSharp.UnitTests/Solids/SphereTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Solids/SphereTests.cs index 56fd53c..6b2d01a 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Solids/SphereTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Solids/SphereTests.cs @@ -183,5 +183,22 @@ namespace OSCADSharp.UnitTests Assert.IsTrue(script.Contains("d = width")); Assert.IsTrue(script.Contains("$fn = rez")); } + + [TestMethod] + public void Sphere_BindingsAreClonedWithObject() + { + var diam = new Variable("width", Inches.One); + var resolution = new Variable("rez", 100); + var scale = new Variable("theScale", new Vector3(1, 2, 3)); + + var sphere = new Sphere(diam, resolution).Scale(scale); + var clone = sphere.Clone(); + + string script = clone.ToString(); + + Assert.IsTrue(script.Contains("d = width")); + Assert.IsTrue(script.Contains("$fn = rez")); + Assert.IsTrue(script.Contains("scale(v = theScale)")); + } } } diff --git a/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs b/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs index cd1c6c9..fdf9908 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/Solids/Text3DTests.cs @@ -97,5 +97,25 @@ namespace OSCADSharp.UnitTests Assert.IsTrue(script.Contains(String.Format("text(\"{0}\"", text.Name))); Assert.IsTrue(script.Contains(String.Format("size = {0}", size.Name))); } + + [TestMethod] + public void Test_ClonedObjectHasBindings() + { + var text = new Variable("txt", "Greetings, Earthlings"); + var size = new Variable("txtSize", 82); + var mirrorNormal = new Variable("xMirror", new Vector3(1, 0, 0)); + var zResize = new Variable("zSize", 30); + + var txt = new Text3D(text, size) + .Mirror(mirrorNormal).Resize(15, 15, zResize); + var clone = txt.Clone(); + + 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))); + } } } diff --git a/OSCADSharp/OSCADSharp/Solids/Cylinder.cs b/OSCADSharp/OSCADSharp/Solids/Cylinder.cs index 8e504ea..1ffb705 100644 --- a/OSCADSharp/OSCADSharp/Solids/Cylinder.cs +++ b/OSCADSharp/OSCADSharp/Solids/Cylinder.cs @@ -218,6 +218,7 @@ namespace OSCADSharp.Solids MinimumAngle = this.MinimumAngle, MinimumCircumferentialLength = this.MinimumCircumferentialLength, Center = this.Center, + centerBinding = this.centerBinding, bindings = this.bindings.Clone() }; } diff --git a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs index 97b3d4b..1d41775 100644 --- a/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs +++ b/OSCADSharp/OSCADSharp/Transforms/ResizedObject.cs @@ -34,7 +34,7 @@ namespace OSCADSharp.Transforms this.Bind("size", size); } - internal ResizedObject(OSCADObject obj, Vector3 size, Variable x, Variable y, Variable z) :base(obj) + internal ResizedObject(OSCADObject obj, Vector3 size, Variable x, Variable y, Variable z) : base(obj) { this.Size = new BindableVector(size); @@ -43,6 +43,10 @@ namespace OSCADSharp.Transforms this.BindIfVariableNotNull("z", z); } + internal ResizedObject(OSCADObject obj) : base(obj) + { + } + public override string ToString() { string size = this.bindings.Contains("size") ? this.bindings.Get("size").BoundVariable.Name : this.Size.ToString(); @@ -54,10 +58,13 @@ namespace OSCADSharp.Transforms public override OSCADObject Clone() { - return new ResizedObject(this.obj.Clone(), this.Size) + var bndSize = this.Size as BindableVector; + + return new ResizedObject(this.obj.Clone()) { Name = this.Name, - bindings = this.bindings.Clone() + bindings = this.bindings.Clone(), + Size = bndSize != null ? bndSize.Clone() : this.Size.Clone() }; }