Files
Nexus/2025/scripts/modeling_tools/ModIt/Modeling/Section_SETS.py
2025-12-05 08:08:44 +08:00

491 lines
19 KiB
Python

##--------------------------------------------------------------------------
try:
from PySide6 import QtWidgets, QtCore, QtGui
from PySide6.QtWidgets import *
from PySide6.QtGui import *
from PySide6.QtCore import *
from shiboken6 import wrapInstance
except ImportError:
from PySide2 import QtWidgets, QtCore, QtGui
from shiboken2 import wrapInstance
from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QWidget
import shiboken2
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
##______________________GLOBAL VAR
##PATH_SET
IconPath = ModIt_Global.IconsPathThemeClassic
PreferencePath = ModIt_Global.PreferencePath
ToolsPath = ModIt_Global.ToolPath
# ******************************************
# BUTTONS PARAMS
# ******************************************
iconFixeSize = 26
iconButtonSize = 26
separatorWidth = ModIt_Global.separatorWidth
##JSON PREF DATA
WIN_DISPLAY_SIZE =(json.load(open(PreferencePath + 'WinSize.json',"r"))['VALUE'])
DOCK =(json.load(open(PreferencePath + 'Dockable.json',"r"))['VALUE'])
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 SETS_LAYOUT(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent=parent)
SECTION_SETS_LAYOUT = QtWidgets.QVBoxLayout()# MAIN
SECTION_SETS_LAYOUT.setContentsMargins(25, 2, 2, 2)
self.setLayout(SECTION_SETS_LAYOUT)
setBtnClickZone = 16
setBtnIconSize = 14
SetBoutonWidht = 80
##---------------------------------------
##----------------------------------------------------------------------------------------------------------------------------------------------- STORE SETS
##--------------------------------------- SET - LIGNE 1
SET_A_LYT = QtWidgets.QHBoxLayout()
SET_A_LYT.setSpacing(7)
SECTION_SETS_LAYOUT.addLayout(SET_A_LYT)
SECTION_SETS_LAYOUT.setSpacing(0)
##----------------------------------------------------------------- -
self.Set_1_Min_Btn = QtWidgets.QPushButton()
self.Set_1_Min_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set_1_Min_Btn.setIconSize(QtCore.QSize(setBtnIconSize, setBtnIconSize))
self.Set_1_Min_Btn.setIcon(QtGui.QIcon(IconPath + "Moins.png"))
self.Set_1_Min_Btn.clicked.connect(partial(self.Sub_Set, 1))
SET_A_LYT.addWidget(self.Set_1_Min_Btn)
##----------------------------------------------------------------------------------------------------------------------------------------- STORE SET 1
self.Set_1_Store_Btn = QtWidgets.QPushButton()
self.Set_1_Store_Btn.setFixedSize(SetBoutonWidht, 20)
self.Set_1_Store_Btn.setObjectName("StoreSet")
self.Set_1_Store_Btn.setText("S E T - 2")
if WIN_DISPLAY_SIZE == 1: #150
self.Set_1_Store_Btn.setFont(QtGui.QFont('Calibri', 6))
self.Set_1_Store_Btn.clicked.connect(partial(self.Store_Set, 1))
SET_A_LYT.addWidget(self.Set_1_Store_Btn)
##----------------------------------------------------------------- +
self.Set_1_Plus_Btn = QtWidgets.QPushButton()
self.Set_1_Plus_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set_1_Plus_Btn.setIconSize(QtCore.QSize(setBtnIconSize, setBtnIconSize))
self.Set_1_Plus_Btn.setIcon(QtGui.QIcon(IconPath + "Plus.png"))
self.Set_1_Plus_Btn.clicked.connect(partial(self.Add_Set, 1))
SET_A_LYT.addWidget(self.Set_1_Plus_Btn)
SET_A_LYT.addSpacing(12)
self.Separator = QtWidgets.QLabel()
self.Separator.setFixedSize(1,20)
self.Separator.setStyleSheet("background-color:#404040;")
SET_A_LYT.addWidget(self.Separator)
SET_A_LYT.addSpacing(12)
##----------------------------------------------------------------- -
self.Set_2_Min_Btn = QtWidgets.QPushButton()
self.Set_2_Min_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set_2_Min_Btn.setIconSize(QtCore.QSize(setBtnIconSize, setBtnIconSize))
self.Set_2_Min_Btn.setIcon(QtGui.QIcon(IconPath + "Moins.png"))
self.Set_2_Min_Btn.clicked.connect(partial(self.Sub_Set, 2))
SET_A_LYT.addWidget(self.Set_2_Min_Btn)
##----------------------------------------------------------------- STORE SET 2
self.Set_2_Store_Btn = QtWidgets.QPushButton()
self.Set_2_Store_Btn.setFixedSize(SetBoutonWidht, 20)
self.Set_2_Store_Btn.setObjectName("StoreSet")
self.Set_2_Store_Btn.setText("S E T - 2")
if WIN_DISPLAY_SIZE == 1: #150%
self.Set_2_Store_Btn.setFont(QtGui.QFont('Calibri', 6))
self.Set_2_Store_Btn.clicked.connect(partial(self.Store_Set, 2))
SET_A_LYT.addWidget(self.Set_2_Store_Btn)
##----------------------------------------------------------------- +
self.Set_2_Plus_Btn = QtWidgets.QPushButton()
self.Set_2_Plus_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set_2_Plus_Btn.setIconSize(QtCore.QSize(setBtnIconSize, setBtnIconSize))
self.Set_2_Plus_Btn.setIcon(QtGui.QIcon(IconPath + "Plus.png"))
self.Set_2_Plus_Btn.clicked.connect(partial(self.Add_Set, 2))
SET_A_LYT.addWidget(self.Set_2_Plus_Btn)
##______________________________________________________________/ UNDER LAYOUT
SET_A_UNDER_LYT = QtWidgets.QHBoxLayout()
SET_A_UNDER_LYT.setSpacing(10)
SECTION_SETS_LAYOUT.addLayout(SET_A_UNDER_LYT)
SET_A_UNDER_LYT.addSpacing(38)
##----------------------------------------------------------------- DEL
self.Set_A_1_Del_btn = QtWidgets.QPushButton()
self.Set_A_1_Del_btn.setFixedSize(20, 14)
self.Set_A_1_Del_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_A_1_Del_btn.setIcon(QtGui.QIcon(IconPath + "setDel.png"))
self.Set_A_1_Del_btn.clicked.connect(partial(self.Del_Set, 1))
SET_A_UNDER_LYT.addWidget(self.Set_A_1_Del_btn)
if mc.objExists("ModIt_Set_1"):
self.Set_A_1_Del_btn.setEnabled(1)
else:
self.Set_A_1_Del_btn.setEnabled(0)
##----------------------------------------------------------------- GET
self.Set_A_1_Get_btn = QtWidgets.QPushButton()
self.Set_A_1_Get_btn.setFixedSize(20, 14)
self.Set_A_1_Get_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_A_1_Get_btn.setIcon(QtGui.QIcon(IconPath + "setGet.png"))
self.Set_A_1_Get_btn.clicked.connect(partial(self.Get_Set, 1))
SET_A_UNDER_LYT.addWidget(self.Set_A_1_Get_btn)
if mc.objExists("ModIt_Set_1"):
self.Set_A_1_Get_btn.setEnabled(1)
else:
self.Set_A_1_Get_btn.setEnabled(0)
SET_A_UNDER_LYT.addSpacing(106)
##----------------------------------------------------------------- DEL
self.Set_A_2_Del_btn = QtWidgets.QPushButton()
self.Set_A_2_Del_btn.setFixedSize(20, 14)
self.Set_A_2_Del_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_A_2_Del_btn.setIcon(QtGui.QIcon(IconPath + "setDel.png"))
self.Set_A_2_Del_btn.clicked.connect(partial(self.Del_Set, 2))
SET_A_UNDER_LYT.addWidget(self.Set_A_2_Del_btn)
if mc.objExists("ModIt_Set_2"):
self.Set_A_2_Del_btn.setEnabled(1)
else:
self.Set_A_2_Del_btn.setEnabled(0)
##----------------------------------------------------------------- GET
self.Set_A_2_Get_btn = QtWidgets.QPushButton()
self.Set_A_2_Get_btn.setFixedSize(20, 14)
self.Set_A_2_Get_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_A_2_Get_btn.setIcon(QtGui.QIcon(IconPath + "setGet.png"))
self.Set_A_2_Get_btn.clicked.connect(partial(self.Get_Set, 2))
SET_A_UNDER_LYT.addWidget(self.Set_A_2_Get_btn)
if mc.objExists("ModIt_Set_2"):
self.Set_A_2_Get_btn.setEnabled(1)
else:
self.Set_A_2_Get_btn.setEnabled(0)
SECTION_SETS_LAYOUT.addSpacing(4)
##--------------------------------------- SET - LIGNE 2
SET_B_LYT = QtWidgets.QHBoxLayout()
SET_B_LYT.setSpacing(7)
SECTION_SETS_LAYOUT.addLayout(SET_B_LYT)
SECTION_SETS_LAYOUT.setSpacing(0)
##----------------------------------------------------------------- -
self.Set_3_Min_Btn = QtWidgets.QPushButton()
self.Set_3_Min_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set_3_Min_Btn.setIconSize(QtCore.QSize(18, 18))
self.Set_3_Min_Btn.setIcon(QtGui.QIcon(IconPath + "Moins.png"))
self.Set_3_Min_Btn.clicked.connect(partial(self.Sub_Set, 3))
SET_B_LYT.addWidget(self.Set_3_Min_Btn)
##----------------------------------------------------------------------------------------------------------------------------------------- STORE SET 1
self.Set_3_Store_Btn = QtWidgets.QPushButton()
self.Set_3_Store_Btn.setFixedSize(SetBoutonWidht, 20)
self.Set_3_Store_Btn.setObjectName("StoreSet")
self.Set_3_Store_Btn.setText("S E T - 3")
if WIN_DISPLAY_SIZE == 1: #150%
self.Set_3_Store_Btn.setFont(QtGui.QFont('Calibri', 6))
self.Set_3_Store_Btn.clicked.connect(partial(self.Store_Set, 3))
SET_B_LYT.addWidget(self.Set_3_Store_Btn)
##----------------------------------------------------------------- +
self.Set_3_Plus_Btn = QtWidgets.QPushButton()
self.Set_3_Plus_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set_3_Plus_Btn.setIconSize(QtCore.QSize(setBtnIconSize, setBtnIconSize))
self.Set_3_Plus_Btn.setIcon(QtGui.QIcon(IconPath + "Plus.png"))
self.Set_3_Plus_Btn.clicked.connect(partial(self.Add_Set, 3))
SET_B_LYT.addWidget(self.Set_3_Plus_Btn)
##----------------------------------------------------------------- INTERSECT
SET_B_LYT.addSpacing(2)
self.Set_Int_Min_Btn = QtWidgets.QPushButton()
self.Set_Int_Min_Btn.setFixedSize(20, 20)
self.Set_Int_Min_Btn.setIconSize(QtCore.QSize(20, 20))
self.Set_Int_Min_Btn.setIcon(QtGui.QIcon(IconPath + "setIntersect.png"))
self.Set_Int_Min_Btn.setToolTip(" Get Components that are both on Set-3 and Set-4 ")
self.Set_Int_Min_Btn.clicked.connect(self.BoolIntersect_Set)
SET_B_LYT.addWidget(self.Set_Int_Min_Btn)
SET_B_LYT.addSpacing(3)
##----------------------------------------------------------------- -
self.Set__Min_Btn = QtWidgets.QPushButton()
self.Set__Min_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set__Min_Btn.setIconSize(QtCore.QSize(setBtnIconSize, setBtnIconSize))
self.Set__Min_Btn.setIcon(QtGui.QIcon(IconPath + "Moins.png"))
self.Set__Min_Btn.clicked.connect(partial(self.Sub_Set, 4))
SET_B_LYT.addWidget(self.Set__Min_Btn)
##----------------------------------------------------------------- STORE SET 2
self.Set__Store_Btn = QtWidgets.QPushButton()
self.Set__Store_Btn.setFixedSize(SetBoutonWidht, 20)
self.Set__Store_Btn.setObjectName("StoreSet")
self.Set__Store_Btn.setText("S E T - 4")
if WIN_DISPLAY_SIZE == 1: # 150%
self.Set__Store_Btn.setFont(QtGui.QFont('Calibri', 6))
self.Set__Store_Btn.clicked.connect(partial(self.Store_Set, 4))
SET_B_LYT.addWidget(self.Set__Store_Btn)
##----------------------------------------------------------------- +
self.Set__Plus_Btn = QtWidgets.QPushButton()
self.Set__Plus_Btn.setFixedSize(setBtnClickZone, setBtnClickZone)
self.Set__Plus_Btn.setIconSize(QtCore.QSize(setBtnIconSize, setBtnIconSize))
self.Set__Plus_Btn.setIcon(QtGui.QIcon(IconPath + "Plus.png"))
self.Set__Plus_Btn.clicked.connect(partial(self.Add_Set, 4))
SET_B_LYT.addWidget(self.Set__Plus_Btn)
##______________________________________________________________/ UNDER LAYOUT
SET_B_UNDER_LYT = QtWidgets.QHBoxLayout()
SET_B_UNDER_LYT.setSpacing(10)
SECTION_SETS_LAYOUT.addLayout(SET_B_UNDER_LYT)
SET_B_UNDER_LYT.addSpacing(38)
##----------------------------------------------------------------- DEL
self.Set_B_1_Del_btn = QtWidgets.QPushButton()
self.Set_B_1_Del_btn.setFixedSize(20, 14)
self.Set_B_1_Del_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_B_1_Del_btn.setIcon(QtGui.QIcon(IconPath + "setDel.png"))
self.Set_B_1_Del_btn.clicked.connect(partial(self.Del_Set, 3))
SET_B_UNDER_LYT.addWidget(self.Set_B_1_Del_btn)
if mc.objExists("ModIt_Set_3"):
self.Set_B_1_Del_btn.setEnabled(1)
else:
self.Set_B_1_Del_btn.setEnabled(0)
##----------------------------------------------------------------- GET
self.Set_B_1_Get_btn = QtWidgets.QPushButton()
self.Set_B_1_Get_btn.setFixedSize(20, 14)
self.Set_B_1_Get_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_B_1_Get_btn.setIcon(QtGui.QIcon(IconPath + "setGet.png"))
self.Set_B_1_Get_btn.clicked.connect(partial(self.Get_Set, 3))
SET_B_UNDER_LYT.addWidget(self.Set_B_1_Get_btn)
if mc.objExists("ModIt_Set_3"):
self.Set_B_1_Get_btn.setEnabled(1)
else:
self.Set_B_1_Get_btn.setEnabled(0)
SET_B_UNDER_LYT.addSpacing(106)
##----------------------------------------------------------------- DEL
self.Set_B_2_Del_btn = QtWidgets.QPushButton()
self.Set_B_2_Del_btn.setFixedSize(20, 14)
self.Set_B_2_Del_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_B_2_Del_btn.setIcon(QtGui.QIcon(IconPath + "setDel.png"))
self.Set_B_2_Del_btn.clicked.connect(partial(self.Del_Set, 4))
SET_B_UNDER_LYT.addWidget(self.Set_B_2_Del_btn)
if mc.objExists("ModIt_Set_4"):
self.Set_B_2_Del_btn.setEnabled(1)
else:
self.Set_B_2_Del_btn.setEnabled(0)
##----------------------------------------------------------------- GET
self.Set_B_2_Get_btn = QtWidgets.QPushButton()
self.Set_B_2_Get_btn.setFixedSize(20, 14)
self.Set_B_2_Get_btn.setIconSize(QtCore.QSize(20, 20))
self.Set_B_2_Get_btn.setIcon(QtGui.QIcon(IconPath + "setGet.png"))
self.Set_B_2_Get_btn.clicked.connect(partial(self.Get_Set, 4))
SET_B_UNDER_LYT.addWidget(self.Set_B_2_Get_btn)
if mc.objExists("ModIt_Set_4"):
self.Set_B_2_Get_btn.setEnabled(1)
else:
self.Set_B_2_Get_btn.setEnabled(0)
self.ColorGreyBtn = MyCustomBtn_Widget()
self.ColorGreyBtn.setFixedSize(iconFixeSize, iconFixeSize)
self.ColorGreyBtn.setIconSize(QtCore.QSize(iconButtonSize, iconButtonSize))
self.ColorGreyBtn.setIcon(QtGui.QIcon(IconPath + "ColorLambert.png"))
self.ColorGreyBtn.clicked.connect(self.Action)
# C O N T E X T M E N U
self.ColorGreyBtn.customContextMenuRequested.connect(self.showPopup_Lambert)
self.popupMenuGrey = QtWidgets.QMenu()
ColorGreyMenu_Entry_Select = self.popupMenuGrey.addAction("Select")
ColorGreyMenu_Entry_Select.triggered.connect(self.Action)
#ColorGreyMenu_Entry_Attributes.triggered.connect(self.AttributLambert)
if DOCK == 0:
SET_A_LYT.addStretch()
SET_B_LYT.addStretch()
SET_A_UNDER_LYT.addStretch()
SET_B_UNDER_LYT.addStretch()
SECTION_SETS_LAYOUT.addStretch()
#------------------------------------------------
##---------------------------------------------------- D E F I N I T I O N
def Action(self):
pass
def Store_Set(self, number):
if mc.objExists('ModIt_Set_' + str(number)):
mc.sets(add='ModIt_Set_' + str(number))
else:
createNewSet = mc.sets(n= 'ModIt_Set_' + str(number))
if number == 1:
self.Set_A_1_Get_btn.setEnabled(1)
self.Set_A_1_Del_btn.setEnabled(1)
elif number == 2:
self.Set_A_2_Get_btn.setEnabled(1)
self.Set_A_2_Del_btn.setEnabled(1)
elif number == 3:
self.Set_B_1_Get_btn.setEnabled(1)
self.Set_B_1_Del_btn.setEnabled(1)
elif number == 4:
self.Set_B_2_Get_btn.setEnabled(1)
self.Set_B_2_Del_btn.setEnabled(1)
def Add_Set(self, number):
try:
mc.sets(add='ModIt_Set_' + str(number))
except:
print("ModIt Error : Create a set first")
def Sub_Set(self, number):
try:
mc.sets(rm='ModIt_Set_' + str(number))
except:
print("ModIt Error : Create a set first")
def Del_Set(self, number):
try:
mc.delete('ModIt_Set_' + str(number))
except:
print("ModIt Error : Create a set first")
if number == 1:
self.Set_A_1_Get_btn.setEnabled(0)
self.Set_A_1_Del_btn.setEnabled(0)
elif number == 2:
self.Set_A_2_Get_btn.setEnabled(0)
self.Set_A_2_Del_btn.setEnabled(0)
elif number == 3:
self.Set_B_1_Get_btn.setEnabled(0)
self.Set_B_1_Del_btn.setEnabled(0)
elif number == 4:
self.Set_B_2_Get_btn.setEnabled(0)
self.Set_B_2_Del_btn.setEnabled(0)
def Get_Set(self, number):
try:
mc.select('ModIt_Set_' + str(number))
#obSelName = str(objSel[0])
#mel.eval('doMenuComponentSelectionExt(" ' + obSelName + '", "edge", 0);')
except:
print("ModIt Error : Create a set first")
def DelIntersect_Set(self):
try:
mc.delete('ModIt_Set_A')
mc.delete('ModIt_Set_B')
except:
print("ModIt Error : Create a set first")
def BoolIntersect_Set(self):
if mc.objExists('ModIt_Set_3'):
if mc.objExists('ModIt_Set_4'):
mc.select(mc.sets( 'ModIt_Set_3', intersection = "ModIt_Set_4"))
else:
ModIt_Global.WarningWindow("ModIt Warning : You should store Set-3 and Set-4 first.", 350)
return
else:
ModIt_Global.WarningWindow("ModIt Warning : You should store Set-3 and Set-4 first.", 350)
return
def showPopup_Lambert(self, position):
self.popupMenuGrey.exec_(self.ColorGreyBtn.mapToGlobal(position))