40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
import bpy
|
|
def get_all_visible_materials():
|
|
objects=[ob for ob in bpy.context.view_layer.objects if ob.visible_get()]
|
|
slot_array = [object.material_slots for object in objects]
|
|
vis_mat = set()
|
|
for slots in slot_array:
|
|
for slot in slots:
|
|
vis_mat.add(slot.material)
|
|
|
|
# to remove None values in list
|
|
vis_mat = list(filter(None, vis_mat))
|
|
return vis_mat
|
|
|
|
def get_selected_materials(selected_objects):
|
|
selected_materials = set()
|
|
slots_array = [obj.material_slots for obj in selected_objects]
|
|
for slots in slots_array:
|
|
for slot in slots:
|
|
selected_materials.add(slot.material)
|
|
return selected_materials
|
|
|
|
def clean_empty_materials():
|
|
for obj in bpy.data.objects:
|
|
for slot in obj.material_slots:
|
|
mat = slot.material
|
|
if mat is None:
|
|
print("Removed Empty Materials from " + obj.name)
|
|
bpy.ops.object.select_all(action='DESELECT')
|
|
obj.select_set(True)
|
|
bpy.ops.object.material_slot_remove()
|
|
|
|
def clean_no_user_materials():
|
|
for material in bpy.data.materials:
|
|
if not material.users:
|
|
bpy.data.materials.remove(material)
|
|
|
|
def use_nodes():
|
|
for material in bpy.data.materials:
|
|
if not material.use_nodes:
|
|
material.use_nodes = True |