1 # ##### BEGIN GPL LICENSE BLOCK #####
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 # ##### END GPL LICENSE BLOCK #####
20 "name": "Batch Rename Datablocks",
24 "location": "Search > (rename)",
25 "description": "Batch renaming of datablocks (e.g. rename materials after objectnames)",
27 "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"\
28 "Scripts/Object/Batch_Rename_Datablocks",
29 "tracker_url": "http://projects.blender.org/tracker/index.php?"\
30 "func=detail&aid=25242",
35 from bpy.props import *
37 def get_first_material_name(ob):
38 for m_slot in ob.material_slots:
40 material_name = m_slot.material.name
43 def get_name(self, ob):
44 if self.naming_base == 'Object':
47 if self.naming_base == 'Mesh':
48 if ob.data: return ob.data.name
51 if self.naming_base == 'Material':
52 material_name = get_first_material_name(ob)
53 if not material_name: return ob.name
54 else: return material_name
56 if self.naming_base == 'Custom':
57 return self.rename_custom
60 def rename_datablocks_main(self, context):
61 obs = context.selected_editable_objects
63 name = get_name(self, ob)
65 if self.rename_object:
66 if (self.rename_use_prefix
67 and self.prefix_object):
68 ob.name = self.rename_prefix + name
74 and ob.data.users == 1):
75 if (self.rename_use_prefix
76 and self.prefix_data):
77 ob.data.name = self.rename_prefix + name
81 if self.rename_material:
83 for m_slot in ob.material_slots:
85 if m_slot.material.users == 1:
86 if (self.rename_use_prefix
87 and self.prefix_material):
88 m_slot.material.name = self.rename_prefix + name
90 m_slot.material.name = name
92 class OBJECT_OT_batch_rename_datablocks(bpy.types.Operator):
93 """Batch rename Datablocks"""
94 bl_idname = "object.batch_rename_datablocks"
95 bl_label = "Batch Rename Datablocks"
96 bl_options = {'REGISTER', 'UNDO'}
99 ('Object', 'Object', 'Object'),
100 ('Mesh', 'Mesh', 'Mesh'),
101 ('Material', 'Material', 'Material'),
102 ('Custom', 'Custom', 'Custom')
104 naming_base = EnumProperty(name='Name after:',
106 rename_custom = StringProperty(name='Custom Name',
108 description='Rename all with this String')
109 rename_object = BoolProperty(name='Rename Objects',
111 description='Rename Objects')
112 rename_data = BoolProperty(name='Rename Data',
114 description='Rename Object\'s Data')
115 rename_material = BoolProperty(name='Rename Materials',
117 description='Rename Objects\' Materials')
118 rename_use_prefix = BoolProperty(name='Add Prefix',
120 description='Prefix Objectnames with first Groups name')
121 rename_prefix = StringProperty(name='Prefix',
123 description='Prefix name with this string')
124 prefix_object = BoolProperty(name='Object',
126 description='Prefix Object Names')
127 prefix_data = BoolProperty(name='Data',
129 description='Prefix Data Names')
130 prefix_material = BoolProperty(name='Material',
132 description='Prefix Material Names')
136 def draw(self, context):
138 col = layout.column()
139 col.label(text='Rename after:')
142 row.prop(self.properties, 'naming_base', expand=True)
144 col = layout.column()
145 col.prop(self.properties, 'rename_custom')
148 col.label('Datablocks to rename:')
149 col.prop(self.properties, 'rename_object')
150 col.prop(self.properties, 'rename_data')
151 col.prop(self.properties, 'rename_material')
154 col.prop(self.properties, 'rename_use_prefix')
155 col.prop(self.properties, 'rename_prefix')
158 row.prop(self.properties, 'prefix_object')
159 row.prop(self.properties, 'prefix_data')
160 row.prop(self.properties, 'prefix_material')
162 col = layout.column()
165 def poll(cls, context):
166 return context.selected_objects != None
168 def execute(self, context):
170 rename_datablocks_main(self, context)
174 def invoke(self, context, event):
175 wm = context.window_manager
176 wm.invoke_props_dialog(self, self.dialog_width)
177 return {'RUNNING_MODAL'}
181 bpy.utils.register_module(__name__)
184 bpy.utils.unregister_module(__name__)
186 if __name__ == '__main__':