new batch renamer
authorFlorian Meyer <florianfelix@web.de>
Wed, 15 Dec 2010 18:15:09 +0000 (18:15 +0000)
committerFlorian Meyer <florianfelix@web.de>
Wed, 15 Dec 2010 18:15:09 +0000 (18:15 +0000)
object_batch_rename_datablocks.py [new file with mode: 0644]

diff --git a/object_batch_rename_datablocks.py b/object_batch_rename_datablocks.py
new file mode 100644 (file)
index 0000000..1be2c94
--- /dev/null
@@ -0,0 +1,185 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+#  This program is free software; you can redistribute it and/or
+#  modify it under the terms of the GNU General Public License
+#  as published by the Free Software Foundation; either version 2
+#  of the License, or (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software Foundation,
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+#######################################################################
+bl_addon_info = {
+    "name": "Batch Rename Datablocks",
+    "author": "tstscr",
+    "version": (1, 0),
+    "blender": (2, 5, 5),
+    "api": 32013,
+    "location": "use the search :)",
+    "description": "Batch renaming of datablocks (e.g. rename materials after objectnames)",
+    "warning": "",
+    "wiki_url": "",
+    "tracker_url": "",
+    "category": "USER"}
+
+#######################################################################
+import bpy
+from bpy.props import *
+
+def get_first_material_name(ob):
+    for m_slot in ob.material_slots:
+        if m_slot.material:
+            material_name = m_slot.material.name
+            return material_name
+
+def get_name(self, ob):
+    if self.naming_base == 'Object':
+        return ob.name
+    
+    if self.naming_base == 'Mesh':
+        if ob.data: return ob.data.name
+        else: return ob.name
+    
+    if self.naming_base == 'Material':
+        material_name = get_first_material_name(ob)
+        if not material_name: return ob.name
+        else: return material_name
+
+    if self.naming_base == 'Custom':
+        return self.rename_custom
+    
+    
+def rename_datablocks_main(self, obs, context):
+    for ob in obs:
+        name = get_name(self, ob)
+        
+        if self.rename_object:
+            if (self.rename_use_prefix
+            and self.prefix_object):
+                ob.name = self.rename_prefix + name
+            else:
+                ob.name = name
+        
+        if self.rename_data:
+            if (ob.data
+            and ob.data.users == 1):
+                if (self.rename_use_prefix
+                and self.prefix_data):
+                    ob.data.name = self.rename_prefix + name
+                else:
+                    ob.data.name = name
+        
+        if self.rename_material:
+            if ob.material_slots:
+                for m_slot in ob.material_slots:
+                    if m_slot.material:
+                        if m_slot.material.users == 1:
+                            if (self.rename_use_prefix
+                            and self.prefix_material):
+                                m_slot.material.name = self.rename_prefix + name
+                            else:
+                                m_slot.material.name = name
+
+class OBJECT_OT_batch_rename_datablocks(bpy.types.Operator):
+    '''Batch rename Datablocks'''
+    bl_idname = "object.batch_rename_datablocks"
+    bl_label = "Batch Rename Datablocks"
+    bl_options = {'REGISTER', 'UNDO'}
+    
+    name_origins = [
+                    ('Object', 'Object', 'Object'),
+                    ('Mesh', 'Mesh', 'Mesh'),
+                    ('Material', 'Material', 'Material'),
+                    ('Custom', 'Custom', 'Custom')
+                    ]
+    naming_base = EnumProperty(name='Name after:',
+                                default='',
+                                items=name_origins)
+    rename_custom = StringProperty(name='Custom Name',
+                                default='New Name',
+                                description='Rename all with this String')
+    rename_object = BoolProperty(name='Rename Objects',
+                                default=False,
+                                description='Rename Objects')
+    rename_data = BoolProperty(name='Rename Data',
+                                default=True,
+                                description='Rename Object\'s Data')
+    rename_material = BoolProperty(name='Rename Materials',
+                                default=True,
+                                description='Rename Objects\' Materials')
+    rename_use_prefix = BoolProperty(name='Add Prefix',
+                                default=False,
+                                description='Prefix Objectnames with first Groups name')
+    rename_prefix = StringProperty(name='Prefix',
+                                default='',
+                                description='Prefix name with this string')
+    prefix_object = BoolProperty(name='Object',
+                                default=True,
+                                description='Prefix Object Names')
+    prefix_data = BoolProperty(name='Data',
+                                default=True,
+                                description='Prefix Data Names')
+    prefix_material = BoolProperty(name='Material',
+                                default=True,
+                                description='Prefix Material Names')
+
+    dialog_width = 250
+
+    def draw(self, context):
+        layout = self.layout
+        col = layout.column()
+        col.label(text='Rename after:')
+        
+        row = layout.row()
+        row.prop(self.properties, 'naming_base', expand=True)
+        
+        col = layout.column()
+        col.prop(self.properties, 'rename_custom')
+
+        col.separator()
+        col.label('Datablocks to rename:')
+        col.prop(self.properties, 'rename_object')
+        col.prop(self.properties, 'rename_data')
+        col.prop(self.properties, 'rename_material')
+        
+        col.separator()
+        col.prop(self.properties, 'rename_use_prefix')
+        col.prop(self.properties, 'rename_prefix')
+        
+        row = layout.row()
+        row.prop(self.properties, 'prefix_object')
+        row.prop(self.properties, 'prefix_data')
+        row.prop(self.properties, 'prefix_material')
+        
+        col = layout.column()
+        
+    @classmethod
+    def poll(cls, context):
+        return context.selected_objects != None
+
+    def execute(self, context):
+
+        obs = context.selected_objects
+        rename_datablocks_main(self, obs, context)
+        
+        return {'FINISHED'}
+
+    def invoke(self, context, event):
+        wm = context.window_manager
+        wm.invoke_props_dialog(self, self.dialog_width)
+        return {'RUNNING_MODAL'}
+        
+        
+def register():
+    pass
+def unregister():
+    pass
+if __name__ = '__main__':
+    register()