From dbf75e1dfffd307e94dd66b055b8721b4bbafc01 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 30 Oct 2020 19:46:53 +0000 Subject: [PATCH 1/4] Ask user to select non-default camera from scene or create a new. --- pype/plugins/maya/load/load_image_plane.py | 97 ++++++++++++++++------ 1 file changed, 71 insertions(+), 26 deletions(-) diff --git a/pype/plugins/maya/load/load_image_plane.py b/pype/plugins/maya/load/load_image_plane.py index e17382f7ed..bbd80424d8 100644 --- a/pype/plugins/maya/load/load_image_plane.py +++ b/pype/plugins/maya/load/load_image_plane.py @@ -4,14 +4,70 @@ import maya.cmds as cmds from avalon import api, io from avalon.maya.pipeline import containerise from avalon.maya import lib -from Qt import QtWidgets +from Qt import QtWidgets, QtCore + + +class CameraWindow(QtWidgets.QDialog): + + def __init__(self, cameras): + super(CameraWindow, self).__init__() + self.setWindowFlags(self.windowFlags() | QtCore.Qt.FramelessWindowHint) + + self.camera = None + + self.widgets = { + "label": QtWidgets.QLabel("Select camera for image plane."), + "list": QtWidgets.QListWidget(), + "warning": QtWidgets.QLabel("No cameras selected!"), + "buttons": QtWidgets.QWidget(), + "okButton": QtWidgets.QPushButton("Ok"), + "cancelButton": QtWidgets.QPushButton("Cancel") + } + + # Build warning. + self.widgets["warning"].setVisible(False) + self.widgets["warning"].setStyleSheet("color: red") + + # Build list. + for camera in cameras: + self.widgets["list"].addItem(camera) + + # Build buttons. + layout = QtWidgets.QHBoxLayout(self.widgets["buttons"]) + layout.addWidget(self.widgets["okButton"]) + layout.addWidget(self.widgets["cancelButton"]) + + # Build layout. + layout = QtWidgets.QVBoxLayout(self) + layout.addWidget(self.widgets["label"]) + layout.addWidget(self.widgets["list"]) + layout.addWidget(self.widgets["buttons"]) + layout.addWidget(self.widgets["warning"]) + + self.widgets["okButton"].pressed.connect(self.on_ok_pressed) + self.widgets["cancelButton"].pressed.connect(self.on_cancel_pressed) + self.widgets["list"].itemPressed.connect(self.on_list_itemPressed) + + def on_list_itemPressed(self, item): + self.camera = item.text() + + def on_ok_pressed(self): + if self.camera is None: + self.widgets["warning"].setVisible(True) + return + + self.close() + + def on_cancel_pressed(self): + self.camera = None + self.close() class ImagePlaneLoader(api.Loader): """Specific loader of plate for image planes on selected camera.""" families = ["plate", "render"] - label = "Create imagePlane on selected camera." + label = "Load imagePlane." representations = ["mov", "exr", "preview", "png"] icon = "image" color = "orange" @@ -26,21 +82,22 @@ class ImagePlaneLoader(api.Loader): suffix="_", ) - # Getting camera from selection. - selection = pc.ls(selection=True) - + # Get camera from user selection. camera = None + default_cameras = [ + "frontShape", "perspShape", "sideShape", "topShape" + ] + cameras = [ + x for x in pc.ls(type="camera") if x.name() not in default_cameras + ] - if len(selection) > 1: - QtWidgets.QMessageBox.critical( - None, - "Error!", - "Multiple nodes selected. Please select only one.", - QtWidgets.QMessageBox.Ok - ) - return + if cameras: + camera_names = {x.getParent().name(): x for x in cameras} + window = CameraWindow(camera_names.keys()) + window.exec_() + camera = camera_names[window.camera] - if len(selection) < 1: + if camera is None: result = QtWidgets.QMessageBox.critical( None, "Error!", @@ -52,18 +109,6 @@ class ImagePlaneLoader(api.Loader): camera = pc.createNode("camera") else: return - else: - relatives = pc.listRelatives(selection[0], shapes=True) - if pc.ls(relatives, type="camera"): - camera = selection[0] - else: - QtWidgets.QMessageBox.critical( - None, - "Error!", - "Selected node is not a camera.", - QtWidgets.QMessageBox.Ok - ) - return try: camera.displayResolution.set(1) From 74d214ad3f8ba7baed8ea8fe27f604b4c067d04d Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 31 Oct 2020 09:21:35 +0000 Subject: [PATCH 2/4] Reduce dialogs to one. --- pype/plugins/maya/load/load_image_plane.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/pype/plugins/maya/load/load_image_plane.py b/pype/plugins/maya/load/load_image_plane.py index bbd80424d8..fd92984114 100644 --- a/pype/plugins/maya/load/load_image_plane.py +++ b/pype/plugins/maya/load/load_image_plane.py @@ -90,24 +90,16 @@ class ImagePlaneLoader(api.Loader): cameras = [ x for x in pc.ls(type="camera") if x.name() not in default_cameras ] + camera_names = {x.getParent().name(): x for x in cameras} + camera_names["Create new camera."] = "create_camera" + window = CameraWindow(camera_names.keys()) + window.exec_() + camera = camera_names[window.camera] - if cameras: - camera_names = {x.getParent().name(): x for x in cameras} - window = CameraWindow(camera_names.keys()) - window.exec_() - camera = camera_names[window.camera] + if camera is "create_camera": + camera = pc.createNode("camera") if camera is None: - result = QtWidgets.QMessageBox.critical( - None, - "Error!", - "No camera selected. Do you want to create a camera?", - QtWidgets.QMessageBox.Ok, - QtWidgets.QMessageBox.Cancel - ) - if result == QtWidgets.QMessageBox.Ok: - camera = pc.createNode("camera") - else: return try: From 899f12087e49bff8b569d629902a072d3e81d82a Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 31 Oct 2020 09:22:29 +0000 Subject: [PATCH 3/4] Inform user about how many exr files are available to load. --- pype/plugins/maya/load/load_image_plane.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pype/plugins/maya/load/load_image_plane.py b/pype/plugins/maya/load/load_image_plane.py index fd92984114..c4718ba336 100644 --- a/pype/plugins/maya/load/load_image_plane.py +++ b/pype/plugins/maya/load/load_image_plane.py @@ -137,10 +137,16 @@ class ImagePlaneLoader(api.Loader): # Ensure OpenEXRLoader plugin is loaded. pc.loadPlugin("OpenEXRLoader.mll", quiet=True) + message = ( + "Hold image sequence on first frame?" + "\n{} files available.".format( + len(context["representation"]["files"]) + ) + ) reply = QtWidgets.QMessageBox.information( None, "Frame Hold.", - "Hold image sequence on first frame?", + message, QtWidgets.QMessageBox.Ok, QtWidgets.QMessageBox.Cancel ) From 19e86714a25a95eb8274b3731558b199d11995b7 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Sat, 31 Oct 2020 09:23:51 +0000 Subject: [PATCH 4/4] Hound fix --- pype/plugins/maya/load/load_image_plane.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pype/plugins/maya/load/load_image_plane.py b/pype/plugins/maya/load/load_image_plane.py index c4718ba336..1bb29e90c4 100644 --- a/pype/plugins/maya/load/load_image_plane.py +++ b/pype/plugins/maya/load/load_image_plane.py @@ -96,7 +96,7 @@ class ImagePlaneLoader(api.Loader): window.exec_() camera = camera_names[window.camera] - if camera is "create_camera": + if camera == "create_camera": camera = pc.createNode("camera") if camera is None: