diff --git a/CHANGELOG.md b/CHANGELOG.md index 64eb99e..5b5de6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,11 @@ Activate / deactivate layer opacity according to prefix Activate / deactivate all masks using MA layers --> +1.1.4 + +- changed: force set color by prefix if autobuild option swiched on +- fixed: problem with auto merge adjacent layers + 1.1.3 - added: clean material stack in auto-build diff --git a/OP_auto_build.py b/OP_auto_build.py index 6aacdf3..6e78ffd 100644 --- a/OP_auto_build.py +++ b/OP_auto_build.py @@ -58,7 +58,7 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): timer : bpy.props.FloatProperty(default=0.1, options={'SKIP_SAVE'}) excluded_prefix : bpy.props.StringProperty( - name='Excluded Layer By Prefix', default='GP, RG, PO', + name='Excluded Layer By Prefix', default='GP, RG, PO, MA', description='Exclude layer to send to render by prefix (comma separated list)') clean_name_and_visibility : bpy.props.BoolProperty(name='Clean Name And Visibility', default=True, @@ -101,10 +101,11 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): layout = self.layout col = layout.column() col.prop(self, 'clean_name_and_visibility') - col.prop(self, 'clean_material_duplication') row = col.row() row.prop(self, 'prefix_filter') row.active = self.clean_name_and_visibility + + col.prop(self, 'clean_material_duplication') col.prop(self, 'set_layers_colors') col.prop(self, 'trigger_rename_lowercase') @@ -127,6 +128,7 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): # TODO : add to preferences / environment var # prefix_to_render = ['CO', 'CU', 'FX', 'TO', 'MA'] prefix_to_render = [p.strip() for p in self.prefix_filter.split(',')] + print('prefix_to_render: ', prefix_to_render) render_scn = bpy.data.scenes.get('Render') if render_scn: @@ -134,6 +136,7 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): return {'CANCELLED'} all_gp_objects = [o for o in context.scene.objects if o.type == 'GPENCIL'] + ## clean name and visibility if self.clean_name_and_visibility: for o in all_gp_objects: @@ -145,9 +148,9 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): if re.match(r'^[A-Z]{2}_$', l.info): l.info = l.info + o.name.lower() - ## Make used prefix visible ? + ## Make used prefix visible ?? (maybe some layer were intentionally hidden...) if (res := re.search(r'^([A-Z]{2})_', l.info)): - if res.group(1) in prefix_to_render and l.hide == True: + if res.group(1) in prefix_to_render and l.hide == True and not 'invisible' in l.info: print(f'{o.name} -> {l.info} : Switch visibility On') l.hide = False @@ -167,8 +170,9 @@ class GPEXP_OT_render_auto_build(bpy.types.Operator): ## Set layers colors (skip if colors were already set ?) if self.set_layers_colors: - # Option: Maybe find a way to create a color from prefix hash ? (always give unique color with same prefix on other project!) - fn.set_layer_colors(skip_if_colored=True) + ## Option: Maybe find a way to create a color from prefix hash ? + ## (always give unique color with same prefix whatever the project!) + fn.set_layer_colors(skip_if_colored=False) ## Trigger rename lowercase if self.trigger_rename_lowercase: diff --git a/__init__.py b/__init__.py index 40d3144..d23fc8f 100644 --- a/__init__.py +++ b/__init__.py @@ -2,7 +2,7 @@ bl_info = { "name": "GP Render", "description": "Organise export of gp layers through compositor output", "author": "Samuel Bernou", - "version": (1, 1, 3), + "version": (1, 1, 4), "blender": (2, 93, 0), "location": "View3D", "warning": "", diff --git a/fn.py b/fn.py index dfdb776..7cb476b 100644 --- a/fn.py +++ b/fn.py @@ -437,12 +437,20 @@ def group_adjacent_layer_prefix_rlayer(ob, excluded_prefix=[], first_name=True): ] for prefix, layer_grp in adjacent_prefix_groups: + ## Remove layer that are in excluded viewlayer + ## Else None/exclusion vl can expand rest of the adjacent layers + for l in reversed(layer_grp): + if not l.viewlayer_render or l.viewlayer_render == 'exclude': + print(f'prefix "{prefix}": remove "{l.info}" from grouping adjacent layers') + layer_grp.remove(l) # remove traget the layer directly + if len(layer_grp) < 2: continue if not prefix or prefix in excluded_prefix: continue ref = layer_grp[0] if first_name else layer_grp[-1] + merge_gplayer_viewlayers(ob, act=ref, layers=layer_grp) diff --git a/gen_vlayer.py b/gen_vlayer.py index b004acc..9047793 100644 --- a/gen_vlayer.py +++ b/gen_vlayer.py @@ -379,12 +379,15 @@ def export_gp_objects(oblist, exclude_list=[], scene=None): oblist = [oblist] if isinstance(exclude_list, str): exclude_list = [p.strip() for p in exclude_list.split(',')] + + # print('exclude_list: ', exclude_list) for ob in oblist: for l in ob.data.layers: # if l.hide: # continue if l.hide or any(x + '_' in l.info for x in exclude_list): # exclude hided ? + print(f'Exclude export: {ob.name} : {l.info}') l.viewlayer_render = fn.get_view_layer('exclude', scene=scene).name # assign "exclude" continue