I might add that BLM is probably my most used add-on. It is a true godsend. It is in fact SO good, i purchased it twice and I recommend it to anyone using my rigs. You are my hero for making this.
Hello, I just bought this addon on Gumroad but cannot find any usage instructions for it. There’s a PDF on the download page, but it seems to be for something else completely - Quick constraints info?
Hi, I’ve never actually had a request for documentation before… a lot of effort was put in to the tooltips to explain the function of each function/operator… that said, I’ll make an effort to put something together over the coming weekend and add it to the Gumroad downloads… if you have an immediate questions/queries I can answer them here.
That would be great, I guess the first thing I do is read the documentation so I didn’t go through and try to work things out as it seemed it was just missing.
I can work out the Bone Layers panel, that’s fairly self explanatory as are the Display Options.
Rig UI - no idea how this works, I just get “No available UI layers in rig” so I guess it’s waiting for me to create something but I can’t see how. I think it’s for making buttons to assign functions to?
Rig Properties - Edit mode, I think the properties being displayed are a replication of what’s under the Item tab in Blender so perhaps there for convenience? Why would I want to edit these, I’m not sure of the context?
Quick Constraints - again, is this just a handy panel mirroring the Constraints tab for convenience?
ok sooo… the other panels are just there for convenience… the RigUI Panel will show a UI once you assign RigUI Layers to the corresponding bone layers… if you wish to remove a button from the UI just set it to -1…
Ah, thanks. I was going to ask what a RigUI Layer was and where I’d find one but I needed to tick the Show RigUI Layers box - the tooltip on here told me I needed that to show the setup. So I guess using this I can then make a panel to quickly toggle the visibility of different layers which is useful if I organize those into groups of logical bones. That’s nice to have.
I’m using Auto-rig Pro so it’s taken up a lot of the layer slots already and I don’t think I can change those without breaking it, but I can use up the free ones now and have them logically displayed and named.
Hey, guys, totally new here but I am loving the Addon!
Since I am quite new to rigging could any of you tell me how to read the rigui.py script the addon exports?
I try opening in the text editor and running it using alt+P but it doesn’t seem to work. I using Blender 2.9 by the way…
Also a big fan of the addon. On my end with blender 2.91 the generated script works fine.
Create your rig
Name the Bone layers through the addon
Put the bones on the correct layers
Assign Rig UI layers (pick a row number essentially)
Preview the Rig UI under the Rig UI segment to make sure your happy with the layout
Export script
Open it in the text editor and run it
Go to your 3d view and notice that under the Item tab underneath the default properties segment there is now a new Rig UI segment with easy buttons to turn bone layers on and off.
I was getting a NoneType console error in 2.92 after duplicating a bone in edit mode
Python: Traceback (most recent call last):
File “Blender\2.92\scripts\addons\bone_layer_manager\customprop_panel.py”, line 78, in draw
for o in obs
File “Blender\2.92\scripts\addons\bone_layer_manager\customprop_panel.py”, line 80, in
if b.bone.select
AttributeError: ‘NoneType’ object has no attribute ‘select’
location: :-1
Changing on line 68 ‘EDIT’ to ‘EDIT_ARMATURE’ seems to have fixed it for me at least in case somebody else is having the same issue.
Hello, I got a question if you don’t mind me to ask. I exported a RigUI as a script. But then how can I import it? I open it in text editor in Blender and execute it like a script, but the RigUI doesnt shown up.
The script looks like this:
### RigUI Script generated by Bone Layers Addon ###
import bpy
blm_rig_id = "b3mksxeg81k2"
class BLOP_PT_rigui_b3mksxeg81k2(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_category = 'Item'
bl_label = "Rig UI"
bl_idname = "BLOP_PT_rigui_b3mksxeg81k2"
@classmethod
def poll(self, context):
try:
return (context.active_object.data.get("blm_rig_id") == blm_rig_id)
except (AttributeError, KeyError, TypeError):
return False
def draw(self, context):
layout = self.layout
col = layout.column()
row = col.row(align=True)
row.prop(context.active_object.data,'layers', index=29, toggle=True, text='De')
class BLOP_PT_customprops_b3mksxeg81k2(bpy.types.Panel):
bl_category = 'Item'
bl_label = "Rig Properties"
bl_idname = "BLOP_PT_customprops_b3mksxeg81k2"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(self, context):
if context.mode != 'POSE':
return False
try:
return (context.active_object.type == 'ARMATURE')
except (TypeError):
return False
def draw(self, context):
layout = self.layout
pose_bones = context.active_object.pose.bones
try:
selected_bones = [bone.name for bone in context.selected_pose_bones]
selected_bones += [context.active_pose_bone.name]
except (AttributeError, TypeError):
return
def assign_props(row, val, key):
row.property = key
row.data_path = "active_pose_bone"
try:
row.value = str(val)
except:
pass
active_pose_bone = context.active_pose_bone
rna_properties = {
prop.identifier for prop in bpy.types.PoseBone.bl_rna.properties
if prop.is_runtime
}
# Iterate through selected bones add each prop property of each bone to the panel.
for bone in context.selected_pose_bones:
if len(bone.keys()) > 1:
box = layout.box()
for key in sorted(bone.keys()):
if key != '_RNA_UI' and key not in rna_properties:
val = bone.get(key, "value")
row = box.row()
split = row.split(align=True, factor=0.7)
row = split.row(align=True)
row.label(text=key, translate=False)
row = split.row(align=True)
row.prop(bone, f'["{key}"]', text = "", slider=True)
classes = (BLOP_PT_rigui_b3mksxeg81k2, BLOP_PT_customprops_b3mksxeg81k2, )
register, unregister = bpy.utils.register_classes_factory(classes)
if __name__ == "__main__":
register()