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