コンテンツにスキップ

Variantの挙動を調べる_2

ipynbFile variantset02__Variantの挙動を調べる_2.ipynb

In [23]:

1
from pxr import Usd,Sdf

In [24]:

1
2
3
4
5
stage = Usd.Stage.CreateInMemory()
prim = stage.DefinePrim('/testPrim')
primB = stage.DefinePrim('/refPrim')

primB.CreateAttribute('refPrimAddAttr',Sdf.ValueTypeNames.String).Set('refPrim')

Success

1
True

In [25]:

1
2
3
4
5
6
7
8
# VariantSetを定義する
vset = prim.GetVariantSets().AddVariantSet('hogehoge')
vset.AddVariant('hoge')
vset.AddVariant('fuga')
# 名前の取得
print(vset.GetName())
# VariantSetが設定されているPrimの取得
print(vset.GetPrim())

Success

1
2
hogehoge
Usd.Prim(</testPrim>)

In [26]:

1
2
# VarinatSetのリストを取得
print(prim.GetVariantSets().GetNames())

Success

1
['hogehoge']

In [27]:

1
2
3
4
5
6
7
8
9
# Variantで選択される値をセットする
# セットするときは設定したいVariantを選択状態にする
vset.SetVariantSelection('fuga')
with vset.GetVariantEditContext():
    # Variantが指定されたPrimに対してアトリビュートを追加定義
    vset.GetPrim().CreateAttribute('test',Sdf.ValueTypeNames.Bool).Set(True)
    # with内でPrimをDefineすると、このVarinat以下にPrimを追加できる
    childPath = vset.GetPrim().GetPath().AppendChild('hoge')
    cPrim = stage.DefinePrim(childPath)

In [28]:

1
2
3
4
5
6
vset.SetVariantSelection('hoge')
with vset.GetVariantEditContext():
    # Variantが指定されているPrimに対してReferenceを追加したい場合も
    # with 内でGetReference AddReferenceすることでReferenceを追加できる。
    # MEMO:同じレイヤー内のPrimをリファレンスする場合は AddInternalReference を使う。
    vset.GetPrim().GetReferences().AddInternalReference('/refPrim')

In [29]:

1
2
# 今の選択しているVariantNameを取得
print(vset.GetVariantSelection())

Success

1
hoge

In [30]:

1
2
print(stage.GetRootLayer().ExportToString())
stage.GetRootLayer().Export("D:/test.usda")

Success

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#usda 1.0

def "testPrim" (
    variants = {
        string hogehoge = "hoge"
    }
    prepend variantSets = "hogehoge"
)
{
    variantSet "hogehoge" = {
        "fuga" {
            custom bool test = 1

            def "hoge"
            {
            }

        }
        "hoge" (
            prepend references = </refPrim>
        ) {

        }
    }
}

def "refPrim"
{
    custom string refPrimAddAttr = "refPrim"
}

Success

1
True