public static void TraverseTest() { // // Setup a stage with parents and children. // TODO: Add tests with classes and instancing. // UsdStage s = UsdStage.CreateInMemory(); var foo = s.DefinePrim(new SdfPath("/Foo")); s.DefinePrim(new SdfPath("/Foo/P1")); s.DefinePrim(new SdfPath("/Foo/P2")); s.DefinePrim(new SdfPath("/Foo/P3")); s.DefinePrim(new SdfPath("/Foo/P4")); s.DefinePrim(new SdfPath("/Foo/P5")); var bar = s.DefinePrim(new SdfPath("/Bar")); s.DefinePrim(new SdfPath("/Bar/B1")); s.DefinePrim(new SdfPath("/Bar/B2")); s.DefinePrim(new SdfPath("/Bar/B3")); s.DefinePrim(new SdfPath("/Bar/B3/C1")); s.DefinePrim(new SdfPath("/Bar/B3/C2")); s.DefinePrim(new SdfPath("/Bar/B3/C3")); s.DefinePrim(new SdfPath("/Bar/B4")); // Prim children Console.WriteLine(""); Console.WriteLine("Foo children:"); foreach (UsdPrim curPrim in foo.GetChildren()) { Console.WriteLine(curPrim.GetPath()); } Console.WriteLine(""); Console.WriteLine("Bar children:"); foreach (UsdPrim curPrim in bar.GetChildren()) { Console.WriteLine(curPrim.GetPath()); } // Prim Descendants Console.WriteLine(""); Console.WriteLine("Bar descendants:"); foreach (UsdPrim curPrim in bar.GetDescendants()) { Console.WriteLine(curPrim.GetPath()); } // Basic Stage traversal. Console.WriteLine(""); Console.WriteLine("All Prims:"); List <UsdPrim> primList = s.Traverse().ToList(); int i = 0; foreach (UsdPrim curPrim in s.Traverse()) { Console.WriteLine(curPrim.GetPath()); AssertEqual(primList[i++], curPrim); } // Traversal with child pruning. Console.WriteLine(""); Console.WriteLine("/Bar children pruned:"); var range = new USD.NET.RangeIterator(s.Traverse()); foreach (UsdPrim curPrim in range) { Console.WriteLine(curPrim.GetPath()); if (curPrim.GetPath() == "/Bar/B3") { range.PruneChildren(); Console.WriteLine("pruned."); } } // Fully general pre/post traversal. Console.WriteLine(""); Console.WriteLine("Pre/Post Traversal with all children pruned:"); var prePostRange = new USD.NET.RangeIterator(UsdPrimRange.PreAndPostVisit(s.GetPseudoRoot())); bool[] expected = { false, false, true, false, true, true }; bool[] actual = new bool[6]; i = 0; foreach (UsdPrim curPrim in prePostRange) { Console.WriteLine("IsPostVisit: " + prePostRange.IsPostVisit().ToString() + ", " + curPrim.GetPath()); if (!prePostRange.IsPostVisit() && i > 0) { // It's only valid to prune on the pre-traversal. prePostRange.PruneChildren(); } actual[i++] = prePostRange.IsPostVisit(); } AssertEqual(expected, actual); }