##-------------------------------------------------------------------------- # Import Qt from project's unified Qt.py module import sys as _sys import os as _os # Add parent scripts directory to sys.path _modit_dir = _os.path.dirname(_os.path.abspath(__file__)) _scripts_dir = _modit_dir while _os.path.basename(_scripts_dir) != 'scripts' and _scripts_dir != _os.path.dirname(_scripts_dir): _scripts_dir = _os.path.dirname(_scripts_dir) if _scripts_dir not in _sys.path: _sys.path.insert(0, _scripts_dir) from Qt import QtWidgets, QtCore, QtGui, QtCompat # Use QtCompat for cross-version compatibility wrapInstance = QtCompat.wrapInstance QIcon = QtGui.QIcon QWidget = QtWidgets.QWidget from maya import cmds as mc import maya.mel as mel import json import os import maya.cmds as cmds from functools import partial import importlib from .. import ModIt_Global importlib.reload(ModIt_Global) from .. import ModIt_CSS importlib.reload(ModIt_CSS) ##______________________GLOBAL VAR ##PATH_SET IconPath = ModIt_Global.IconsPathThemeClassic PreferencePath = ModIt_Global.PreferencePath ToolsPath = ModIt_Global.ToolPath RessourcePath = ModIt_Global.RessourcePath WIN_DISPLAY_SIZE =(json.load(open(PreferencePath + 'WinSize.json',"r"))['VALUE']) # ****************************************** # PARAMS # ****************************************** iconFixeSize = 32 iconButtonSize = 30 class MyCustomBtn_Widget(QtWidgets.QPushButton): def __init__(self): super().__init__() self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) def mousePressEvent(self, event): super().mousePressEvent(event) if event.button() == QtCore.Qt.RightButton: # emit the signal, we can grab the pos directly from the event, no need to get cursor position anymore self.customContextMenuRequested.emit(event.pos()) # make a call to mouseRelease event to restore button back to its original state self.mouseReleaseEvent(event) class SHADING_LAYOUT(QtWidgets.QWidget): def __init__(self, parent=None): super().__init__(parent=parent) SECTION_SHADING_LAYOUT = QtWidgets.QVBoxLayout() #_______ MAIN SECTION_SHADING_LAYOUT.setContentsMargins(0, 0, 0, 0) SECTION_SHADING_LAYOUT.setSpacing(0) self.setLayout(SECTION_SHADING_LAYOUT) TOOLBAR_Hlyt = QtWidgets.QHBoxLayout() #_______ TOOLBAR TOOLBAR_Hlyt.setContentsMargins(0,0,0,0) TOOLBAR_Hlyt.setSpacing(0) SECTION_SHADING_LAYOUT.addLayout(TOOLBAR_Hlyt) ##---------------------------------------------------------------------------------------- T O O L B A R ##----------------------------------------------------------------------- LIGHTING TOOLBAR_Hlyt.addSpacing(5) self.Separator = QtWidgets.QLabel() self.Separator.setFixedSize(1,26) self.Separator.setStyleSheet("background-color:#fba636;") TOOLBAR_Hlyt.addWidget(self.Separator) TOOLBAR_Hlyt.addSpacing(5) self.Hdri_btn = MyCustomBtn_Widget() self.Hdri_btn.setFixedSize(iconFixeSize, iconFixeSize) self.Hdri_btn.setIconSize(QtCore.QSize(iconButtonSize, iconButtonSize)) self.Hdri_btn.setIcon(QtGui.QIcon(IconPath + "VP_Hdri.png")) self.Hdri_btn.setToolTip(" Import an HDR Viewport Lighting Preset / Shift+Click : Select HDR ") self.Hdri_btn.clicked.connect(partial(self.loadHDR, 1)) TOOLBAR_Hlyt.addWidget(self.Hdri_btn) # C O N N E C T P O P U P M E N U T O O U R B U T T O N self.Hdri_btn.customContextMenuRequested.connect(self.showPopupHDR) # CUBE M E N U I T E M S self.popupMenuHDR = QtWidgets.QMenu() HDRI_1 = self.popupMenuHDR.addAction("HDR 1 - LookDev") HDRI_1.triggered.connect(partial(self.loadHDR, 1)) HDRI_2 = self.popupMenuHDR.addAction("HDR 2 - Studio") HDRI_2.triggered.connect(partial(self.loadHDR, 2)) HDRI_3 = self.popupMenuHDR.addAction("HDR 3 - Studio SpotLights") HDRI_3.triggered.connect(partial(self.loadHDR, 3)) HDRI_4 = self.popupMenuHDR.addAction("HDR 4 - Garden") HDRI_4.triggered.connect(partial(self.loadHDR, 4)) HDRI_5 = self.popupMenuHDR.addAction("HDR 5 - Parking") HDRI_5.triggered.connect(partial(self.loadHDR, 5)) HDRI_6 = self.popupMenuHDR.addAction("HDR 6 - Exterior") HDRI_6.triggered.connect(partial(self.loadHDR, 6)) self.LightsOff_btn = MyCustomBtn_Widget() self.LightsOff_btn.setFixedSize(iconFixeSize, iconFixeSize) self.LightsOff_btn.setIconSize(QtCore.QSize(iconButtonSize, iconButtonSize)) self.LightsOff_btn.setIcon(QtGui.QIcon(IconPath + "VP_Lights.png")) self.LightsOff_btn.setToolTip(" Turn ON / OFF Viewport Lighting ") self.LightsOff_btn.clicked.connect(self.lightONOFF) TOOLBAR_Hlyt.addWidget(self.LightsOff_btn) # C O N N E C T P O P U P M E N U T O O U R B U T T O N self.LightsOff_btn.customContextMenuRequested.connect(self.showPopupLight) # CUBE M E N U I T E M S self.popupMenuLight = QtWidgets.QMenu() GroundShadow = self.popupMenuLight.addAction(" Import Ground Shadow") GroundShadow.triggered.connect(self.importShadowsGround) ##----------------------------------------------------------------------- UVS TOOLBAR_Hlyt.addSpacing(5) self.Separator = QtWidgets.QLabel() self.Separator.setFixedSize(1,26) self.Separator.setStyleSheet("background-color:#53c48d;") TOOLBAR_Hlyt.addWidget(self.Separator) TOOLBAR_Hlyt.addSpacing(5) self.UvShader_btn = QtWidgets.QPushButton() self.UvShader_btn.setFixedSize(iconFixeSize, iconFixeSize) self.UvShader_btn.setIconSize(QtCore.QSize(iconButtonSize, iconButtonSize)) self.UvShader_btn.setIcon(QtGui.QIcon(IconPath + "VP_UvShader.png")) self.UvShader_btn.setToolTip(" UVs Shader / Shift+Click = Tiled Attributs ") self.UvShader_btn.clicked.connect(self.UVShader) TOOLBAR_Hlyt.addWidget(self.UvShader_btn) self.UvAuto_btn = QtWidgets.QPushButton() self.UvAuto_btn.setFixedSize(iconFixeSize, iconFixeSize) self.UvAuto_btn.setIconSize(QtCore.QSize(iconButtonSize, iconButtonSize)) self.UvAuto_btn.setIcon(QtGui.QIcon(IconPath + "VP_Auto.png")) self.UvAuto_btn.setToolTip(" Automatic UVs on selected meshes ") self.UvAuto_btn.clicked.connect(self.AutoUv) TOOLBAR_Hlyt.addWidget(self.UvAuto_btn) self.UvPlanar_btn = MyCustomBtn_Widget() self.UvPlanar_btn.setFixedSize(iconFixeSize, iconFixeSize) self.UvPlanar_btn.setIconSize(QtCore.QSize(iconButtonSize, iconButtonSize)) self.UvPlanar_btn.setIcon(QtGui.QIcon(IconPath + "VP_Planar.png")) self.UvPlanar_btn.setToolTip(" Planar UV Projection - Camera ") self.UvPlanar_btn.clicked.connect(partial(self.PlanarUV, 0)) TOOLBAR_Hlyt.addWidget(self.UvPlanar_btn) # C O N N E C T P O P U P M E N U T O O U R B U T T O N self.UvPlanar_btn.customContextMenuRequested.connect(self.showPopupPlanar) # CUBE M E N U I T E M S self.popupMenuPlanar = QtWidgets.QMenu() Planar_Entry_X = self.popupMenuPlanar.addAction(" Planar Proj - X") Planar_Entry_X.triggered.connect(partial(self.PlanarUV, 1)) Planar_Entry_Y = self.popupMenuPlanar.addAction(" Planar Proj - Y") Planar_Entry_Y.triggered.connect(partial(self.PlanarUV, 2)) Planar_Entry_Z = self.popupMenuPlanar.addAction(" Planar Proj - Z") Planar_Entry_Z.triggered.connect(partial(self.PlanarUV, 3)) ##----------------------------------------------------------------------- SHADER TOOLBAR_Hlyt.addSpacing(5) self.Separator = QtWidgets.QLabel() self.Separator.setFixedSize(1,26) self.Separator.setStyleSheet("background-color:#3fa6c5;") TOOLBAR_Hlyt.addWidget(self.Separator) TOOLBAR_Hlyt.addSpacing(5) self.ShaderAttribut_btn = QtWidgets.QPushButton() self.ShaderAttribut_btn.setFixedSize(iconFixeSize, iconFixeSize) self.ShaderAttribut_btn.setIconSize(QtCore.QSize(iconButtonSize, iconButtonSize)) self.ShaderAttribut_btn.setIcon(QtGui.QIcon(IconPath + "VP_GetShader.png")) self.ShaderAttribut_btn.setToolTip(" Get Shader Attributs from Selected Mesh ") self.ShaderAttribut_btn.clicked.connect(self.Get_ShaderAttributs) TOOLBAR_Hlyt.addWidget(self.ShaderAttribut_btn) ##-------------------------------------------------------------------------------------------------- S H A D E R S ##----------------------------------------------------------------------- S I M P L E - Title SECTION_SHADING_LAYOUT.addSpacing(8) Simple_Title_Hlyt = QtWidgets.QHBoxLayout() SECTION_SHADING_LAYOUT.addLayout(Simple_Title_Hlyt) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Simple_Title_Hlyt.addWidget(separator) MODELING_label = QtWidgets.QLabel(self) MODELING_label.setText(" S I M P L E ") if WIN_DISPLAY_SIZE == 0: # 125 MODELING_label.setFont(QtGui.QFont('Candara', 8)) else: MODELING_label.setFont(QtGui.QFont('Candara', 7)) MODELING_label.setAlignment(QtCore.Qt.AlignCenter) Simple_Title_Hlyt.addWidget(MODELING_label) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Simple_Title_Hlyt.addWidget(separator) SECTION_SHADING_LAYOUT.addSpacing(6) ##----------------------------------------------------------------------- S I M P L E - Shaders Simple_PNGList = [] gridIconContainerSize = 44 gridIconSize = 46 Simple_Base_path = RessourcePath + "Shader/Simple" listAllInFolder = os.listdir(Simple_Base_path) for each in listAllInFolder: full_Simple_filePath = Simple_Base_path + "/" + each #Find and keep only .png files if full_Simple_filePath.endswith(".png"): Simple_PNGList.append(full_Simple_filePath) grid_Lyt = QtWidgets.QGridLayout() grid_Lyt.setSpacing(0) SECTION_SHADING_LAYOUT.addLayout(grid_Lyt) positions = [(x, y) for x in range(10) for y in range(6)] for each in Simple_PNGList: Asset_ma_path = each.replace(".png", ".ma") xPos = positions[Simple_PNGList.index(each)] yPos = positions[Simple_PNGList.index(each)] self.SimpleShd_btn = QtWidgets.QPushButton() self.SimpleShd_btn.setFixedSize(gridIconContainerSize, gridIconContainerSize) self.SimpleShd_btn.setIconSize(QtCore.QSize(gridIconSize, gridIconSize)) self.SimpleShd_btn.setIcon(QtGui.QIcon(each)) self.SimpleShd_btn.setToolTip(" Shift + Click : Shader Attibuts") self.SimpleShd_btn.clicked.connect(partial(self.Import_Shader, Asset_ma_path)) grid_Lyt.addWidget(self.SimpleShd_btn, xPos[0], yPos[1]) ##----------------------------------------------------------------------- P L A S T I C - Title SECTION_SHADING_LAYOUT.addSpacing(8) Plastic_Title_Hlyt = QtWidgets.QHBoxLayout() SECTION_SHADING_LAYOUT.addLayout(Plastic_Title_Hlyt) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Plastic_Title_Hlyt.addWidget(separator) MODELING_label = QtWidgets.QLabel(self) MODELING_label.setText(" P L A S T I C ") if WIN_DISPLAY_SIZE == 0: # 125 MODELING_label.setFont(QtGui.QFont('Candara', 8)) else: MODELING_label.setFont(QtGui.QFont('Candara', 7)) MODELING_label.setAlignment(QtCore.Qt.AlignCenter) Plastic_Title_Hlyt.addWidget(MODELING_label) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Plastic_Title_Hlyt.addWidget(separator) SECTION_SHADING_LAYOUT.addSpacing(6) ##----------------------------------------------------------------------- P L A S T I C - Shaders gridIconContainerSize = 44 gridIconSize = 46 Plastic_PNGList = [] Plastic_Base_path = RessourcePath + "Shader/Plastic" listAllInFolder = os.listdir(Plastic_Base_path) for each in listAllInFolder: full_Plastic_filePath = Plastic_Base_path + "/" + each #Find and keep only .png files if full_Plastic_filePath.endswith(".png"): Plastic_PNGList.append(full_Plastic_filePath) Simple_Grid_Lyt = QtWidgets.QGridLayout() Simple_Grid_Lyt.setSpacing(0) SECTION_SHADING_LAYOUT.addLayout(Simple_Grid_Lyt) positions = [(x, y) for x in range(10) for y in range(6)] for each in Plastic_PNGList: Asset_ma_path = each.replace(".png", ".ma") xPos = positions[Plastic_PNGList.index(each)] yPos = positions[Plastic_PNGList.index(each)] self.Asset_btn = QtWidgets.QPushButton() self.Asset_btn.setFixedSize(gridIconContainerSize, gridIconContainerSize) self.Asset_btn.setIconSize(QtCore.QSize(gridIconSize, gridIconSize)) self.Asset_btn.setIcon(QtGui.QIcon(each)) self.Asset_btn.setToolTip(" Shift + Click : Shader Attibuts") self.Asset_btn.clicked.connect(partial(self.Import_Shader, Asset_ma_path)) Simple_Grid_Lyt.addWidget(self.Asset_btn, xPos[0], yPos[1]) ##----------------------------------------------------------------------- M E T A L - Title SECTION_SHADING_LAYOUT.addSpacing(8) Metal_Title_Hlyt = QtWidgets.QHBoxLayout() SECTION_SHADING_LAYOUT.addLayout(Metal_Title_Hlyt) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Metal_Title_Hlyt.addWidget(separator) MODELING_label = QtWidgets.QLabel(self) MODELING_label.setText(" M E T A L ") if WIN_DISPLAY_SIZE == 0: # 125 MODELING_label.setFont(QtGui.QFont('Candara', 8)) else: MODELING_label.setFont(QtGui.QFont('Candara', 7)) MODELING_label.setAlignment(QtCore.Qt.AlignCenter) Metal_Title_Hlyt.addWidget(MODELING_label) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Metal_Title_Hlyt.addWidget(separator) SECTION_SHADING_LAYOUT.addSpacing(6) ##----------------------------------------------------------------------- M E T A L - Shaders Metal_PNGList = [] Metal_Base_path = RessourcePath + "Shader/Metal" listAllInFolder = os.listdir(Metal_Base_path) for each in listAllInFolder: full_Metal_filePath = Metal_Base_path + "/" + each #Find and keep only .png files if full_Metal_filePath.endswith(".png"): Metal_PNGList.append(full_Metal_filePath) Metal_Grid_Lyt = QtWidgets.QGridLayout() Metal_Grid_Lyt.setSpacing(0) SECTION_SHADING_LAYOUT.addLayout(Metal_Grid_Lyt) positions = [(x, y) for x in range(10) for y in range(6)] for each in Metal_PNGList: Asset_ma_path = each.replace(".png", ".ma") xPos = positions[Metal_PNGList.index(each)] yPos = positions[Metal_PNGList.index(each)] self.MetalShd_btn = QtWidgets.QPushButton() self.MetalShd_btn.setFixedSize(gridIconContainerSize, gridIconContainerSize) self.MetalShd_btn.setIconSize(QtCore.QSize(gridIconSize, gridIconSize)) self.MetalShd_btn.setIcon(QtGui.QIcon(each)) self.MetalShd_btn.setToolTip(" Shift + Click : Shader Attibuts") self.MetalShd_btn.clicked.connect(partial(self.Import_Shader, Asset_ma_path)) Metal_Grid_Lyt.addWidget(self.MetalShd_btn, xPos[0], yPos[1]) ##----------------------------------------------------------------------- G L A S S - Title SECTION_SHADING_LAYOUT.addSpacing(8) Glass_Title_Hlyt = QtWidgets.QHBoxLayout() SECTION_SHADING_LAYOUT.addLayout(Glass_Title_Hlyt) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Glass_Title_Hlyt.addWidget(separator) MODELING_label = QtWidgets.QLabel(self) MODELING_label.setText(" G L A S S ") if WIN_DISPLAY_SIZE == 0: # 125 MODELING_label.setFont(QtGui.QFont('Candara', 8)) else: MODELING_label.setFont(QtGui.QFont('Candara', 7)) MODELING_label.setAlignment(QtCore.Qt.AlignCenter) Glass_Title_Hlyt.addWidget(MODELING_label) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Glass_Title_Hlyt.addWidget(separator) SECTION_SHADING_LAYOUT.addSpacing(6) ##----------------------------------------------------------------------- G L A S S - Shaders Glass_PNGList = [] Glass_Base_path = RessourcePath + "Shader/Glass" listAllInFolder = os.listdir(Glass_Base_path) for each in listAllInFolder: full_Glass_filePath = Glass_Base_path + "/" + each #Find and keep only .png files if full_Glass_filePath.endswith(".png"): Glass_PNGList.append(full_Glass_filePath) Glass_Grid_Lyt = QtWidgets.QGridLayout() Glass_Grid_Lyt.setSpacing(0) SECTION_SHADING_LAYOUT.addLayout(Glass_Grid_Lyt) positions = [(x, y) for x in range(10) for y in range(6)] for each in Glass_PNGList: Asset_ma_path = each.replace(".png", ".ma") xPos = positions[Glass_PNGList.index(each)] yPos = positions[Glass_PNGList.index(each)] self.GlassShd_btn = QtWidgets.QPushButton() self.GlassShd_btn.setFixedSize(gridIconContainerSize, gridIconContainerSize) self.GlassShd_btn.setIconSize(QtCore.QSize(gridIconSize, gridIconSize)) self.GlassShd_btn.setIcon(QtGui.QIcon(each)) self.GlassShd_btn.setToolTip(" Shift + Click : Shader Attibuts") self.GlassShd_btn.clicked.connect(partial(self.Import_Shader, Asset_ma_path)) Glass_Grid_Lyt.addWidget(self.GlassShd_btn, xPos[0], yPos[1]) ##----------------------------------------------------------------------- P L A T E - Title SECTION_SHADING_LAYOUT.addSpacing(8) Plate_Title_Hlyt = QtWidgets.QHBoxLayout() SECTION_SHADING_LAYOUT.addLayout(Plate_Title_Hlyt) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Plate_Title_Hlyt.addWidget(separator) MODELING_label = QtWidgets.QLabel(self) MODELING_label.setText(" P L A T E ") if WIN_DISPLAY_SIZE == 0: # 125 MODELING_label.setFont(QtGui.QFont('Candara', 8)) else: MODELING_label.setFont(QtGui.QFont('Candara', 7)) MODELING_label.setAlignment(QtCore.Qt.AlignCenter) Plate_Title_Hlyt.addWidget(MODELING_label) separator = QtWidgets.QLabel('') separator.setStyleSheet( "QLabel {background-color: #3e3e3e; padding: 0; margin: 0; border-bottom: 1 solid #848484; border-top: 1 solid #2a2a2a;}") separator.setMaximumHeight(2) Plate_Title_Hlyt.addWidget(separator) SECTION_SHADING_LAYOUT.addSpacing(6) ##----------------------------------------------------------------------- P L A T E - Shaders Plate_PNGList = [] Plate_Base_path = RessourcePath + "Shader/Plate" listAllInFolder = os.listdir(Plate_Base_path) for each in listAllInFolder: full_Plate_filePath = Plate_Base_path + "/" + each #Find and keep only .png files if full_Plate_filePath.endswith(".png"): Plate_PNGList.append(full_Plate_filePath) Plate_Grid_Lyt = QtWidgets.QGridLayout() Plate_Grid_Lyt.setSpacing(0) SECTION_SHADING_LAYOUT.addLayout(Plate_Grid_Lyt) positions = [(x, y) for x in range(10) for y in range(6)] for each in Plate_PNGList: Asset_ma_path = each.replace(".png", ".ma") xPos = positions[Plate_PNGList.index(each)] yPos = positions[Plate_PNGList.index(each)] self.PlateShd_btn = QtWidgets.QPushButton() self.PlateShd_btn.setFixedSize(gridIconContainerSize, gridIconContainerSize) self.PlateShd_btn.setIconSize(QtCore.QSize(gridIconSize, gridIconSize)) self.PlateShd_btn.setIcon(QtGui.QIcon(each)) self.PlateShd_btn.setToolTip( " Shift + Click : Shader Attibuts") self.PlateShd_btn.clicked.connect(partial(self.Import_Shader, Asset_ma_path)) Plate_Grid_Lyt.addWidget(self.PlateShd_btn, xPos[0], yPos[1]) #---------------------------------------------------------------- ##------------------------------------------------------------------------------------ D E F I N I T I O N #---------------------------------------------------------------- def BAM(self, name): print("BAMMM " + name) def Import_Shader(self, shdPath): shaderName = str(shdPath.split("/")[-1].replace(".ma", "")) selection = mc.ls(sl = True) modifiers = QtWidgets.QApplication.keyboardModifiers() shaderAttributPopUp = (json.load(open(PreferencePath + 'ShaderAttributs.json', "r"))['VALUE']) # Turn ON Texture VP panel = cmds.getPanel(withFocus=True) # This happens when last focus was on panel # that got deleted (e.g. `capture()` then `parse_active_view()`) if not panel or "modelPanel" not in panel: raise RuntimeError("No active model panel found") mc.modelEditor(panel, e=1, displayTextures=1) mc.modelEditor(panel, e=1, udm=0) if selection == []: if mc.objExists(shaderName): #mc.select(shaderName) mel.eval('commitAENotes($gAECurrentTab);showEditorExact"' + shaderName + '";') if shaderAttributPopUp == 1: mel.eval("commitAENotes($gAECurrentTab);copyAEWindow;") else: ModIt_Global.WarningWindow(" You should select a Mesh first.", 300) return else: if modifiers == QtCore.Qt.ShiftModifier: if mc.objExists(shaderName): # mc.select(shaderName) mel.eval('commitAENotes($gAECurrentTab);showEditorExact"' + shaderName + '";') if shaderAttributPopUp == 1: mel.eval("commitAENotes($gAECurrentTab);copyAEWindow;") else: mc.file(shdPath, i=True) mc.select(selection) mc.hyperShade(a=shaderName) mel.eval('commitAENotes($gAECurrentTab);showEditorExact"' + shaderName + '";') if shaderAttributPopUp == 1: mel.eval("commitAENotes($gAECurrentTab);copyAEWindow;") else: if mc.objExists(shaderName): mc.hyperShade(a= shaderName) else: mc.file(shdPath, i=True) mc.select(selection) mc.hyperShade(a=shaderName) def Get_ShaderAttributs(self): theNodes = mc.ls(sl=True, dag=True, s=True) if theNodes == []: ModIt_Global.WarningWindow(" You should select a Mesh first.", 300) return else: shadeEng = mc.listConnections(theNodes, type="shadingEngine") materials = mc.ls(mc.listConnections(shadeEng), materials=True, hd=1) mc.select(materials) print("MATERAIL = " + str(materials)) mel.eval('commitAENotes($gAECurrentTab);showEditorExact"' + str(materials[0]) + '";') shaderAttributPopUp = (json.load(open(PreferencePath + 'ShaderAttributs.json', "r"))['VALUE']) if shaderAttributPopUp == 1: mel.eval("commitAENotes($gAECurrentTab);copyAEWindow;") def UVShader(self): shaderPath = RessourcePath + "/Shader/ModIt_UVs_shd.ma" shaderName = "ModIt_Uvs_shd" selection = mc.ls(sl=True, fl=True, dag=True) modifiers = QtWidgets.QApplication.keyboardModifiers() # Turn ON Texture VP panel = cmds.getPanel(withFocus=True) # This happens when last focus was on panel # that got deleted (e.g. `capture()` then `parse_active_view()`) if not panel or "modelPanel" not in panel: raise RuntimeError("No active model panel found") mc.modelEditor(panel, e=1, displayTextures=1) mc.modelEditor(panel, e=1, udm=0) if selection == []: if mc.objExists(shaderName): if mc.window("UvShader_Edit_FloatWindows", exists=True): mc.deleteUI("UvShader_Edit_FloatWindows") get_U_value = mc.getAttr("ModIt_Uvs_scale.repeatU") get_V_value = mc.getAttr("ModIt_Uvs_scale.repeatV") mc.window("UvShader_Edit_FloatWindows", title='UV Shader Tile', s=True, w=500) mc.columnLayout(adj=True, w=400) mc.separator(h=5, style='none') mc.floatSliderGrp('Slider_U_Tile', l= " U Tile ", minValue=0.1, max=10, po=True, field=True, dc= self.set_U_value, v=get_U_value, adj=0, cat=[1, "left", 3], cw=[1, 45]) mc.floatSliderGrp('Slider_V_Tile', l= " V Tile ", minValue=0.1, max=10, po=True, field=True, dc= self.set_V_value, v=get_V_value, adj=0, cat=[1, "left", 3], cw=[1, 45]) mc.separator(h=5, style='none') mc.showWindow() else: ModIt_Global.WarningWindow(" You should select a Mesh first.", 300) return else: if modifiers == QtCore.Qt.ShiftModifier: if mc.objExists(shaderName): if mc.window("UvShader_Edit_FloatWindows", exists=True): mc.deleteUI("UvShader_Edit_FloatWindows") get_U_value = mc.getAttr("ModIt_Uvs_scale.repeatU") get_V_value = mc.getAttr("ModIt_Uvs_scale.repeatV") mc.window("UvShader_Edit_FloatWindows", title='UV Shader Tile', s=True, w=500) mc.columnLayout(adj=True, w=400) mc.separator(h=5, style='none') mc.floatSliderGrp('Slider_U_Tile', l="- U Tile ", minValue=0.1, maxValue=10, po=True, field=True, dc=self.set_U_value, v=get_U_value, adj=0, cat=[1, "left", 3], cw=[1, 45]) mc.floatSliderGrp('Slider_V_Tile', l="- V Tile ", minValue=0.1, maxValue=10, po=True, field=True, dc=self.set_V_value, v=get_V_value, adj=0, cat=[1, "left", 3], cw=[1, 45]) mc.separator(h=5, style='none') mc.showWindow() else: pass else: if mc.objExists(shaderName): mc.hyperShade(a=shaderName) else: mc.file(shaderPath, i=True) mc.select(selection) mc.hyperShade(a=shaderName) def set_U_value(self, *args): myValueWidght = mc.floatSliderGrp("Slider_U_Tile", q=True, value=True) mc.setAttr("ModIt_Uvs_scale.repeatU", myValueWidght ) def set_V_value(self, *args): myValueWidght = mc.floatSliderGrp("Slider_V_Tile", q=True, value=True) mc.setAttr("ModIt_Uvs_scale.repeatV", myValueWidght) def AutoUv(self): selection = mc.ls(sl=True, fl=True, dag=True) mc.undoInfo(openChunk=True, infinity=True) if selection == []: print("Warning : You should select a mesh.") else: mc.FreezeTransformations() mc.UVAutomaticProjection() mc.select(selection) mc.DeleteHistory() mc.SelectVertexMask() mc.SelectToggleMode() mc.setToolTo('moveSuperContext') mc.undoInfo(closeChunk=True) def PlanarUV(self, modeValue): mc.undoInfo(openChunk=True, infinity=True) selection = mc.ls(sl=True, fl=True, dag=True, type='mesh') if modeValue == 0: mode = "c" if modeValue == 1: mode = "x" if modeValue == 2: mode = "y" if modeValue == 3: mode = "z" for each in selection: mc.DeleteHistory() mc.polyProjection(each + '.f[*]', ch=1, type="planar", ibd=True, kir=True, md= mode) mc.polyEditUV(pu=0.5, pv=0.5, su=0.5, sv=0.5, u=-0.25, v=0.25) mc.select(each) mc.DeleteHistory() print("Planar UV Done") mc.undoInfo(closeChunk=True) def showPopupPlanar(self, position): self.popupMenuPlanar.exec_(self.UvPlanar_btn.mapToGlobal(position)) self.UvPlanar_btn.update() def showPopupHDR(self, position): self.popupMenuHDR.exec_(self.Hdri_btn.mapToGlobal(position)) self.Hdri_btn.update() def showPopupLight(self, position): self.popupMenuLight.exec_(self.LightsOff_btn.mapToGlobal(position)) self.LightsOff_btn.update() def lightONOFF(self): allPanels = mc.getPanel(type='modelPanel') getLightVal = mc.modelEditor(allPanels[-1], q=True, lights=1) for each in allPanels: if getLightVal == True: mc.modelEditor(each, e=1, lights=0) else: mc.modelEditor(each, e=1, lights=1) def importShadowsGround(self): groundPath = RessourcePath + "/HDR/Ground_Shadows.ma" mc.file(groundPath, i=True) # Turn ON Texture VP panel = cmds.getPanel(withFocus=True) # This happens when last focus was on panel # that got deleted (e.g. `capture()` then `parse_active_view()`) if not panel or "modelPanel" not in panel: raise RuntimeError("No active model panel found") mc.modelEditor(panel, e=1, displayTextures=1) mc.modelEditor(panel, e=1, udm=0) def loadHDR(self, number): modifiers = QtWidgets.QApplication.keyboardModifiers() if modifiers == QtCore.Qt.ShiftModifier: if mc.objExists('ModIt_HDR_*'): mc.select('ModIt_HDR_*') else: #Turn ON Light and Shadows VP panel = cmds.getPanel(withFocus=True) # This happens when last focus was on panel # that got deleted (e.g. `capture()` then `parse_active_view()`) if not panel or "modelPanel" not in panel: raise RuntimeError("No active model panel found") mc.DisplayLight() mc.modelEditor(panel, e=1, shadows=1) if mc.objExists('ModIt_HDR_*'): mc.delete("ModIt_HDR_*") if number == 1: hdrPath = RessourcePath + "/HDR/ModIt_HDR_1_LookDev.ma" elif number == 2: hdrPath = RessourcePath + "/HDR/ModIt_HDR_2_Studio.ma" elif number == 3: hdrPath = RessourcePath + "/HDR/ModIt_HDR_3_StudioSpotLights.ma" elif number == 4: hdrPath = RessourcePath + "/HDR/ModIt_HDR_4_Garden.ma" elif number == 5: hdrPath = RessourcePath + "/HDR/ModIt_HDR_5_Parking.ma" elif number == 6: hdrPath = RessourcePath + "/HDR/ModIt_HDR_6_Exterior.ma" mc.file(hdrPath, i=True)