2017-01-19 9 views
0

オブジェクトにskinClusterがあるかどうかを確認しようとしています。私のコードはかなり基本的です。ここでは例です:Maya Python skinCluster戻り値の型は文字列ではありませんか?

cmds.select(d=True) 
joint = cmds.joint() 
skinnedSphere = cmds.polySphere(r=2) 
notSkinnedSphere = cmds.polySphere(r=2) 

skinTestList = [skinnedSphere, notSkinnedSphere] 

# Bind the joint chain that contains joint1 to pPlane1 
# and assign a dropoff of 4.5 to all the joints 
# 
cmds.skinCluster(joint, skinnedSphere, dr=4.5) 

for obj in skinTestList: 

    objHist = cmds.listHistory(obj, pdo=True) 

    skinCluster = cmds.ls(objHist, type="skinCluster") 

    if skinCluster == "": 
     print(obj + " has NO skinCluster, skipping.") 
    else: 
     print obj, skinCluster 
     #cmds.select(obj, d=True) 

私の問題は、それがのskinClusterを見つけることができない場合でも、それはまだ「OBJ、のskinCluster」というよりも、それはのskinClusterを見つけることができないというエラーを出力していることです。

私はのskinClusterは、文字列を返すと思いました。文字列が空の場合は、 "obj、skincluster"ではなくエラーを出力するはずです。

助けていただけたら幸いです!

+0

異なる哲学は、そのようなオブジェクトが存在しない場合に返す何があります。 'None'または' False'でもかまいません。すべてのオブジェクトに対して 'print repr(skinCluster)、type(skinCluster)'をデバッグしてみてください。 – mkiever

+1

skinClusterが空でないかどうかを確認することもできます。つまり、skinCluster empty –

+0

は空のリストを返します - > []。あなたはAri Goldがあなたに言ったようにチェックすることができます:もしskinClusterでないなら、skinCluster == [] – DrWeeny

答えて

3

これは古典的なMayaの問題です。問題は、結果が単一のアイテムであることがわかっていても、単一のアイテムではなく、頻繁にリストを与えることです。つまり、1つのアイテムのリストから1つのアイテムを取得するか、空のリストにインデックスを取得しようとすることによるエラーを避けるために、一連のコードを書くことになります。それは使用しても安全ですので、あなたは常にそれに何かでリストを取得します

for obj in skinTestList: 
    objHist = cmds.listHistory(obj, pdo=True) 
    skinCluster = cmds.ls(objHist, type="skinCluster") or [None] 
    cluster = skinCluster[0] 
    print obj, cluster 

or [None]保証を:

あなたは基礎を持っている、それはあなたをめちゃくちゃにされ== ""です[0]を使用して単一の値を取得します。コメントの中に指摘されているように、if cluster:にすることができ、空の値をスキップすることはできません。

関連する問題