clean ops arrange renderlayer nodes
0.7.0 - feat: `clean nodes` ops now rearrange renderlayer nodes within framesmain
parent
75a26fa4b6
commit
f02ab79a06
|
@ -15,6 +15,10 @@ Activate / deactivate all masks using MA layers
|
|||
-->
|
||||
|
||||
|
||||
0.7.0
|
||||
|
||||
- feat: `clean nodes` ops now delete gaps in renderlayer nodes within frames
|
||||
|
||||
0.6.9
|
||||
|
||||
- fix: shift correction error
|
||||
|
|
|
@ -61,6 +61,10 @@ class GPEXP_OT_clean_compo_tree(bpy.types.Operator):
|
|||
description="Delete view layer that aren't used in the nodetree anymore",
|
||||
default=True)
|
||||
|
||||
arrange_rl_nodes : bpy.props.BoolProperty(name="Arrange Render Node In Frames",
|
||||
description="Re-arrange Render Layer Nodes Y positions within each existing frames" ,
|
||||
default=True)
|
||||
|
||||
arrange_frames : bpy.props.BoolProperty(name="Arrange Frames",
|
||||
description="Re-arrange all frames Y positions" ,
|
||||
default=True)
|
||||
|
@ -84,6 +88,7 @@ class GPEXP_OT_clean_compo_tree(bpy.types.Operator):
|
|||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.prop(self, 'clear_unused_view_layers')
|
||||
layout.prop(self, 'arrange_rl_nodes')
|
||||
layout.prop(self, 'arrange_frames')
|
||||
layout.prop(self, 'reorder_inputs')
|
||||
|
||||
|
@ -112,8 +117,10 @@ class GPEXP_OT_clean_compo_tree(bpy.types.Operator):
|
|||
continue
|
||||
render.view_layers.remove(rl)
|
||||
|
||||
if self.arrange_rl_nodes:
|
||||
fn.rearrange_rlayers_in_frames(render.node_tree)
|
||||
|
||||
if self.arrange_frames:
|
||||
print('re-arranging frames')
|
||||
fn.rearrange_frames(render.node_tree)
|
||||
|
||||
if self.reorder_inputs:
|
||||
|
|
|
@ -2,7 +2,7 @@ bl_info = {
|
|||
"name": "GP Render",
|
||||
"description": "Organise export of gp layers through compositor output",
|
||||
"author": "Samuel Bernou",
|
||||
"version": (0, 6, 9),
|
||||
"version": (0, 7, 0),
|
||||
"blender": (2, 93, 0),
|
||||
"location": "View3D",
|
||||
"warning": "",
|
||||
|
|
17
fn.py
17
fn.py
|
@ -341,6 +341,23 @@ def clear_nodegroup(name, full_clear=False):
|
|||
# if full clear
|
||||
bpy.data.node_groups.remove(ng)
|
||||
|
||||
def rearrange_rlayers_in_frames(node_tree):
|
||||
'''rearrange RL nodes in all frames in nodetree'''
|
||||
frames_l = [n for n in node_tree.nodes if n.type == 'FRAME']
|
||||
for f in frames_l:
|
||||
all_in_frames = [n for n in node_tree.nodes if n.parent == f]
|
||||
rlayers = [n for n in all_in_frames if n.type == 'R_LAYERS']
|
||||
if not rlayers:
|
||||
continue
|
||||
all_in_frames.sort(key=lambda x: x.location.y, reverse=True) # descending
|
||||
rlayers.sort(key=lambda x: x.location.y, reverse=True) # descending
|
||||
|
||||
top = all_in_frames[0].location.y
|
||||
for rl in rlayers:
|
||||
# move to top with equal size
|
||||
rl.location.y = top
|
||||
top -= rl.dimensions.y + 20 # place next down by height + gap of 20
|
||||
|
||||
|
||||
def rearrange_frames(node_tree):
|
||||
frame_d = get_frames_bbox(node_tree) # dic : {frame_node:(loc vector, dimensions vector), ...}
|
||||
|
|
Loading…
Reference in New Issue