3
$\begingroup$

I couldn't apply a Boolean Modifier to duplicate linked object and object array. I got this message in both case:

modifier cannot be applied on multi-user data

Why couldn't I apply the Boolean Modifier, and what do I have to do so that I can apply modifiers in scenarios like this?

$\endgroup$
8
$\begingroup$

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.

unlink object

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.

make single user

You can also press U in the 3D viewport, then select Object & Data. make single user with shortcut

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.

linking objects

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)
$\endgroup$
  • $\begingroup$ So you are saying that I can't develop all parts in the same time? because the result to what you suggest is unlink the objects, and any farther update will not auto applied on the others (the purpose of linking in the first place) $\endgroup$ – Lion4H Sep 30 '16 at 21:00
  • $\begingroup$ Yes, as far as I know this is a limitation that has no better solution. I have added an explanation on linking objects back together to the answer. $\endgroup$ – Leander Sep 30 '16 at 21:13
  • $\begingroup$ So I unlink, apply modifier then relink, I didn't though relinking will apply the update,Thanks for that. $\endgroup$ – Lion4H Sep 30 '16 at 21:18
  • $\begingroup$ I have extended the answer with a python script, which does exactly, what you asked for. $\endgroup$ – Leander Sep 30 '16 at 22:56

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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