Advertisement
Guest User

favoriteMaterial.py

a guest
Mar 31st, 2016
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.62 KB | None | 0 0
  1. import os
  2. import math
  3. import random
  4. from functools import partial
  5.  
  6. import maya.cmds as cmds
  7. import maya.OpenMayaUI as omui
  8. import pymel.core as pm
  9.  
  10. from PySide import QtCore as qc
  11. from PySide import QtGui as qg
  12. import System.QTutils as qu
  13. reload(qu)
  14.  
  15. uiFile = "C:/kTools/__favoriteMaterial/ui/main.ui"
  16. uiSettings = "C:/kTools/__favoriteMaterial/ui/settings.ui"
  17. favList = []
  18. # favList = ['blinn1', 'lambert1', 'anisotropic2', 'anisotropic1']
  19. # favList = ['blinn1', 'lambert1', 'anisotropic2', 'anisotropic1']
  20. form_class, base_class = qu.loadUiType(uiFile)
  21.  
  22. def maya_main_window():
  23. main_window_ptr = omui.MQtUtil.mainWindow()
  24. return qu.wrapinstance(long(main_window_ptr), qg.QMainWindow)
  25.  
  26. class favoriteMaterial_UI(form_class, base_class):
  27. def __init__(self, parent=maya_main_window()):
  28. super(favoriteMaterial_UI, self).__init__(parent)
  29. self.setupUi(self)
  30.  
  31. #assign functions to ui
  32. self.addSlotButton.clicked.connect(self.addSlot)
  33. self.refreshSlotButton.clicked.connect(self.refreshSlot)
  34. self.importLibraryAction.triggered.connect(self.importLibrary)
  35. self.exportLibraryAction.triggered.connect(self.exportLibrary)
  36. # self.settingsAction.triggered.connect(self.openSettings)
  37. self.randomShaderButton.clicked.connect(self.newMaterial)
  38.  
  39. self.displayLibrary()
  40.  
  41. def displayLibrary(self):
  42. # Create the port using cmds first. I couldn't get the displayPort to work unless I created a window first
  43. tempwin = cmds.window()
  44. cmds.columnLayout()
  45. buttons = {}
  46. shadersRange = len(favList)
  47. cols = math.ceil(float(shadersRange)/4)
  48. perRow = 4
  49. index = 0
  50. labels = {}
  51. vLayouts = {}
  52. ports = {}
  53. qPorts = {}
  54.  
  55. for i in range(int(cols)):
  56. if shadersRange < perRow:
  57. rowRange = shadersRange
  58. else:
  59. rowRange = 4
  60. shadersRange = shadersRange - perRow
  61. for j in range(int(rowRange)):
  62. labelName = str(favList[index])
  63. labels[(i, j)] = qg.QLabel(labelName)
  64. labels[(i, j)].setAlignment(qc.Qt.AlignCenter)
  65.  
  66. ports[(i,j)] = cmds.swatchDisplayPort(labelName, rs=50, wh=(50, 50), sn=labelName, pc=partial(self.assignSlot, index))
  67. qPorts[(i,j)] = qu.toQtObject(ports[(i,j)])
  68. qPorts[(i,j)].setContextMenuPolicy(qc.Qt.ActionsContextMenu)
  69. # cmds.deleteUI(ports[(i,j)])
  70.  
  71. edit = qg.QAction(self)
  72. edit.setText("edit")
  73. edit.triggered.connect(partial(self.editSlot, index))
  74.  
  75. delete = qg.QAction(self)
  76. delete.setText("remove from library")
  77. delete.triggered.connect(partial(self.deleteSlot, index))
  78.  
  79. deleteNet = qg.QAction(self)
  80. deleteNet.setText("delete network")
  81. deleteNet.triggered.connect(partial(self.deleteNetwork, index))
  82.  
  83. duplicateNet = qg.QAction(self)
  84. duplicateNet.setText("duplicate network")
  85. duplicateNet.triggered.connect(partial(self.duplicateNetwork, index))
  86.  
  87. qPorts[(i,j)].addAction(edit)
  88. qPorts[(i,j)].addAction(delete)
  89. qPorts[(i,j)].addAction(deleteNet)
  90. qPorts[(i,j)].addAction(duplicateNet)
  91.  
  92. vLayouts[(i,j)] = qg.QVBoxLayout()
  93. vLayouts[(i,j)].addWidget(qPorts[(i,j)])
  94. vLayouts[(i,j)].addWidget(labels[(i,j)])
  95.  
  96. self.shadersGrid.layout().addLayout(vLayouts[(i,j)], i, j)
  97. index = index + 1
  98. for port in ports:
  99. # cmds.deleteUI(port)
  100. print "port"
  101. cmds.deleteUI(tempwin)
  102. print tempwin
  103.  
  104. def addSlot(self, shaderName=None):
  105. if shaderName:
  106. if cmds.objExists(shaderName):
  107. material = shaderName
  108. else:
  109. print "Material doesn't exist."
  110. material = None
  111. elif cmds.ls(selection=True):
  112. selection = cmds.ls(selection=True, materials=True)
  113. if selection:
  114. material = selection[0]
  115. else: material = None
  116. else:
  117. print "Something went wrong. Maybe your material doesn't exists?"
  118. material = None
  119.  
  120. if material:
  121. if material not in favList:
  122. favList.append(material)
  123. else:
  124. print "Shader {0} already on the list. Skipping.".format(material)
  125. self.refreshSlot()
  126.  
  127. def refreshSlot(self):
  128. print favList
  129. for index, slot in enumerate(favList):
  130. #check if shader exist
  131. if not cmds.objExists(slot):
  132. favList.pop(index)
  133. print "Shader {0} doesn't exist. Deleting from list.".format(slot)
  134. self.displayLibrary()
  135.  
  136. def editSlot(self, material):
  137. print material
  138. pass
  139. def deleteSlot(self, material):
  140. name = favList[material]
  141. favList.pop(material)
  142. print "Shader {0} deleted from list.".format(name)
  143. def deleteNetwork(self, material):
  144. pass
  145. def duplicateNetwork(self, material):
  146. pass
  147. def assignSlot(self, material):
  148. pass
  149. def checkShadingNode(self):
  150. pass
  151. def newMaterial(self):
  152. pass
  153. def importLibrary(self):
  154. pass
  155. def exportLibrary(self):
  156. pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement