Last active
February 11, 2020 17:56
-
-
Save redglasses67/6ad6ea0bb4111af5f5ba49bc6976b625 to your computer and use it in GitHub Desktop.
インポート時に追加されたノードを選択状態に
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import maya.cmds as mc | |
import maya.mel as mel | |
import maya.OpenMaya as om | |
import maya.api.OpenMaya as om2 | |
maya_useNewAPI = True | |
beforeImport_ID = None | |
afterImport_ID = None | |
beforeCreateReference_ID = None | |
afterCreateReference_ID = None | |
tempImportedNodeList = [] | |
optionVarKey = "kkSelectImportedNodes_checkBox" | |
selectMenuPath = "MayaWindow|mainSelectMenu" | |
dividerPath = selectMenuPath + "|SelectImportedNodesDivider" | |
menuPath = selectMenuPath + "|SelectImportedNodes" | |
def initializePlugin(plugin): | |
if mc.about(uiLanguage=True) == "ja_JP": | |
menuLabel = u"インポートしたノードを選択状態にする" | |
else: | |
menuLabel = "Select Imported Nodes" | |
try: | |
""" | |
もし選択メニューを1度も開いていない状態で実行すると、なぜか選択メニューが SelectImportedNodes だけになってしまうので | |
最初に下記の mel を実行しておく。 | |
If you execute this while mainSelectMenu has never been opened, | |
mainSelectMenu will be only SelectImportedNodes for some reason, so first execute mel below. | |
""" | |
mel.eval("buildSelectMenu MayaWindow|mainSelectMenu;") | |
checkBoxVal = False | |
if mc.optionVar(exists=optionVarKey) == True: | |
checkBoxVal = mc.optionVar(q=optionVarKey) | |
mc.menuItem( | |
"SelectImportedNodesDivider", | |
divider=True, | |
parent=selectMenuPath) | |
mc.menuItem( | |
"SelectImportedNodes", | |
parent=selectMenuPath, | |
label=menuLabel, | |
checkBox=checkBoxVal, | |
command=changeCheckBox) | |
except: | |
mc.warning("kkSelectImportedNodes : it could not add menuItem...") | |
# すでに存在していた場合は initializePlugin でも実行してCallbackを追加しておく | |
if mc.optionVar(exists=optionVarKey) == True: | |
changeCheckBox() | |
def uninitializePlugin(plugin): | |
try: | |
if mc.menuItem(dividerPath, exists=True): | |
mc.deleteUI(dividerPath, menuItem=True) | |
if mc.menuItem(menuPath, exists=True): | |
mc.deleteUI(menuPath, menuItem=True) | |
removeCallbackEvents() | |
except: | |
mc.warning("kkSelectImportedNodes : it could not delete menuItem...") | |
def changeCheckBox(*args): | |
doEvent = mc.menuItem(menuPath, q=True, checkBox=True) | |
mc.optionVar(intValue=(optionVarKey, 1 if doEvent else 0)) | |
if doEvent == True: | |
print("SelectImportedNodes Event ON\n") | |
global beforeImport_ID | |
beforeImport_ID = om2.MSceneMessage.addCallback(om2.MSceneMessage.kBeforeImport, beforeNodeEvent) | |
global beforeCreateReference_ID | |
beforeCreateReference_ID = om2.MSceneMessage.addCallback(om2.MSceneMessage.kBeforeCreateReference, beforeNodeEvent) | |
global afterImport_ID | |
afterImport_ID = om2.MSceneMessage.addCallback(om2.MSceneMessage.kAfterImport, afterNodeEvent) | |
global afterCreateReference_ID | |
afterCreateReference_ID = om2.MSceneMessage.addCallback(om2.MSceneMessage.kAfterCreateReference, afterNodeEvent) | |
else: | |
print("SelectImportedNodes Event OFF\n") | |
removeCallbackEvents() | |
def removeCallbackEvents(): | |
global beforeImport_ID | |
if not beforeImport_ID is None: | |
om2.MMessage.removeCallback(beforeImport_ID) | |
beforeImport_ID = None | |
global beforeCreateReference_ID | |
if not beforeCreateReference_ID is None: | |
om2.MMessage.removeCallback(beforeCreateReference_ID) | |
beforeCreateReference_ID = None | |
global afterImport_ID | |
if not afterImport_ID is None: | |
om2.MMessage.removeCallback(afterImport_ID) | |
afterImport_ID = None | |
global afterCreateReference_ID | |
if not afterCreateReference_ID is None: | |
om2.MMessage.removeCallback(afterCreateReference_ID) | |
afterCreateReference_ID = None | |
def beforeNodeEvent(*args): | |
allTopNodes = mc.ls(assemblies=True) | |
# print("beforeNodeEvent = %s"%allTopNodes) | |
global tempImportedNodeList | |
for topNode in allTopNodes: | |
tempImportedNodeList.append(topNode) | |
def afterNodeEvent(*args): | |
allTopNodes = mc.ls(assemblies=True) | |
# print("afterNodeEvent = %s"%allTopNodes) | |
global tempImportedNodeList | |
newImportedNodeList = list(set(allTopNodes) - set(tempImportedNodeList)) | |
mc.select(newImportedNodeList, replace=True) | |
# make tempImportedNodeList empty. | |
tempImportedNodeList = [] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment