Updated
This commit is contained in:
698
Scripts/Modeling/Edit/ModIt/Shading/Layout_SHADING.py
Normal file
698
Scripts/Modeling/Edit/ModIt/Shading/Layout_SHADING.py
Normal file
@ -0,0 +1,698 @@
|
||||
##--------------------------------------------------------------------------
|
||||
from Qt import QtWidgets, QtCore, QtGui
|
||||
from maya import cmds as mc
|
||||
import maya.mel as mel
|
||||
import json
|
||||
from ..Qt import QtWidgets, QtCore, QtCompat
|
||||
import os
|
||||
import maya.cmds as cmds
|
||||
from maya import OpenMayaUI as omui
|
||||
import mtoa.core as core
|
||||
from functools import partial
|
||||
|
||||
# Special cases for different Maya versions
|
||||
from Qt.QtCompat import wrapInstance
|
||||
from Qt.QtGui import QIcon
|
||||
from Qt.QtWidgets import QWidget
|
||||
|
||||
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__()
|
||||
QtWidgets.QPushButton.__init__(self)
|
||||
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)
|
||||
QtWidgets.QWidget.__init__(self, 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:
|
||||
cmds.warning("No active model panel found, please select a model panel.")
|
||||
return
|
||||
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)
|
||||
|
0
Scripts/Modeling/Edit/ModIt/Shading/__init__.py
Normal file
0
Scripts/Modeling/Edit/ModIt/Shading/__init__.py
Normal file
Reference in New Issue
Block a user