EditTargetで指定レイヤーを操作
ipynbFile USDEditTarget__EditTargetで指定レイヤーを操作.ipynb
Root - layerA - layerB のようなサブレイヤー構成で
各レイヤーを取得する方法とかテスト。
In [1]:
| from pxr import Usd, UsdGeom, Sdf
|
In [2]:
| Usd.StageCache().Clear()
stage = Usd.Stage.Open(r"D:\work\usd_py36\usd\rootLayer.usda")
# RootLayerのターゲット取得
|
In [3]:
| # レイヤー取得
layers = stage.GetUsedLayers()
print(layers)
|
Success
| [Sdf.Find('d:/work/usd_py36/usd/layerA.usda'), Sdf.Find('anon:000001C85E39D3E0:rootLayer-session.usda'), Sdf.Find('d:/work/usd_py36/usd/rootLayer.usda'), Sdf.Find('d:/work/usd_py36/usd/layerB.usda')]
|
In [4]:
| # EditTarget関係
# EditTarget取得 デフォルトはRoot
target = stage.GetEditTarget()
|
In [5]:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | # Spec取得
prim = stage.GetPrimAtPath("/testPrim")
attr = prim.GetAttribute("hoge")
attrB = prim.GetAttribute("val")
# Path指定でEditTarget取得したい
# GetUsedLayers()の引数では Sdf.Findの配列なので、これを使う手もある。
targetB = stage.GetEditTargetForLocalLayer(Sdf.Find('d:/work/usd_py36/usd/layerB.usda'))
# それからPrimSpecを取得
targetBPrim = targetB.GetLayer().GetPrimAtPath('/testPrim')
# アトリビュートが定義されてるか
print('val' in targetBPrim.attributes)
# セットされている値を取得
print(targetBPrim.attributes['val'].default)
|
In [6]:
| # Root以外のレイヤーを編集ターゲットにする
stage.SetEditTarget(targetB)
# 試しに追加
stage.DefinePrim("/addTest")
# そして保存
targetB.GetLayer().Save()
|