From 96693e062b90b77a18fdfa21c869ba63cb835681 Mon Sep 17 00:00:00 2001 From: Michael Smith Date: Sun, 21 Feb 2016 20:27:56 -0800 Subject: [PATCH] Added optional recursive flag to Children() to allow selection of immediate children instead of all descendants. --- .../OSCADSharp.UnitTests/OSCADObjectTests.cs | 14 ++++++++++++++ OSCADSharp/OSCADSharp/OSCADObject.cs | 12 +++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/OSCADSharp/OSCADSharp.UnitTests/OSCADObjectTests.cs b/OSCADSharp/OSCADSharp.UnitTests/OSCADObjectTests.cs index 717c52c..e64a2a8 100644 --- a/OSCADSharp/OSCADSharp.UnitTests/OSCADObjectTests.cs +++ b/OSCADSharp/OSCADSharp.UnitTests/OSCADObjectTests.cs @@ -122,5 +122,19 @@ namespace OSCADSharp.UnitTests Assert.AreEqual("Cube", children[4].Name); Assert.AreEqual("Sphere", children[1].Name); } + + [TestMethod] + public void OSCADObject_ChildrenWithRecursiveFalseReturnsOnlyDirectChildren() + { + var firstLevel = new Sphere().Union(new Cube(), new Sphere(), new Cylinder()); + firstLevel.Name = "Union"; + var secondLevel = new Text3D() { Name = "Text" }.Difference(firstLevel); + + var children = secondLevel.Children(false).ToList(); + + Assert.AreEqual("Text", children[0].Name); + Assert.AreEqual("Union", children[1].Name); + } } } + diff --git a/OSCADSharp/OSCADSharp/OSCADObject.cs b/OSCADSharp/OSCADSharp/OSCADObject.cs index 5daa886..3a41ad7 100644 --- a/OSCADSharp/OSCADSharp/OSCADObject.cs +++ b/OSCADSharp/OSCADSharp/OSCADObject.cs @@ -266,13 +266,19 @@ namespace OSCADSharp /// Internal collection of children for this object /// protected List children = new List(); - + /// - /// Returns all children of this OSCADObject + /// Returns all chidren of this OSCADObject /// + /// If true, returns all descendants. If false, returns only direct children. /// - public IEnumerable Children() + public IEnumerable Children(bool recursive = true) { + if(recursive == false) + { + return new List(this.children); + } + // Initial children are reversed here because for objects with multiple children (such as boolean operations) // the natural collection order would yield opposite the expected order in a stack (first child would be the last popped) Stack toTraverse = new Stack(this.children.Reverse());