def findCharacterModules(self, *args): self.moduleList.clear() # current character selectedChar = self.characterCombo.currentText() # get rig modules if cmds.objExists(selectedChar + ":" + "ART_RIG_ROOT"): modules = cmds.listConnections(selectedChar + ":" + "ART_RIG_ROOT.rigModules") for module in modules: niceName = cmds.getAttr(module + ".moduleName") moduleType = cmds.getAttr(module + ".moduleType") # create widget item = QtWidgets.QListWidgetItem() widgetItem = QtWidgets.QGroupBox() widgetItem.setMinimumHeight(50) widgetItem.setProperty("module", module) widgetItem.setObjectName("light") layout = QtWidgets.QHBoxLayout(widgetItem) checkBox = QtWidgets.QCheckBox(niceName) checkBox.setChecked(False) layout.addWidget(checkBox) comboBox = QtWidgets.QComboBox() layout.addWidget(comboBox) # add items to combo box bases on module class var mod = __import__("RigModules." + moduleType, {}, {}, [moduleType]) matchData = mod.matchData if matchData[0] is True: for each in matchData[1]: comboBox.addItem(each) comboBox.setCurrentIndex(1) self.moduleList.addItem(item) self.moduleList.setItemWidget(item, widgetItem)
def findCharacterModules(self, *args): self.fbxModuleList.clear() #current character selectedChar = self.fbxCharacterCombo.currentText() #get rig modules if cmds.objExists(selectedChar + ":" + "ART_RIG_ROOT"): modules = cmds.listConnections(selectedChar + ":" + "ART_RIG_ROOT.rigModules") for module in modules: niceName = cmds.getAttr(module + ".moduleName") moduleType = cmds.getAttr(module + ".moduleType") #create widget item = QtWidgets.QListWidgetItem() widgetItem = QtWidgets.QGroupBox() widgetItem.setMinimumHeight(40) widgetItem.setProperty("module", module) widgetItem.setObjectName("light") layout = QtWidgets.QHBoxLayout(widgetItem) label = QtWidgets.QLabel(niceName) label.setStyleSheet("background: transparent; font: bold;") layout.addWidget(label) comboBox = QtWidgets.QComboBox() layout.addWidget(comboBox) #add items to combo box bases on module class var mod = __import__("RigModules." + moduleType, {}, {}, [moduleType]) fbxOptions = mod.fbxImport for each in fbxOptions: comboBox.addItem(each) comboBox.setCurrentIndex(1) self.fbxModuleList.addItem(item) self.fbxModuleList.setItemWidget(item, widgetItem)
def createUI(self): """ Builds the UI, listing options for choosing a project and showing all assets belonging to that project for edit or add. """ # fonts font = QtGui.QFont() font.setPointSize(12) font.setBold(True) fontSmall = QtGui.QFont() fontSmall.setPointSize(9) fontSmall.setBold(True) # load stylesheet styleSheetFile = utils.returnNicePath(self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/mainScheme.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.setStyleSheet(self.style) # size policies mainSizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) # ======================================================================= # #create the main widget # ======================================================================= self.mainWidget = QtWidgets.QWidget() self.setCentralWidget(self.mainWidget) # set qt object name self.setObjectName(windowObject) if self.edit: self.setWindowTitle(windowTitle) if self.add: self.setWindowTitle("Add Rig For Animation") self.setAttribute(QtCore.Qt.WA_DeleteOnClose) # create the mainLayout self.layout = QtWidgets.QVBoxLayout(self.mainWidget) self.resize(400, 400) self.setSizePolicy(mainSizePolicy) self.setMinimumSize(QtCore.QSize(400, 400)) self.setMaximumSize(QtCore.QSize(400, 400)) # create the QFrame self.frame = QtWidgets.QFrame() self.layout.addWidget(self.frame) self.widgetLayout = QtWidgets.QHBoxLayout(self.frame) self.frame.setObjectName("mid") # ======================================================================= # #create two VBox Layouts to create 2 columns # ======================================================================= self.leftColumn = QtWidgets.QVBoxLayout() self.widgetLayout.addLayout(self.leftColumn) self.rightColumn = QtWidgets.QVBoxLayout() self.widgetLayout.addLayout(self.rightColumn) # ======================================================================= # #left column : project comboBox, group comboBox, listWidget of characters # ======================================================================= self.projectMenu = QtWidgets.QComboBox() self.leftColumn.addWidget(self.projectMenu) self.projectMenu.setMinimumSize(150, 30) self.projectMenu.setMaximumSize(150, 30) self.projectMenu.currentIndexChanged.connect(self.populateGroups) self.groupMenu = QtWidgets.QComboBox() self.leftColumn.addWidget(self.groupMenu) self.groupMenu.setMinimumSize(150, 30) self.groupMenu.setMaximumSize(150, 30) self.groupMenu.currentIndexChanged.connect(self.populateCharacters) self.characterList = QtWidgets.QListWidget() self.leftColumn.addWidget(self.characterList) self.characterList.setMinimumSize(150, 200) self.characterList.setMaximumSize(150, 200) self.characterList.itemClicked.connect(partial(self.populateIcon)) self.populateProjects() # ======================================================================= # #right column: icon frame, edit button/add button, close button # ======================================================================= self.characterIcon = QtWidgets.QLabel() self.characterIcon.setMinimumSize(200, 200) self.characterIcon.setMaximumSize(200, 200) self.rightColumn.addWidget(self.characterIcon) # default image self.defaultPixMap = QtGui.QPixmap(utils.returnNicePath(self.iconsPath, "System/noCharacter.png")) self.characterIcon.setPixmap(self.defaultPixMap) # if edit: if self.edit: self.editButton = QtWidgets.QPushButton("Edit Selected") self.editButton.setFont(font) self.rightColumn.addWidget(self.editButton) self.editButton.setMinimumSize(200, 40) self.editButton.setMaximumSize(200, 40) self.editButton.clicked.connect(partial(self.editSelected)) self.editButton.setObjectName("blueButton") # if add: if self.add: self.addButton = QtWidgets.QPushButton("Add Selected") self.addButton.setFont(font) self.rightColumn.addWidget(self.addButton) self.addButton.setMinimumSize(200, 40) self.addButton.setMaximumSize(200, 40) self.addButton.clicked.connect(partial(self.addSelected)) self.addButton.setObjectName("blueButton") self.closeButton = QtWidgets.QPushButton("Close") self.closeButton.setFont(font) self.rightColumn.addWidget(self.closeButton) self.closeButton.setMinimumSize(200, 40) self.closeButton.setMaximumSize(200, 40) self.closeButton.clicked.connect(partial(self.closeUI)) self.closeButton.setObjectName("blueButton")
def buildMoveInfsUI(self): if cmds.window("ART_MoveInfluencesWin", exists = True): cmds.deleteUI("ART_MoveInfluencesWin", wnd = True) #launch a UI to get the name information self.moveInfsWin = QtWidgets.QMainWindow(self.mainUI) #load stylesheet styleSheetFile = utils.returnNicePath(self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/mainScheme.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.moveInfsWin.setStyleSheet(self.style) #size policies mainSizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) #create the main widget self.moveInfsWin_mainWidget = QtWidgets.QWidget() self.moveInfsWin.setCentralWidget(self.moveInfsWin_mainWidget) #set qt object name self.moveInfsWin.setObjectName("ART_MoveInfluencesWin") self.moveInfsWin.setWindowTitle("Move Influences") #create the mainLayout for the rig creator UI self.moveInfsWin_mainLayout = QtWidgets.QVBoxLayout(self.moveInfsWin_mainWidget) self.moveInfsWin_mainLayout.setContentsMargins(0, 0, 0, 0) self.moveInfsWin.resize(300, 100) self.moveInfsWin.setSizePolicy(mainSizePolicy) self.moveInfsWin.setMinimumSize(QtCore.QSize( 300, 100 )) self.moveInfsWin.setMaximumSize(QtCore.QSize( 300, 100 )) #create the background image self.moveInfsWin_frame = QtWidgets.QFrame() self.moveInfsWin_mainLayout.addWidget(self.moveInfsWin_frame) #layout for the widgets self.moveInfsWin_widgetLayout = QtWidgets.QVBoxLayout(self.moveInfsWin_frame) #layout for the combo boxes self.moveInfsWin_comboBoxLayout = QtWidgets.QHBoxLayout() self.moveInfsWin_widgetLayout.addLayout(self.moveInfsWin_comboBoxLayout) #combo boxes self.moveFromComboBox = QtWidgets.QComboBox() self.moveInfsWin_comboBoxLayout.addWidget(self.moveFromComboBox) label = QtWidgets.QLabel(" --------> ") label.setMaximumWidth(40) label.setAlignment(QtCore.Qt.AlignCenter) self.moveInfsWin_comboBoxLayout.addWidget(label) self.moveToComboBox = QtWidgets.QComboBox() self.moveInfsWin_comboBoxLayout.addWidget(self.moveToComboBox) #process button self.moveInfsGoBtn = QtWidgets.QPushButton("Move Influences") self.moveInfsGoBtn.setObjectName("blueButton") self.moveInfsWin_widgetLayout.addWidget(self.moveInfsGoBtn) self.moveInfsGoBtn.setMinimumHeight(40) self.moveInfsGoBtn.clicked.connect(partial(self.moveInfluences)) #populate the lists status = self.findInfluencesOnSelection() if not status: return #show the window self.moveInfsWin.show()
def buildSettingsUi(self): #fonts self.font = QtGui.QFont() self.font.setPointSize(10) self.font.setBold(False) self.fontSmall = QtGui.QFont() self.fontSmall.setPointSize(9) self.fontSmall.setBold(False) self.titleFont = QtGui.QFont() self.titleFont.setPointSize(40) self.titleFont.setBold(True) #load stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/mainScheme.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.setStyleSheet(self.style) #size policies mainSizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) #create the main widget self.mainWidget = QtWidgets.QWidget() self.mainWidget.setStyleSheet(self.style) self.mainWidget.setStyleSheet( "background-color: rgb(0, 0, 0);, color: rgb(0,0,0);") self.setCentralWidget(self.mainWidget) #set qt object name self.setObjectName(windowObject) self.setWindowTitle(windowTitle) self.setAttribute(QtCore.Qt.WA_DeleteOnClose) #create the mainLayout for the rig creator UI self.layout = QtWidgets.QVBoxLayout(self.mainWidget) self.resize(300, 600) self.setSizePolicy(mainSizePolicy) self.setMinimumSize(QtCore.QSize(300, 600)) self.setMaximumSize(QtCore.QSize(300, 600)) #create the QFrame self.frame = QtWidgets.QFrame() self.frame.setObjectName("epic") self.layout.addWidget(self.frame) self.widgetLayout = QtWidgets.QVBoxLayout(self.frame) #Title of Issue self.titleLayout = QtWidgets.QHBoxLayout() self.widgetLayout.addLayout(self.titleLayout) titleLabel = QtWidgets.QLabel("Title: ") self.titleLayout.addWidget(titleLabel) self.issueTitle = QtWidgets.QLineEdit() self.issueTitle.setPlaceholderText("Title of Issue") self.titleLayout.addWidget(self.issueTitle) self.issueTitle.setMinimumWidth(200) self.issueTitle.setMaximumWidth(200) #Type of Issue (from labels) self.labelLayout = QtWidgets.QHBoxLayout() self.widgetLayout.addLayout(self.labelLayout) typeLabel = QtWidgets.QLabel("Issue Type: ") self.labelLayout.addWidget(typeLabel) self.issueType = QtWidgets.QComboBox() self.labelLayout.addWidget(self.issueType) self.issueType.setMinimumWidth(200) self.issueType.setMaximumWidth(200) #Information summaryLabel = QtWidgets.QLabel("Summary: ") self.widgetLayout.addWidget(summaryLabel) infoText = QtWidgets.QTextEdit() infoText.setReadOnly(True) infoText.setEnabled(False) self.widgetLayout.addWidget(infoText) infoText.setMinimumHeight(60) infoText.setMaximumHeight(60) infoText.setTextColor(QtGui.QColor(120, 120, 120)) infoText.append( "(Please include any errors and stacktrace if applicable. Also include any reproduction steps if possible.)" ) self.issueInfo = QtWidgets.QTextEdit() self.widgetLayout.addWidget(self.issueInfo) self.issueInfo.setObjectName("light") #Create Issue self.createIssueBtn = QtWidgets.QPushButton("Create Issue") self.createIssueBtn.setObjectName("blueButton") self.widgetLayout.addWidget(self.createIssueBtn) self.createIssueBtn.clicked.connect(self.createIssue) self.credentials = git.getGitCreds() if self.credentials == None: git.gitCredsUI(self) self.credentials = git.getGitCreds() self.getLabels()
def buildInterface(self): """ Builds the interface for the tool, finding all joints that compose the asset, comparing them to joints in the skinCluster, then separating the initial list into joints in the cluster, and joints not in the cluster. """ if cmds.window("ART_addRemoveInfsWin", exists=True): cmds.deleteUI("ART_addRemoveInfsWin", wnd=True) # launch a UI to get the name information self.addRemoveInfsWin = QtWidgets.QMainWindow(self.mainUI) # size policies mainSizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) # create the main widget self.addRemoveInfsWin_mainWidget = QtWidgets.QWidget() self.addRemoveInfsWin.setCentralWidget( self.addRemoveInfsWin_mainWidget) # load stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/mainScheme.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() # set qt object name self.addRemoveInfsWin.setObjectName("ART_addRemoveInfsWin") self.addRemoveInfsWin.setWindowTitle("Add/Remove Influences") # create the mainLayout for the ui self.addRemoveInfsWin_mainLayout = QtWidgets.QVBoxLayout( self.addRemoveInfsWin_mainWidget) self.addRemoveInfsWin_mainLayout.setContentsMargins(5, 5, 5, 5) self.addRemoveInfsWin.resize(300, 450) self.addRemoveInfsWin.setSizePolicy(mainSizePolicy) self.addRemoveInfsWin.setMinimumSize(QtCore.QSize(300, 450)) self.addRemoveInfsWin.setMaximumSize(QtCore.QSize(300, 450)) # create the background image self.addRemoveInfsWin_frame = QtWidgets.QFrame() self.addRemoveInfsWin_mainLayout.addWidget(self.addRemoveInfsWin_frame) self.addRemoveInfsWin_frame.setObjectName("dark") # create the main layout for the widgets self.addRemoveInfsWin_widgetLayout = QtWidgets.QHBoxLayout( self.addRemoveInfsWin_frame) # two layouts needed for the widget layout. left side = vertical layout for filters, # search, and list. right layout = vertical layout for buttons self.addRemoveInfsWin_leftSideLayout = QtWidgets.QVBoxLayout() self.addRemoveInfsWin_widgetLayout.addLayout( self.addRemoveInfsWin_leftSideLayout) self.addRemoveInfsWin_rightSideLayout = QtWidgets.QVBoxLayout() self.addRemoveInfsWin_widgetLayout.addLayout( self.addRemoveInfsWin_rightSideLayout) # left side: filters, search, list self.addRemoveInfsWin_filters = QtWidgets.QComboBox() self.addRemoveInfsWin_leftSideLayout.addWidget( self.addRemoveInfsWin_filters) self.addRemoveInfsWin_filters.addItem("Show Influences In Skin") self.addRemoveInfsWin_filters.addItem("Show Influences Not In Skin") self.addRemoveInfsWin_filters.currentIndexChanged.connect( partial(self.addOrRemoveInfs_ShowInfsFilter)) self.addRemoveInfsWin_search = QtWidgets.QLineEdit() self.addRemoveInfsWin_leftSideLayout.addWidget( self.addRemoveInfsWin_search) self.addRemoveInfsWin_search.setPlaceholderText("Search...") self.addRemoveInfsWin_search.textChanged.connect( partial(self.addOrRemoveInfs_Search)) self.addRemoveInfsWin_infList = QtWidgets.QListWidget() self.addRemoveInfsWin_leftSideLayout.addWidget( self.addRemoveInfsWin_infList) self.addRemoveInfsWin_infList.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection) # right side: add button, remove button, prune weights, remove unused button font = QtGui.QFont() font.setPointSize(8) font.setBold(True) self.addRemoveInfsWin_refreshSelBtn = QtWidgets.QPushButton("Refresh") self.addRemoveInfsWin_rightSideLayout.addWidget( self.addRemoveInfsWin_refreshSelBtn) self.addRemoveInfsWin_refreshSelBtn.setMinimumSize(110, 35) self.addRemoveInfsWin_refreshSelBtn.setMaximumSize(110, 35) self.addRemoveInfsWin_refreshSelBtn.setFont(font) self.addRemoveInfsWin_refreshSelBtn.clicked.connect( partial(self.addOrRemoveInfs_RefreshSelection)) self.addRemoveInfsWin_refreshSelBtn.setObjectName("blueButton") self.addRemoveInfsWin_rightSideLayout.addSpacerItem( QtWidgets.QSpacerItem(100, 300, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)) self.addRemoveInfsWin_addInfBtn = QtWidgets.QPushButton("Add") self.addRemoveInfsWin_rightSideLayout.addWidget( self.addRemoveInfsWin_addInfBtn) self.addRemoveInfsWin_addInfBtn.setMinimumSize(110, 35) self.addRemoveInfsWin_addInfBtn.setMaximumSize(110, 35) self.addRemoveInfsWin_addInfBtn.setFont(font) self.addRemoveInfsWin_addInfBtn.clicked.connect( partial(self.addOrRemoveInfs_addInf, True, False)) self.addRemoveInfsWin_addInfBtn.setObjectName("blueButton") self.addRemoveInfsWin_removeInfBtn = QtWidgets.QPushButton("Remove") self.addRemoveInfsWin_rightSideLayout.addWidget( self.addRemoveInfsWin_removeInfBtn) self.addRemoveInfsWin_removeInfBtn.setMinimumSize(110, 35) self.addRemoveInfsWin_removeInfBtn.setMaximumSize(110, 35) self.addRemoveInfsWin_removeInfBtn.setFont(font) self.addRemoveInfsWin_removeInfBtn.clicked.connect( partial(self.addOrRemoveInfs_addInf, False, False)) self.addRemoveInfsWin_removeInfBtn.setObjectName("blueButton") self.addRemoveInfsWin_removeUnusedInfBtn = QtWidgets.QPushButton( "Remove Unused") self.addRemoveInfsWin_rightSideLayout.addWidget( self.addRemoveInfsWin_removeUnusedInfBtn) self.addRemoveInfsWin_removeUnusedInfBtn.setMinimumSize(110, 35) self.addRemoveInfsWin_removeUnusedInfBtn.setMaximumSize(110, 35) self.addRemoveInfsWin_removeUnusedInfBtn.setFont(font) self.addRemoveInfsWin_removeUnusedInfBtn.clicked.connect( partial(self.addOrRemoveInfs_addInf, False, True)) self.addRemoveInfsWin_removeUnusedInfBtn.setObjectName("blueButton") self.addRemoveInfsWin_pruneBtn = QtWidgets.QPushButton("Prune Weights") self.addRemoveInfsWin_rightSideLayout.addWidget( self.addRemoveInfsWin_pruneBtn) self.addRemoveInfsWin_pruneBtn.setMinimumSize(110, 35) self.addRemoveInfsWin_pruneBtn.setMaximumSize(110, 35) self.addRemoveInfsWin_pruneBtn.setFont(font) self.addRemoveInfsWin_pruneBtn.clicked.connect( partial(self.addOrRemoveInfs_prune)) self.addRemoveInfsWin_pruneBtn.setObjectName("blueButton") # populate infList self.addOrRemoveInfs_RefreshSelection() # show window self.addRemoveInfsWin.show()
def buildSymmetryModeUI(self, mainUI): if cmds.window("ART_SymmetryModeWin", exists=True): cmds.deleteUI("ART_SymmetryModeWin", wnd=True) #launch a UI to get the name information self.symmetryModeWin = QtWidgets.QMainWindow(mainUI) #load stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/mainScheme.qss") f = open(styleSheetFile, "r") style = f.read() f.close() self.symmetryModeWin.setStyleSheet(style) #size policies mainSizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) #create the main widget self.symModeWin_mainWidget = QtWidgets.QWidget() self.symmetryModeWin.setCentralWidget(self.symModeWin_mainWidget) #set qt object name self.symmetryModeWin.setObjectName("ART_SymmetryModeWin") self.symmetryModeWin.setWindowTitle("Mass Mirror Mode") #create the mainLayout for the rig creator UI self.symModeWin_mainLayout = QtWidgets.QVBoxLayout( self.symModeWin_mainWidget) self.symModeWin_mainLayout.setContentsMargins(0, 0, 0, 0) self.symmetryModeWin.setSizePolicy(mainSizePolicy) self.symmetryModeWin.setMinimumSize(QtCore.QSize(600, 250)) self.symmetryModeWin.setMaximumSize(QtCore.QSize(600, 250)) #create the background self.symModeWin_frame = QtWidgets.QFrame() self.symModeWin_frame.setObjectName("mid") self.symModeWin_mainLayout.addWidget(self.symModeWin_frame) #create the layout for the widgets self.symModeWin_widgetLayout = QtWidgets.QHBoxLayout( self.symModeWin_frame) self.symModeWin_widgetLayout.setContentsMargins(5, 5, 5, 5) #add the QListWidget Frame self.symModeWin_moduleListFrame = QtWidgets.QFrame() self.symModeWin_moduleListFrame.setObjectName("mid") self.symModeWin_moduleListFrame.setMinimumSize(QtCore.QSize(450, 200)) self.symModeWin_moduleListFrame.setMaximumSize(QtCore.QSize(450, 200)) self.symModeWin_moduleListFrame.setContentsMargins(20, 0, 20, 0) #create the list widget self.symModeWin_moduleList = QtWidgets.QListWidget( self.symModeWin_moduleListFrame) self.symModeWin_widgetLayout.addWidget(self.symModeWin_moduleListFrame) self.symModeWin_moduleList.setMinimumSize(QtCore.QSize(450, 200)) self.symModeWin_moduleList.setMaximumSize(QtCore.QSize(450, 200)) self.symModeWin_moduleList.setSelectionMode( QtWidgets.QAbstractItemView.NoSelection) self.symModeWin_moduleList.setSpacing(3) #add the layout for the buttons self.symModeWin_buttonLayoutAll = QtWidgets.QVBoxLayout() self.symModeWin_widgetLayout.addLayout(self.symModeWin_buttonLayoutAll) self.symModeWin_buttonLayoutAll.setContentsMargins(5, 20, 5, 20) #add the selection buttons self.symModeWin_selectionButtonLayout = QtWidgets.QVBoxLayout() self.symModeWin_buttonLayoutAll.addLayout( self.symModeWin_selectionButtonLayout) self.symModeWin_selectAllButton = QtWidgets.QPushButton("Select All") self.symModeWin_selectAllButton.setMinimumSize(QtCore.QSize(115, 25)) self.symModeWin_selectAllButton.setMaximumSize(QtCore.QSize(115, 25)) self.symModeWin_selectionButtonLayout.addWidget( self.symModeWin_selectAllButton) self.symModeWin_selectAllButton.clicked.connect( partial(self.symmetryMode_selectDeselect, True)) self.symModeWin_selectAllButton.setObjectName("blueButton") self.symModeWin_selectNoneButton = QtWidgets.QPushButton( "Clear Selection") self.symModeWin_selectNoneButton.setMinimumSize(QtCore.QSize(115, 25)) self.symModeWin_selectNoneButton.setMaximumSize(QtCore.QSize(115, 25)) self.symModeWin_selectionButtonLayout.addWidget( self.symModeWin_selectNoneButton) self.symModeWin_selectNoneButton.clicked.connect( partial(self.symmetryMode_selectDeselect, False)) self.symModeWin_selectNoneButton.setObjectName("blueButton") #spacer spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.symModeWin_buttonLayoutAll.addItem(spacerItem) #add the mirror buttons self.symModeWin_mirrorButtonLayout = QtWidgets.QVBoxLayout() self.symModeWin_buttonLayoutAll.addLayout( self.symModeWin_mirrorButtonLayout) self.symModeWin_mirrorL2RButton = QtWidgets.QPushButton( "Mirror Checked") self.symModeWin_mirrorL2RButton.setToolTip( "Mirror selected modules to unselected modules") self.symModeWin_mirrorL2RButton.setMinimumSize(QtCore.QSize(115, 25)) self.symModeWin_mirrorL2RButton.setMaximumSize(QtCore.QSize(115, 25)) self.symModeWin_mirrorButtonLayout.addWidget( self.symModeWin_mirrorL2RButton) self.symModeWin_mirrorL2RButton.setObjectName("blueButton") self.symModeWin_mirrorL2RButton.clicked.connect( partial(self.symmetryMode_mirror)) #populate the list widget modules = utils.returnRigModules() entries = [] listMods = [] for mod in modules: modName = cmds.getAttr(mod + ".moduleName") mirrorModule = cmds.getAttr(mod + ".mirrorModule") invalidTypes = [None, "None"] if mirrorModule not in invalidTypes: if modName not in listMods: entries.append([modName, mirrorModule]) listMods.append(modName) listMods.append(mirrorModule) self.symModeWinModues = {} if len(entries) == 0: item = QtWidgets.QListWidgetItem(self.symModeWin_moduleList) label = QtWidgets.QLabel("No modules with mirroring setup") item.setSizeHint(label.sizeHint()) self.symModeWin_moduleList.addItem(item) self.symModeWin_moduleList.setItemWidget(item, label) for each in entries: #create a custom widget to add to each entry in the listWidget mainWidget = QtWidgets.QWidget() buttonLayout = QtWidgets.QHBoxLayout(mainWidget) #create the checkbox checkbox = QtWidgets.QCheckBox() checkbox.setMinimumSize(QtCore.QSize(12, 12)) checkbox.setMaximumSize(QtCore.QSize(12, 12)) checkbox.setChecked(True) buttonLayout.addWidget(checkbox) label = QtWidgets.QLabel("Mirror ") buttonLayout.addWidget(label) mirrorFrom = QtWidgets.QComboBox() mirrorFrom.addItem(each[0]) mirrorFrom.addItem(each[1]) buttonLayout.addWidget(mirrorFrom) mirrorFrom.setMinimumWidth(150) label = QtWidgets.QLabel(" To ") buttonLayout.addWidget(label) label.setAlignment(QtCore.Qt.AlignCenter) mirrorTo = QtWidgets.QComboBox() mirrorTo.addItem(each[1]) mirrorTo.addItem(each[0]) buttonLayout.addWidget(mirrorTo) mirrorTo.setMinimumWidth(150) #signal/slots mirrorFrom.currentIndexChanged.connect( partial(self.toggleComboBoxFrom, mirrorFrom, mirrorTo)) mirrorTo.currentIndexChanged.connect( partial(self.toggleComboBoxTo, mirrorFrom, mirrorTo)) #add this item widget to the list item = QtWidgets.QListWidgetItem(self.symModeWin_moduleList) index = entries.index(each) if (index % 2) == 0: item.setBackground(QtGui.QColor(106, 106, 108)) else: item.setBackground(QtGui.QColor(46, 46, 48)) item.setSizeHint(mainWidget.sizeHint()) self.symModeWin_moduleList.addItem(item) self.symModeWin_moduleList.setItemWidget(item, mainWidget) #show the window self.symmetryModeWin.show()
def buildUI(self): if cmds.window("pyART_MatchOverRangeWIN", exists=True): cmds.deleteUI("pyART_MatchOverRangeWIN", wnd=True) # create the main window self.mainWin = QtWidgets.QMainWindow(self.pickerUI) # create the main widget self.mainWidget = QtWidgets.QFrame() self.mainWidget.setObjectName("dark") self.mainWin.setCentralWidget(self.mainWidget) # load stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/animPicker.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.mainWin.setStyleSheet(self.style) # set window size self.mainWin.setMinimumSize(QtCore.QSize(600, 350)) self.mainWin.setMaximumSize(QtCore.QSize(600, 350)) self.mainWin.resize(600, 350) # set qt object name self.mainWin.setObjectName("pyART_MatchOverRangeWIN") self.mainWin.setWindowTitle("Match Over Frame Range") # horizontal layout self.mainLayout = QtWidgets.QHBoxLayout(self.mainWidget) # LEFT SIDE # module list widget self.moduleList = QtWidgets.QListWidget() self.mainLayout.addWidget(self.moduleList) # self.moduleList.setMinimumSize(QtCore.QSize(300, 280)) # self.moduleList.setMaximumSize(QtCore.QSize(300, 280)) self.moduleList.setSelectionMode( QtWidgets.QAbstractItemView.NoSelection) self.moduleList.setSpacing(20) # RIGHT SIDE self.rightLayout = QtWidgets.QVBoxLayout() self.mainLayout.addLayout(self.rightLayout) self.rightLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 25, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)) self.characterCombo = QtWidgets.QComboBox() self.rightLayout.addWidget(self.characterCombo) self.characterCombo.setMinimumHeight(50) self.characterCombo.setMaximumHeight(50) self.characterCombo.setIconSize(QtCore.QSize(50, 50)) self.characterCombo.currentIndexChanged.connect( partial(self.findCharacterModules)) # frame ranges # SPACER! self.rightLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 40, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)) self.rangeLayout = QtWidgets.QHBoxLayout() self.rightLayout.addLayout(self.rangeLayout) label1 = QtWidgets.QLabel("Start:") label1.setStyleSheet("background: transparent;") self.rangeLayout.addWidget(label1) self.startFrame = QtWidgets.QSpinBox() self.startFrame.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons) self.rangeLayout.addWidget(self.startFrame) self.startFrame.setRange(-10000, 10000) label2 = QtWidgets.QLabel("End:") label2.setStyleSheet("background: transparent;") self.rangeLayout.addWidget(label2) self.endFrame = QtWidgets.QSpinBox() self.endFrame.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons) self.rangeLayout.addWidget(self.endFrame) self.endFrame.setRange(-10000, 10000) # SPACER! self.rightLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)) # Button self.matchButton = QtWidgets.QPushButton("Match") self.rightLayout.addWidget(self.matchButton) self.matchButton.setObjectName("blueButton") self.matchButton.setMinimumHeight(50) self.matchButton.clicked.connect(self.match) # SPACER! self.rightLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 25, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)) # show the window self.mainWin.show() # populate UI self.findCharacters() self.findCharacterModules() startFrame = cmds.playbackOptions(q=True, min=True) endFrame = cmds.playbackOptions(q=True, max=True) self.startFrame.setValue(startFrame) self.endFrame.setValue(endFrame)
def buildUI(self): if cmds.window("pyART_ImportMotionWIN", exists=True): cmds.deleteUI("pyART_ImportMotionWIN", wnd=True) #create the main window self.mainWin = QtWidgets.QMainWindow(self.pickerUI) #create the main widget self.mainWidget = QtWidgets.QWidget() self.mainWin.setCentralWidget(self.mainWidget) #create the mainLayout self.layout = QtWidgets.QVBoxLayout(self.mainWidget) #load stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/animPicker.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.mainWin.setStyleSheet(self.style) self.mainWin.setMinimumSize(QtCore.QSize(600, 350)) self.mainWin.setMaximumSize(QtCore.QSize(600, 350)) self.mainWin.resize(600, 350) #set qt object name self.mainWin.setObjectName("pyART_ImportMotionWIN") self.mainWin.setWindowTitle("Import Motion") #tabs self.importTabs = QtWidgets.QTabWidget() self.layout.addWidget(self.importTabs) #style sheet stylesheet = """ QTabBar::tab { background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgb(19,132,183), stop:1 rgb(30,30,30)); width: 100px; padding-left: -10px; } QTabBar::tab:selected { background-color: rgb(14,100,143); border: 2px solid black; } QTabBar::tab:hover { background: rgb(19,132,183); } QTabBar::tab:!selected { margin-top: 5px; } QTabWidget::pane { border-top: 2px solid rgb(19,132,183); border-left: 2px solid rgb(19,132,183); border-right: 2px solid rgb(19,132,183); border-bottom: 2px solid rgb(19,132,183); } """ self.importTabs.setStyleSheet(stylesheet) #FBX Tab self.fbxImportTab = QtWidgets.QWidget() self.importTabs.addTab(self.fbxImportTab, "FBX") #Anim Curve Tab self.animImportTab = QtWidgets.QWidget() self.importTabs.addTab(self.animImportTab, "Animation") #======================================================================= #======================================================================= #======================================================================= #======================================================================= # #FBX TAB #======================================================================= #======================================================================= #======================================================================= #======================================================================= #horizontal layout self.fbxMainLayout = QtWidgets.QHBoxLayout(self.fbxImportTab) #LEFT SIDE #module list widget self.fbxModuleList = QtWidgets.QListWidget() self.fbxMainLayout.addWidget(self.fbxModuleList) self.fbxModuleList.setMinimumSize(QtCore.QSize(300, 280)) self.fbxModuleList.setMaximumSize(QtCore.QSize(300, 280)) self.fbxModuleList.setSpacing(15) self.fbxModuleList.setSelectionMode( QtWidgets.QAbstractItemView.NoSelection) #RIGHT SIDE self.fbxRightLayout = QtWidgets.QVBoxLayout() self.fbxMainLayout.addLayout(self.fbxRightLayout) self.fbxCharacterCombo = QtWidgets.QComboBox() self.fbxRightLayout.addWidget(self.fbxCharacterCombo) self.fbxCharacterCombo.setMinimumSize(QtCore.QSize(250, 50)) self.fbxCharacterCombo.setMaximumSize(QtCore.QSize(250, 50)) self.fbxCharacterCombo.setIconSize(QtCore.QSize(45, 45)) self.fbxCharacterCombo.currentIndexChanged.connect( partial(self.findCharacterModules)) self.fbxPathLayout = QtWidgets.QHBoxLayout() self.fbxRightLayout.addLayout(self.fbxPathLayout) self.fbxFilePath = QtWidgets.QLineEdit() self.fbxFilePath.setMinimumWidth(210) self.fbxFilePath.setMaximumWidth(210) self.fbxPathLayout.addWidget(self.fbxFilePath) self.fbxFilePath.setPlaceholderText("fbx file..") browseBtn = QtWidgets.QPushButton() browseBtn.setMinimumSize(25, 25) browseBtn.setMaximumSize(25, 25) self.fbxPathLayout.addWidget(browseBtn) icon = QtGui.QIcon( utils.returnNicePath(self.iconsPath, "System/fileBrowse.png")) browseBtn.setIconSize(QtCore.QSize(25, 25)) browseBtn.setIcon(icon) browseBtn.clicked.connect(self.fbxFileBrowse) self.frameOffsetLayout = QtWidgets.QHBoxLayout() self.fbxRightLayout.addLayout(self.frameOffsetLayout) frameOffset = QtWidgets.QLabel("Frame Offset:") frameOffset.setStyleSheet("background: transparent; font: bold;") self.frameOffsetLayout.addWidget(frameOffset) self.frameOffsetField = QtWidgets.QSpinBox() self.frameOffsetField.setButtonSymbols( QtWidgets.QAbstractSpinBox.NoButtons) self.frameOffsetField.setRange(-1000, 10000) self.frameOffsetLayout.addWidget(self.frameOffsetField) #option to strip namespace self.stripNamespace = QtWidgets.QCheckBox("Strip Incoming Namespace") self.stripNamespace.setToolTip( "If the incoming FBX has a namespace, checking this\noption will strip that namespace upon import" ) self.stripNamespace.setChecked(True) self.fbxRightLayout.addWidget(self.stripNamespace) #Save/Load Settings saveLoadLayout = QtWidgets.QHBoxLayout() self.fbxRightLayout.addLayout(saveLoadLayout) saveSettingsBtn = QtWidgets.QPushButton("Save Settings") saveSettingsBtn.setMinimumSize(120, 30) saveSettingsBtn.setMaximumSize(120, 30) icon = QtGui.QIcon( utils.returnNicePath(self.iconsPath, "System/save.png")) saveSettingsBtn.setIconSize(QtCore.QSize(25, 25)) saveSettingsBtn.setIcon(icon) saveLoadLayout.addWidget(saveSettingsBtn) saveSettingsBtn.setObjectName("blueButton") saveSettingsBtn.setToolTip("Save out module import settings") saveSettingsBtn.clicked.connect(self.saveSettings) loadSettingsBtn = QtWidgets.QPushButton("Load Settings") loadSettingsBtn.setMinimumSize(120, 30) loadSettingsBtn.setMaximumSize(120, 30) icon = QtGui.QIcon( utils.returnNicePath(self.iconsPath, "System/load.png")) loadSettingsBtn.setIconSize(QtCore.QSize(25, 25)) loadSettingsBtn.setIcon(icon) saveLoadLayout.addWidget(loadSettingsBtn) loadSettingsBtn.setObjectName("blueButton") loadSettingsBtn.setToolTip("Load and set module import settings") loadSettingsBtn.clicked.connect(self.loadSettings) #SPACER! self.fbxRightLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)) #Button self.importFBXbutton = QtWidgets.QPushButton("Import") self.fbxRightLayout.addWidget(self.importFBXbutton) self.importFBXbutton.setObjectName("blueButton") self.importFBXbutton.setMinimumHeight(50) self.importFBXbutton.clicked.connect(self.fbxImport) #show window self.mainWin.show() #populate UI self.findCharacters() self.findCharacterModules()
def buildUI(self): if cmds.window("pyART_ResetModulesWIN", exists=True): cmds.deleteUI("pyART_ResetModulesWIN", wnd=True) #create the main window self.mainWin = QtWidgets.QMainWindow(self.pickerUI) #create the main widget self.mainWidget = QtWidgets.QFrame() self.mainWidget.setObjectName("dark") self.mainWin.setCentralWidget(self.mainWidget) #create the mainLayout self.mainLayout = QtWidgets.QVBoxLayout(self.mainWidget) #load stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/animPicker.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.mainWin.setStyleSheet(self.style) self.mainWin.setMinimumSize(QtCore.QSize(400, 250)) self.mainWin.setMaximumSize(QtCore.QSize(400, 250)) self.mainWin.resize(400, 250) #set qt object name self.mainWin.setObjectName("pyART_ResetModulesWIN") self.mainWin.setWindowTitle("Reset Rig Controls") self.layout = QtWidgets.QHBoxLayout() self.mainLayout.addLayout(self.layout) #LEFT SIDE #list of modules self.moduleList = QtWidgets.QListWidget() self.moduleList.setMinimumSize(QtCore.QSize(180, 230)) self.moduleList.setMaximumSize(QtCore.QSize(180, 230)) self.layout.addWidget(self.moduleList) self.moduleList.setSelectionMode( QtWidgets.QAbstractItemView.MultiSelection) #RIGHT SIDE self.rightLayout = QtWidgets.QVBoxLayout() self.layout.addLayout(self.rightLayout) #character combo self.characterCombo = QtWidgets.QComboBox() self.rightLayout.addWidget(self.characterCombo) self.characterCombo.setMinimumSize(QtCore.QSize(180, 60)) self.characterCombo.setMaximumSize(QtCore.QSize(180, 60)) self.characterCombo.setIconSize(QtCore.QSize(50, 50)) self.characterCombo.currentIndexChanged.connect( partial(self.findCharacterModules)) #buttons self.selAllBtn = QtWidgets.QPushButton("Select All") self.selAllBtn.setMinimumWidth(180) self.selAllBtn.setMaximumWidth(180) self.rightLayout.addWidget(self.selAllBtn) self.selAllBtn.setObjectName("blueButton") self.selAllBtn.clicked.connect(partial(self.selectAllModules)) self.clearSelBtn = QtWidgets.QPushButton("Clear Selection") self.clearSelBtn.setMinimumWidth(180) self.clearSelBtn.setMaximumWidth(180) self.rightLayout.addWidget(self.clearSelBtn) self.clearSelBtn.setObjectName("blueButton") self.clearSelBtn.clicked.connect(partial(self.clearModuleSelection)) self.rightLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)) #reset transforms button self.resetXformsBtn = QtWidgets.QPushButton("Reset Transformations") self.resetXformsBtn.setMinimumWidth(180) self.resetXformsBtn.setMaximumWidth(180) self.rightLayout.addWidget(self.resetXformsBtn) self.resetXformsBtn.setObjectName("blueButton") self.resetXformsBtn.clicked.connect(partial(self.reset)) #show window self.mainWin.show() #populate UI self.findCharacters() self.findCharacterModules()
def buildUI(self): if cmds.window("pyART_SelectControlsWIN", exists=True): cmds.deleteUI("pyART_SelectControlsWIN", wnd=True) # create the main window self.mainWin = QtWidgets.QMainWindow(self.pickerUI) # create the main widget self.mainWidget = QtWidgets.QFrame() self.mainWidget.setObjectName("dark") self.mainWin.setCentralWidget(self.mainWidget) # create the mainLayout self.mainLayout = QtWidgets.QVBoxLayout(self.mainWidget) # load stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/animPicker.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.mainWin.setStyleSheet(self.style) self.mainWin.setMinimumSize(QtCore.QSize(400, 250)) self.mainWin.setMaximumSize(QtCore.QSize(400, 250)) self.mainWin.resize(400, 250) # set qt object name self.mainWin.setObjectName("pyART_SelectControlsWIN") self.mainWin.setWindowTitle("Select Rig Controls") self.layout = QtWidgets.QHBoxLayout() self.mainLayout.addLayout(self.layout) # LEFT SIDE # list of modules self.moduleList = QtWidgets.QListWidget() self.moduleList.setMinimumSize(QtCore.QSize(180, 230)) self.moduleList.setMaximumSize(QtCore.QSize(180, 230)) self.layout.addWidget(self.moduleList) self.moduleList.setSelectionMode( QtWidgets.QAbstractItemView.MultiSelection) self.moduleList.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.moduleList.customContextMenuRequested.connect( self.createContextMenu) # RIGHT SIDE self.rightLayout = QtWidgets.QVBoxLayout() self.layout.addLayout(self.rightLayout) # character combo self.characterCombo = QtWidgets.QComboBox() self.rightLayout.addWidget(self.characterCombo) self.characterCombo.setMinimumSize(QtCore.QSize(180, 60)) self.characterCombo.setMaximumSize(QtCore.QSize(180, 60)) self.characterCombo.setIconSize(QtCore.QSize(50, 50)) self.characterCombo.currentIndexChanged.connect( partial(self.findCharacterModules)) # select options self.fkControlsCB = QtWidgets.QCheckBox("FK Controls") self.fkControlsCB.setChecked(True) self.fkControlsCB.setToolTip( "If this is checked, for the selected modules,\nall FK controls will be selected or added to the selection." ) self.rightLayout.addWidget(self.fkControlsCB) self.ikControlsCB = QtWidgets.QCheckBox("IK Controls") self.ikControlsCB.setChecked(True) self.ikControlsCB.setToolTip( "If this is checked, for the selected modules,\nall IK controls will be selected or added to the selection." ) self.rightLayout.addWidget(self.ikControlsCB) self.specialControlsCB = QtWidgets.QCheckBox("Special Controls") self.specialControlsCB.setChecked(True) self.specialControlsCB.setToolTip( "If this is checked, for the selected modules,\nany control that is not FK or IK (like dynamics for example),\nwill be selected or added to the selection." ) self.rightLayout.addWidget(self.specialControlsCB) self.selectSettingsCB = QtWidgets.QCheckBox("Include Settings") self.selectSettingsCB.setChecked(True) self.selectSettingsCB.setToolTip( "If this is checked, for the selected modules,\nall settings nodes will be included in the selection." ) self.rightLayout.addWidget(self.selectSettingsCB) self.selectSpacesCB = QtWidgets.QCheckBox("Include Spaces") self.selectSpacesCB.setChecked(True) self.selectSpacesCB.setToolTip( "If this is checked, for the selected modules,\nall space switching nodes will be included in the selection." ) self.rightLayout.addWidget(self.selectSpacesCB) self.rightLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)) self.selectCtrlsBtn = QtWidgets.QPushButton("Select Controls") self.selectCtrlsBtn.setMinimumWidth(180) self.selectCtrlsBtn.setMaximumWidth(180) self.rightLayout.addWidget(self.selectCtrlsBtn) self.selectCtrlsBtn.setObjectName("blueButton") self.selectCtrlsBtn.clicked.connect(self.selectControls) # show window if self.showUI: self.mainWin.show() # populate UI self.findCharacters() self.findCharacterModules()
def __init__(self, rigUiInst, parent=None): #call base class constructor super(WeightWizard, self).__init__(parent) #get the directory path of the tools settings = QtCore.QSettings("Epic Games", "ARTv2") self.toolsPath = settings.value("toolsPath") self.iconsPath = settings.value("iconPath") #store rigUiInst in class self.rigUiInst = rigUiInst #set size policy mainSizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) #create the main widget self.mainWidget = QtWidgets.QWidget() self.setCentralWidget(self.mainWidget) #load toolbar stylesheet styleSheetFile = utils.returnNicePath( self.toolsPath, "Core/Scripts/Interfaces/StyleSheets/mainScheme.qss") f = open(styleSheetFile, "r") self.style = f.read() f.close() self.setStyleSheet(self.style) #set qt object name self.setObjectName(windowObject) self.setWindowTitle(windowTitle) #create the mainLayout for the rig creator UI self.layout = QtWidgets.QVBoxLayout(self.mainWidget) self.resize(600, 400) self.setSizePolicy(mainSizePolicy) self.setMinimumSize(QtCore.QSize(600, 400)) self.setMaximumSize(QtCore.QSize(600, 400)) #Create a stackedWidget self.stackWidget = QtWidgets.QStackedWidget() self.layout.addWidget(self.stackWidget) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #PAGE ONE: SKIN PROXY GEO # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # self.page1 = QtWidgets.QFrame() self.page1.setObjectName("dark") self.stackWidget.addWidget(self.page1) self.page1MainLayout = QtWidgets.QVBoxLayout(self.page1) #label pageOneLabel = QtWidgets.QLabel("Skin Weight Proxy Geometry?") pageOneLabel.setStyleSheet("background: transparent;") self.page1MainLayout.addWidget(pageOneLabel) font = QtGui.QFont() font.setPointSize(12) font.setBold(True) pageOneLabel.setFont(font) #image self.pageOneInfo = QtWidgets.QFrame() self.pageOneInfo.setMinimumSize(QtCore.QSize(560, 250)) self.pageOneInfo.setMaximumSize(QtCore.QSize(560, 250)) self.page1MainLayout.addWidget(self.pageOneInfo) image = utils.returnNicePath(self.iconsPath, "System/weightProxy.png") self.pageOneInfo.setStyleSheet("background-image: url(" + image + ");") #buttons self.pageOneButtonLayout = QtWidgets.QHBoxLayout() self.page1MainLayout.addLayout(self.pageOneButtonLayout) self.skinProxyFalseBtn = QtWidgets.QPushButton("No") self.skinProxyFalseBtn.setMinimumHeight(50) self.skinProxyFalseBtn.setFont(font) self.skinProxyTrueBtn = QtWidgets.QPushButton("Yes") self.skinProxyTrueBtn.setMinimumHeight(50) self.skinProxyTrueBtn.setFont(font) self.pageOneButtonLayout.addWidget(self.skinProxyFalseBtn) self.pageOneButtonLayout.addWidget(self.skinProxyTrueBtn) self.skinProxyFalseBtn.setObjectName("blueButton") self.skinProxyTrueBtn.setObjectName("blueButton") #button hookups self.skinProxyFalseBtn.clicked.connect(self.checkForCustomMeshes) self.skinProxyTrueBtn.clicked.connect(self.skinProxyGeo) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #PAGE TWO: NO CUSTOM GEO FOUND # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # self.page2 = QtWidgets.QFrame() self.stackWidget.addWidget(self.page2) self.page2MainLayout = QtWidgets.QVBoxLayout(self.page2) self.page2.setObjectName("dark") #label pageTwoLabel = QtWidgets.QLabel("Skin Weight Custom Geometry?") self.page2MainLayout.addWidget(pageTwoLabel) font = QtGui.QFont() font.setPointSize(12) font.setBold(True) pageTwoLabel.setFont(font) #image self.pageTwoInfo = QtWidgets.QFrame() self.pageTwoInfo.setMinimumSize(QtCore.QSize(560, 250)) self.pageTwoInfo.setMaximumSize(QtCore.QSize(560, 250)) self.page2MainLayout.addWidget(self.pageTwoInfo) image = utils.returnNicePath(self.iconsPath, "System/geoNotFound.png") self.pageTwoInfo.setStyleSheet("background-image: url(" + image + ");") #buttons self.pageTwoButtonLayout = QtWidgets.QHBoxLayout() self.page2MainLayout.addLayout(self.pageTwoButtonLayout) self.skipStepButton = QtWidgets.QPushButton("Skip This Step") self.skipStepButton.setMinimumHeight(50) self.skipStepButton.setFont(font) self.addMeshesButton = QtWidgets.QPushButton("Add Meshes") self.addMeshesButton.setMinimumHeight(50) self.addMeshesButton.setFont(font) self.pageTwoButtonLayout.addWidget(self.skipStepButton) self.pageTwoButtonLayout.addWidget(self.addMeshesButton) self.addMeshesButton.setObjectName("blueButton") self.skipStepButton.setObjectName("blueButton") #connect button self.skipStepButton.clicked.connect(self.closeWizard) self.addMeshesButton.clicked.connect(self.addCustomMeshes) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #PAGE THREE: SKIN CUSTOM GEO # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # self.page3 = QtWidgets.QFrame() self.stackWidget.addWidget(self.page3) self.page3MainLayout = QtWidgets.QVBoxLayout(self.page3) self.page3.setObjectName("dark") #label pageThreeLabel = QtWidgets.QLabel("Skin Weight Custom Geometry?") self.page3MainLayout.addWidget(pageThreeLabel) font = QtGui.QFont() font.setPointSize(12) font.setBold(True) pageThreeLabel.setFont(font) #image self.pageThreeInfo = QtWidgets.QFrame() self.pageThreeInfo.setMinimumSize(QtCore.QSize(560, 250)) self.pageThreeInfo.setMaximumSize(QtCore.QSize(560, 250)) self.page3MainLayout.addWidget(self.pageThreeInfo) image = utils.returnNicePath(self.iconsPath, "System/skinCustom.png") self.pageThreeInfo.setStyleSheet("background-image: url(" + image + ");") #buttons self.pageThreeButtonLayout = QtWidgets.QHBoxLayout() self.page3MainLayout.addLayout(self.pageThreeButtonLayout) self.skinGeoFalseBtn = QtWidgets.QPushButton("No") self.skinGeoFalseBtn.setMinimumHeight(50) self.skinGeoFalseBtn.setFont(font) self.skinGeoTrueBtn = QtWidgets.QPushButton("Yes") self.skinGeoTrueBtn.setMinimumHeight(50) self.skinGeoTrueBtn.setFont(font) self.pageThreeButtonLayout.addWidget(self.skinGeoFalseBtn) self.pageThreeButtonLayout.addWidget(self.skinGeoTrueBtn) self.skinGeoTrueBtn.setObjectName("blueButton") self.skinGeoFalseBtn.setObjectName("blueButton") #connect buttons self.skinGeoTrueBtn.clicked.connect(self.skinTools) self.skinGeoFalseBtn.clicked.connect(self.closeWizard) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #PAGE FOUR: SKIN TOOLS # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # self.page4 = QtWidgets.QFrame() self.stackWidget.addWidget(self.page4) self.page4TopLayout = QtWidgets.QVBoxLayout(self.page4) self.page4.setObjectName("dark") self.page4MainLayout = QtWidgets.QHBoxLayout() self.page4TopLayout.addLayout(self.page4MainLayout) #vertical layout for lists self.page4VerticalLayout = QtWidgets.QVBoxLayout() self.page4MainLayout.addLayout(self.page4VerticalLayout) #list widgets for meshes/joints self.splitter = QtWidgets.QSplitter() self.page4VerticalLayout.addWidget(self.splitter) #add geo list widget self.geoLayoutWidget = QtWidgets.QWidget() self.geoLayout = QtWidgets.QVBoxLayout(self.geoLayoutWidget) label = QtWidgets.QLabel("Skinnable Geo:") label.setFont(font) self.geoLayout.addWidget(label) self.geoList = QtWidgets.QListWidget() self.geoLayout.addWidget(self.geoList) self.splitter.addWidget(self.geoLayoutWidget) #populate geo list skinnableGeo = self.findCustomGeo() for geo in skinnableGeo: self.geoList.addItem(geo) #geo list signals self.geoList.itemDoubleClicked.connect(self.selectGeo) #add joint list/layout self.splitterWidget = QtWidgets.QWidget() self.splitter.addWidget(self.splitterWidget) self.splitterLayout = QtWidgets.QVBoxLayout(self.splitterWidget) self.search = QtWidgets.QLineEdit() self.search.setPlaceholderText("Search...") self.splitterLayout.addWidget(self.search) self.jointList = QtWidgets.QListWidget() self.jointList.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection) self.splitterLayout.addWidget(self.jointList) #populate joint list joints = self.findJoints() for joint in joints: self.jointList.addItem(joint) #search bar self.search.textChanged.connect(self.searchJoints) #add bottom layout for options/filters self.bottomLayout = QtWidgets.QHBoxLayout() self.bottomLayoutFrame = QtWidgets.QFrame() self.bottomLayoutFrame.setObjectName("dark") self.bottomLayoutFrame.setMaximumHeight(70) self.bottomLayout.addWidget(self.bottomLayoutFrame) self.optionsLayout = QtWidgets.QHBoxLayout(self.bottomLayoutFrame) self.page4VerticalLayout.addLayout(self.bottomLayout) #add bottom options/smooth bind (max influences, maintain max, dropoff rate #MAX INFLUENCES self.maxInfluenceLayout = QtWidgets.QVBoxLayout() self.optionsLayout.addLayout(self.maxInfluenceLayout) label = QtWidgets.QLabel("Max Influences: ") label.setMaximumHeight(20) label.setStyleSheet("color: rgb(25,175,255); background:transparent;") self.maxInfluenceLayout.addWidget(label) self.maxInfOptionsLayout = QtWidgets.QHBoxLayout() self.maxInfluenceLayout.addLayout(self.maxInfOptionsLayout) self.maxInfluences = QtWidgets.QSlider() self.maxInfluences.setRange(1, 8) self.maxInfluences.setSingleStep(1) self.maxInfluences.setPageStep(1) self.maxInfluences.setOrientation(QtCore.Qt.Horizontal) self.maxInfOptionsLayout.addWidget(self.maxInfluences) self.maxInfluencesReadout = QtWidgets.QSpinBox() self.maxInfOptionsLayout.addWidget(self.maxInfluencesReadout) self.maxInfluencesReadout.setReadOnly(True) self.maxInfluencesReadout.setButtonSymbols( QtWidgets.QAbstractSpinBox.NoButtons) self.maxInfluences.valueChanged.connect( self.maxInfluencesReadout.setValue) #DROPOFF RATE self.dropoffRateLayout = QtWidgets.QVBoxLayout() self.optionsLayout.addLayout(self.dropoffRateLayout) label2 = QtWidgets.QLabel("Dropoff Rate:") label2.setMaximumHeight(20) label2.setStyleSheet("color: rgb(25,175,255); background:transparent;") self.dropoffRateLayout.addWidget(label2) self.dropRateOptionsLayout = QtWidgets.QHBoxLayout() self.dropoffRateLayout.addLayout(self.dropRateOptionsLayout) self.dropoffRate = QtWidgets.QSlider() self.dropoffRate.setRange(.1, 100) self.dropoffRate.setSingleStep(.1) self.dropoffRate.setPageStep(1) self.dropoffRate.setOrientation(QtCore.Qt.Horizontal) self.dropRateOptionsLayout.addWidget(self.dropoffRate) self.dropoffReadout = QtWidgets.QSpinBox() self.dropRateOptionsLayout.addWidget(self.dropoffReadout) self.dropoffReadout.setReadOnly(True) self.dropoffReadout.setButtonSymbols( QtWidgets.QAbstractSpinBox.NoButtons) self.dropoffRate.valueChanged.connect(self.dropoffReadout.setValue) #MAINTAIN MAX self.maintainMaxInf = QtWidgets.QPushButton("Maintain Max Influences") self.optionsLayout.addWidget(self.maintainMaxInf) self.maintainMaxInf.setMinimumWidth(160) self.maintainMaxInf.setCheckable(True) self.maintainMaxInf.setChecked(True) self.maintainMaxInf.clicked.connect( partial(self.toggleButtonState, self.maintainMaxInf)) self.maintainMaxInf.setObjectName("blueButton") #button layout self.buttonLayout = QtWidgets.QVBoxLayout() self.optionsLayout.addLayout(self.buttonLayout) #SMOOTH BIND self.smoothBind = QtWidgets.QPushButton("Smooth Bind") self.smoothBind.setMinimumWidth(150) self.smoothBind.setMinimumHeight(30) self.buttonLayout.addWidget(self.smoothBind) self.smoothBind.clicked.connect(self.smoothBindSelected) self.smoothBind.setObjectName("blueButton") #CLOSE self.closeBtn = QtWidgets.QPushButton("Close") self.closeBtn.setMinimumWidth(150) self.closeBtn.setMinimumHeight(30) self.buttonLayout.addWidget(self.closeBtn) self.closeBtn.clicked.connect(self.closeWizard) self.closeBtn.setObjectName("blueButton") #set values self.dropoffRate.setValue(4) self.maxInfluences.setValue(4) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #PAGE FIVE: SKIN WEIGHTS FOUND # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # self.page5 = QtWidgets.QFrame() self.page5.setObjectName("dark") self.stackWidget.addWidget(self.page5) self.page5MainLayout = QtWidgets.QVBoxLayout(self.page5) #label pageFiveLabel = QtWidgets.QLabel( "Skin Weights Found For These Meshes:") self.page5MainLayout.addWidget(pageFiveLabel) font = QtGui.QFont() font.setPointSize(12) font.setBold(True) pageFiveLabel.setFont(font) #columnLayout self.page5ColumnLayout = QtWidgets.QHBoxLayout() self.page5MainLayout.addLayout(self.page5ColumnLayout) #left column has list widget of meshes self.page5MeshList = QtWidgets.QListWidget() self.page5ColumnLayout.addWidget(self.page5MeshList) self.page5MeshList.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection) self.page5MeshList.setMinimumWidth(250) self.page5MeshList.setMaximumWidth(250) #right column has import method, and import/do not import buttons self.page5VerticalLayout = QtWidgets.QVBoxLayout() self.page5ColumnLayout.addLayout(self.page5VerticalLayout) layout = QtWidgets.QHBoxLayout() self.page5VerticalLayout.addLayout(layout) label = QtWidgets.QLabel("Import Method: ") label.setStyleSheet("background: transparent;") layout.addWidget(label) layout.setSpacing(10) label.setMinimumWidth(130) label.setMaximumWidth(130) self.page5ImportOptions = QtWidgets.QComboBox() self.page5ImportOptions.addItem("Vertex Order") self.page5ImportOptions.addItem("World Position") self.page5ImportOptions.addItem("Local Position") self.page5ImportOptions.addItem("UV Position") layout.addWidget(self.page5ImportOptions) self.page5ImportOptions.setMinimumWidth(155) self.page5ImportOptions.setMaximumWidth(155) self.page5VerticalLayout.addSpacerItem( QtWidgets.QSpacerItem(0, 200, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed)) self.page5ImportWeights = QtWidgets.QPushButton("Import Weights") self.page5ImportWeights.setMinimumHeight(50) self.page5ImportWeights.setFont(font) self.page5VerticalLayout.addWidget(self.page5ImportWeights) self.page5ImportWeights.clicked.connect(partial(self.importWeights)) self.page5ImportWeights.setObjectName("blueButton") self.page5IgnoreWeights = QtWidgets.QPushButton("Skip") self.page5IgnoreWeights.setMinimumHeight(50) self.page5IgnoreWeights.setFont(font) self.page5VerticalLayout.addWidget(self.page5IgnoreWeights) self.page5IgnoreWeights.clicked.connect(partial(self.skipWeightImport)) self.page5IgnoreWeights.setObjectName("blueButton")