From 8d98af718e6cc02373a469411caa2024b3060db7 Mon Sep 17 00:00:00 2001 From: Adam Parkinson Date: Fri, 30 May 2025 09:49:41 +0100 Subject: [PATCH 1/2] - fix error when renaming affixes for objects referenced in read-only file. --- src/addons/send2ue/resources/extensions/affixes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/addons/send2ue/resources/extensions/affixes.py b/src/addons/send2ue/resources/extensions/affixes.py index 0bc41235..d674813d 100644 --- a/src/addons/send2ue/resources/extensions/affixes.py +++ b/src/addons/send2ue/resources/extensions/affixes.py @@ -113,12 +113,12 @@ def append_affix(scene_object, affix, is_image=False): if affix.endswith("_"): if scene_object.name.startswith(affix): return # Do not add prefix when its already present - scene_object.name = affix + asset_name + ext + scene_object.rename(affix + asset_name + ext) # Suffix else: if scene_object.name.endswith(affix): return # Do not add suffix when its already present - scene_object.name = asset_name + affix + ext + scene_object.rename(asset_name + affix + ext) return scene_object.name @@ -138,11 +138,11 @@ def discard_affix(scene_object, affix, is_image=False): # Prefix if affix.endswith("_"): if scene_object.name.startswith(affix): - scene_object.name = asset_name[len(affix):] + ext + scene_object.rename(asset_name[len(affix):] + ext) # Suffix else: if scene_object.name.endswith(affix): - scene_object.name = asset_name[:-len(affix)] + ext + scene_object.rename(asset_name[:-len(affix)] + ext) def get_texture_images(mesh_object): From 6b7e68a532330d16f26de95543c6202ff4bb35fd Mon Sep 17 00:00:00 2001 From: Adam Parkinson Date: Thu, 12 Jun 2025 16:07:30 +1000 Subject: [PATCH 2/2] - attempt to address API differences between 4.0-4.2 and 4.3-onwards. (#157) --- .../send2ue/resources/extensions/affixes.py | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/addons/send2ue/resources/extensions/affixes.py b/src/addons/send2ue/resources/extensions/affixes.py index d674813d..a2d5ba31 100644 --- a/src/addons/send2ue/resources/extensions/affixes.py +++ b/src/addons/send2ue/resources/extensions/affixes.py @@ -97,6 +97,24 @@ def save_image_filepath(image): path, filename = os.path.split(image.filepath_from_user()) AffixesExtension.images_original_paths.append(path) +def safe_rename(scene_object, new_name): + if bpy.app.version[0] >= 4 and bpy.app.version[1] >= 3: + # v4.3 introduced new API for mutating object names + scene_object.rename(new_name) + else: + # v4.2.x and earlier + try: + scene_object.name = new_name + except AttributeError: + if bpy.app.version[0] >= 4: + # workaround for v4.0 - v4.2.x + # (v4.0 blocks renames for objs in linked files but didn't introduce an alternative API until v4.3). + utilities.report_error('WARNING', f'Failed to rename read-only object "{scene_object.name}" to "{new_name}"', False) + else: + # v3.x or earlier, raise as ususal + raise + + def append_affix(scene_object, affix, is_image=False): """ Appends the affix to the object. @@ -113,12 +131,12 @@ def append_affix(scene_object, affix, is_image=False): if affix.endswith("_"): if scene_object.name.startswith(affix): return # Do not add prefix when its already present - scene_object.rename(affix + asset_name + ext) + safe_rename(scene_object, affix + asset_name + ext) # Suffix else: if scene_object.name.endswith(affix): return # Do not add suffix when its already present - scene_object.rename(asset_name + affix + ext) + safe_rename(scene_object, asset_name + affix + ext) return scene_object.name @@ -138,11 +156,11 @@ def discard_affix(scene_object, affix, is_image=False): # Prefix if affix.endswith("_"): if scene_object.name.startswith(affix): - scene_object.rename(asset_name[len(affix):] + ext) + safe_rename(scene_object, asset_name[len(affix):] + ext) # Suffix else: if scene_object.name.endswith(affix): - scene_object.rename(asset_name[:-len(affix)] + ext) + safe_rename(scene_object, asset_name[:-len(affix)] + ext) def get_texture_images(mesh_object):