Find a Prim by Name#

If you want to find all of the prims of a certain type, you can Traverse the stage and use Usd.Prim.GetName() to compare the name of every prim on the stage with the name you are looking for.

Note

There could be more than one prim with the same name on a stage.

from typing import List
from pxr import Usd


def find_prims_by_name(stage: Usd.Stage, prim_name: str) -> List[Usd.Prim]:
    found_prims = [x for x in stage.Traverse() if x.GetName() == prim_name]
    return found_prims


##############
# Full Usage
##############

from pxr import UsdGeom, Sdf

# Create an in-memory Stage with /World Xform prim as the default prim
stage: Usd.Stage = Usd.Stage.CreateInMemory()
default_prim = UsdGeom.Xform.Define(stage, Sdf.Path("/World"))
stage.SetDefaultPrim(default_prim.GetPrim())

# Create some shape prims
UsdGeom.Xform.Define(stage, "/World/Group")
UsdGeom.Cone.Define(stage, "/World/Foo")
UsdGeom.Cube.Define(stage, "/World/Group/Foo")
UsdGeom.Sphere.Define(stage, "/World/Group/Bar")

# find the prims with the name "Foo"
prims: List[Usd.Prim] = find_prims_by_name(stage, "Foo")

# Print the prims to check the found prims by name.
print(prims)

# Check the number of prims found and whether the found data is correct.
assert len(prims) == 2
assert isinstance(prims[0], Usd.Prim)
assert prims[0].GetName() == "Foo"

Warning

This will be slow for stages with many prims, as stage traversal is currently single-threaded. Learn more about scene complexity.