Page MenuHome

Armature layer dots not updated on changes
Closed, ResolvedPublic

Description

System Information
Win10
Gtx 980

Blender Version
Broken: 2.8 current build

Short description of error
Usually if an armature layer contained bones, a dot icon is used to show that it's not empty.
However when merging two armatures, if one armature contains bones in a hidden layer, the dot icon is not displayed after merging.

Exact steps for others to reproduce the error

  • Open the blend file

  • There are two armature in the scene. "Armature1" contain one bone in the first layer (visible)."Armature2" contains one bone in a hidden layer (8)
  • Select "Armature2" then "Armature1". Ctrl-J to join.
  • The dot icon is missing on the 8th layer.

Event Timeline

lucas veber (lucky3) renamed this task from Armature layers: dot not displayed on armature layers to Armature layers: dot not displayed.
Sebastian Parborg (zeddb) triaged this task as Confirmed, Medium priority.

I doesn't seem to matter which way I join or if the are visible or not.
If I join 1 to 2, only the dots from 2 is visible and if I join 2 to 1 only 1 dots are visible.

@Brecht Van Lommel (brecht) who to assign this to?

I don't know since when, but at least in c59370bf643f, the dots on armature layers don't display, period. Edit mode, pose mode, after joining separate armatures, nothing.

The only way I found was by appending a skeleton from a 2.79 blend. But even then, the dots that were there the moment it appended will stay there for ever, even if you delete every bone.

Demeter Dzadik (Mets) added a comment.EditedFeb 4 2019, 6:15 PM

This seems to be fixed as of at least a1ae04d15a9f, maybe longer. All the dots are working perfectly for me. Yay!!!

Edit: Fixed in pose mode only! :C If moving bones to different layers in edit mode, it's still broken.

Does not seem fixed in the latest daily build.

Yes, today I tried on several computers and does not work, there is no indication.

Brecht Van Lommel (brecht) renamed this task from Armature layers: dot not displayed to Armature layer dots not updated on changes.

I test with recent builds, script generate new edit-bone (bn) for armature, at same time set bone layer , bn.layers[16] = True
bn.layers[0] = False

bone move to layers 16, but the dot of layer 16 not up-date. and there seems no way to force up-date from blender UI

I want to recommend this bug to be considered High prio, since I think it will confuse or even turn off a lot of people from 2.80, if god forbid it stays in for the final release. Just a thought tho.

The description of the issue can be much simpler:

Moving bones between layers in edit mode doesn't show the dot icon in the layers UI. Works fine in Pose mode.

I hope this can be addressed before the release, while making the Blender Fundamentals training videos this issue pops up constantly and it's a pity to have to explain it is a missing update bug.

This only fixes the case for joining armatures, there is a deeper problem here.

This works great now, thank you! The only remaining issue is that upon creation of the armature, the bone layer still does not display there being a bone in the first layer by default. Everything else works great!

As Dillon Gu said, When generate armature as single bone from blender UI , bone can not show dot (though it is located layers[0])
so to show bone dot, I must need to change bone layer from blender UI. (3d view topmenu > Armature >change bone layers once)

but if I use bpy to change bone layer,
ebn.layers[1] = True, ebn.layers[0] = False , it change bone layer, but bone dots not up-date correctly. (dot should be layer[1])

Is there way to up-date it from bpy? if I must need to use bpy.ops ?

"bpy.ops.armature.bone_layers()" could up-date, without change current each bone layer.

if set bone layer by bpy.data, or when all bone layer is default, layer[0],
run "bpy.ops.armature.bone_layers()" for one bone of armature, seems up-date all bones dot correctly.

amt = bpy.context.active_object
bpy.ops.object.mode_set(mode = 'EDIT')
ebns = amt.data.edit_bones
ebn = ebns[0]
layer = ebn.layers
bpy.ops.armature.bone_layers(layers=layer)