mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 21:04:40 +01:00
151 lines
4.4 KiB
Python
151 lines
4.4 KiB
Python
import flame
|
|
|
|
|
|
def create_batch_group(
|
|
name,
|
|
frame_start,
|
|
frame_duration,
|
|
update_batch_group=None,
|
|
**kwargs
|
|
):
|
|
"""Create Batch Group in active project's Desktop
|
|
|
|
Args:
|
|
name (str): name of batch group to be created
|
|
frame_start (int): start frame of batch
|
|
frame_end (int): end frame of batch
|
|
update_batch_group (PyBatch)[optional]: batch group to update
|
|
|
|
Return:
|
|
PyBatch: active flame batch group
|
|
"""
|
|
# make sure some batch obj is present
|
|
batch_group = update_batch_group or flame.batch
|
|
|
|
schematic_reels = kwargs.get("shematic_reels") or ['LoadedReel1']
|
|
shelf_reels = kwargs.get("shelf_reels") or ['ShelfReel1']
|
|
|
|
handle_start = kwargs.get("handleStart") or 0
|
|
handle_end = kwargs.get("handleEnd") or 0
|
|
|
|
frame_start -= handle_start
|
|
frame_duration += handle_start + handle_end
|
|
|
|
if not update_batch_group:
|
|
# Create batch group with name, start_frame value, duration value,
|
|
# set of schematic reel names, set of shelf reel names
|
|
batch_group = batch_group.create_batch_group(
|
|
name,
|
|
start_frame=frame_start,
|
|
duration=frame_duration,
|
|
reels=schematic_reels,
|
|
shelf_reels=shelf_reels
|
|
)
|
|
else:
|
|
batch_group.name = name
|
|
batch_group.start_frame = frame_start
|
|
batch_group.duration = frame_duration
|
|
|
|
# add reels to batch group
|
|
_add_reels_to_batch_group(
|
|
batch_group, schematic_reels, shelf_reels)
|
|
|
|
# TODO: also update write node if there is any
|
|
# TODO: also update loaders to start from correct frameStart
|
|
|
|
if kwargs.get("switch_batch_tab"):
|
|
# use this command to switch to the batch tab
|
|
batch_group.go_to()
|
|
|
|
return batch_group
|
|
|
|
|
|
def _add_reels_to_batch_group(batch_group, reels, shelf_reels):
|
|
# update or create defined reels
|
|
# helper variables
|
|
reel_names = [
|
|
r.name.get_value()
|
|
for r in batch_group.reels
|
|
]
|
|
shelf_reel_names = [
|
|
r.name.get_value()
|
|
for r in batch_group.shelf_reels
|
|
]
|
|
# add schematic reels
|
|
for _r in reels:
|
|
if _r in reel_names:
|
|
continue
|
|
batch_group.create_reel(_r)
|
|
|
|
# add shelf reels
|
|
for _sr in shelf_reels:
|
|
if _sr in shelf_reel_names:
|
|
continue
|
|
batch_group.create_shelf_reel(_sr)
|
|
|
|
|
|
def create_batch_group_conent(batch_nodes, batch_links, batch_group=None):
|
|
"""Creating batch group with links
|
|
|
|
Args:
|
|
batch_nodes (list of dict): each dict is node definition
|
|
batch_links (list of dict): each dict is link definition
|
|
batch_group (PyBatch, optional): batch group. Defaults to None.
|
|
|
|
Return:
|
|
dict: all batch nodes {name or id: PyNode}
|
|
"""
|
|
# make sure some batch obj is present
|
|
batch_group = batch_group or flame.batch
|
|
all_batch_nodes = {
|
|
b.name.get_value(): b
|
|
for b in batch_group.nodes
|
|
}
|
|
for node in batch_nodes:
|
|
# NOTE: node_props needs to be ideally OrederDict type
|
|
node_id, node_type, node_props = (
|
|
node["id"], node["type"], node["properties"])
|
|
|
|
# get node name for checking if exists
|
|
node_name = node_props.pop("name", None) or node_id
|
|
|
|
if all_batch_nodes.get(node_name):
|
|
# update existing batch node
|
|
batch_node = all_batch_nodes[node_name]
|
|
else:
|
|
# create new batch node
|
|
batch_node = batch_group.create_node(node_type)
|
|
|
|
# set name
|
|
batch_node.name.set_value(node_name)
|
|
|
|
# set attributes found in node props
|
|
for key, value in node_props.items():
|
|
if not hasattr(batch_node, key):
|
|
continue
|
|
setattr(batch_node, key, value)
|
|
|
|
# add created node for possible linking
|
|
all_batch_nodes[node_id] = batch_node
|
|
|
|
# link nodes to each other
|
|
for link in batch_links:
|
|
_from_n, _to_n = link["from_node"], link["to_node"]
|
|
|
|
# check if all linking nodes are available
|
|
if not all([
|
|
all_batch_nodes.get(_from_n["id"]),
|
|
all_batch_nodes.get(_to_n["id"])
|
|
]):
|
|
continue
|
|
|
|
# link nodes in defined link
|
|
batch_group.connect_nodes(
|
|
all_batch_nodes[_from_n["id"]], _from_n["connector"],
|
|
all_batch_nodes[_to_n["id"]], _to_n["connector"]
|
|
)
|
|
|
|
# sort batch nodes
|
|
batch_group.organize()
|
|
|
|
return all_batch_nodes
|