Stage Management
Get stage
stage = omni.usd.get_context().get_stage()
Get Layer
layer = stage.GetRootLayer()
# get layer path: layer.realpath
Get Session Layer
session_layer = stage.GetSessionLayer()
Modify stuffs with session Layer
with Usd.EditContext(stage, session_layer):
do_stuff()
Get/Set default prim
self.stage.SetDefaultPrim(self._stage.GetPrimAtPath("/World"))
# .GetDefaultPrim()
Traverse all prims
self.prim_list = self.stage.TraverseAll()
Create Empty xform
import omni
import pxr
from omni.physx.scripts import physicsUtils
physicsUtils.add_xform(stage, "/xform", pxr.Gf.Vec3f(0.0, 0, 0.0))
# or
path = omni.usd.get_stage_next_free_path(stage, "/panda", True)
xform_geom = pxr.UsdGeom.Xform.Define(stage, path)
Set/Get stage units, Set Up Axis
from omni.isaac.core.utils.stage import get_stage_units
get_stage_units()
# set up axis to z
pxr.UsdGeom.SetStageUpAxis(stage, UsdGeom.Tokens.z)
pxr.UsdGeom.SetStageMetersPerUnit(stage, 0.01)
Rename prim
old_prim_name = prim.GetPath().pathString
new_prim_name = prim.GetPath().GetParentPath()
new_prim_name = new_prim_name.AppendChild("Door1")
new_prim_name = omni.usd.get_stage_next_free_path(self.stage, new_prim_name.pathString, False)
print("new_prim_name: ", new_prim_name)
move_dict = {old_prim_name: new_prim_name}
if pxr.Sdf.Path.IsValidPathString(new_prim_name):
move_dict = {old_prim_name: new_prim_name}
omni.kit.commands.execute("MovePrims", paths_to_move=move_dict, on_move_fn=None)
else:
carb.log_error(f"Cannot rename {old_prim_name} to {new_prim_name} as its not a valid USD path")
Get/Set Prim Attribute
test_prim = self.stage.GetPrimAtPath("/World/Looks/component_45146_solid_001_wire1/component_45146_solid_001_wire1")
# shader = pxr.UsdShade.Shader(test_prim)
# asset = shader.GetSourceAsset("mdl")
# print("shader", asset)
attr = test_prim.GetAttribute("inputs:diffuse_texture").Get()
new_asset_path = str(attr).replace(":","_").replace("@","")
print("attr", str(attr), new_asset_path)
test_prim.CreateAttribute("inputs:diffuse_texture", pxr.Sdf.ValueTypeNames.String, False).Set(new_asset_path)