If you have a linked object from another scene, you won't be able to apply any modifiers to it. You will have to unlink it by clicking the unlink button in the object properties panel and possibly also in the data properties panel.
If you have two objects, which reference to the same data, you will have to make them a single user. This is done by either clicking the users icon in the data context. This will make the data single user. Both objects will now be individual copies.
You can also press U in the 3D viewport, then select Object & Data.
Method of linking the objects back together
- With the unedited object selected, set the mesh datablock in the Object Data section of the Properties Panel to the edit mesh.
- Select the unedited objects, then select the edited object. Press Ctrl + L and select Object Data to link the objects to the same datablock.
Apply Modifier to Multi User Python Script
I have added a script to do exactly what the question describes: *Apply All Modifiers to Multi-User Datablock.*Just paste this in the text editor, when you want to apply all modifiers to a mesh, hit the run script button of the text editor.
You can resize the text editor until only the RUN SCRIPT button is visible to save space. If you want to add this functionality to Blender, check out how to add a python addon.
import bpy
def applyModifierToMultiUser(scene):
active = scene.objects.active
if (active == None):
print("Select an object")
return
if (active.type != "MESH"):
print("Select an mesh object")
return
mesh = active.to_mesh(scene, True, 'PREVIEW')
linked = []
selected = []
for obj in bpy.data.objects:
if obj.data == active.data:
linked.append(obj)
for obj in bpy.context.selected_editable_objects:
selected.append(obj)
obj.select = False
for obj in linked:
obj.select = True
obj.modifiers.clear()
active.data = mesh
bpy.ops.object.make_links_data(type='OBDATA')
for obj in linked:
obj.select = False
for obj in selected:
obj.select = True
scn = bpy.context.scene
applyModifierToMultiUser(scn)