示例#1
0
        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);
        }