-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathxsiTransformPanel_maya.py
156 lines (132 loc) · 6.43 KB
/
xsiTransformPanel_maya.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
from maya import cmds
from maya import mel
from maya import OpenMayaUI as omui
from Qt import QtGui, QtCore, QtWidgets
from Qt.QtCore import *
from Qt.QtGui import *
from shiboken2 import wrapInstance
import maya.api.OpenMaya as om
import pymel.core as pm
import math
import xsiTransformPanel
reload(xsiTransformPanel)
from xsiTransformPanel import XsiTransformPanel
class XsiTransformPanel_Maya(XsiTransformPanel):
def __init__(self, name, parent, *args, **kwargs):
super(XsiTransformPanel_Maya, self).__init__(name, parent, *args, **kwargs)
def initHost(self):
self.selChangeID = om.MEventMessage.addEventCallback('SelectionChanged', self.updateSelection)
self.toolChangedID = om.MEventMessage.addEventCallback('PostToolChanged', self.getManipTool)
def closeEvent(self, event):
om.MMessage.removeCallback(self.selChangeID)
for i in self.srtUpdaterID:
om.MMessage.removeCallback(i)
om.MMessage.removeCallback(self.toolChangedID)
QtWidgets.QWidget.closeEvent(self, event)
def setPlugValue(self, node, plug, value):
return om.MFnDependencyNode(node).findPlug(plug, True).setFloat(value)
def updateClientValues(self, name, value):
for node in self.selectionList:
if name == "translateX":
self.setPlugValue(node, "translateX", value)
elif name == "translateY":
self.setPlugValue(node, "translateY", value)
elif name == "translateZ":
self.setPlugValue(node, "translateZ", value)
elif name == "rotateX":
self.setPlugValue(node, "rotateX", math.radians(value))
elif name == "rotateY":
self.setPlugValue(node, "rotateY", math.radians(value))
elif name == "rotateZ":
self.setPlugValue(node, "rotateZ", math.radians(value))
elif name == "scaleX":
self.setPlugValue(node, "scaleX", value)
elif name == "scaleY":
self.setPlugValue(node, "scaleY", value)
elif name == "scaleZ":
self.setPlugValue(node, "scaleZ", value)
def updateHostValues(self, msg, mplug, otherMplug, clientData):
# print msg
if msg == 2056:
nodeName, attrName = mplug.name().split('.')
if attrName == "translate":
self.translateWidget.X.setValue(mplug.child(0).asFloat())
self.translateWidget.Y.setValue(mplug.child(1).asFloat())
self.translateWidget.Z.setValue(mplug.child(2).asFloat())
elif attrName == "rotate":
self.rotateWidget.X.setValue(mplug.child(0).asFloat())
self.rotateWidget.Y.setValue(mplug.child(1).asFloat())
self.rotateWidget.Z.setValue(mplug.child(2).asFloat())
elif attrName == "scale":
self.scaleWidget.X.setValue(mplug.child(0).asFloat())
self.scaleWidget.Y.setValue(mplug.child(1).asFloat())
self.scaleWidget.Z.setValue(mplug.child(2).asFloat())
elif attrName == "translateX":
self.translateWidget.X.setValue(mplug.asFloat())
elif attrName == "translateY":
self.translateWidget.Y.setValue(mplug.asFloat())
elif attrName == "translateZ":
self.translateWidget.Z.setValue(mplug.asFloat())
elif attrName == "rotateX":
self.rotateWidget.X.setValue(mplug.asFloat())
elif attrName == "rotateY":
self.rotateWidget.Y.setValue(mplug.asFloat())
elif attrName == "rotateZ":
self.rotateWidget.Z.setValue(mplug.asFloat())
elif attrName == "scaleX":
self.scaleWidget.X.setValue(mplug.asFloat())
elif attrName == "scaleY":
self.scaleWidget.Y.setValue(mplug.asFloat())
elif attrName == "scaleZ":
self.scaleWidget.Z.setValue(mplug.asFloat())
def getPlugValue(self, *args):
return om.MFnDependencyNode(args[0]).findPlug(args[1], True).asFloat()
def updateSelection(self, *args, **kwargs):
selectionList = om.MGlobal.getActiveSelectionList()
# clean previous selection callback
if len(self.selectionList) > 0:
for node in self.selectionList:
ids = om.MMessage.nodeCallbacks(node)
ids = set(self.srtUpdaterID)&set(ids)
for index in ids:
om.MMessage.removeCallback(index)
self.selectionList = []
self.srtUpdaterID = []
if not selectionList.isEmpty():
for i in range(selectionList.length()):
self.selectionList.append(selectionList.getDependNode(i))
clientData = i
self.srtUpdaterID.append(om.MNodeMessage.addAttributeChangedCallback(self.selectionList[i], self.updateHostValues, clientData))
self.setHostValues(self.selectionList, self.getPlugValue)
else:
self.clearHostValues()
self.SRT_stateUpdate()
return
self.getManipTool()
def getManipTool(self, *args):
if pm.currentCtx() == "moveSuperContext":
self.updateHostState = False
QMetaObject.invokeMethod(self.translateButton, "clicked")
elif pm.currentCtx() == "RotateSuperContext":
self.updateHostState = False
QMetaObject.invokeMethod(self.rotateButton, "clicked")
elif pm.currentCtx() == "scaleSuperContext":
self.updateHostState = False
QMetaObject.invokeMethod(self.scaleButton, "clicked")
else:
#
self.SRT_stateUpdate()
def setManipTool(self, toolType):
if toolType == "translate":
pm.setToolTo( 'moveSuperContext' )
elif toolType == "rotate":
pm.setToolTo( 'RotateSuperContext' )
elif toolType == "scale":
pm.setToolTo( 'scaleSuperContext' )
#mayaMainWindowPtr = omui.MQtUtil.mainWindow()
#mayaMainWindow = wrapInstance(long(mayaMainWindowPtr), QWidget)
#import xsiPanel
#from xsiPanel import xsiTransformPanel_maya
#reload(xsiTransformPanel_maya)
#view = xsiTransformPanel_maya.XsiTransformPanel_Maya("Transform", mayaMainWindow)
#view.show()