0

私はグーグルでMayaで名前空間を処理する方法を探していましたが、すべての結果はそれらを削除する方法です。それらを削除したくありません。

シーンでキャラクターを参照しています。特定のロケーターでスクリプトを実行する必要がありますが、で参照されているため、すべてに名前空間があります。

例えば:shldr = cmds.xform('L_shldrFK_match_LOC', ws = True, t = True, q = True)

これにより、ワールドスペースでのロケーターの変換値が取得されます。これが私が望むものです。ただし、名前空間が原因でロケーターを見つけることができません。

コード内の名前空間を無視し、maya内に保持するにはどうすればよいですか?

他に便利なのは、名前空間がないかどうかをコードが認識することです(たとえば、シーンがで参照されていませんでした)。

4

4 に答える 4

3

UUIDこれを行う別の方法は、文字列の命名の依存関係をスキップし、代わりに経由でノードを取得することを採用することです。ここにあるフラグcmds.lsと併せて参照してください。-uuid

名前空間は、実際には、オブジェクトの名前に追加された単なる文字列名プレフィックスです。名前空間が存在する限り、オブジェクトの名前を変更して名前空間に追加/削除することができます。例えば:

import maya.cmds as cmds

loc = cmds.spaceLocator()
cmds.ls(loc)[0]  # Result: u'locator1' # 

cmds.namespace(add='foobar')  # Result: u'foobar' # 
loc = cmds.rename(loc, ':foobar:{}'.format(loc))  # Result: u'foobar:my_locator' #

cmds.rename(loc, ':my_locator')  # Result: u'my_locator' # 

背後にある考え方UUIDは、ノードがそのノードに固有の特別な文字列属性でタグ付けされ、ノードの名前が変更されても変更されないということです。たとえば、UUID は同じままで名前が変更されていることに注意してください。

import maya.cmds as cmds

loc = cmds.spaceLocator()
cmds.ls(loc, uuid=True)[0]  # u'60446AC7-4398-E3CB-4C27-6BA417626E41' # 
cmds.ls(loc)[0]  # Result: u'locator1' # 


loc = cmds.rename(loc, 'my_locator')
cmds.ls(loc, uuid=True)[0]  # Result: u'60446AC7-4398-E3CB-4C27-6BA417626E41' #
cmds.ls(loc)[0]  # Result: u'my_locator' # 

UUIDこの情報を利用して、ノードが(名前付けによって) 移動先/移動先の名前空間に関係なく、ノードはその寿命全体にわたって常に同じであり、変更されないことがわかりました。

これをすべてまとめると、lsコマンドを と組み合わせて使用​​ する方法は次のuuidとおりです。

# Query the UUID of our locator
cmds.ls(loc, uuid=True)[0]  # Result: u'60446AC7-4398-E3CB-4C27-6BA417626E41' #

# Retrieve the locator name string via UUID
cmds.ls(u'60446AC7-4398-E3CB-4C27-6BA417626E41')[0]  # Result: u'my_locator' # 
于 2016-10-18T14:02:36.287 に答える
0

そのようなものをコーディングするとき、私は通常、名前空間がそうである場所にアスタリスクを使用します。

shldr = cmds.xform('*:L_shldrFK_match_LOC', ws = True, t = True, q = True)

同じ名前の他の名前空間の下のシーンに他のものがあるかどうかによって異なりますが、それでは機能しないためです

于 2014-07-29T02:00:12.427 に答える