I want to align an empty (Arrows) to a selected face normal with the empty's Z axis aligning to the normal direction (and location which I have working). When the target objects rotation is 0 it's fine... but if I rotate the target object and then select a face I can't work out how to add the object's matrix_world rotation to the empty's matrix_world rotation (I'm thinking this should be easy but can't solve it atm)... here's the code so far. (Add an Arrows Empty named 'Empty' and select one face on an object). any help greatly appreciated.
import mathutils import bmesh obj = bpy.context.edit_object mw = obj.matrix_world.copy() loc, rot, scale = obj.matrix_world.decompose() bm = bmesh.from_edit_mesh(obj.data) # select one face - testing for f in bm.faces: if f.select: f_location = mw @ f.calc_center_median() print("location: ", f_location) #correct DirectionVector = f.normal bpy.data.objects['Empty'].rotation_mode = 'QUATERNION' bpy.data.objects['Empty'].rotation_quaternion = DirectionVector.to_track_quat('Z','Y') bpy.data.objects['Empty'].location = f_location #bpy.data.objects['Empty'].matrix_world.to_euler = rot