示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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")
示例#4
0
    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()
示例#5
0
    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()
示例#7
0
    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()
示例#8
0
    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)
示例#9
0
    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()
示例#10
0
    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()
示例#11
0
    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()
示例#12
0
    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")