Skip to content

Instantly share code, notes, and snippets.

@redglasses67
Last active February 11, 2020 17:56
Show Gist options
  • Save redglasses67/6ad6ea0bb4111af5f5ba49bc6976b625 to your computer and use it in GitHub Desktop.
Save redglasses67/6ad6ea0bb4111af5f5ba49bc6976b625 to your computer and use it in GitHub Desktop.
インポート時に追加されたノードを選択状態に
# -*- 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