Source code for Interfaces.ART_DebugRigs
"""
Author: Jeremy Ernst
"""
import os
from functools import partial
import System.riggingUtils as riggingUtils
import System.utils as utils
import maya.cmds as cmds
from ThirdParty.Qt import QtGui, QtCore, QtWidgets
[docs]class ART_DebugRigs():
"""
This class is used in developing rigs for modules and quickly testing them without having to go
through the entire build/publish process.
.. image:: /images/debugRigs.png
"""
[docs] def __init__(self, mainUI):
"""
Instantiate the class, getting the QSettings, and building the interface.
:param mainUI: The instance of the Rig Creator UI from which this class was called.
"""
# get the directory path of the tools
settings = QtCore.QSettings("Epic Games", "ARTv2")
self.toolsPath = settings.value("toolsPath")
self.iconsPath = settings.value("iconPath")
self.projectPath = settings.value("projectPath")
self.mainUI = mainUI
# images
self.imageBkgrd = utils.returnFriendlyPath(os.path.join(self.iconsPath, "System/toolbar_background.png"))
self.imageBtnBkrd = utils.returnFriendlyPath(os.path.join(self.iconsPath, "System/blue_field_background.png"))
self.frameBackground = utils.returnFriendlyPath(os.path.join(self.iconsPath, "System/field_background.png"))
# build the UI
if cmds.window("ART_DebugRigsWin", exists=True):
cmds.deleteUI("ART_DebugRigsWin", wnd=True)
self.buildUI()
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
[docs] def buildUI(self):
"""
Build the UI, listing all modules in the scene that make up the asset for the user to select and build rigs
for the selected.
"""
# create the main window
self.mainWin = 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.mainWin.setStyleSheet(self.style)
# create the main widget
self.mainWidget = QtWidgets.QWidget()
self.mainWin.setCentralWidget(self.mainWidget)
# set qt object name
self.mainWin.setObjectName("ART_DebugRigsWin")
self.mainWin.setWindowTitle("Build Rigs")
# font
headerFont = QtGui.QFont()
headerFont.setPointSize(8)
headerFont.setBold(True)
# set size policy
mainSizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
# create the mainLayout for the rig creator UI
self.layout = QtWidgets.QVBoxLayout(self.mainWidget)
self.mainWin.resize(400, 300)
self.mainWin.setSizePolicy(mainSizePolicy)
self.mainWin.setMinimumSize(QtCore.QSize(400, 300))
self.mainWin.setMaximumSize(QtCore.QSize(400, 300))
# create the QFrame for this page
self.background = QtWidgets.QFrame()
self.background.setObjectName("mid")
self.layout.addWidget(self.background)
self.mainLayout = QtWidgets.QHBoxLayout(self.background)
# create the list on the left and add the modules to the list
self.moduleList = QtWidgets.QListWidget()
self.mainLayout.addWidget(self.moduleList)
for mod in self.mainUI.moduleInstances:
item = QtWidgets.QListWidgetItem(mod.name)
item.setData(QtCore.Qt.UserRole, mod)
self.moduleList.addItem(item)
# create our buttons on the right
self.rightLayout = QtWidgets.QVBoxLayout()
self.mainLayout.addLayout(self.rightLayout)
infoText = "This tool is only for testing rigs in development. "
infoText += "It will leave behind nodes in your scene that you do NOT want to publish with. "
infoText += "When using this tool, it is advised to open a clean scene to publish your final asset."
self.info = QtWidgets.QLabel()
self.rightLayout.addWidget(self.info)
self.info.setWordWrap(True)
self.info.setMinimumSize(150, 125)
self.info.setMaximumSize(150, 125)
self.info.setText(infoText)
self.rightLayout.addSpacerItem(
QtWidgets.QSpacerItem(0, 200, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding))
self.buildButton = QtWidgets.QPushButton("Build Rigs For Selected")
self.buildButton.setObjectName("blueButton")
self.rightLayout.addWidget(self.buildButton)
self.buildButton.setMinimumSize(150, 40)
self.buildButton.setMaximumSize(150, 40)
self.buildButton.clicked.connect(partial(self.buildRigs))
self.deleteButton = QtWidgets.QPushButton("Remove Selected Rigs")
self.deleteButton.setObjectName("blueButton")
self.rightLayout.addWidget(self.deleteButton)
self.deleteButton.setMinimumSize(150, 40)
self.deleteButton.setMaximumSize(150, 40)
self.deleteButton.clicked.connect(partial(self.deleteRig))
self.closeButton = QtWidgets.QPushButton("Close")
self.closeButton.setObjectName("blueButton")
self.rightLayout.addWidget(self.closeButton)
self.closeButton.setMinimumSize(150, 40)
self.closeButton.setMaximumSize(150, 40)
self.closeButton.clicked.connect(partial(self.close))
self.mainWin.show()
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
[docs] def buildRigs(self):
"""
Builds the rigs for the selected module by calling on that module's buildRig function.
"""
data = self.moduleList.currentItem().data(QtCore.Qt.UserRole)
# call on inst build rigs functions
if not cmds.objExists("driver_root"):
riggingUtils.createDriverSkeleton()
data.buildRig(None, self.mainUI)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
[docs] def deleteRig(self):
"""
Deletes the rigs for the selected module by calling on that module's deleteRig function.
"""
data = self.moduleList.currentItem().data(QtCore.Qt.UserRole)
data.deleteRig()
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
[docs] def close(self):
"""
Close the interface and delete the window.
"""
if cmds.window("ART_DebugRigsWin", exists=True):
cmds.deleteUI("ART_DebugRigsWin", wnd=True)