9
$\begingroup$

I need some help in removing all material slots in one go using a python script. I am able to use this, would prefer to ave all removed.

bpy.context.object.active_material_index = 0
bpy.ops.object.material_slot_remove()
bpy.context.object.active_material_index = 1
bpy.ops.object.material_slot_remove()
bpy.context.object.active_material_index = 2
bpy.ops.object.material_slot_remove()
$\endgroup$
1
  • $\begingroup$ You'll find some good answers here $\endgroup$ Jul 29, 2019 at 17:07

3 Answers 3

1
$\begingroup$

You can also remove all material slots without calling the operator at all, so you don't have to bother with indexes:

bpy.context.object.data.materials.clear()

In general, I would always try to avoid calling operators unless they do something very specific that is difficult to achieve via calling usual API functions.

$\endgroup$
2
  • $\begingroup$ That would remove the materials, not the slots. $\endgroup$ Jun 15 at 12:31
  • $\begingroup$ Sort of. All materials get removed from the data-block by removing all material slots as well. Afterwards the materials do still exist, but they are no longer linked to the object. Unfortunately the Blender API is not very specific here. $\endgroup$
    – Febulix
    Jun 15 at 15:24
10
$\begingroup$

You can set the index of the list to 0, iterate through all slots and override the context of material_slot_remove():

for obj in bpy.context.selected_editable_objects:
    obj.active_material_index = 0
    for i in range(len(obj.material_slots)):
        bpy.ops.object.material_slot_remove({'object': obj})
$\endgroup$
2
4
$\begingroup$
import bpy #import the blender python library
for x in bpy.context.object.material_slots: #For all of the materials in the selected object:
    bpy.context.object.active_material_index = 0 #select the top material
    bpy.ops.object.material_slot_remove() #delete it
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.