allow reseting handles, and remove the redundant collector

This commit is contained in:
Mustafa-Zarkash 2023-10-05 11:31:30 +03:00
parent 0c63b26915
commit c8f6fb209b
4 changed files with 58 additions and 62 deletions

View file

@ -564,20 +564,20 @@ def get_frame_data(node, asset_data=None, log=None):
if log is None:
log = self.log
data = {}
if node.parm("trange") is None:
log.debug(
"Node has no 'trange' parameter: {}".format(node.path())
)
return data
return
if node.evalParm("trange") == 0:
log.debug(
"Node '{}' has 'Render current frame' set. "
"Time range data ignored.".format(node.path())
)
return data
return
data = {}
data["frameStartHandle"] = node.evalParm("f1")
data["handleStart"] = asset_data.get("handleStart", 0)

View file

@ -1,30 +0,0 @@
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."""
order = pyblish.api.CollectorOrder + 0.001
label = "Instance Node Frame Range"
hosts = ["houdini"]
def process(self, instance):
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)
)
return
asset_data = instance.context.data["assetEntity"]["data"]
frame_data = lib.get_frame_data(node, asset_data, self.log)
if not frame_data:
return
self.log.info("Collected time data: {}".format(frame_data))
instance.data.update(frame_data)

View file

@ -91,15 +91,3 @@ class CollectInstances(pyblish.api.ContextPlugin):
context[:] = sorted(context, key=sort_by_family)
return context
def get_frame_data(self, node):
"""Get the frame data: start frame, end frame and steps
Args:
node(hou.Node)
Returns:
dict
"""
return lib.get_frame_data(node)

View file

@ -2,12 +2,17 @@
"""Collector plugin for frames data on ROP instances."""
import hou # noqa
import pyblish.api
from openpype.lib import BoolDef
from openpype.hosts.houdini.api import lib
from openpype.pipeline import OptionalPyblishPluginMixin
class CollectRopFrameRange(pyblish.api.InstancePlugin):
class CollectRopFrameRange(pyblish.api.InstancePlugin,
OptionalPyblishPluginMixin):
"""Collect all frames which would be saved from the ROP nodes"""
hosts = ["houdini"]
order = pyblish.api.CollectorOrder
label = "Collect RopNode Frame Range"
@ -16,30 +21,63 @@ class CollectRopFrameRange(pyblish.api.InstancePlugin):
node_path = instance.data.get("instance_node")
if node_path is None:
# Instance without instance node like a workfile instance
self.log.debug(
"No instance node found for instance: {}".format(instance)
)
return
ropnode = hou.node(node_path)
asset_data = instance.context.data["assetEntity"]["data"]
attr_values = self.get_attr_values_from_data(instance.data)
if attr_values.get("reset_handles"):
asset_data["handleStart"] = 0
asset_data["handleEnd"] = 0
frame_data = lib.get_frame_data(ropnode, asset_data, self.log)
if "frameStart" in frame_data and "frameEnd" in frame_data:
if not frame_data:
return
# Log artist friendly message about the collected frame range
message = (
"Frame range {0[frameStart]} - {0[frameEnd]}"
# Log artist friendly message about the collected frame range
message = ""
if attr_values.get("reset_handles"):
message += (
"Reset frame handles is activated for this instance, "
"start and end handles are set to 0.\n"
)
else:
message += (
"Full Frame range with Handles "
"{0[frameStartHandle]} - {0[frameEndHandle]}\n"
.format(frame_data)
)
if frame_data.get("byFrameStep", 1.0) != 1.0:
message += " with step {0[byFrameStep]}".format(frame_data)
self.log.info(message)
message += (
"Frame range {0[frameStart]} - {0[frameEnd]}"
.format(frame_data)
)
instance.data.update(frame_data)
if frame_data.get("byFrameStep", 1.0) != 1.0:
message += "\nFrame steps {0[byFrameStep]}".format(frame_data)
# 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)
)
self.log.info(message)
instance.data.update(frame_data)
# 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)
)
@classmethod
def get_attribute_defs(cls):
return [
BoolDef("reset_handles",
tooltip="Set frame handles to zero",
default=False,
label="Reset frame handles")
]