Exemple #1
0
    def _apiAttrChanged(self, msg, mplug, other_mp, clientdata):
        #print('AttrChanged', msg, mplug.info(), msg & _1_ConnAndArrayChangeBits, not self._inputChangeProcNode)
        if (msg & _1_ConnAndArrayChangeBits) and not self._inputChangeProcNode:
            # コネクション変更かマルチアトリビュートの増減があった時。
            tkns = mplug.info().split('.')
            if tkns[1].split('[')[0] == 'input':
                self._inputChangeProcNode = tkns[0]
                cmds.evalDeferred(self._inputChangedProc)

            # Copy Tab したアトリビュートエディタは、フレームの閉じるボタンで閉じれば消滅するが、
            # ウィンドウ内の Close ボタンで閉じると vis=False 状態で残ってしまう。(maya 2017 win64 調べ)
            # New Scene したら削除されるようだが、それまでの間も不要な API コールバックが残り続けるのを避けるため、
            # ジョブが呼ばれた際に vis をチェックして kill する。
            # オブジェクト自体はウィンドウが削除されるまで残ってしまうが、まあ良いとする。
            if not _isUIVisible(self.root):
                #print('KILL APICB & node reference', self.root)
                if self._cid_attrChanged:
                    _1_MNodeMessage.removeCallback(self._cid_attrChanged)
                    self._cid_attrChanged = None
                self._mnode = None

                if self._jid_nodeDeleted:
                    try:
                        cmds.scriptJob(k=self._jid_nodeDeleted, f=True)
                        #print('KILL nodeDeleted JOB', self.root)
                    except:
                        pass
                    self._jid_nodeDeleted = None
Exemple #2
0
 def _killApiattrChanged(self):
     u"""
     ノード削除時、UI 削除時に API コールバックを kill する。
     """
     if self._cid_attrChanged:
         #print('KILL APICB', self.root)
         _1_MNodeMessage.removeCallback(self._cid_attrChanged)
         self._cid_attrChanged = None
         self._jid_nodeDeleted = None  # nodeDeleted ジョブは自動削除されるので ID をクリアしておく。
         self._mnode = None
Exemple #3
0
 def clearCBs(self, event=None):
     try:
         print "removing scriptjob"
         cmds.scriptJob(kill=self.layerChangedJob, force=True)
         for cache in self.ABCViewerNode.values():
             cache.setSelection("")
         print "removing callbacks"
         MMessage.removeCallback(self.newNodeCBMsgId)
         MMessage.removeCallback(self.delNodeCBMsgId)
         MNodeMessage.removeCallback(self.NodeNameMsgId)
     except:
         pass
Exemple #4
0
 def clearCBs(self, event=None):
     try:
         print "removing scriptjob"
         cmds.scriptJob( kill=self.layerChangedJob, force=True)
         for cache in self.ABCViewerNode.values():
             cache.setSelection("")
         print "removing callbacks"
         MMessage.removeCallback( self.newNodeCBMsgId )
         MMessage.removeCallback( self.delNodeCBMsgId )
         MNodeMessage.removeCallback( self.NodeNameMsgId )
     except:
         pass
Exemple #5
0
    def setNode(self, node):
        mnode = api2_mnode(node)
        if not self._mnode or self._mnode != mnode:
            if self._cid_attrChanged:
                #print('KILL APICB', self.root)
                _1_MNodeMessage.removeCallback(self._cid_attrChanged)
            self._mnode = mnode
            #print('NEW APICB', self.root)
            self._cid_attrChanged = _1_MNodeMessage.addAttributeChangedCallback(
                api1_mnode(node), self._apiAttrChanged)
            self._jid_nodeDeleted = cmds.scriptJob(
                p=self.path, rp=True, nd=(node, self._killApiattrChanged))

            self._inputChangeProcNode = node
            self._inputChangedProc()
            return True
        return False
Exemple #6
0
 def addCBs(self, event=None):
     try:
         print "adding callbacks"
         self.renderLayer.currentIndexChanged.connect(self.layerChanged)
         self.NodeNameMsgId  = MNodeMessage.addNameChangedCallback( MObject(), self.nameChangedCB )
         self.newNodeCBMsgId = MDGMessage.addNodeAddedCallback( self.newNodeCB )
         self.delNodeCBMsgId = MDGMessage.addNodeRemovedCallback( self.delNodeCB )
         print "adding scriptjob"
         self.layerChangedJob = cmds.scriptJob( e= ["renderLayerManagerChange",self.setCurrentLayer])
     except:
         pass
Exemple #7
0
 def addCBs(self, event=None):
     try:
         print "adding callbacks"
         self.renderLayer.currentIndexChanged.connect(self.layerChanged)
         self.NodeNameMsgId = MNodeMessage.addNameChangedCallback(
             MObject(), self.nameChangedCB)
         self.newNodeCBMsgId = MDGMessage.addNodeAddedCallback(
             self.newNodeCB)
         self.delNodeCBMsgId = MDGMessage.addNodeRemovedCallback(
             self.delNodeCB)
         print "adding scriptjob"
         self.layerChangedJob = cmds.scriptJob(
             e=["renderLayerManagerChange", self.setCurrentLayer])
     except:
         pass