MaximCherchuk

material_eraser

Mar 31st, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.63 KB | None | 0 0
  1. import bpy
  2. from bpy.props import BoolProperty
  3. import sys
  4. import logging
  5. argv = sys.argv[sys.argv.index('--') + 1:]
  6. path_to_save = argv[0]
  7.  
  8.  
  9. def set_scene_properties(scene):
  10.     bpy.types.Scene.Respect = BoolProperty(
  11.         name='Respect Fake User', description='Respect Fake User for all removal actions'
  12.     )
  13.     scene['Respect'] = True
  14.  
  15.  
  16. def erase_unused_materials():
  17.     material_list = []
  18.     scene = bpy.context.scene
  19.     set_scene_properties(scene)
  20.     scenes = bpy.data.scenes
  21.     for i in range(len(scenes)):
  22.         for obj in scenes[i].objects:
  23.             if obj.type == 'MESH' or obj.type == 'SURFACE' \
  24.                or obj.type == 'META' or obj.type == 'CURVE' or obj.type == 'FONT':
  25.                 if obj.data.materials == '' or len(obj.material_slots.items()):
  26.                     for slot in obj.material_slots:
  27.                         material_list.append(slot.material)
  28.  
  29.     material_list = list(set(material_list))  # duplicates removal
  30.  
  31.     for material in bpy.data.materials:
  32.         if material not in material_list:
  33.             option = False if scene['Respect'] else True
  34.  
  35.             if option and material.use_fake_user:
  36.                 material.use_fake_user = False
  37.  
  38.             if not material.use_fake_user:
  39.                 logging.warning(material.name)
  40.                 material.user_clear()
  41.                 bpy.data.materials.remove(material, do_unlink=False)
  42.                 # bpy.data.materials.remove(material, do_unlink=True)  # to be tested (do_unlink=True)
  43.  
  44.  
  45. def save_as_new(path):
  46.     bpy.ops.wm.save_as_mainfile(filepath=path)
  47.  
  48. erase_unused_materials()
  49. save_as_new(path_to_save)
Advertisement
Add Comment
Please, Sign In to add comment