Support for changing all selected items at once
Open, NormalPublic


This is a design task for handling the UI side of this patch:

"The Evolution of Blenders User Interface" by William Reynish (page 20 deals with this topic)


Julian Eisel (Severin) triaged this task as Normal priority.May 11 2015, 1:34 PM

What William Reynish wrote about this here is still up to date I think.

So, to summarize: "Change for all selected" should be (eventually) the default action when changing data values. This way you control the scope of objects for which the values are changed is by selection, which is quite powerful at this point (selecting by type, linked, grouped, in outliner, in 3d view etc.). So to change for one object, you select one object. To change for a range, you select a range of objects.

It can't, I guess, work like this for things like the material slots, light nodes, armature layers, bone groups etc. - but sticking to the "set for active" behavior for these sections would make things inconsistent and confusing.

A way to keep consistency, and to keep things simple, would be to hide them, and display them only when a single object is selected.

We agree with nearly everything you said. For materials, and other datas specific to one object or it's data, why not simply concatenate the lists ?
obj_1 has material1 and material2
obj_2 has material1 and material3
obj_3 has material 3 and material5
the list of materials shows materials 1,2,3 and 5. If you change one of them, only the objects with those materials get affected. It's already the case if they are selected or not anyway.

BMesh API support editing multiple objects at once. When Blender supports it in the future, assigning materials to faces with multiple objects selected will be even easier then.

the list of materials shows materials 1,2,3 and 5. If you change one of them, only the objects with those materials get affected. It's already the case if they are selected or not anyway.

The material slots are unnamed though. So when there are more that one empty, when more than one object is selected, you have no way of knowing which is which.

then write the object name in () for those empty slots:
"empty (obj_X)"
"empty (obj_y)"

For the case where a new slot is created with multiple objects selected, the user should be asked directly which material should be used to populate it (new or existing one) to allow quick configuration.

I wrote this to the email thread, but I'll post here for archival purposes and so it does not get lost in the mix:

Just brainstorming here, but this sounds like the perfect project for the new widget system. Maybe when multiple objects are going to be modified, draw some sort of star widget on screen with little rays pointing to each object that is going to be modified.

Another idea would be to put a glowing outline around objects that are going to be modified - something like blizzard games do:

A mockup of how things could work with multi-edit regarding materials.

When you have object or objects with no materials assigned to no material slots, you get fig.1. Clicking on New adds the material to all available material slots.

When you have objects selected with more than one material selected to it's material slots, you get fig.2 - a scrollable list of those materials, with all the goodies that lists have (sorting).

Selecting one of the materials in the list gives you fig.3, where you can replace the material on all of the material slots that it's assigned to, or unassign it. And of course edit it.

Next to the list is an menu button, as currently, depicted in fig.4, with options to unassign all materials from selection (meaning from all slots), replace all materials with a single one, or replace with a newly created one.

Material browser.

Fig.5 is the material browser. Shown are all materials, regardless of selection. The icons at the bottom are for changing the view from Grid to List. Materials can be dragged and dropped from here. When a material is selected, you get fig.6. You can edit it there, and by clicking on the menu button choose to Assign it to Selected, Reset the material to Default, Unassign from all Objects, or Delete (true delete, not unassign). Replace with Material replaces the material with the chosen material in all slots it resides in.

Same commands are also available when RMB clicking on a material (It gets selected to show what will be affected), or a multiple selected materials. When multiple materials are selected, no properties are displayed below, but actions described can be

Not sure about the Assigned and All Materials tabs. These could be 2 main tabs, just Material as currently, and Material Browser.

Any info on why this would work/not work?

A quote from @michael knubben (michaelknubben) about some advanced functionality for this feature.

I think a modifier key could be used, but it would be for the distinction between absolute and relative adjustments, for instance in the case of location.
-Absolute would change every selected object's location to that of the active one when adjusted. If the active object is at x0y0z0, and you change its >location to x0y0z1, all selected objects, no matter their initial location, will now be at x0y0z1.
-Relative would (in the case of the above example) apply the difference between x0y0z0 and x0y0z1 (so: +1 on the z axis) to every selected object's >location.
Every selected object will now move 1 unit on the positive z axis, relative to their initial position.

+1 on William Reynish words!

I think rather than a modifier, we could use some form of notation. Like the # for drivers.
Someting like '+= 2' or '-=5'. That way you could also have /= and *=. This is Python syntax too, so it can expose users to some scripting concepts without having to touch any code.

I'm not sure this is in the scope of multi edit though, it's something that shold be added to numeric inputs (whether they are working in multi or not).

The materials mockup looks cool but rather than in tabs the browser, it could be a "materials" mode in the outliner. That way all browsing and managing can happen in one place.
Or maybe a "Linked Data" mode that shows all datablocks linked to the selected objects (materials, actions, etc.). Same options and settings you mention in the mocks.

Might want to talk with @Bastien Montagne (mont29) too since it's getting into asset browser territory.

hi, after some discussion with Severin in irc, I have some suggestions on "apply to all".
With regard to Materials, we already have the option to apply to all in the materials_utils addon in release.
It would not be hard to move this function to the Materials Specials menu. This would fit in well with the ui & provide easy access to "apply active material to all selected objects". It could also be an option here to do some clean up on materials_utils addon & move it to the specials menu, enabled by default.
With regard to Modifiers, I often use "apply active modifier to all selected objects" as there's no 'Specials' for modifiers, it's easy to add options to the modifier panel.
Here's an image using addon code showing materials specials & modifier specials.

As for "to all selected" becoming a default action, personally I think this would be more difficult for users, I always want to add changes to the selected/active object, I only sometimes want to make these changes to all selected objects.

I'm not sure on the multi edit materials, I have extensive materials libs on blendswap, & rarely need to make batch changes, I can see use for it. maybe again, an operator in the materials specials with a pop up for multi select/batch name change would be an answer here.

Keep up the good work.

hi again,
Another option I came across would be to have a batch process menu embedded in the 'W' key specials menu's.
This also could work well as a quick way to access batch functions.

Thanks & best luck. :)

Copying content of above merged task:

Original report by @ronan ducluzeau (zeauro):

Multi-value editing works between modifiers sharing same name.
It works between smoke flows of different types (fire, smoke,fire+smoke), between force fields of different types(Wind,Force..).
But it does not work between fluid and fluid inflows.
It works for illumination between lamps of different types. But it does not for shadows.

In this file, multi-value editing can give same Energy Color to selected lamps.
But it can not do it for Shadow Color, this layer only, only shadow options.
Spotlight settings are not changed. But they have same shadow type.

In scene.001, lamp type is the same. They are all spots with different buffer shadow types.
Multi-Value Editing works for shadow bias.

Comment from @Campbell Barton (campbellbarton):

Currently lamps define different shadow properties for every lamp type, so the code that compares properties match will fail and not see them as being the same, even though from the user perspective they are.

This could be made to work - we could have some more comprehensive property comparison that checks callbacks match... or we could try having a way to not duplicate the properties to begin with. (though checked on this and it doesn't seem so trivial unless we do some trick with an intermediate ShadowLamp type which isn't used by HemiLamp 's, though this seems > overkill)

This is more of a TODO then a bug, but would be good to resolve still

There's also a BA thread for this (link).

Merged in a pretty similar task. This is planned to be handled as part of the 2.8 project.