From 6d564c26bc682c951df392d2b5cfcdec469a5e6f Mon Sep 17 00:00:00 2001 From: Prodeath21 Date: Sun, 11 Jan 2026 14:51:13 +0100 Subject: [PATCH] 1.8.4 Hotfix --- .../_Release/L1960_Tools_1_8_4.zip | Bin 44186 -> 44683 bytes .../L1960_Tools_1_8_4/MaterialToMask.py | 41 +++++++++++++----- .../_Source/L1960_Tools_1_8_4/__init__.py | 19 ++++---- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/Blender/L1960_Tools/_Release/L1960_Tools_1_8_4.zip b/Blender/L1960_Tools/_Release/L1960_Tools_1_8_4.zip index b08197245171db461b6f7d747934c8a6a10fde9a..96658c9d9c715642e72885d72b216755d29144ad 100644 GIT binary patch delta 6263 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 U{@gtQhye5z69mdF{e98@2glL)vj6}9 diff --git a/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/MaterialToMask.py b/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/MaterialToMask.py index 7bddb6c..a58ffb2 100644 --- a/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/MaterialToMask.py +++ b/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/MaterialToMask.py @@ -15,7 +15,7 @@ def get_uv_layers(self, context): return items class UVEnumProperties(bpy.types.PropertyGroup): - uv_enum: bpy.props.EnumProperty(name="UV Map", description="Select UV-Layer", items=get_uv_layers, default=0) + uv_enum: bpy.props.EnumProperty(name="MASK UV Map", description="Select Mask UV-Layer", items=get_uv_layers, default=0) class MESH_OT_merge_materials_to_mask(bpy.types.Operator): """Merges 4 Materials into one Material (Mask)""" @@ -26,11 +26,15 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): def execute(self, context): scene = context.scene + ts = scene.tool_settings arr_obj = context.selected_objects activeObj = context.active_object + # Get all inputs from user + selected_uv = context.scene.settings_uv_enum_props.uv_enum ignore_custom = context.scene.settings_multi_ignor - island_margin_custom = context.scene.uv_island_margin_slider + mat_nameing = context.scene.settings_mat_nameing + island_margin_custom = context.scene.settings_uv_island_margin_slider # Scale and offset for UV allignment SCALE = 0.5 @@ -42,8 +46,7 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): ] IGNORE = ["glass", "glas", "grass", "gras", "atlas"] if ignore_custom.strip(): - CUSTOM_IGNORE = ignore_custom.split(",") - IGNORE.extend(CUSTOM_IGNORE) + IGNORE.extend(ignore_custom.split(",")) # No Mesh selected if not arr_obj: @@ -56,7 +59,6 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): return {"CANCELLED"} obj = arr_obj[0] - selected_uv = context.scene.uv_enum_props.uv_enum # UV Maps present? if not obj.data.uv_layers or not selected_uv: @@ -65,8 +67,13 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): obj.data.uv_layers.active_index = int(selected_uv) + # Deactivate uv Select Sync in UV Editor. Makes Problems + old_ts_state = ts.use_uv_select_sync + ts.use_uv_select_sync = False + skip = 0 idx_multi = None + idx_multi_name = 1 delete = [] # Loop through all Materials @@ -123,7 +130,8 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): mat["1. Black "] = mat.name # Change name and use as base to merge - mat.name = "Multi_" + mat.name + mat.name = str(mat_nameing).replace("$MeshName", obj.name.replace("L1960_", "").replace("KB3D_AMC_", "")) + "_" + str(idx_multi_name) + idx_multi_name += 1 idx_multi = i self.report({'INFO'}, f'Material "{mat.name}" created.') continue @@ -161,6 +169,9 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): uv_layers = mesh.uv_layers for i, layer in enumerate(uv_layers): layer.name = f"UVMap{i + 1}" + + # Activate Select Sync in UV Editor + ts.use_uv_select_sync = old_ts_state self.report({'INFO'}, 'Merged Materials to Multitextures.') return {"FINISHED"} @@ -190,9 +201,13 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): bpy.ops.object.mode_set(mode='OBJECT') def put_UV_first(self, obj, target_index): + target_index = int(target_index) mesh = obj.data uv_layers = mesh.uv_layers + if target_index < 0 or target_index >= len(uv_layers): + return + if len(uv_layers) <= 1: return @@ -200,7 +215,7 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): if obj.mode != 'OBJECT': bpy.ops.object.mode_set(mode='OBJECT') - # UV-Daten + Namen sichern + # Backup aller UV-Layer uv_backup = [] for layer in uv_layers: uv_backup.append({ @@ -208,9 +223,10 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): "data": [loop.uv.copy() for loop in layer.data] }) - # Neue Reihenfolge - indices = list(range(len(uv_layers))) - new_order = [i for i in indices if i != target_index] + # Neue Reihenfolge: target_index zuerst + new_order = [target_index] + [ + i for i in range(len(uv_layers)) if i != target_index + ] # Alle UV-Layer löschen (rückwärts!) for i in range(len(uv_layers) - 1, -1, -1): @@ -223,5 +239,6 @@ class MESH_OT_merge_materials_to_mask(bpy.types.Operator): for i, uv in enumerate(info["data"]): new_layer.data[i].uv = uv - # Ersten UV-Layer aktiv setzen - uv_layers.active_index = 0 \ No newline at end of file + # Ersten UV-Layer aktiv & render setzen + uv_layers.active_index = 0 + uv_layers[0].active_render = True \ No newline at end of file diff --git a/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/__init__.py b/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/__init__.py index e6f6bc3..c854ade 100644 --- a/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/__init__.py +++ b/Blender/L1960_Tools/_Source/L1960_Tools_1_8_4/__init__.py @@ -83,10 +83,11 @@ class L1960_PT_dekogon(bpy.types.Panel): emboss=False) if context.scene.section2: row = box.row() - props = context.scene.uv_enum_props - row.prop(props, "uv_enum", text="Use UV") + props = context.scene.settings_uv_enum_props + row.prop(props, "uv_enum", text="UV Mask") box.prop(context.scene, "settings_multi_ignor", text="Ignore") - box.prop(context.scene, "uv_island_margin_slider", text="Island Margin") + box.prop(context.scene, "settings_mat_nameing", text="Naming") + box.prop(context.scene, "settings_uv_island_margin_slider", text="Island Margin") class L1960_PT_tools(bpy.types.Panel): #where to add the panel @@ -194,9 +195,10 @@ def register(): bpy.types.Scene.dekogon_settings_prefix = bpy.props.StringProperty(name="Prefix", default="TX") bpy.types.Scene.dekogon_settings_suffix = bpy.props.StringProperty(name="Suffix", default="ALB") bpy.types.Scene.dekogon_settings_filetype = bpy.props.StringProperty(name="File Type", default="tga") - bpy.types.Scene.settings_multi_ignor = bpy.props.StringProperty(name="Ignore", default="", description="Ignore material when string is in name (split by comma)") - bpy.types.Scene.uv_enum_props = bpy.props.PointerProperty(type=UVEnumProperties) - bpy.types.Scene.uv_island_margin_slider = bpy.props.FloatProperty(name="Island Margin", default=0.02, min=0.01, max=0.1) + bpy.types.Scene.settings_mat_nameing = bpy.props.StringProperty(name="Naming", default="Multi_$MeshName", description="Naming for new multi materials, use $MeshName as placeholder") + bpy.types.Scene.settings_multi_ignor = bpy.props.StringProperty(name="Ignore", default="", description="Ignore material when string is in name (split by comma) | Default: grass, glass, atlas") + bpy.types.Scene.settings_uv_enum_props = bpy.props.PointerProperty(type=UVEnumProperties) + bpy.types.Scene.settings_uv_island_margin_slider = bpy.props.FloatProperty(name="Island Margin", default=0.02, min=0.01, max=0.1) def unregister(): for mod in modules: @@ -211,9 +213,10 @@ def unregister(): del bpy.types.Scene.dekogon_settings_prefix del bpy.types.Scene.dekogon_settings_suffix del bpy.types.Scene.dekogon_settings_filetype + del bpy.types.Scene.settings_mat_nameing del bpy.types.Scene.settings_multi_ignor - del bpy.types.Scene.uv_enum_props - del bpy.types.Scene.uv_island_margin_slider + del bpy.types.Scene.settings_uv_enum_props + del bpy.types.Scene.settings_uv_island_margin_slider if __name__== "__main__": register() \ No newline at end of file