2017-09-07 11 views
2

私はPythonでMayaで複製したジョイントから子を削除しようとしていますが、動作していません。私は何が欠けているのですか?私はこれを理解していたものからMaya Python複製されたジョイントから子を削除

import maya.cmds as mc 
mc.duplicate('spine02_Joint',n='spineGrpJnt') 
mc.parent('spineGrpJnt',w=True) 
mc.select('spineGrpJnt') 
childJnts = mc.listRelatives(ad=True) 
mc.delete(childJnts) 

はchildJntsのすべてを削除する必要がありますが、それは私にエラーを与える:「複数のオブジェクトは、名前と一致する:」

答えて

0

あなたは劇的duplicateコマンドでparentOnly kwargを使用して、コードを簡素化することができますほとんどの(すべてではないが) mayaコマンドを使用すると、変更するオブジェクトを渡したり、「新しい」オブジェクトの名前を返すことができます。これを変数に格納することで、オブジェクト名の文字列の代わりに変数を渡すことができます。これは、オブジェクトがその名前ですでに存在し、mayaが最後に1を付けた名前(例: 'my_object1')の場合に特に役立ちます。そうしたやり方で、選択を管理する必要がなく、誤ったオブジェクトでコマンドを操作することにつながる可能性のある名前を心配する必要がなくなります...

このようにオリジナルのコードを書くことができます:

import maya.cmds as mc 

new_jnt = mc.duplicate('spine02_Joint',n='spineGrpJnt')[0] 
mc.parent(new_jnt, w=True) 
childJnts = mc.listRelatives(new_jnt, ad=True, pa=True) 
mc.delete(childJnts) 
+0

なぜ[0]配列の最初のインデックスですか?複製はあなたに配列を与えますか? – Giakaama

+0

trueの場合、duplicateコマンドはリストを返しますが、この場合は1つの項目のリスト(単一の複製されたジョイント)です。したがって、後で使用するときに 'new_jnt [0]'を置くのではなく、最初の項目を変数に取り込む方が少し簡単です。また、変数 'new_jnts'に名前を付けなかったので、読みやすくするためのリストではなく、単一項目にするのがより理にかなっています。そして、しばしば、次のコマンドに戻り値データを1つの項目として送ります(次の2行でparentとlistRelativesのように) –

+0

これは基本的に、コマンドが返すデータをどのように使用するかによって決まります。if私は1つの項目に興味があるだけです(または、私はすでにそれが私にリスト内の1つの項目を与えてくれることを知っています)。もし私がもっと多くのアイテムを手に入れているのであれば、私はそうではありません。 –

0

が、私はそれを把握します。 コードは次のようになります。listRelativesに忠実PA =は私が欲しいものを私に与え

import maya.cmds as mc 
mc.duplicate('spine02_Joint',n='spineGrpJnt') 
mc.parent('spineGrpJnt',w=True) 
mc.select('spineGrpJnt') 
childJnts = mc.listRelatives(ad=True,pa=True) 
mc.delete(childJnts) 

を追加しました。それはあなたがその子

import maya.cmds as mc 

new_jnt = mc.duplicate('spine02_Joint', n='spineGrpJnt', parentOnly=True)[0] 
mc.parent(new_jnt, w=True) 

ちょうど別のマイナーのノートのいずれかなしに指定したノードに複製するよう

関連する問題