Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'materials_utils/texture_rename.py')
-rw-r--r--materials_utils/texture_rename.py112
1 files changed, 112 insertions, 0 deletions
diff --git a/materials_utils/texture_rename.py b/materials_utils/texture_rename.py
new file mode 100644
index 00000000..8b6fc45f
--- /dev/null
+++ b/materials_utils/texture_rename.py
@@ -0,0 +1,112 @@
+# gpl: author Yadoob
+# -*- coding: utf-8 -*-
+
+import bpy
+from bpy.types import (
+ Operator,
+ Panel,
+ )
+from bpy.props import StringProperty
+from .warning_messages_utils import (
+ warning_messages,
+ c_data_has_images,
+ )
+
+
+class TEXTURE_OT_patern_rename(Operator):
+ bl_idname = "texture.patern_rename"
+ bl_label = "Texture Renamer"
+ bl_description = ("Replace the Texture names pattern with \n"
+ "the attached Image ones. \n"
+ "Works on all Textures (Including Brushes) \n \n"
+ "The First field - the name pattern to replace \n"
+ "The Second - searches for existing names \n")
+ bl_options = {'REGISTER', 'UNDO'}
+
+ def_name = "Texture" # default name
+ is_not_undo = False # prevent drawing props on undo
+ named = StringProperty(
+ name="Search for name",
+ default=def_name
+ )
+
+ @classmethod
+ def poll(cls, context):
+ return c_data_has_images()
+
+ def draw(self, context):
+ layout = self.layout
+ if self.is_not_undo is True:
+ box = layout.box()
+
+ box.prop(self, "named", text="Name pattern", icon="SYNTAX_ON")
+ layout.separator()
+ boxs = layout.box()
+ boxs.prop_search(self, "named", bpy.data, "textures")
+ else:
+ layout.label(text="**Only Undo is available**", icon="INFO")
+
+ def invoke(self, context, event):
+ self.is_not_undo = True
+ return context.window_manager.invoke_props_dialog(self)
+
+ def execute(self, context):
+ errors = [] # collect texture names without images attached
+ tex_count = 0 # check if there is textures at all
+
+ for texture in bpy.data.textures:
+ try:
+ if texture and self.named in texture.name and texture.type in {"IMAGE"}:
+ tex_count += 1
+ textname = ""
+ img = (bpy.data.textures[texture.name].image if bpy.data.textures[texture.name] else None)
+ if not img:
+ errors.append(str(texture.name))
+ for word in img.name:
+ if word != ".":
+ textname = textname + word
+ else:
+ break
+ texture.name = textname
+ if texture.type != "IMAGE": # rename specific textures as clouds, environnement map,...
+ texture.name = texture.type.lower()
+ except:
+ continue
+
+ if tex_count == 0:
+ warning_messages(self, 'NO_TEX_RENAME')
+ elif errors:
+ warning_messages(self, 'TEX_RENAME_F', errors, 'TEX')
+
+ # reset name to default
+ self.named = self.def_name
+
+ self.is_not_undo = False
+
+ return {'FINISHED'}
+
+
+class TEXTURE_PT_rename_panel(Panel):
+ # Creates a Panel in the scene context of the properties editor
+ bl_label = "Texture Rename"
+ bl_idname = "SCENE_PT_layout"
+ bl_space_type = 'PROPERTIES'
+ bl_region_type = 'WINDOW'
+ bl_context = "texture"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator("texture.patern_rename")
+
+
+def register():
+ bpy.utils.register_module(__name__)
+ pass
+
+
+def unregister():
+ bpy.utils.unregister_module(__name__)
+ pass
+
+if __name__ == "__main__":
+ register()