mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 08:24:53 +01:00
Merge pull request #4665 from moonyuet/enhancement/OP-5243_3dsmax-setting-scene-length
This commit is contained in:
commit
ef42f95b78
2 changed files with 62 additions and 1 deletions
|
|
@ -182,7 +182,6 @@ def reset_scene_resolution():
|
||||||
|
|
||||||
scene resolution can be overwritten by an asset if the asset.data contains
|
scene resolution can be overwritten by an asset if the asset.data contains
|
||||||
any information regarding scene resolution .
|
any information regarding scene resolution .
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
None
|
None
|
||||||
"""
|
"""
|
||||||
|
|
@ -200,6 +199,59 @@ def reset_scene_resolution():
|
||||||
set_scene_resolution(width, height)
|
set_scene_resolution(width, height)
|
||||||
|
|
||||||
|
|
||||||
|
def get_frame_range() -> dict:
|
||||||
|
"""Get the current assets frame range and handles.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: with frame start, frame end, handle start, handle end.
|
||||||
|
"""
|
||||||
|
# Set frame start/end
|
||||||
|
asset = get_current_project_asset()
|
||||||
|
frame_start = asset["data"].get("frameStart")
|
||||||
|
frame_end = asset["data"].get("frameEnd")
|
||||||
|
# Backwards compatibility
|
||||||
|
if frame_start is None or frame_end is None:
|
||||||
|
frame_start = asset["data"].get("edit_in")
|
||||||
|
frame_end = asset["data"].get("edit_out")
|
||||||
|
if frame_start is None or frame_end is None:
|
||||||
|
return
|
||||||
|
handles = asset["data"].get("handles") or 0
|
||||||
|
handle_start = asset["data"].get("handleStart")
|
||||||
|
if handle_start is None:
|
||||||
|
handle_start = handles
|
||||||
|
handle_end = asset["data"].get("handleEnd")
|
||||||
|
if handle_end is None:
|
||||||
|
handle_end = handles
|
||||||
|
return {
|
||||||
|
"frameStart": frame_start,
|
||||||
|
"frameEnd": frame_end,
|
||||||
|
"handleStart": handle_start,
|
||||||
|
"handleEnd": handle_end
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def reset_frame_range(fps: bool = True):
|
||||||
|
"""Set frame range to current asset.
|
||||||
|
This is part of 3dsmax documentation:
|
||||||
|
|
||||||
|
animationRange: A System Global variable which lets you get and
|
||||||
|
set an Interval value that defines the start and end frames
|
||||||
|
of the Active Time Segment.
|
||||||
|
frameRate: A System Global variable which lets you get
|
||||||
|
and set an Integer value that defines the current
|
||||||
|
scene frame rate in frames-per-second.
|
||||||
|
"""
|
||||||
|
if fps:
|
||||||
|
data_fps = get_current_project(fields=["data.fps"])
|
||||||
|
fps_number = float(data_fps["data"]["fps"])
|
||||||
|
rt.frameRate = fps_number
|
||||||
|
frame_range = get_frame_range()
|
||||||
|
frame_start = frame_range["frameStart"] - int(frame_range["handleStart"])
|
||||||
|
frame_end = frame_range["frameEnd"] + int(frame_range["handleEnd"])
|
||||||
|
frange_cmd = f"animationRange = interval {frame_start} {frame_end}"
|
||||||
|
rt.execute(frange_cmd)
|
||||||
|
|
||||||
|
|
||||||
def set_context_setting():
|
def set_context_setting():
|
||||||
"""Apply the project settings from the project definition
|
"""Apply the project settings from the project definition
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ from pymxs import runtime as rt
|
||||||
from openpype.tools.utils import host_tools
|
from openpype.tools.utils import host_tools
|
||||||
from openpype.hosts.max.api import lib
|
from openpype.hosts.max.api import lib
|
||||||
|
|
||||||
|
|
||||||
class OpenPypeMenu(object):
|
class OpenPypeMenu(object):
|
||||||
"""Object representing OpenPype menu.
|
"""Object representing OpenPype menu.
|
||||||
|
|
||||||
|
|
@ -114,6 +115,10 @@ class OpenPypeMenu(object):
|
||||||
res_action.triggered.connect(self.resolution_callback)
|
res_action.triggered.connect(self.resolution_callback)
|
||||||
openpype_menu.addAction(res_action)
|
openpype_menu.addAction(res_action)
|
||||||
|
|
||||||
|
frame_action = QtWidgets.QAction("Set Frame Range", openpype_menu)
|
||||||
|
frame_action.triggered.connect(self.frame_range_callback)
|
||||||
|
openpype_menu.addAction(frame_action)
|
||||||
|
|
||||||
return openpype_menu
|
return openpype_menu
|
||||||
|
|
||||||
def load_callback(self):
|
def load_callback(self):
|
||||||
|
|
@ -139,3 +144,7 @@ class OpenPypeMenu(object):
|
||||||
def resolution_callback(self):
|
def resolution_callback(self):
|
||||||
"""Callback to reset scene resolution"""
|
"""Callback to reset scene resolution"""
|
||||||
return lib.reset_scene_resolution()
|
return lib.reset_scene_resolution()
|
||||||
|
|
||||||
|
def frame_range_callback(self):
|
||||||
|
"""Callback to reset frame range"""
|
||||||
|
return lib.reset_frame_range()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue