import bpy
import bmesh
S_o = bpy.context.selected_objects
for Obj in S_o:
bpy.ops.object.mode_set(mode='OBJECT')
selected_indices = [v.index for v in Obj.data.vertices if v.select]
unselected_indices = [v.index for v in Obj.data.vertices if not(v.select)]
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.normals_make_consistent()
bpy.ops.mesh.select_all(action='DESELECT')
bpy.ops.object.mode_set(mode='OBJECT')
import bpy
bpy.context.scene.objects.active = Obj
bpy.ops.object.mode_set(mode='EDIT')
bm = bmesh.from_edit_mesh(Obj.data)
for Indice in bm.verts:
if Indice.index in selected_indices:
Indice.select = True
elif Indice.index in unselected_indices:
Indice.select = False
bmesh.update_edit_mesh(Obj.data)
I wrote a script that allows you to select multiple objects in blender 2.78a, and recalculate all of the objects shading within that selection while retaining the vertex selections of the selected objects meshes. However this functionality is somewhat bugged and it will only work on one object at a time; in maintaining those internal vertex selections.otherwise everything else works fine, enjoy : )