2015/01/15

【Maya】 Reference Edit の一覧表示 + 掃除

リファレンスに対する編集内容は、
Reference Editor のList Reference Edits から確認できますが、
リファレンスノードひとつひとつをチクチクやるのはなかなか面倒。
一気にがーっと表示していただきたい。っていうときに。


import pymel.core as pm

for i in pm.system.listReferences():
    print '\r',i.refNode,i,'\r'
    for j in i.getReferenceEdits()
        print '\t',j



listReferences()を唱えると、シーン内のリファレンスノードのリストが取得できます。
さらに、リファレンスノードオブジェクトの getReferenceEdits() メソッドで、
そのリファレンスへの編集内容が、文字列(melスクリプト)のリストとして返ってきます。
ので、それをforでまわしてprint。

からの、
 removeReferenceEdits()  っていうのがあるので、
これを使って、機械的に消せそうなやつはついでに掃除みます。

import pymel.core as pm

for i in pm.system.listReferences():
    print '\r',i.refNode,i,'\r'
    beforeList = i.getReferenceEdits()
    for j in beforeList:
        print '\t',j
    
    i.removeReferenceEdits()
    print '\t\t...remove...'
    afterList = i.getReferenceEdits()
    for k in afterList:
        print '\t',k
    print beforeList == afterList


真ん中ら辺で removeReferenceEdits() を使っています。
その前後で getReferenceEdits() による編集内容確認。
最後に、使用前使用後で比較してみています。
False なら、なんか除去されたというしるし。

いや、けっこうぜんぜん、なかなか、そう簡単には綺麗にならないんですけどね(^^;;;;;

あとは、なんたらかんたら removeEdits "{mel script}" (<雑) で除去して行くと思うんですが、
たとえば、シェーディンググループへの「コネクト」は除去できても
「ディスコネクト」は除去できなくて、
かくしてどのシェーディンググループにも属してない、マテリアルのぶっちぎれたオブジェクトが簡単に出来てしまうのでした。ちゃんちゃん。

ちなみにこれらReference Editは
maを開いてみて見ると、種類ごとに番号に置き換えられてます。
disconnectAttrが 3
serAttrが2
あとなんだったかなー どっかに書いてあったのを見かけたような気がしますが、忘れました(白眼


追記1:
ちなみに、Reference Edit のリストは
c:\Program Files\Autodesk\Maya{version}\scripts\others\referenceEditsWindow.mel
こちらで用意されているみたいです。
これによると、リファレンスに対して行われる操作は
setAttr (=2)
connectAttr
disconnectAttr (=3)
addAttr (=1)
deleteAttr
parent (=0)
relationship (=7)
breakRelationship
lock (=8)
unlock (=9)
の十種で、connectAttr は .ma 内では一番最後にまとめて行われているので、
残りが 0~8 にまとめられている感じなのでしょうか…。 
(でもリファレンス先でアトリビュートのロックできないよね…)

追記2:
リファレンスのロック/アンロックはpreferenceにありました。
lockが8、unlockが9でした。

0 件のコメント:

コメントを投稿