アセットをリファレンスして作業する前提でサポート用のツールを作る際、
ネームスペースを取得して色々行ったのだけども、そのときの紆余曲折をまとめ
namespaceInfoで問い合わせ
allNameSpace = []
ignorList = ['UI', 'shared']
allNameSpace = cmds.namespaceInfo(listOnlyNamespaces = True)
allNameSpace = list(set(allNameSpace) - set(ignorList))
シーン内のネームスペースを全部取得してくれる。
全部返してくれるので ['UI', 'shared'] といったデフォルトのネームスペースも含まれる。
unload状態のリファレンスで使用しているネームスペースも返してくれる。
そのネームスペースがリファレンスで使用しているのか否かが判らない。
referenceQuery で問い合わせ
allNameSpace = []
refNodes = cmds.ls(type = "reference")
for refNode in refNodes:
if refNode == "sharedReferenceNode":
continue
allNameSpace.append(cmds.referenceQuery(refNode, namespace=True,,shortName =True))
別のノードを渡しても取れるが、リファレンスで使用しているネームスペースを取得したいと考えるとreferenceノードのほうが都合が良かった。
リファレンスされていないノードを渡すとエラーになる。
fileで問い合わせ
allNameSpace = []
allRefFiles = cmds.file(q =True ,reference =True)
for refFile in allRefFiles:
allNameSpace.append(cmds.file(refFile,q =True ,namespace = True))
シーン内でリファレンスで使用しているネームスペースを取得できる
リファレンスノードにロード状態を問い合わせる
cmds.referenceQuery(refNode,isLoaded=True)
これらを組み合わせてフィルタリングしてみる
ロードされているリファレンスのネームスペースを取得する
allNameSpace = []
allRefFiles = cmds.file(q =True ,reference =True)
for refFile in allRefFiles:
refnode = cmds.file(refFile,q =True ,referenceNode = True)
if cmds.referenceQuery(refNode,isLoaded=True):
allNameSpace.append(cmds.file(refFile,q =True ,namespace = True))
リファレンスに使用されていないネームスペースを取得する
allNameSpace = []
ignorList = ['UI', 'shared']
allNameSpace = cmds.namespaceInfo(listOnlyNamespaces = True)
allNameSpace = list(set(allNameSpace) - set(ignorList))
allRefFiles = cmds.file(q =True ,reference =True)
referenceNameSpace = []
for refFile in allRefFiles:
referenceNameSpace.append(cmds.file(refFile,q =True ,namespace = True))
allNameSpace = list(set(allNameSpace) - set(referenceNameSpace ))