2017-05-16 2 views
1

から子供を選択するために、私は次の操作を行う必要があります。マヤPythonの:どのようにファイルを参照して、すぐに私は、自動化のためのPythonスクリプトを書く必要があること、参照ファイル

  • リファレンスファイルの後にファイル
  • すぐにその子の1つを選択する。たとえば、

:参照ファイルの構造は、このようなものです:

  • rig_grp
    • - > control_grp
    • - > model_grp

マイ試みたのは:

import maya.cmds as cmds 

cmds.file("M:/.../rig.ma", r=True, ignoreVersion = True, namespace = "Rig") 

上記のコードは、リグのファイルを参照し、私の質問は:リグファイルがインポートされた直後に、control_grpを選択する方法。

答えて

1

ほとんどの場合、参照ファイルの内容は名前空間の一部として入ります(名前の前にコロンとコロンで識別されます)。例: 'reference:pCube1`。そのファイルを参照すると、セットを作成するのではなく名前空間内を検索できるようになりますが、あなたやあなたのユーザーが参照ダイアログでオプションを設定した方法によっては、事前に名前空間を知ることができません。

あなたは、名前空間を持っている場合

、それは簡単です:

rig_namespace = "rig" # or whatever you call it 
control_grp = "control_grp") # name of the object you want 
cmds.select(rig_namespace + ":" + control_grp) 

あなたは詐欺を保存することができます検索するどのような名前空間がわからない場合テントをPythonにロードする前にシーンのテントset()を作成し、参照が入った後に新しいset()をコンテンツから外します。difference()ファンクションを使用すると、ポストロードセットからプリロードセットを減算することができます。参照ファイルに付属しているすべてのものcmds.selectを使用して、探しているアイテムをファイルから取得できます。

取得インポートされたファイルの内容

import maya.cmds as cmds 
before = set(cmds.ls(type='transform')) 
cmds.file(r"path/to/file.ma", reference=True) 
after = set(cmds.ls(type='transform')) 
imported = after - before 
print imported 

インポートされたファイルのうち制御リグを取得

controls = set(cmds.ls("*control_grp*", type = transform)) # wildcards in 
case maya has added numbers or prefixes 
imported_controls = controls & imported # this gets only controls just added 
cmds.select(*imported_controls) # you need the asterisk to unpack the set 
関連する問題