Advertisement
Guest User

main

a guest
Mar 24th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.98 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.  
  19. form_class, base_class = qu.loadUiType(uiFile)
  20.  
  21. def maya_main_window():
  22.     main_window_ptr = omui.MQtUtil.mainWindow()
  23.     return qu.wrapinstance(long(main_window_ptr), qg.QMainWindow)
  24.  
  25. class Singleton(object):
  26.     _instances = {}
  27.     def __new__(class_, *args, **kwargs):
  28.         if class_ not in class_._instances:
  29.             class_._instances[class_] = super(Singleton, class_).__new__(class_, *args, **kwargs)
  30.         else:
  31.             class_._instances[class_].__init__(class_, *args, **kwargs)
  32.         return class_._instances[class_]
  33.  
  34. class RightClickMenuButton(Singleton, qg.QPushButton):
  35.     def __init__(self, name, parent=None):
  36.         super(RightClickMenuButton, self).__init__(name)
  37.         self.setContextMenuPolicy(qc.Qt.ActionsContextMenu)
  38.         self.addMenuActions()
  39.         self.buttonName = name
  40.     def addMenuActions(self):
  41.         edit = qg.QAction(self)
  42.         edit.setText("edit")
  43.         edit.triggered.connect(self.edit)
  44.         self.addAction(edit)
  45.  
  46.         delete = qg.QAction(self)
  47.         delete.setText("remove")
  48.         delete.triggered.connect(self.delete)
  49.         self.addAction(delete)
  50.  
  51.         deleteNetwork = qg.QAction(self)
  52.         deleteNetwork.setText("delete network")
  53.         deleteNetwork.triggered.connect(self.deleteNetwork)
  54.         self.addAction(deleteNetwork)
  55.  
  56.         duplicateNetwork = qg.QAction(self)
  57.         duplicateNetwork.setText("duplicate network")
  58.         duplicateNetwork.triggered.connect(self.duplicateNetwork)
  59.         self.addAction(duplicateNetwork)
  60.    
  61.     def edit(self):
  62.         cmds.select(self.buttonName, r=True )
  63.     def delete(self):
  64.         favoriteMaterial_UI.removeSlot(self.buttonName)
  65.         self.deleteLater()
  66.     def deleteNetwork(self):
  67.         pass
  68.     def duplicateNetwork(self):
  69.         if cmds.objExists(self.buttonName):
  70.             list = pm.duplicate(self.buttonName, un=True)
  71.             newMaterial = list[0]
  72.             favoriteMaterial_UI.addSlot(newMaterial)
  73.  
  74.  
  75. class favoriteMaterial_UI(Singleton, form_class, base_class):
  76.     def __init__(self, parent=maya_main_window()):
  77.         super(favoriteMaterial_UI, self).__init__(parent)
  78.         self.setupUi(self)
  79.        
  80.         #assign functions to ui
  81.         self.addSlotButton.clicked.connect(self.addSlot)
  82.         self.refreshSlotButton.clicked.connect(self.refreshSlot)
  83.         self.importLibraryAction.triggered.connect(self.importLibrary) 
  84.         self.exportLibraryAction.triggered.connect(self.exportLibrary) 
  85.         self.settingsAction.triggered.connect(self.openSettings)   
  86.         self.randomShaderButton.clicked.connect(self.newMaterial)
  87.  
  88.         self.displayLibrary()
  89.  
  90.     def addSlot(self, shaderName=None):
  91.         if shaderName:
  92.             if cmds.objExists(shaderName):
  93.                 material = shaderName
  94.             else:
  95.                 print "Material doesn't exist."
  96.                 material = None
  97.         elif cmds.ls(selection=True):
  98.             selection = cmds.ls(selection=True, materials=True)
  99.             if selection:
  100.                 material = selection[0]
  101.             else: material = None
  102.         else:
  103.             print "Something went wrong. Maybe your material doesn't exists?"
  104.             material = None
  105.  
  106.         if material:
  107.             if material not in favList:
  108.                 favList.append(material)
  109.             else:  
  110.                 print "Shader {0} already on the list. Skipping.".format(material)
  111.             self.refreshSlot()
  112.  
  113.     def refreshSlot(self):
  114.         print favList
  115.         for index, slot in enumerate(favList):
  116.             #check if shader exist
  117.             if not cmds.objExists(slot):
  118.                 favList.pop(index)
  119.                 print "Shader {0} doesn't exist. Deleting from list.".format(slot)
  120.         self.displayLibrary()
  121.  
  122.  
  123.     @classmethod
  124.     def removeSlot(self, name):
  125.         favList.remove(name)
  126.         print "Shader {0} deleted from list.".format(name)
  127.  
  128.  
  129.     def checkShadingNode(self, shader, shaderSG):  
  130.         # a shading group
  131.         if not cmds.objExists(shaderSG):
  132.             shading_group= cmds.sets(renderable=True,noSurfaceShader=True,empty=True, name=shaderSG)
  133.         else:
  134.             shading_group=shaderSG
  135.         slot1 = shader + ".outColor"
  136.         slot2 = shading_group + ".surfaceShader"
  137.         if not cmds.isConnected(slot1,slot2):
  138.             #connect shader to sg surface shader
  139.             cmds.connectAttr(slot1,slot2,force=1)
  140.  
  141.     def assignMaterial(self, shader):
  142.         if cmds.ls(selection=True):
  143.             sh = favList[shader]
  144.             shaderName = sh+"SG"
  145.             if sh in favList[shader]:
  146.                 self.checkShadingNode(sh, shaderName)
  147.                 cmds.sets(e=True, forceElement=shaderName)
  148.             else:
  149.                 print "It seems that this shader '{0}' is not on your favourite list. Wtf?How you get there.".format(shaderName)
  150.         else:
  151.             print "Select object first."       
  152.  
  153.     def newMaterial(self):
  154.         print "tworze nowy shader na podstawie ustawien i dodaje go odrazu na liste";
  155.  
  156.     def displayLibrary(self):
  157.         print "wyswietlam wszystkie materialy z biblioteki w UI";
  158.         #refreshList
  159.         buttons = {}
  160.         shadersRange = len(favList)
  161.         #count rows/cols
  162.         cols = math.ceil(float(shadersRange)/4)
  163.         perRow = 4
  164.         index = 0
  165.         for i in range(int(cols)):
  166.             if shadersRange < perRow:
  167.                 rowRange = shadersRange
  168.             else:
  169.                 rowRange = 4
  170.             shadersRange = shadersRange - perRow
  171.             for j in range(int(rowRange)):
  172.                 # keep a reference to the buttons
  173.                 buttonName = str(favList[index])
  174.                 buttons[(i, j)] = RightClickMenuButton(buttonName)
  175.                 # add to the layout
  176.                 self.shadersGrid.layout().addWidget(buttons[(i, j)], i, j)
  177.                 #connect signal
  178.                 buttons[(i, j)].clicked.connect(partial(self.assignMaterial, index))
  179.                 index = index + 1
  180.  
  181.     def importLibrary(self):
  182.         print "importuje plik materialow i wrzucam odpowiednio do tablicy";
  183.  
  184.     def checkIfMaterialExists(self):
  185.         print "sprawdzam czy importowany material juz moze jest w scenie i daje opcje 'Skip or import as copy'"
  186.  
  187.     def exportLibrary(self):
  188.         print "Wszystkie materialy obecnie na liscie zapisuje jako nowy plik";
  189.  
  190.     def exitNotice(self):
  191.         print "Jesli mam sygnal ze ktos dodal/usunal/edytowal material to wyswietlam okienko z powiadomieniem 'Are you sure? Blabala'"
  192.  
  193.     def openSettings(self):
  194.         print "otwieram okienko z ustawieniami";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement