Scaling multiple objects, Apply scale --> Cannot apply to multi user object

Hey folks,
I´ve downloaded a model and need to scale it to fit my needs. Problem is, the model consists of hundreds of objects with dozens of modifiers and curves and most of them cloned (linked) copies of one another.

I need to scale the thing as a whole single object but the guy didnt seem to have applied scale on all the sub objects. So all objects scale differently.

Tried selecting all objects (a) and applying scale (crtl+a) but get “Cannot apply to a multi user object” on dozens of objects. Trying to scale the engine from this file https://www.dropbox.com/s/onbz7g1w9ondsh0/R1820-60%20only.blend?dl=0
Any ideas on how to scale it uniformly?

Thanks ahead guys

1 Like

do this:

  • select all the instanced objects by selecting one object than SHIFT+L >>> Object Data
  • with all the objects selected press U anche choose “object & data”
  • now you can apply the scale using CTRL+A

if you want to recreate the instances:
-keep all your objects selected and press CTRL+L >>> Object Data.

cheers.

5 Likes

can I know, press U for which menu items ? I am using Blender 2.8rc3 and it does not work with press U.

**I found in 2.8rc3, it’s the menu Object > Relation > Make Single User > “then we choose from the list”
But seem it work only on 1 object even multiple linked objects selected. How can I unlink multiple selected objects ?

3 Likes

did you ever find out how to do this?

did test in 2.79 and 2.9
just select all objects and Ctrl-A
and it will apply scale to all objects !

if not working then elaborate so we can better understand what you mean !

happy bl

have the same problem
tried the SHIFT L – Object data stuff
it didn’t work

i would love some advice

Maybe old, but run into the same and solved it.
In Blender 3.0, Mac its

  1. Select/linked or cmd+l and then chose object data
  2. Object/Relationship/make single user/object and data (no shortcut, but you can define one)
  3. Now you can apply the transform or what ever you want. (cmd+a)
  4. To take it back: Object/Link/Link Object Data (Note that of course scaling of instances was undo in the step before. May be a problem with negativ scaling)

I only wonder why there is no script that does that automatically?

Now if someone wants a macro, these are the commands:

bpy.ops.object.select_linked(type=‘OBDATA’)
bpy.ops.object.make_single_user(object=True, obdata=True, material=False, animation=False, obdata_animation=False)
bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)
bpy.ops.object.make_links_data(type=‘OBDATA’)

2 Likes

Object → Relationship → make single user → object & data

That worked for me. I’m new and I have literally no idea what any of this means, but it seems the objects were linked in some way that the scaling function did not like, and this unlinks them.

I don’t even think the other steps are necessary. Just unlink the object in question.

2 Likes

Linked means Instanced/Referenced. Its basically calling the mesh data for another object. This is also threaten in OpenGL and Render as an instance, meaning it performance faster, as it does need to be loaded individual. Think of a tree with 1 million polygons, and then instance it 10 times without performance problems.
However Blender Objects are not instances anymore, when a modifier get applied. Thats whats also called ‘reference’, its basically justing using the other object as reference for the base geometry.
If you unlink everything you also destroy any Reference or Instance.
But Blender let you reconnect that easily.
So, its a bit like C4D works, 3dsmax does that all automatically, same for Modo, only that Modo always has a main source item (which makes a lot things easier). Maya and Houdini are even more complicate here, allowing the same, but really tricky to relink things.

well it could be usefull when you import meshes in fbx format from other software like modo
some of the obj are linked and have bad scale, here’s a script to fix it, just select the object(s) you want to fix, you can select all the obj of the scene if you want
the script will unlink, fix scale then relink objects

if you want to fix rotation or position you can adjust the script or ask me if you can’t :wink:

import bpy


def fix_scale_linked():

    obj = bpy.context.object
               
    bpy.ops.object.select_linked(type='OBDATA')

    selection_linked = bpy.context.selected_objects

    # make single
    bpy.ops.object.make_single_user(object=True, obdata=True, material=False, animation=False, obdata_animation=False)


    for obj in selection_linked:
        if obj.type == "MESH":
   
            bpy.context.view_layer.objects.active = obj
    
            bpy.ops.object.select_all(action='DESELECT')
            obj.select_set(True)
    
            if obj.scale.x !=1 or obj.scale.y!=1 or obj.scale.z!=1:
    
                bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)

    for obj in selection_linked:
        print (obj.name)
        obj.select_set(True)

    bpy.ops.object.make_links_data(type='OBDATA')

linked = []

selection = bpy.context.selected_objects

for obj in selection:
    linked = []
    if obj.type == "MESH":

        bpy.context.view_layer.objects.active = obj

        bpy.ops.object.select_all(action='DESELECT')
        obj.select_set(True)

        if obj.scale.x <1 or obj.scale.y<1 or obj.scale.z<1:

            for objet in bpy.data.objects:
                if objet.data == obj.data and objet != obj:
                    linked.append(objet)
                    print (">>Pb of SCALE on linked objetcs : " + obj.name + " | " + objet.name + " | " + str(round(obj.scale.x,4)))
            if linked:        
                fix_scale_linked()
            else:
                bpy.ops.object.transform_apply(location=False, rotation=False, scale=True)

I couldn’t get that script to do anything. Pasted it under scripts, let it run on a selection, no error, nothing changed.

Hi Robert,
The newest version 3.2 of blender lets you apply transform on linked objects there’s no more warning message :wink:
So I think this script will be useless by now

1 Like

That’s awesome, they fixed that issue in a nice way.

yep, they did a great job but it was a big user request for a long long time, happy it’s over now :wink:

1 Like

Oh, yeah I have seen the popup dialog as error. Should read it next time.

I miss the option: Dismiss all future dialogs with Yes

Only thing that I miss now is a modifier apply to all option… next script please.

This script works great in Blender 4.3 I needed to apply scale to many linked duplicates at once and this worked exactly as advertised.

You mentioned something about version 3 allowing transformation application but I can’t find anything. How is this done natively like you mentioned?

Thank you!

Hello logan683, just hit CTRL-A then apply, you’ll have a warning dialogue before applying, click Apply and voilà !