Files
Nexus/2025/scripts/modeling_tools/ModIt/Shading/Layout_SHADING.py
2026-01-22 00:06:13 +08:00

757 lines
32 KiB
Python

##--------------------------------------------------------------------------
# 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)