2017-07-14 18 views
3

私はMayaを5年以上使用しており、今ではPythonを使用してMayaで実行したい特定のアクションのスクリプトを作成したいと考えています。私はJSでいくつかの経験のスクリプトを持っています。Loop to Duplicateオブジェクトfor Maya - Python 2

は簡単に私がすでにやったカバーするために:

私は彼らの位置決幅や回転を変更する、forループのpythonを使用してMayaで複数のオブジェクトを作成したかったです。私はこれで成功しました。

Mayaでオブジェクトを名前で選択し、それを複製し、forループを使ってrotate/move/scaleしたいとします。私が持っている問題は、私がそれを複製するときに私が目標としているオブジェクトの名前を変更することができないということです。通常、Pythonは名前だけが文字列にすることができますし、整数値を入力+ I「nameOfObject」

を私は「私」を使用し、ループ内の名前の末尾に追加しますJSを使用して

構文エラーです。

この操作を実行する方法はありますか?

マイコード:

import maya.cmds as cmds 
from random import randint 

for i in range(0,50): 
    cmds.duplicate('solitude') 
    cmds.rotate(0,i*20,0) 

これは、同じオブジェクトの50を作成しますが、私は、ハード全体のことをコーディングすることなく、新しく作成されたオブジェクトを選択する必要があります。

+0

それはあなたにsintaxエラーになります?またはタイプエラー?あなたはあなたが "JS"の方法で名前を変更しようとした方法を追加してください。 –

+0

cmds.duplicate( 'solitude' + i) 「i」を追加すると、forループが実行されるたびに名前が変更されます。 しかし、私はTypeErrorを受け取ります。 –

+1

私はジョン、 "ハスタラビスタベイビー"を見て、私の答えをチェックして、それが動作するかどうか知らせてください:) –

答えて

1

私は普通だと思います。このエラーは、followinを行う試してください。

cmds.duplicate('solitude'+str(i)) 
+0

完璧に動作します! –

+0

@JohnConnor喜んで助けてください:) –

1

私はあなたが既に答えを受け入れてきた知っている、それがソース・ノードの名前と一緒にイテレータの番号を使用するように動作します - シーン内に重複していない場合には...

重複コマンドが変数に返すものをキャプチャしてから、そのアイテムを使用して回転を行うことが、より包括的なソリューションです。この方法では、名前を決めることに決めたMayaに関係なく、実際にすでに複製されているので、複製の名前を作成する必要はありません。

これが大変な場合は、複製と回転を行う前に、ソースノードとして使用する選択肢をキャプチャすることもできます。したがって、アイテムを選択し、次にコードを実行することによって、次のコードを使用することができます。また

import maya.cmds as mc 

src = mc.ls(sl=True)[0] 
dup = src 
for i in xrange(50): 
    dup = mc.duplicate(dup)[0] 
    mc.rotate(0,i*20,0, dup) 

、マイナーのノート - あなたのコードでrandintを使用しているように、それはあなたがが、他の場所でそれを使用している可能性が...いないようです...

+0

それは間違いなく動作し、それを実行するより堅牢な方法です!注目!ありがとう! –

+0

@JohnConnor - もちろん!将来のスクリプトで役立つことを願っています:D –