2016-06-24 14 views
0

新しいカメラを作成するコマンドを実行しますが、上記の関数の最後には選択がなく、関数がそのコースを実行した後にオブジェクトを選択しません。 最後に作成したアイテムのクエリが可能なコマンドはありますか?最後に作成されたアイテムの選択

に..私はそれを動き回ることが可能な任意の方法を私は `cmds.listHistoryを使用してみましたが、選択がすでに存在する場合、それは唯一のあなたの結果を示しているのだろうか?

また、私は

cameraShape... 
aaa = "cameraShape1" 
mel.eval('<Some mel-based command> cameraShape.transformX cameraShape.transformY cameraShape.transformZ;') 

を使用して、次のコマンドを使用していますが、私のような別の方法でそのコマンドを書くしようとしたときに言う: mel.eval('<Some mel-based command> %s.transformX %s.transformY %s.transformZ;' %aaa)

私は

# Error: not enough arguments for format string 
# Traceback (most recent call last): 
# File "<maya console>", line 1, in <module> 
# TypeError: not enough arguments for format string # 
を言ってエラーを得ました

どこが間違っているのですか?私は%aaa, aaa, aaaのような文章を書こうとしましたが、同じエラーが発生します。

+0

%作品(AAA、AAA、AAA) – galaxyan

+0

@galaxyan ...私が '()をしないのです'または私は '%のAAA、%のAAA、%のaaa'としてそれを書いているようです。 。私の部分の間違い – dissidia

+0

笑。問題はありません – galaxyan

答えて

1

なぜ、選択に頼るのではなく、新しいカメラを変数に入れるだけですか?

"My name is {0} and I was born in {1}".format("Jon Snow", "Winterfell") 
%でフォーマットするときは、右の構文を使用していない

new_camera, new_camera_shape = cmds.camera() 

:Pythonの3のために、より前方互換性があると仮定していますよう

"My name is %s" % "Jon Snow" # Works for single 
"My name is %s and I was born in %s" % ("Jon Snow", "Winterfell") # Multiple 

は個人的に私はformat()を好みます


は、新しいオブジェクトを検出:

scene_before = cmds.ls(l=True, transforms=True) 

# Run command to import object here 

scene_after = cmds.ls(l=True, transforms=True) 

new_objs = list(set(scene_after).difference(scene_before)) 
+0

こんにちは、私は例として 'カメラ'を使用しています、おそらくそれは非常に悪い例です。そのオブジェクトを作成するためのコードは、次のようなものです - 'import thisModule; thisModule.createItem() 'を呼び出すと、そのコードの実行後にオブジェクトが作成されます。選択されていないオブジェクトがあるため、最近作成されたノードを選択する方法がいくつかあります。 – dissidia

+0

あなたはそのモジュールの方法を投稿できますか?このメソッドは、作成したオブジェクトを返しません。バットから離れて、私はオブジェクトを得るためのいくつかの方法を考えることができます。 1つの安価な方法は、コマンドを実行する前にシーン内のすべてのオブジェクトのリストを作成し、それを新しいリストと比較して新しいオブジェクトを取得することです。これは、Pythonのset.differenceを使って行うことができます。 Maya APIのMSceneMessageコールバックを使用して新しいオブジェクトを取得することもできます。投稿が曖昧であるため、特定のアプローチに導くことは難しいです。 –

+0

コマンドが - 'import createCam;であるとします。明らかにnewNode()関数内でcreateCam.newNode()を呼び出すと、その中に別の関数があり、その関数を呼び出しています。 createNewCam()... createNewCam()には戻り値がありますが、newNode()には戻りません。それは懸念の原因なのでしょうか、それとも私がそのような戻り値を取得するのかわからないだけかもしれません... FYI、このcreateCamは私によって行われていませんでした。それは社内のものでした.. – dissidia

0

あなたが最後に作成されたオブジェクトを保持する場合。変数履歴を含むクラスを作成して、最後に作成したオブジェクトを他のスクリプトに追加することができます。

class History: 
    idCounter = [] 
    def __init__(self, name): 
     History.idCounter.append(name) 
     print(History.idCounter) 

for name in ['nana', 'tata', 'zaza']: 
    objectCreated = History(name) 
+0

これを行う簡単な方法はありますか?追加のクラスを作成せずに – dissidia

+0

私にとって、クラスは簡単な方法です。もしあなたが何か乱雑に行きたいなら、yoiuはmaya scriptjobまたはapi callbacksと一緒に行くことができます。 maya scriptJobを見ると、 'DagObjectCreated'というイベントが存在することがわかります。それはあなたの解決策かもしれないが、私はそれが本当に危険な方法だと思う。つまり、あなたは何らかの新しい歴史の積み重ねになると思っています。それは本当に重いことがあります。クラスでは、あなたが好きなものをフィルタリングすることができます。多くのコードの代わりに5行のコードが必要です。 – DrWeeny

+0

コメントを再読したので、私があなたが誤っていると誤解するかもしれません。私が望むのは、最後に作成されたノードの選択を保持せずに、最後に作成されたノードを選択することです。 – dissidia

関連する問題