mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-27 06:12:19 +01:00
fix filtering of groups
This commit is contained in:
parent
faaade284a
commit
07c87b2efd
1 changed files with 55 additions and 53 deletions
|
|
@ -646,37 +646,19 @@ class TVPaintAutoDetectRenderCreator(TVPaintCreator):
|
|||
def _rename_groups(
|
||||
self,
|
||||
groups_order: list[int],
|
||||
scene_groups: list[dict[str, Any]],
|
||||
layers_by_group_id: dict[int, dict[str, Any]],
|
||||
rename_only_visible: bool,
|
||||
) -> set[int]:
|
||||
valid_group_ids: set[int] = set()
|
||||
scene_groups: list[dict[str, Any]]
|
||||
):
|
||||
new_group_name_by_id: dict[int, str] = {}
|
||||
groups_by_id: dict[int, dict[str, Any]] = {
|
||||
group["group_id"]: group
|
||||
for group in scene_groups
|
||||
}
|
||||
# Count only renamed groups
|
||||
group_idx: int = 1
|
||||
for group_id in groups_order:
|
||||
layers: list[dict[str, Any]] = layers_by_group_id[group_id]
|
||||
if not layers:
|
||||
continue
|
||||
|
||||
if (
|
||||
rename_only_visible
|
||||
and not any(
|
||||
layer
|
||||
for layer in layers
|
||||
if layer["visible"]
|
||||
)
|
||||
):
|
||||
continue
|
||||
valid_group_ids.add(group_id)
|
||||
for idx, group_id in enumerate(groups_order):
|
||||
group_index_value: str = (
|
||||
"{{:0>{}}}"
|
||||
.format(self.group_idx_padding)
|
||||
.format(group_idx * self.group_idx_offset)
|
||||
.format((idx + 1) * self.group_idx_offset)
|
||||
)
|
||||
group_name_fill_values: dict[str, str] = {
|
||||
"groupIdx": group_index_value,
|
||||
|
|
@ -691,7 +673,6 @@ class TVPaintAutoDetectRenderCreator(TVPaintCreator):
|
|||
group: dict[str, Any] = groups_by_id[group_id]
|
||||
if group["name"] != group_name:
|
||||
new_group_name_by_id[group_id] = group_name
|
||||
group_idx += 1
|
||||
|
||||
grg_lines: list[str] = []
|
||||
for group_id, group_name in new_group_name_by_id.items():
|
||||
|
|
@ -709,7 +690,6 @@ class TVPaintAutoDetectRenderCreator(TVPaintCreator):
|
|||
|
||||
if grg_lines:
|
||||
execute_george_through_file("\n".join(grg_lines))
|
||||
return valid_group_ids
|
||||
|
||||
def _prepare_render_layer(
|
||||
self,
|
||||
|
|
@ -816,6 +796,30 @@ class TVPaintAutoDetectRenderCreator(TVPaintCreator):
|
|||
}
|
||||
creator.create(subset_name, instance_data, pre_create_data)
|
||||
|
||||
def _filter_groups(
|
||||
self,
|
||||
layers_by_group_id,
|
||||
groups_order,
|
||||
only_visible_groups
|
||||
):
|
||||
new_groups_order = []
|
||||
for group_id in groups_order:
|
||||
layers: list[dict[str, Any]] = layers_by_group_id[group_id]
|
||||
if not layers:
|
||||
continue
|
||||
|
||||
if (
|
||||
only_visible_groups
|
||||
and not any(
|
||||
layer
|
||||
for layer in layers
|
||||
if layer["visible"]
|
||||
)
|
||||
):
|
||||
continue
|
||||
new_groups_order.append(group_id)
|
||||
return new_groups_order
|
||||
|
||||
def create(self, subset_name, instance_data, pre_create_data):
|
||||
project_name: str = self.create_context.get_current_project_name()
|
||||
asset_name: str = instance_data["asset"]
|
||||
|
|
@ -865,42 +869,40 @@ class TVPaintAutoDetectRenderCreator(TVPaintCreator):
|
|||
"mark_passes_for_review", False
|
||||
)
|
||||
rename_groups = pre_create_data.get("rename_groups", False)
|
||||
rename_only_visible = pre_create_data.get("rename_only_visible", False)
|
||||
only_visible_groups = pre_create_data.get("only_visible_groups", False)
|
||||
groups_order = self._filter_groups(
|
||||
layers_by_group_id,
|
||||
groups_order,
|
||||
only_visible_groups
|
||||
)
|
||||
if not groups_order:
|
||||
return
|
||||
|
||||
if rename_groups:
|
||||
valid_group_ids: set[int] = self._rename_groups(
|
||||
groups_order,
|
||||
scene_groups,
|
||||
layers_by_group_id,
|
||||
rename_only_visible
|
||||
)
|
||||
else:
|
||||
valid_group_ids: set[int] = set(groups_order)
|
||||
self._rename_groups(groups_order, scene_groups)
|
||||
|
||||
# Make sure all render layers are created
|
||||
for group_id in layers_by_group_id.keys():
|
||||
if group_id not in valid_group_ids:
|
||||
continue
|
||||
render_layer_instance: Union[CreatedInstance, None] = (
|
||||
render_layers_by_group_id.get(group_id)
|
||||
)
|
||||
|
||||
instance: Union[CreatedInstance, None] = self._prepare_render_layer(
|
||||
project_name,
|
||||
asset_doc,
|
||||
task_name,
|
||||
group_id,
|
||||
scene_groups,
|
||||
mark_layers_for_review,
|
||||
render_layer_instance,
|
||||
for group_id in groups_order:
|
||||
instance: Union[CreatedInstance, None] = (
|
||||
self._prepare_render_layer(
|
||||
project_name,
|
||||
asset_doc,
|
||||
task_name,
|
||||
group_id,
|
||||
scene_groups,
|
||||
mark_layers_for_review,
|
||||
render_layers_by_group_id.get(group_id),
|
||||
)
|
||||
)
|
||||
if instance is not None:
|
||||
render_layers_by_group_id[group_id] = instance
|
||||
|
||||
for group_id, layers in layers_by_group_id.items():
|
||||
for group_id in groups_order:
|
||||
layers: list[dict[str, Any]] = layers_by_group_id[group_id]
|
||||
render_layer_instance: Union[CreatedInstance, None] = (
|
||||
render_layers_by_group_id.get(group_id)
|
||||
)
|
||||
if render_layer_instance is None:
|
||||
if not layers or render_layer_instance is None:
|
||||
continue
|
||||
|
||||
self._prepare_render_passes(
|
||||
|
|
@ -930,11 +932,11 @@ class TVPaintAutoDetectRenderCreator(TVPaintCreator):
|
|||
default=True
|
||||
),
|
||||
BoolDef(
|
||||
"rename_only_visible",
|
||||
"only_visible_groups",
|
||||
label="Only visible color groups",
|
||||
tooltip=(
|
||||
"Rename of groups will affect only groups with visible"
|
||||
" layers."
|
||||
"Render Layers and rename will happen only on color"
|
||||
" groups with visible layers."
|
||||
),
|
||||
default=True
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue