コンテンツにスキップ

ReferenceをしているPrimからUsdのFilePathを取得

ipynbFile UsdReference1__ReferenceをしているPrimからUsdのFilePathを取得.ipynb

In [18]:

1
2
3
4
5
from pxr import Usd, UsdGeom, Sdf

sample_usd = "D:/work/usd_py36/usd/ref.usda"

stage = Usd.Stage.Open(sample_usd)

In [19]:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
prim = stage.GetPrimAtPath("/ref")
# PrimがReferencによって定義されてるか
print(prim.HasAuthoredReferences())
# Primを構成するLayerを取得
print(prim.GetPrimStack())
for findLayer in prim.GetPrimStack():
    print(findLayer)
    # SdfPathを取得
    print(findLayer.path)
    # AssetPathを取得
    for ref in findLayer.referenceList.prependedItems:
        print(ref.assetPath)

Success

1
2
3
4
5
6
7
True
[Sdf.Find('d:/work/usd_py36/usd/ref.usda', '/ref'), Sdf.Find('d:/work/usd_py36/usd/testDD.usda', '/hogehoge')]
Sdf.Find('d:/work/usd_py36/usd/ref.usda', '/ref')
/ref
D:/work/usd_py36/usd/testDD.usda
Sdf.Find('d:/work/usd_py36/usd/testDD.usda', '/hogehoge')
/hogehoge

GetPrimStackで得られる Sdf.Find は、Primを構成するPrimSpec?と
その元になるAssetPathを取得できる。
リファレンスで読み込んでいるPrimの場合、
このFindで取得できるSdfPathは、Referenceの場合はReferenceで読み込んでるファイル内の
SdfPath。