from PySide2 import QtWidgets, QtCore, QtGui
import pymel.core as pm
import PySide2.QtUiTools as QLoader
import maya.cmds as cmds
import json
main_ui = r"C:\Users\Administrator\Desktop\sendLights\src\main.ui"
amibientLight_ui = r"C:\Users\Administrator\Desktop\sendLights\src\amibientLight.ui"
areaLight_ui = r"C:\Users\Administrator\Desktop\sendLights\src\areaLight.ui"
spotLight_ui = r"C:\Users\Administrator\Desktop\sendLights\src\spotLight.ui"
pointLight_ui = r"C:\Users\Administrator\Desktop\sendLights\src\pointLight.ui"
volumeLight_ui = r"C:\Users\Administrator\Desktop\sendLights\src\volumeLight.ui"
directionalLight_ui = r"C:\Users\Administrator\Desktop\sendLights\src\directionalLight.ui"
light_json = r"C:\Users\Administrator\Desktop\sendLights\src\light_json.json"
def getLightAttr(light):
#获取灯光属性
#保存灯光名称
lightName = str(light.getTransform())
#用于保存每一盏灯光的属性
lightChild = {}
#根据灯光类型加载对应灯光属性
if pm.objectType(light) == "ambientLight":
lightChild["lightType"] = "ambientLight"
lightChild["translate"] = cmds.getAttr(lightName + ".translate")
lightChild["rotate"] = cmds.getAttr(lightName + ".rotate")
lightChild["scale"] = cmds.getAttr(lightName + ".scale")
lightChild["visibility"] = cmds.getAttr(lightName + ".visibility")
lightChild["color"] = cmds.getAttr(lightName + ".color")
lightChild["intensity"] = cmds.getAttr(lightName + ".intensity")
lightChild["useRayTraceShadows"] = cmds.getAttr(lightName + ".useRayTraceShadows")
lightChild["shadColor"] = [cmds.getAttr(lightName + ".shadColorR"),
cmds.getAttr(lightName + ".shadColorG"),cmds.getAttr(lightName + ".shadColorB"),]
elif pm.objectType(light) == "pointLight":
lightChild["lightType"] = "pointLight"
lightChild["translate"] = cmds.getAttr(lightName + ".translate")
lightChild["rotate"] = cmds.getAttr(lightName + ".rotate")
lightChild["scale"] = cmds.getAttr(lightName + ".scale")
lightChild["visibility"] = cmds.getAttr(lightName + ".visibility")
lightChild["color"] = cmds.getAttr(lightName + ".color")
lightChild["intensity"] = cmds.getAttr(lightName + ".intensity")
lightChild["useRayTraceShadows"] = cmds.getAttr(lightName + ".useRayTraceShadows")
lightChild["shadColor"] = [cmds.getAttr(lightName + ".shadColorR"),
cmds.getAttr(lightName + ".shadColorG"),cmds.getAttr(lightName + ".shadColorB"),]
lightChild["useDepthMapShadows"] = cmds.getAttr(lightName + ".useDepthMapShadows")
lightChild["dmapBias"] = cmds.getAttr(lightName + ".dmapBias")
lightChild["aiExposure"] = cmds.getAttr(lightName + ".aiExposure")
lightChild["aiRadius"] = cmds.getAttr(lightName + ".aiRadius")
elif pm.objectType(light) == "spotLight":
lightChild["lightType"] = "spotLight"
lightChild["translate"] = cmds.getAttr(lightName + ".translate")
lightChild["rotate"] = cmds.getAttr(lightName + ".rotate")
lightChild["scale"] = cmds.getAttr(lightName + ".scale")
lightChild["visibility"] = cmds.getAttr(lightName + ".visibility")
lightChild["color"] = cmds.getAttr(lightName + ".color")
lightChild["intensity"] = cmds.getAttr(lightName + ".intensity")
lightChild["useRayTraceShadows"] = cmds.getAttr(lightName + ".useRayTraceShadows")
lightChild["shadColor"] = [cmds.getAttr(lightName + ".shadColorR"),
cmds.getAttr(lightName + ".shadColorG"),cmds.getAttr(lightName + ".shadColorB"),]
lightChild["useDepthMapShadows"] = cmds.getAttr(lightName + ".useDepthMapShadows")
lightChild["dmapBias"] = cmds.getAttr(lightName + ".dmapBias")
lightChild["aiExposure"] = cmds.getAttr(lightName + ".aiExposure")
lightChild["aiRadius"] = cmds.getAttr(lightName + ".aiRadius")
lightChild["coneAngle"] = cmds.getAttr(lightName + ".coneAngle")
lightChild["penumbraAngle"] = cmds.getAttr(lightName + ".penumbraAngle")
lightChild["dropoff"] = cmds.getAttr(lightName + ".dropoff")
elif pm.objectType(light) == "directionalLight":
lightChild["lightType"] = "directionalLight"
lightChild["translate"] = cmds.getAttr(lightName + ".translate")
lightChild["rotate"] = cmds.getAttr(lightName + ".rotate")
lightChild["scale"] = cmds.getAttr(lightName + ".scale")
lightChild["visibility"] = cmds.getAttr(lightName + ".visibility")
lightChild["color"] = cmds.getAttr(lightName + ".color")
lightChild["intensity"] = cmds.getAttr(lightName + ".intensity")
lightChild["useRayTraceShadows"] = cmds.getAttr(lightName + ".useRayTraceShadows")
lightChild["shadColor"] = [cmds.getAttr(lightName + ".shadColorR"),
cmds.getAttr(lightName + ".shadColorG"),cmds.getAttr(lightName + ".shadColorB"),]
lightChild["useDepthMapShadows"] = cmds.getAttr(lightName + ".useDepthMapShadows")
lightChild["dmapBias"] = cmds.getAttr(lightName + ".dmapBias")
lightChild["aiExposure"] = cmds.getAttr(lightName + ".aiExposure")
lightChild["aiAngle"] = cmds.getAttr(lightName + ".aiAngle")
elif pm.objectType(light) == "areaLight":
lightChild["lightType"] = "areaLight"
lightChild["translate"] = cmds.getAttr(lightName + ".translate")
lightChild["rotate"] = cmds.getAttr(lightName + ".rotate")
lightChild["scale"] = cmds.getAttr(lightName + ".scale")
lightChild["visibility"] = cmds.getAttr(lightName + ".visibility")
lightChild["color"] = cmds.getAttr(lightName + ".color")
lightChild["intensity"] = cmds.getAttr(lightName + ".intensity")
lightChild["useRayTraceShadows"] = cmds.getAttr(lightName + ".useRayTraceShadows")
lightChild["shadColor"] = [cmds.getAttr(lightName + ".shadColorR"),
cmds.getAttr(lightName + ".shadColorG"),cmds.getAttr(lightName + ".shadColorB"),]
lightChild["useDepthMapShadows"] = cmds.getAttr(lightName + ".useDepthMapShadows")
lightChild["dmapBias"] = cmds.getAttr(lightName + ".dmapBias")
lightChild["aiExposure"] = cmds.getAttr(lightName + ".aiExposure")
lightChild["aiSpread"] = cmds.getAttr(lightName + ".aiSpread")
lightChild["aiRoundness"] = cmds.getAttr(lightName + ".aiRoundness")
lightChild["aiSoftEdge"] = cmds.getAttr(lightName + ".aiSoftEdge")
elif pm.objectType(light) == "volumeLight":
lightChild["lightType"] = "volumeLight"
lightChild["translate"] = cmds.getAttr(lightName + ".translate")
lightChild["rotate"] = cmds.getAttr(lightName + ".rotate")
lightChild["scale"] = cmds.getAttr(lightName + ".scale")
lightChild["visibility"] = cmds.getAttr(lightName + ".visibility")
lightChild["color"] = cmds.getAttr(lightName + ".color")
lightChild["intensity"] = cmds.getAttr(lightName + ".intensity")
lightChild["useRayTraceShadows"] = cmds.getAttr(lightName + ".useRayTraceShadows")
lightChild["shadColor"] = [cmds.getAttr(lightName + ".shadColorR"),
cmds.getAttr(lightName + ".shadColorG"),cmds.getAttr(lightName + ".shadColorB"),]
lightChild["useDepthMapShadows"] = cmds.getAttr(lightName + ".useDepthMapShadows")
lightChild["dmapBias"] = cmds.getAttr(lightName + ".dmapBias")
lightChild["aiExposure"] = cmds.getAttr(lightName + ".aiExposure")
lightChild["aiRadius"] = cmds.getAttr(lightName + ".aiRadius")
return lightChild
class LightManager(QtWidgets.QWidget):
#灯光管理器
def __init__(self):
super(LightManager, self).__init__()
self.setObjectName("project_manager")
#加载初始界面
loader = QLoader.QUiLoader()
self.ui = loader.load(main_ui)
self.ui.setParent(self)
self.setMaximumSize(450, 700)
self.setMinimumSize(450, 700)
#获取初始界面控件
self.comboBox = self.ui.findChild(QtWidgets.QComboBox, "comboBox")
self.widget = self.ui.findChild(QtWidgets.QWidget, "widget")
self.btn_loadAttr = self.ui.findChild(QtWidgets.QPushButton, "btn_loadAttr")
self.btn_sendAttr = self.ui.findChild(QtWidgets.QPushButton, "btn_sendAttr")
#获取灯光列表
self.light_list = self.getLight()
#加载灯光
self.creatChild()
#如果场景中没有灯光�