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

484 lines
19 KiB
Python

##--------------------------------------------------------------------------
from PySide2 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 shiboken2 import wrapInstance
from PySide2.QtGui import QIcon
from PySide2.QtWidgets import QWidget
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))