mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 21:32:15 +01:00
add use selection back to the creator option & cleanup the viewport setting code
This commit is contained in:
parent
1ffd1f2fed
commit
c49289bb8a
4 changed files with 98 additions and 76 deletions
|
|
@ -323,7 +323,7 @@ def is_headless():
|
|||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def viewport_setup_updated(camera):
|
||||
def viewport_camera(camera):
|
||||
"""Function to set viewport camera during context
|
||||
***For 3dsMax 2024+
|
||||
Args:
|
||||
|
|
@ -346,64 +346,55 @@ def viewport_setup_updated(camera):
|
|||
|
||||
|
||||
@contextlib.contextmanager
|
||||
def viewport_setup(instance, viewport_setting, camera):
|
||||
"""Function to set camera and other viewport options
|
||||
during context
|
||||
****For Max Version < 2024
|
||||
|
||||
Args:
|
||||
instance (str): instance
|
||||
viewport_setting (str): active viewport setting
|
||||
camera (str): viewport camera
|
||||
|
||||
"""
|
||||
original = rt.viewport.getCamera()
|
||||
has_vp_btn = rt.ViewportButtonMgr.EnableButtons
|
||||
has_autoplay = rt.preferences.playPreviewWhenDone
|
||||
if not original:
|
||||
def viewport_preference_setting(camera,
|
||||
general_viewport,
|
||||
nitrous_viewport,
|
||||
vp_button_mgr,
|
||||
preview_preferences):
|
||||
original_camera = rt.viewport.getCamera()
|
||||
if not original_camera:
|
||||
# if there is no original camera
|
||||
# use the current camera as original
|
||||
original = rt.getNodeByName(camera)
|
||||
original_camera = rt.getNodeByName(camera)
|
||||
review_camera = rt.getNodeByName(camera)
|
||||
|
||||
current_visualStyle = viewport_setting.VisualStyleMode
|
||||
current_visualPreset = viewport_setting.ViewportPreset
|
||||
current_useTexture = viewport_setting.UseTextureEnabled
|
||||
orig_vp_grid = rt.viewport.getGridVisibility(1)
|
||||
orig_vp_bkg = rt.viewport.IsSolidBackgroundColorMode()
|
||||
|
||||
visualStyle = instance.data.get("visualStyleMode")
|
||||
viewportPreset = instance.data.get("viewportPreset")
|
||||
useTexture = instance.data.get("vpTexture")
|
||||
has_grid_viewport = instance.data.get("dspGrid")
|
||||
bkg_color_viewport = instance.data.get("dspBkg")
|
||||
|
||||
nitrousGraphicMgr = rt.NitrousGraphicsManager
|
||||
viewport_setting = nitrousGraphicMgr.GetActiveViewportSetting()
|
||||
vp_button_mgr_original = {
|
||||
key: getattr(rt.ViewportButtonMgr, key) for key in vp_button_mgr
|
||||
}
|
||||
nitrous_viewport_original = {
|
||||
key: getattr(viewport_setting, key) for key in nitrous_viewport
|
||||
}
|
||||
preview_preferences_original = {
|
||||
key: getattr(rt.preferences, key) for key in preview_preferences
|
||||
}
|
||||
try:
|
||||
rt.viewport.setCamera(review_camera)
|
||||
rt.viewport.setGridVisibility(1, has_grid_viewport)
|
||||
rt.preferences.playPreviewWhenDone = False
|
||||
rt.ViewportButtonMgr.EnableButtons = False
|
||||
rt.viewport.EnableSolidBackgroundColorMode(
|
||||
bkg_color_viewport)
|
||||
if visualStyle != current_visualStyle:
|
||||
viewport_setting.VisualStyleMode = rt.Name(
|
||||
visualStyle)
|
||||
elif viewportPreset != current_visualPreset:
|
||||
viewport_setting.ViewportPreset = rt.Name(
|
||||
viewportPreset)
|
||||
elif useTexture != current_useTexture:
|
||||
viewport_setting.UseTextureEnabled = useTexture
|
||||
rt.viewport.setGridVisibility(1, general_viewport["dspGrid"])
|
||||
rt.viewport.EnableSolidBackgroundColorMode(general_viewport["dspBkg"])
|
||||
for key, value in vp_button_mgr.items():
|
||||
setattr(rt.ViewportButtonMgr, key, value)
|
||||
for key, value in nitrous_viewport.items():
|
||||
if nitrous_viewport[key] != nitrous_viewport_original[key]:
|
||||
setattr(viewport_setting, key, value)
|
||||
for key, value in preview_preferences.items():
|
||||
setattr(rt.preferences, key, value)
|
||||
yield
|
||||
|
||||
finally:
|
||||
rt.viewport.setCamera(original)
|
||||
rt.viewport.setCamera(review_camera)
|
||||
rt.viewport.setGridVisibility(1, orig_vp_grid)
|
||||
rt.viewport.EnableSolidBackgroundColorMode(orig_vp_bkg)
|
||||
viewport_setting.VisualStyleMode = current_visualStyle
|
||||
viewport_setting.ViewportPreset = current_visualPreset
|
||||
viewport_setting.UseTextureEnabled = current_useTexture
|
||||
rt.ViewportButtonMgr.EnableButtons = has_vp_btn
|
||||
rt.preferences.playPreviewWhenDone = has_autoplay
|
||||
|
||||
for key, value in vp_button_mgr_original.items():
|
||||
setattr(rt.ViewportButtonMgr, key, value)
|
||||
for key, value in nitrous_viewport_original.items():
|
||||
setattr(viewport_setting, key, value)
|
||||
for key, value in preview_preferences_original.items():
|
||||
setattr(rt.preferences, key, value)
|
||||
rt.completeRedraw()
|
||||
|
||||
|
||||
def set_timeline(frameStart, frameEnd):
|
||||
|
|
@ -630,7 +621,8 @@ def publish_review_animation(instance, filepath,
|
|||
|
||||
|
||||
def publish_preview_sequences(staging_dir, filename,
|
||||
startFrame, endFrame, ext):
|
||||
startFrame, endFrame,
|
||||
percentSize, ext):
|
||||
"""publish preview animation by creating bitmaps
|
||||
***For 3dsMax Version <2024
|
||||
|
||||
|
|
@ -639,13 +631,15 @@ def publish_preview_sequences(staging_dir, filename,
|
|||
filename (str): filename
|
||||
startFrame (int): start frame
|
||||
endFrame (int): end frame
|
||||
percentSize (int): percentage of the resolution
|
||||
ext (str): image extension
|
||||
"""
|
||||
# get the screenshot
|
||||
rt.forceCompleteRedraw()
|
||||
rt.enableSceneRedraw()
|
||||
res_width = rt.renderWidth
|
||||
res_height = rt.renderHeight
|
||||
resolution_percentage = float(percentSize) / 100
|
||||
res_width = rt.renderWidth * resolution_percentage
|
||||
res_height = rt.renderHeight * resolution_percentage
|
||||
|
||||
viewportRatio = float(res_width / res_height)
|
||||
|
||||
|
|
@ -684,4 +678,4 @@ def publish_preview_sequences(staging_dir, filename,
|
|||
if rt.keyboard.escPressed:
|
||||
rt.exit()
|
||||
# clean up the cache
|
||||
rt.gc()
|
||||
rt.gc(delayed=True)
|
||||
|
|
|
|||
|
|
@ -75,4 +75,5 @@ class CreateReview(plugin.MaxCreator):
|
|||
|
||||
def get_pre_create_attr_defs(self):
|
||||
# Use same attributes as for instance attributes
|
||||
return self.get_instance_attr_defs()
|
||||
attrs = super().get_pre_create_attr_defs()
|
||||
return attrs + self.get_instance_attr_defs()
|
||||
|
|
|
|||
|
|
@ -27,28 +27,15 @@ class CollectReview(pyblish.api.InstancePlugin,
|
|||
focal_length = node.fov
|
||||
creator_attrs = instance.data["creator_attributes"]
|
||||
attr_values = self.get_attr_values_from_data(instance.data)
|
||||
data = {
|
||||
|
||||
general_preview_data = {
|
||||
"review_camera": camera_name,
|
||||
"imageFormat": creator_attrs["imageFormat"],
|
||||
"keepImages": creator_attrs["keepImages"],
|
||||
"percentSize": creator_attrs["percentSize"],
|
||||
"visualStyleMode": creator_attrs["visualStyleMode"],
|
||||
"viewportPreset": creator_attrs["viewportPreset"],
|
||||
"vpTexture": creator_attrs["vpTexture"],
|
||||
"frameStart": instance.context.data["frameStart"],
|
||||
"frameEnd": instance.context.data["frameEnd"],
|
||||
"fps": instance.context.data["fps"],
|
||||
"dspGeometry": attr_values.get("dspGeometry"),
|
||||
"dspShapes": attr_values.get("dspShapes"),
|
||||
"dspLights": attr_values.get("dspLights"),
|
||||
"dspCameras": attr_values.get("dspCameras"),
|
||||
"dspHelpers": attr_values.get("dspHelpers"),
|
||||
"dspParticles": attr_values.get("dspParticles"),
|
||||
"dspBones": attr_values.get("dspBones"),
|
||||
"dspBkg": attr_values.get("dspBkg"),
|
||||
"dspGrid": attr_values.get("dspGrid"),
|
||||
"dspSafeFrame": attr_values.get("dspSafeFrame"),
|
||||
"dspFrameNums": attr_values.get("dspFrameNums")
|
||||
}
|
||||
|
||||
if int(get_max_version()) >= 2024:
|
||||
|
|
@ -61,14 +48,50 @@ class CollectReview(pyblish.api.InstancePlugin,
|
|||
instance.data["colorspaceDisplay"] = display
|
||||
instance.data["colorspaceView"] = view_transform
|
||||
|
||||
preview_data = {
|
||||
"visualStyleMode": creator_attrs["visualStyleMode"],
|
||||
"viewportPreset": creator_attrs["viewportPreset"],
|
||||
"vpTexture": creator_attrs["vpTexture"],
|
||||
"dspGeometry": attr_values.get("dspGeometry"),
|
||||
"dspShapes": attr_values.get("dspShapes"),
|
||||
"dspLights": attr_values.get("dspLights"),
|
||||
"dspCameras": attr_values.get("dspCameras"),
|
||||
"dspHelpers": attr_values.get("dspHelpers"),
|
||||
"dspParticles": attr_values.get("dspParticles"),
|
||||
"dspBones": attr_values.get("dspBones"),
|
||||
"dspBkg": attr_values.get("dspBkg"),
|
||||
"dspGrid": attr_values.get("dspGrid"),
|
||||
"dspSafeFrame": attr_values.get("dspSafeFrame"),
|
||||
"dspFrameNums": attr_values.get("dspFrameNums")
|
||||
}
|
||||
else:
|
||||
preview_data = {}
|
||||
general_viewport = {
|
||||
"dspBkg": attr_values.get("dspBkg"),
|
||||
"dspGrid": attr_values.get("dspGrid")
|
||||
}
|
||||
nitrous_viewport = {
|
||||
"VisualStyleMode": creator_attrs["visualStyleMode"],
|
||||
"ViewportPreset": creator_attrs["viewportPreset"],
|
||||
"UseTextureEnabled": creator_attrs["vpTexture"]
|
||||
}
|
||||
preview_data["general_viewport"] = general_viewport
|
||||
preview_data["nitrous_viewport"] = nitrous_viewport
|
||||
preview_data["vp_button_manager"] = {
|
||||
"EnableButtons" : False
|
||||
}
|
||||
preview_data["preferences"] = {
|
||||
"playPreviewWhenDone": False
|
||||
}
|
||||
|
||||
# Enable ftrack functionality
|
||||
instance.data.setdefault("families", []).append('ftrack')
|
||||
|
||||
burnin_members = instance.data.setdefault("burninDataMembers", {})
|
||||
burnin_members["focalLength"] = focal_length
|
||||
|
||||
instance.data.update(data)
|
||||
self.log.debug(f"data:{data}")
|
||||
instance.data.update(general_preview_data)
|
||||
instance.data.update(preview_data)
|
||||
|
||||
@classmethod
|
||||
def get_attribute_defs(cls):
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ import pyblish.api
|
|||
from pymxs import runtime as rt
|
||||
from openpype.pipeline import publish
|
||||
from openpype.hosts.max.api.lib import (
|
||||
viewport_setup_updated,
|
||||
viewport_setup,
|
||||
viewport_camera,
|
||||
viewport_preference_setting,
|
||||
get_max_version,
|
||||
publish_review_animation,
|
||||
publish_preview_sequences
|
||||
|
|
@ -39,13 +39,17 @@ class ExtractReviewAnimation(publish.Extractor):
|
|||
|
||||
review_camera = instance.data["review_camera"]
|
||||
if int(get_max_version()) < 2024:
|
||||
nitrousGraphicMgr = rt.NitrousGraphicsManager
|
||||
viewport_setting = nitrousGraphicMgr.GetActiveViewportSetting()
|
||||
with viewport_setup(instance, viewport_setting, review_camera):
|
||||
with viewport_preference_setting(review_camera,
|
||||
instance.data["general_viewport"],
|
||||
instance.data["nitrous_viewport"],
|
||||
instance.data["vp_button_manager"],
|
||||
instance.data["preferences"]):
|
||||
percentSize = instance.data.get("percentSize")
|
||||
publish_preview_sequences(
|
||||
staging_dir, instance.name, start, end, ext)
|
||||
staging_dir, instance.name,
|
||||
start, end, percentSize, ext)
|
||||
else:
|
||||
with viewport_setup_updated(review_camera):
|
||||
with viewport_camera(review_camera):
|
||||
preview_arg = publish_review_animation(
|
||||
instance, filepath, start, end, fps)
|
||||
rt.execute(preview_arg)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue