From 9a7412d964c571be47443ac6b44c622482e4b42d Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Thu, 11 Jun 2020 23:37:14 +0100 Subject: [PATCH 1/5] Ensure scene settings on application launch. --- pype/hosts/harmony/__init__.py | 42 ++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pype/hosts/harmony/__init__.py b/pype/hosts/harmony/__init__.py index 765dcb9e72..22d70b179d 100644 --- a/pype/hosts/harmony/__init__.py +++ b/pype/hosts/harmony/__init__.py @@ -1,7 +1,46 @@ import os +import time from avalon import api, harmony import pyblish.api +from pype import lib + + +def ensure_scene_settings(): + fps = lib.get_asset()["data"]["fps"] + frame_start = lib.get_asset()["data"]["frameStart"] + frame_end = lib.get_asset()["data"]["frameEnd"] + + settings = { + "setFrameRate": fps, + "setStartFrame": frame_start, + "setStopFrame": frame_end + } + func = """function func(arg) + {{ + scene.{method}(arg); + }} + func + """ + for key, value in settings.items(): + if value is None: + continue + + # Need to wait to not spam Harmony with multiple requests at the same + # time. + time.sleep(1) + + harmony.send({"function": func.format(method=key), "args": [value]}) + + time.sleep(1) + + func = """function func(arg) + { + frame.remove(arg, frame.numberOf() - arg); + } + func + """ + harmony.send({"function": func, "args": [frame_end]}) def install(): @@ -23,10 +62,13 @@ def install(): api.Creator, os.path.join(plugins_directory, "create") ) + # Register callbacks. pyblish.api.register_callback( "instanceToggled", on_pyblish_instance_toggled ) + api.on("application.launched", ensure_scene_settings) + def on_pyblish_instance_toggled(instance, old_value, new_value): """Toggle node enabling on instance toggles.""" From f5b02d3374c7ff12d0ce4a7a65c558b3ba010e75 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 12 Jun 2020 11:24:41 +0100 Subject: [PATCH 2/5] Improve ensuring scene setting - only one call to Harmony - message box for missing attributes - resolution attributes. --- pype/hosts/harmony/__init__.py | 75 ++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/pype/hosts/harmony/__init__.py b/pype/hosts/harmony/__init__.py index 22d70b179d..df9485b4c7 100644 --- a/pype/hosts/harmony/__init__.py +++ b/pype/hosts/harmony/__init__.py @@ -1,46 +1,79 @@ import os import time +import sys from avalon import api, harmony +from avalon.vendor import Qt import pyblish.api from pype import lib def ensure_scene_settings(): - fps = lib.get_asset()["data"]["fps"] - frame_start = lib.get_asset()["data"]["frameStart"] - frame_end = lib.get_asset()["data"]["frameEnd"] + asset_data = lib.get_asset()["data"] + fps = asset_data["fps"] + frame_start = asset_data["frameStart"] + frame_end = asset_data["frameEnd"] + resolution_width = asset_data.get("resolutionWidth") + resolution_height = asset_data.get("resolutionHeight") settings = { - "setFrameRate": fps, - "setStartFrame": frame_start, - "setStopFrame": frame_end + "fps": fps, + "frameStart": frame_start, + "frameEnd": frame_end, + "resolutionWidth": resolution_width, + "resolutionHeight": resolution_height } - func = """function func(arg) - {{ - scene.{method}(arg); - }} - func - """ + + invalid_settings = [] + valid_settings = {} for key, value in settings.items(): if value is None: - continue + invalid_settings.append(key) + else: + valid_settings[key] = value - # Need to wait to not spam Harmony with multiple requests at the same - # time. - time.sleep(1) + # Warn about missing attributes. + print("Starting new QApplication..") + app = Qt.QtWidgets.QApplication(sys.argv) - harmony.send({"function": func.format(method=key), "args": [value]}) + message_box = Qt.QtWidgets.QMessageBox() + message_box.setIcon(Qt.QtWidgets.QMessageBox.Warning) + msg = "Missing attributes:" + if invalid_settings: + for item in invalid_settings: + msg += f"\n{item}" + message_box.setText(msg) + message_box.exec_() - time.sleep(1) + # Garbage collect QApplication. + del app - func = """function func(arg) + func = """function func(args) { - frame.remove(arg, frame.numberOf() - arg); + if (args["fps"]) + { + scene.setFrameRate(); + } + if (args["frameStart"]) + { + scene.setStartFrame(args[1]); + } + if (args["frameEnd"]) + { + scene.setStopFrame(args[2]); + frame.remove(args[2], frame.numberOf() - args[2]); + } + if (args["resolutionWidth"] && args["resolutionHeight"]) + { + scene.setDefaultResolution( + args["resolutionWidth"], args["resolutionHeight"], 41.112 + ) + } } func """ - harmony.send({"function": func, "args": [frame_end]}) + + harmony.send({"function": func, "args": [valid_settings]}) def install(): From a0cce6522976095a6f22c968c5700548ed444128 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 12 Jun 2020 11:25:13 +0100 Subject: [PATCH 3/5] Hound --- pype/hosts/harmony/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pype/hosts/harmony/__init__.py b/pype/hosts/harmony/__init__.py index df9485b4c7..48967b0a0f 100644 --- a/pype/hosts/harmony/__init__.py +++ b/pype/hosts/harmony/__init__.py @@ -1,5 +1,4 @@ import os -import time import sys from avalon import api, harmony From a59c2225d53541a835a6883cac35a81680b5f9b4 Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Fri, 12 Jun 2020 11:46:32 +0100 Subject: [PATCH 4/5] Fix harmony request. --- pype/hosts/harmony/__init__.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/pype/hosts/harmony/__init__.py b/pype/hosts/harmony/__init__.py index 48967b0a0f..6cc5d50eb6 100644 --- a/pype/hosts/harmony/__init__.py +++ b/pype/hosts/harmony/__init__.py @@ -49,29 +49,30 @@ def ensure_scene_settings(): func = """function func(args) { - if (args["fps"]) + if (args[0]["fps"]) { - scene.setFrameRate(); + scene.setFrameRate(args[0]["fps"]); } - if (args["frameStart"]) + if (args[0]["frameStart"]) { - scene.setStartFrame(args[1]); + scene.setStartFrame(args[0]["frameStart"]); } - if (args["frameEnd"]) + if (args[0]["frameEnd"]) { - scene.setStopFrame(args[2]); - frame.remove(args[2], frame.numberOf() - args[2]); + scene.setStopFrame(args[0]["frameEnd"]); + frame.remove( + args[0]["frameEnd"], frame.numberOf() - args[0]["frameEnd"] + ); } - if (args["resolutionWidth"] && args["resolutionHeight"]) + if (args[0]["resolutionWidth"] && args[0]["resolutionHeight"]) { scene.setDefaultResolution( - args["resolutionWidth"], args["resolutionHeight"], 41.112 + args[0]["resolutionWidth"], args[0]["resolutionHeight"], 41.112 ) } } func """ - harmony.send({"function": func, "args": [valid_settings]}) From 703c8bacb33f1574c234de75e1b1a4fec20a7a8e Mon Sep 17 00:00:00 2001 From: Toke Stuart Jepsen Date: Mon, 15 Jun 2020 16:56:47 +0100 Subject: [PATCH 5/5] Fix scene settings. --- pype/hosts/harmony/__init__.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/pype/hosts/harmony/__init__.py b/pype/hosts/harmony/__init__.py index 6cc5d50eb6..cdb8b40777 100644 --- a/pype/hosts/harmony/__init__.py +++ b/pype/hosts/harmony/__init__.py @@ -9,9 +9,9 @@ from pype import lib def ensure_scene_settings(): asset_data = lib.get_asset()["data"] - fps = asset_data["fps"] - frame_start = asset_data["frameStart"] - frame_end = asset_data["frameEnd"] + fps = asset_data.get("fps") + frame_start = asset_data.get("frameStart") + frame_end = asset_data.get("frameEnd") resolution_width = asset_data.get("resolutionWidth") resolution_height = asset_data.get("resolutionHeight") @@ -53,16 +53,24 @@ def ensure_scene_settings(): { scene.setFrameRate(args[0]["fps"]); } - if (args[0]["frameStart"]) + if (args[0]["frameStart"] && args[0]["frameEnd"]) { - scene.setStartFrame(args[0]["frameStart"]); - } - if (args[0]["frameEnd"]) - { - scene.setStopFrame(args[0]["frameEnd"]); - frame.remove( - args[0]["frameEnd"], frame.numberOf() - args[0]["frameEnd"] - ); + var duration = args[0]["frameEnd"] - args[0]["frameStart"] + 1 + if (frame.numberOf() > duration) + { + frame.remove( + duration, frame.numberOf() - duration + ); + } + if (frame.numberOf() < duration) + { + frame.insert( + duration, duration - frame.numberOf() + ); + } + + scene.setStartFrame(1); + scene.setStopFrame(duration); } if (args[0]["resolutionWidth"] && args[0]["resolutionHeight"]) {