[Bf-extensions-cvs] [802904cf] master: materials_utils: return to release: T67990 T63750 01d80b8f602f

meta-androcto noreply at git.blender.org
Sun Aug 11 07:54:36 CEST 2019


Commit: 802904cf43da3deed2094520e17a79d8020d372a
Author: meta-androcto
Date:   Sun Aug 11 15:54:11 2019 +1000
Branches: master
https://developer.blender.org/rBA802904cf43da3deed2094520e17a79d8020d372a

materials_utils: return to release: T67990 T63750 01d80b8f602f

===================================================================

A	materials_utils/__init__.py
A	materials_utils/enum_values.py
A	materials_utils/functions.py
A	materials_utils/menus.py
A	materials_utils/operators.py

===================================================================

diff --git a/materials_utils/__init__.py b/materials_utils/__init__.py
new file mode 100644
index 00000000..40f976d7
--- /dev/null
+++ b/materials_utils/__init__.py
@@ -0,0 +1,179 @@
+# ##### 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 #####
+ 
+#  Based on 2010 version by MichaelW
+#  (c) 2016 meta-androcto, parts based on work by Saidenka, lijenstina
+#  Materials Utils: by MichaleW, meta-androcto, lijenstina,
+#  (some code thanks to: CoDEmanX, SynaGl0w, ideasman42)
+#  Link to base names: Sybren, Texture renamer: Yadoob
+#  Ported from 2.6/2.7 to 2.8x by Christopher Hindefjord (chrishinde) 2019
+
+bl_info = {
+    "name": "Material Utils",
+    "author": "MichaleW, ChrisHinde",
+    "version": (1, 0, 6),
+    "blender": (2, 80, 0),
+    "location": "View3D > Shift + Q key",
+    "description": "Menu of material tools (assign, select..) in the 3D View",
+    "warning": "",
+    "wiki_url": "https://github.com/ChrisHinde/MaterialUtilities",
+    "category": "Material"
+}
+
+"""
+This script has several functions and operators, grouped for convenience:
+
+* assign material:
+    offers the user a list of ALL the materials in the blend file and an
+    additional "new" entry the chosen material will be assigned to all the
+    selected objects in object mode.
+
+    in edit mode the selected polygons get the selected material applied.
+
+    if the user chose "new" the new material can be renamed using the
+    "last operator" section of the toolbox.
+
+
+* select by material
+    in object mode this offers the user a menu of all materials in the blend
+    file any objects using the selected material will become selected, any
+    objects without the material will be removed from selection.
+
+    in edit mode:  the menu offers only the materials attached to the current
+    object. It will select the polygons that use the material and deselect those
+    that do not.
+
+* clean material slots
+    for all selected objects any empty material slots or material slots with
+    materials that are not used by the mesh polygons or splines will be removed.
+
+* remove material slots
+    removes all material slots of the active (or selected) object(s).
+
+* replace materials
+    lets your replace one material by another. Optionally for all objects in
+    the blend, otherwise for selected editable objects only. An additional
+    option allows you to update object selection, to indicate which objects
+    were affected and which not.
+
+* set fake user
+    enable/disable fake user for materials. You can chose for which materials
+    it shall be set, materials of active / selected / objects in current scene
+    or used / unused / all materials.
+
+"""
+
+
+import bpy
+
+from .enum_values import *
+from .functions import *
+from .operators import *
+from .menus import *
+
+# All classes used by Material Utilities, that need to be registred
+classes = (
+    VIEW3D_OT_materialutilities_assign_material_object,
+    VIEW3D_OT_materialutilities_assign_material_edit,
+    VIEW3D_OT_materialutilities_select_by_material_name,
+    VIEW3D_OT_materialutilities_copy_material_to_others,
+
+    VIEW3D_OT_materialutilities_clean_material_slots,
+    VIEW3D_OT_materialutilities_remove_material_slot,
+    VIEW3D_OT_materialutilities_remove_all_material_slots,
+
+    VIEW3D_OT_materialutilities_replace_material,
+    VIEW3D_OT_materialutilities_fake_user_set,
+    VIEW3D_OT_materialutilities_change_material_link,
+
+    MATERIAL_OT_materialutilities_merge_base_names,
+
+    MATERIAL_OT_materialutilities_material_slot_move,
+
+    VIEW3D_MT_materialutilities_assign_material,
+    VIEW3D_MT_materialutilities_select_by_material,
+
+    VIEW3D_MT_materialutilities_clean_slots,
+    VIEW3D_MT_materialutilities_specials,
+
+    VIEW3D_MT_materialutilities_main,
+)
+
+
+# This allows you to right click on a button and link to the manual
+def materialutilities_manual_map():
+    print("ManMap")
+    url_manual_prefix = "https://github.com/ChrisHinde/MaterialUtilities"
+    url_manual_map = []
+    #url_manual_mapping = ()
+        #("bpy.ops.view3d.materialutilities_*", ""),
+        #("bpy.ops.view3d.materialutilities_assign_material_edit", ""),
+        #("bpy.ops.view3d.materialutilities_select_by_material_name", ""),)
+
+    for cls in classes:
+        if issubclass(cls, bpy.types.Operator):
+            url_manual_map.append(("bpy.ops." + cls.bl_idname, ""))
+
+    url_manual_mapping = tuple(url_manual_map)
+    #print(url_manual_mapping)
+    return url_manual_prefix, url_manual_mapping
+
+mu_classes_register, mu_classes_unregister = bpy.utils.register_classes_factory(classes)
+
+
+def register():
+    """Register the classes of Material Utilities together with the default shortcut (Shift+Q)"""
+    mu_classes_register()
+
+    bpy.types.VIEW3D_MT_object_context_menu.append(materialutilities_specials_menu)
+
+    bpy.types.MATERIAL_MT_context_menu.prepend(materialutilities_menu_move)
+    bpy.types.MATERIAL_MT_context_menu.append(materialutilities_menu_functions)
+
+    kc = bpy.context.window_manager.keyconfigs.addon
+    if kc:
+        km = kc.keymaps.new(name = "3D View", space_type = "VIEW_3D")
+        kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS', ctrl = False, shift = True)
+        kmi.properties.name = VIEW3D_MT_materialutilities_main.bl_idname
+
+        bpy.utils.register_manual_map(materialutilities_manual_map)
+
+
+def unregister():
+    """Unregister the classes of Material Utilities together with the default shortcut for the menu"""
+    mu_classes_unregister()
+
+    bpy.utils.unregister_manual_map(materialutilities_manual_map)
+
+    bpy.types.VIEW3D_MT_object_context_menu.remove(materialutilities_specials_menu)
+
+    bpy.types.MATERIAL_MT_context_menu.remove(materialutilities_menu_move)
+    bpy.types.MATERIAL_MT_context_menu.remove(materialutilities_menu_functions)
+
+    kc = bpy.context.window_manager.keyconfigs.addon
+    if kc:
+        km = kc.keymaps["3D View"]
+        for kmi in km.keymap_items:
+            if kmi.idname == 'wm.call_menu':
+                if kmi.properties.name == VIEW3D_MT_materialutilities_main.bl_idname:
+                    km.keymap_items.remove(kmi)
+                    break
+
+
+if __name__ == "__main__":
+    register()
diff --git a/materials_utils/enum_values.py b/materials_utils/enum_values.py
new file mode 100644
index 00000000..f7f8f65b
--- /dev/null
+++ b/materials_utils/enum_values.py
@@ -0,0 +1,32 @@
+import bpy
+
+
+mu_override_type_enums = [
+    ('OVERRIDE_ALL', "Override all assigned slots",
+        "Remove any current material slots, and assign the current material"),
+    ('OVERRIDE_SLOTS', 'Assign material to each slot',
+        'Keep the material slots, but assign the selected material in each slot'),
+    ('APPEND_MATERIAL', 'Append Material',
+        'Add the material in a new slot, and assign it to the whole object')
+]
+
+mu_fake_user_set_enums = (('ON', "On", "Enable fake user"),
+                          ('OFF', "Off", "Disable fake user"),
+                          ('TOGGLE', "Toggle", "Toggle fake user"))
+mu_fake_user_materials_enums = (('ACTIVE', "Active object", "Materials of active object only"),
+                                ('SELECTED', "Selected objects", "Materials of selected objects"),
+                                ('SCENE', "Scene objects", "Materials of objects in current scene"),
+                                ('USED', "Used", "All materials used by objects"),
+                                ('UNUSED', "Unused", "Currently unused materials"),
+                                ('ALL', "All", "All materials in this blend file"))
+
+mu_link_to_enums = (('DATA', "Data", "Link the materials to the data"),
+                    ('OBJECT', "Object", "Link the materials to the object"),
+                    ('TOGGLE', "Toggle", "Toggle what the materials are currently linked to"))
+mu_link_affect_enums = (('ACTIVE', "Active object", "Materials of active object only"),
+                        ('SELECTED', "Selected objects", "Materials of selected objects"),
+                        ('SCENE', "Scene objects", "Materials of objects in current scene"),
+                        ('ALL', "All", "All materials in this blend file"))
+
+mu_material_slot_move_enums = (('TOP', "Top", "Move slot to the top"),
+                               ('BOTTOM', "Bottom", "Move slot to the bottom"))
diff --git a/materials_utils/functions.py b/materials_utils/functions.py
new file mode 100644
index 00000000..6c8c72bd
--- /dev/null
+++ b/materials_utils/functions.py
@@ -0,0 +1,604 @@
+import bpy
+
+# -----------------------------------------------------------------------------
+# utility functions
+
+def mu_assign_material_slots(object, material_list):
+    """Given an object and a list of material names removes all material slots from the object
+       adds new ones for each material in the material list, adds the materials to the slots as well."""
+
+    scene = bpy.context.scene
+    active_object = bpy.context.active_object
+    bpy.context.view_layer.objects.active = object
+
+    for s in object.material_slots:
+        bpy.ops.object.material_slot_remove()
+
+    # re-add them and assign material
+    i = 0
+    for mat in material_list:
+        material = bpy.data.materials[mat]
+        object.data.materials.append(material)
+        i += 1
+
+    # restore active object:
+    bpy.context.view_layer.objects.active = active_object
+
+de

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list