Skip to content

Stage以下をTraverseする

ipynbFile Traverse_01__Stage以下をTraverseする.ipynb

In [1]:

1
from pxr import Usd,Sdf

In [3]:

1
2
layer = Sdf.Layer.FindOrOpen(r"D:\Kitchen_set\Kitchen_set.usd")
stage = Usd.Stage.Open(layer)

In [4]:

1
2
defaultPrim = stage.GetDefaultPrim()
print(defaultPrim)

Success

1
Usd.Prim(</Kitchen_set>)

In [6]:

1
2
3
4
# シーン以下をTranverseする
# Traverse すれば、全PrimをTraverseできる。
allPrim = [x for x in stage.Traverse()]
print(len(allPrim))

Success

1
2742

In [8]:

1
2
3
4
5
# Unloadした状態
# Unloadしているので、PayloadsのPrim以下は表示されていない。
stageB = Usd.Stage.Open(r"D:\Kitchen_set\Kitchen_set.usd",Usd.Stage.LoadNone)
for i in stageB.Traverse():
    print(i)

Success

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Usd.Prim(</Kitchen_set>)
Usd.Prim(</Kitchen_set/Arch_grp>)
Usd.Prim(</Kitchen_set/Props_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/NorthWall_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Cupboard_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Cupboard_grp/WallFruits_set>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Cupboard_grp/WallFruits_set/WallApples_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Cupboard_grp/WallFruits_set/WallBanana_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Cupboard_grp/WallFruits_set/WallFlower_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Cupboard_grp/WallFruits_set/WallOrange_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/CookingUtensils_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/DryingRack_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Sink_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/Countertop_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/SinkArea_grp/SinkFloor_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/StoveArea_grp>)
Usd.Prim(</Kitchen_set/Props_grp/North_grp/FridgeArea_grp>)
Usd.Prim(</Kitchen_set/Props_grp/West_grp>)
Usd.Prim(</Kitchen_set/Props_grp/West_grp/WestWall_grp>)
Usd.Prim(</Kitchen_set/Props_grp/West_grp/FoldingTable_grp>)
Usd.Prim(</Kitchen_set/Props_grp/DiningTable_grp>)
Usd.Prim(</Kitchen_set/Props_grp/DiningTable_grp/TableTop_grp>)
Usd.Prim(</Kitchen_set/Props_grp/DiningTable_grp/TableTop_grp/CerealBowl_grp>)
Usd.Prim(</Kitchen_set/Props_grp/DiningTable_grp/TableTop_grp/CerealBowl_grp/Cheerios_grp>)
Usd.Prim(</Kitchen_set/Props_grp/Ceiling_grp>)

In [15]:

1
2
3
4
5
6
7
# Unloadしているけど、PayloadsがあるPrimを表示したい場合は
# GetFilteredChildren を使用してフィルタリングする。
prims = []
def Traverse(prim,ret):
    ret.append(prim)
    for c in prim.GetFilteredChildren(Usd.PrimIsActive & Usd.PrimIsDefined & ~Usd.PrimIsAbstract):
        Traverse(c,ret)

In [16]:

1
2
Traverse(stageB.GetDefaultPrim(),prims)
print(len(prims))

Success

1
452