clean up the codes in thummbnail and preview animation extractor

This commit is contained in:
Kayla Man 2023-10-12 13:50:31 +08:00
parent 835a256cc2
commit 7035e1e014
3 changed files with 59 additions and 31 deletions

View file

@ -322,7 +322,7 @@ def is_headless():
@contextlib.contextmanager
def viewport_camera(camera):
def viewport_setup_updated(camera):
original = rt.viewport.getCamera()
has_autoplay = rt.preferences.playPreviewWhenDone
if not original:
@ -339,6 +339,36 @@ def viewport_camera(camera):
rt.preferences.playPreviewWhenDone = has_autoplay
@contextlib.contextmanager
def viewport_setup(viewport_setting, visual_style, camera):
"""Function to set visual style options
Args:
visual_style (str): visual style for active viewport
Returns:
list: the argument which can set visual style
"""
original = rt.viewport.getCamera()
has_autoplay = rt.preferences.playPreviewWhenDone
if not original:
# if there is no original camera
# use the current camera as original
original = rt.getNodeByName(camera)
review_camera = rt.getNodeByName(camera)
current_setting = viewport_setting.VisualStyleMode
try:
rt.viewport.setCamera(review_camera)
viewport_setting.VisualStyleMode = rt.Name(
visual_style)
rt.preferences.playPreviewWhenDone = False
yield
finally:
rt.viewport.setCamera(original)
viewport_setting.VisualStyleMode = current_setting
rt.preferences.playPreviewWhenDone = has_autoplay
def set_timeline(frameStart, frameEnd):
"""Set frame range for timeline editor in Max
"""

View file

@ -4,7 +4,8 @@ import pyblish.api
from pymxs import runtime as rt
from openpype.pipeline import publish
from openpype.hosts.max.api.lib import (
viewport_camera,
viewport_setup_updated,
viewport_setup,
get_max_version,
set_preview_arg
)
@ -38,7 +39,7 @@ class ExtractReviewAnimation(publish.Extractor):
review_camera = instance.data["review_camera"]
if get_max_version() >= 2024:
with viewport_camera(review_camera):
with viewport_setup_updated(review_camera):
preview_arg = set_preview_arg(
instance, filepath, start, end, fps)
rt.execute(preview_arg)
@ -46,10 +47,10 @@ class ExtractReviewAnimation(publish.Extractor):
visual_style_preset = instance.data.get("visualStyleMode")
nitrousGraphicMgr = rt.NitrousGraphicsManager
viewport_setting = nitrousGraphicMgr.GetActiveViewportSetting()
with viewport_camera(review_camera) and (
self._visual_style_option(
viewport_setting, visual_style_preset)
):
with viewport_setup(
viewport_setting,
visual_style_preset,
review_camera):
viewport_setting.VisualStyleMode = rt.Name(
visual_style_preset)
preview_arg = set_preview_arg(
@ -87,22 +88,3 @@ class ExtractReviewAnimation(publish.Extractor):
file_list.append(actual_name)
return file_list
@contextlib.contextmanager
def _visual_style_option(self, viewport_setting, visual_style):
"""Function to set visual style options
Args:
visual_style (str): visual style for active viewport
Returns:
list: the argument which can set visual style
"""
current_setting = viewport_setting.VisualStyleMode
if visual_style != current_setting:
try:
viewport_setting.VisualStyleMode = rt.Name(
visual_style)
yield
finally:
viewport_setting.VisualStyleMode = current_setting

View file

@ -4,12 +4,14 @@ import pyblish.api
from pymxs import runtime as rt
from openpype.pipeline import publish
from openpype.hosts.max.api.lib import (
viewport_camera,
viewport_setup_updated,
viewport_setup,
get_max_version,
set_preview_arg
)
class ExtractThumbnail(publish.Extractor):
"""
Extract Thumbnail for Review
@ -39,10 +41,24 @@ class ExtractThumbnail(publish.Extractor):
"Writing Thumbnail to"
" '%s' to '%s'" % (filename, tmp_staging))
review_camera = instance.data["review_camera"]
with viewport_camera(review_camera):
preview_arg = set_preview_arg(
instance, filepath, fps, frame)
rt.execute(preview_arg)
if get_max_version() >= 2024:
with viewport_setup_updated(review_camera):
preview_arg = set_preview_arg(
instance, filepath, frame, frame, fps)
rt.execute(preview_arg)
else:
visual_style_preset = instance.data.get("visualStyleMode")
nitrousGraphicMgr = rt.NitrousGraphicsManager
viewport_setting = nitrousGraphicMgr.GetActiveViewportSetting()
with viewport_setup(
viewport_setting,
visual_style_preset,
review_camera):
viewport_setting.VisualStyleMode = rt.Name(
visual_style_preset)
preview_arg = set_preview_arg(
instance, filepath, frame, frame, fps)
rt.execute(preview_arg)
representation = {
"name": "thumbnail",