1
$\begingroup$

I wish to edit a component of an object, say a cube, using python script.

For example if I need to change the material or color of just one face of the cube/object, can I do that using python?

$\endgroup$
1
$\begingroup$

Yes, you can. You will need a second material and then assign that material to the face. Here is an example I concocted which affects the faces you have selected in EDIT mode:

import bpy
import bmesh

def get_other_material():
    mat = bpy.data.materials.get("pants")
    if mat is None:
        mat = bpy.data.materials.new("pants")
        mat.diffuse_color = (0.8, 0.6, 0)
    return mat

def setPolyMaterial(obj, polyIdxs):
    if len(obj.data.materials)<2:
        obj.data.materials.append(get_other_material())
    material_index = 1

    if bpy.context.mode == 'EDIT_MESH':
        bm = bmesh.from_edit_mesh(obj.data)    
        for idx in polyIdxs:
            bm.faces[idx].material_index = material_index
        bmesh.update_edit_mesh(obj.data)
    else:
        for idx in polyIdxs:
            obj.data.polygons[idx].material_index = material_index

obj = bpy.context.active_object
if bpy.context..mode == 'EDIT_MESH':
    bm = bmesh.from_edit_mesh(obj.data)
    polyIdxs = [ f.index for f in bm.faces if f.select ]
else:
    polyIdxs = [ p.index for p in obj.data.polygons if p.select ]
setPolyMaterial( obj, polyIdxs)

I personally prefer to avoid anything from bpy.ops if I can because it requires you to mess with the editor state; and exactly what state you must adjust is entirely undocumented (although usually straightforward, USUALLY).

If you want to alter anything other than the diffuse_color, you can hover your mouse over the field and a pop-up will usually appear giving you an indication of the path to that property in python code (although sometimes it is truncated and you have to go to #blenderpython for an answer)

$\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.