43 lines
1 KiB
Python
43 lines
1 KiB
Python
import bpy
|
|
import re
|
|
from collections import defaultdict
|
|
|
|
# Match patterns like:
|
|
# - test.001, test.002
|
|
# - test001, test002
|
|
pattern_dot = re.compile(r"^(.*)\.(\d{3})$")
|
|
pattern_nodot = re.compile(r"^(.*?)(\d{3})$")
|
|
|
|
# Group objects by base name
|
|
groups = defaultdict(list)
|
|
|
|
for obj in bpy.data.objects:
|
|
if obj.type != 'MESH':
|
|
continue
|
|
|
|
name = obj.name
|
|
base_name = None
|
|
|
|
# Match dot pattern (e.g., Cube.001)
|
|
match = pattern_dot.match(name)
|
|
if match:
|
|
base_name = match.group(1)
|
|
|
|
# Match no-dot pattern (e.g., Cube001)
|
|
else:
|
|
match = pattern_nodot.match(name)
|
|
if match:
|
|
base_name = match.group(1)
|
|
|
|
if base_name:
|
|
groups[base_name].append(obj)
|
|
|
|
# Delete redundant meshes (keep base name only)
|
|
for base_name, objs in groups.items():
|
|
# Sort objects by name
|
|
objs.sort(key=lambda o: o.name)
|
|
|
|
for obj in objs:
|
|
if obj.name != base_name:
|
|
print(f"Deleting: {obj.name}")
|
|
bpy.data.objects.remove(obj, do_unlink=True)
|