consider handleStart and End when collecting frames

This commit is contained in:
Mustafa-Zarkash 2023-10-04 16:31:27 +03:00
parent 4bcad094e2
commit b908665d4c
4 changed files with 35 additions and 58 deletions

View file

@ -548,7 +548,7 @@ def get_template_from_value(key, value):
return parm
def get_frame_data(node):
def get_frame_data(self, node, asset_data={}):
"""Get the frame data: start frame, end frame and steps.
Args:
@ -561,16 +561,27 @@ def get_frame_data(node):
data = {}
if node.parm("trange") is None:
self.log.debug(
"Node has no 'trange' parameter: {}".format(node.path())
)
return data
if node.evalParm("trange") == 0:
self.log.debug("trange is 0")
self.log.debug(
"Node '{}' has 'Render current frame' set. "
"Time range data ignored.".format(node.path())
)
return data
data["frameStart"] = node.evalParm("f1")
data["frameEnd"] = node.evalParm("f2")
data["steps"] = node.evalParm("f3")
data["frameStartHandle"] = node.evalParm("f1")
data["frameStart"] = node.evalParm("f1") + asset_data.get("handleStart", 0)
data["handleStart"] = asset_data.get("handleStart", 0)
data["frameEndHandle"] = node.evalParm("f2")
data["frameEnd"] = node.evalParm("f2") - asset_data.get("handleEnd", 0)
data["handleEnd"] = asset_data.get("handleEnd", 0)
data["byFrameStep"] = node.evalParm("f3")
return data

View file

@ -1,7 +1,7 @@
import hou
import pyblish.api
from openpype.hosts.houdini.api import lib
class CollectInstanceNodeFrameRange(pyblish.api.InstancePlugin):
"""Collect time range frame data for the instance node."""
@ -15,42 +15,16 @@ class CollectInstanceNodeFrameRange(pyblish.api.InstancePlugin):
node_path = instance.data.get("instance_node")
node = hou.node(node_path) if node_path else None
if not node_path or not node:
self.log.debug("No instance node found for instance: "
"{}".format(instance))
self.log.debug(
"No instance node found for instance: {}".format(instance)
)
return
frame_data = self.get_frame_data(node)
asset_data = instance.context.data["assetEntity"]["data"]
frame_data = lib.get_frame_data(self, node, asset_data)
if not frame_data:
return
self.log.info("Collected time data: {}".format(frame_data))
instance.data.update(frame_data)
def get_frame_data(self, node):
"""Get the frame data: start frame, end frame and steps
Args:
node(hou.Node)
Returns:
dict
"""
data = {}
if node.parm("trange") is None:
self.log.debug("Node has no 'trange' parameter: "
"{}".format(node.path()))
return data
if node.evalParm("trange") == 0:
# Ignore 'render current frame'
self.log.debug("Node '{}' has 'Render current frame' set. "
"Time range data ignored.".format(node.path()))
return data
data["frameStart"] = node.evalParm("f1")
data["frameEnd"] = node.evalParm("f2")
data["byFrameStep"] = node.evalParm("f3")
return data

View file

@ -102,16 +102,4 @@ class CollectInstances(pyblish.api.ContextPlugin):
"""
data = {}
if node.parm("trange") is None:
return data
if node.evalParm("trange") == 0:
return data
data["frameStart"] = node.evalParm("f1")
data["frameEnd"] = node.evalParm("f2")
data["byFrameStep"] = node.evalParm("f3")
return data
return lib.get_frame_data(self, node)

View file

@ -19,16 +19,20 @@ class CollectRopFrameRange(pyblish.api.InstancePlugin):
return
ropnode = hou.node(node_path)
frame_data = lib.get_frame_data(ropnode)
asset_data = instance.context.data["assetEntity"]["data"]
frame_data = lib.get_frame_data(self, ropnode, asset_data)
if "frameStart" in frame_data and "frameEnd" in frame_data:
# Log artist friendly message about the collected frame range
message = (
"Frame range {0[frameStart]} - {0[frameEnd]}"
).format(frame_data)
if frame_data.get("step", 1.0) != 1.0:
message += " with step {0[step]}".format(frame_data)
.format(frame_data)
)
if frame_data.get("byFrameStep", 1.0) != 1.0:
message += " with step {0[byFrameStep]}".format(frame_data)
self.log.info(message)
instance.data.update(frame_data)
@ -36,6 +40,6 @@ class CollectRopFrameRange(pyblish.api.InstancePlugin):
# Add frame range to label if the instance has a frame range.
label = instance.data.get("label", instance.data["name"])
instance.data["label"] = (
"{0} [{1[frameStart]} - {1[frameEnd]}]".format(label,
frame_data)
"{0} [{1[frameStart]} - {1[frameEnd]}]"
.format(label,frame_data)
)