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",
23 "blender": (2, 80, 0),
24 "location": "Search > (rename)",
25 "description": "Batch renaming of datablocks "
26 "(e.g. rename materials after objectnames)",
28 "doc_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
29 "Scripts/Object/Batch_Rename_Datablocks",
30 "tracker_url": "https://developer.blender.org/maniphest/task/edit/form/2/",
35 from bpy
.props
import (
42 def get_first_material_name(ob
):
43 for m_slot
in ob
.material_slots
:
45 material_name
= m_slot
.material
.name
50 def get_name(self
, ob
):
51 if self
.naming_base
== 'Object':
54 if self
.naming_base
== 'Mesh':
60 if self
.naming_base
== 'Material':
61 material_name
= get_first_material_name(ob
)
67 if self
.naming_base
== 'Custom':
68 return self
.rename_custom
71 def rename_datablocks_main(self
, context
):
72 obs
= context
.selected_editable_objects
74 name
= get_name(self
, ob
)
76 if self
.rename_object
:
77 if (self
.rename_use_prefix
and self
.prefix_object
):
78 ob
.name
= self
.rename_prefix
+ name
84 and ob
.data
.users
== 1):
85 if (self
.rename_use_prefix
and self
.prefix_data
):
86 ob
.data
.name
= self
.rename_prefix
+ name
90 if self
.rename_material
:
92 for m_slot
in ob
.material_slots
:
94 if m_slot
.material
.users
== 1:
95 if (self
.rename_use_prefix
and self
.prefix_material
):
96 m_slot
.material
.name
= self
.rename_prefix
+ name
98 m_slot
.material
.name
= name
101 class OBJECT_OT_batch_rename_datablocks(bpy
.types
.Operator
):
102 """Batch rename Datablocks"""
103 bl_idname
= "object.batch_rename_datablocks"
104 bl_label
= "Batch Rename Datablocks"
105 bl_options
= {'REGISTER', 'UNDO'}
108 ('Object', 'Object', 'Use object name to rename other datablocks'),
109 ('Mesh', 'Mesh', 'Use mesh name to rename other datablocks'),
110 ('Material', 'Material', 'Use material name to rename other datablocks'),
111 ('Custom', 'Custom', 'Use new custom name to rename other datablocks')
113 naming_base
: EnumProperty(
116 rename_custom
: StringProperty(
119 description
='Custom new name')
120 rename_object
: BoolProperty(
121 name
='Rename Objects',
123 description
='Rename Objects')
124 rename_data
: BoolProperty(
127 description
='Rename Object\'s Data')
128 rename_material
: BoolProperty(
129 name
='Rename Materials',
131 description
='Rename Objects\' Materials')
132 rename_use_prefix
: BoolProperty(
135 description
='Prefix Objectnames with first Groups name')
136 rename_prefix
: StringProperty(
139 description
='Prefix name with this string')
140 prefix_object
: BoolProperty(
143 description
='Prefix Object Names')
144 prefix_data
: BoolProperty(
147 description
='Prefix Data Names')
148 prefix_material
: BoolProperty(
151 description
='Prefix Material Names')
155 def draw(self
, context
):
157 col
= layout
.column()
158 col
.label(text
='Rename after:')
161 row
.prop(self
.properties
, 'naming_base', expand
=True)
163 col
= layout
.column()
164 col
.prop(self
.properties
, 'rename_custom')
167 col
.label(text
='Datablocks to rename:')
168 col
.prop(self
.properties
, 'rename_object')
169 col
.prop(self
.properties
, 'rename_data')
170 col
.prop(self
.properties
, 'rename_material')
173 col
.prop(self
.properties
, 'rename_use_prefix')
174 col
.prop(self
.properties
, 'rename_prefix')
177 row
.prop(self
.properties
, 'prefix_object')
178 row
.prop(self
.properties
, 'prefix_data')
179 row
.prop(self
.properties
, 'prefix_material')
181 col
= layout
.column()
184 def poll(cls
, context
):
185 return context
.selected_objects
!= None
187 def execute(self
, context
):
189 rename_datablocks_main(self
, context
)
193 def invoke(self
, context
, event
):
194 wm
= context
.window_manager
195 wm
.invoke_props_dialog(self
, width
=self
.dialog_width
)
196 return {'RUNNING_MODAL'}
200 OBJECT_OT_batch_rename_datablocks
,
205 from bpy
.utils
import register_class
211 from bpy
.utils
import unregister_class
212 for cls
in reversed(classes
):
213 unregister_class(cls
)
216 if __name__
== '__main__':