[maya]maya_usdでシーンにある選択したステージをmaya_usd apiのstageとして取得するには?

How to get the selected stage in the scene in maya_usd as the stage in maya_usd api?

import maya.cmds as cmds

def get_stage(stagePath):
    import mayaUsd.ufe
    #stagePath="|stage1|stageShape1"
    #stage = mayaUsd.ufe.getStage("|stage1|stageShape1")
    stage = mayaUsd.ufe.getStage(stagePath)
    print("stage= "+str(stage))
    # レイヤーを取得
    layer = stage.GetRootLayer()
    print("layer= "+str(layer))

def get_selected_maya_usd_stage():
    selectedlist=cmds.ls(sl=True,long=1)
    print("selectedlist= "+str(selectedlist))
    selectedZero=selectedlist[0]
    selectedZeroType=cmds.objectType( selectedZero )
    print("selectedZeroType= "+str(selectedZeroType))
    
    stagePath=""
    if(str(selectedZeroType)=="mayaUsdProxyShape"):
        stagePath=selectedZero
        get_stage(stagePath)
    elif(str(selectedZeroType)=="transform"):
        stagePath="|stage"+stageNumStr+"|stageShape"+stageNumStr
        get_stage(stagePath)
    else:
        print("not stage!!!!")
        
get_selected_maya_usd_stage()

OUTPUT

selectedlist= ['|stage5']
selectedZeroType= transform
stage= Usd.Stage.Open(rootLayer=Sdf.Find('anon:000002B5C8EA5570:anonymousLayer1'), sessionLayer=Sdf.Find('anon:000002B5C8EA5870:anonymousLayer1-session.usda'), pathResolverContext=Ar.DefaultResolverContext())
layer= Sdf.Find('anon:000002B5C8EA5570:anonymousLayer1')

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

selectedlist= ['|stage5|stageShape5']
selectedZeroType= mayaUsdProxyShape
stage= Usd.Stage.Open(rootLayer=Sdf.Find('anon:000002B5C84B1070:anonymousLayer1'), sessionLayer=Sdf.Find('anon:000002B5C84B1670:anonymousLayer1-session.usda'), pathResolverContext=Ar.DefaultResolverContext())
layer= Sdf.Find('anon:000002B5C84B1070:anonymousLayer1')

参考URL
https://github.com/Autodesk/maya-usd/issues/1046

[maya] maya_usdのAPIで 「mel mayaUsdCreateStageWithNewLayer」で作ったsceneの中のレイヤーをpythonで取得するには?

How to get the layer in the scene created with “mel mayaUsdCreateStageWithNewLayer” using python with maya_usd API?



# maya_usdのAPIで 「mayaUsdCreateStageWithNewLayer」で作ったsceneの中のレイヤーを取得するには?
print("--------------------get_layers_in_scene -----------------------")

# トップノードだけを検索、意外と使う。
TopNode_01_list=cmds.ls(assemblies=1)
print("TopNode_01_list= "+str(TopNode_01_list))

# mewl で mayaUsdCreateStageWithNewLayer を呼ぶ。
import maya.mel as mel
mel.eval("$StageWithNewLayer=`mayaUsdCreateStageWithNewLayer`")


# トップノードだけを検索、意外と使う。
TopNode_02_list=cmds.ls(assemblies=1)
print("TopNode_02_list= "+str(TopNode_02_list))
# 差分を比較
TopNode_02_set = set(TopNode_02_list)
TopNode_01_set = set(TopNode_01_list)
print("TopNode_01_set= "+str(TopNode_01_set))
print("TopNode_02_set= "+str(TopNode_02_set))

TopNode_diff_set = TopNode_02_set - TopNode_01_set
print("TopNode_diff_set= "+str(TopNode_diff_set))
TopNode_diff_list = list(TopNode_diff_set)
print("TopNode_diff_list= "+str(TopNode_diff_list))
TopNode_new_diff_str=TopNode_diff_list[0]
print("TopNode_new_diff_str= "+str(TopNode_new_diff_str))
# stage1の番号抽出
stageNumStr=TopNode_new_diff_str[5:]
print("stageNumStr="+stageNumStr)
#-------------------------------------------------------

import mayaUsd.ufe
stagePath="|stage"+stageNumStr+"|stageShape"+stageNumStr
#stagePath="|stage1|stageShape1"
#stage = mayaUsd.ufe.getStage("|stage1|stageShape1")
stage = mayaUsd.ufe.getStage(stagePath)
print("stage= "+str(stage))
# レイヤーを取得
layer = stage.GetRootLayer()
print("layer= "+str(layer))

Output

--------------------get_layers_in_scene -----------------------
TopNode_01_list= ['persp', 'top', 'front', 'side']
TopNode_02_list= ['persp', 'top', 'front', 'side', 'stage1']
TopNode_01_set= {'front', 'side', 'persp', 'top'}
TopNode_02_set= {'persp', 'stage1', 'top', 'front', 'side'}
TopNode_diff_set= {'stage1'}
TopNode_diff_list= ['stage1']
TopNode_new_diff_str= stage1
stageNumStr=1
stage= Usd.Stage.Open(rootLayer=Sdf.Find('anon:000002B5C8D87560:anonymousLayer1'), sessionLayer=Sdf.Find('anon:000002B5C8D87160:anonymousLayer1-session.usda'), pathResolverContext=Ar.DefaultResolverContext())
layer= Sdf.Find('anon:000002B5C8D87560:anonymousLayer1')