Bone Manager (Addon)

In 2.9, the console gets filled with this error, my guess is, one of the constant names has changed, I have not been able to ascertain that yet, tho.

If you would like, I can try to put together a test file. The one I am working on is pretty hefty.

location: <unknown location>:-1
Traceback (most recent call last):
  File "C:\Users\AppData\Roaming\Blender Foundation\Blender\2.90\scripts\addons\bone_layer_manager\qconstraints_panel.py", line 548, in draw
    getattr(ConstraintButtonsPanel, con.type)(ConstraintButtonsPanel, bone, box, con)
AttributeError: type object 'ConstraintButtonsPanel' has no attribute 'COPY_ROTATION'
1 Like

Thanks for the report… I’ll fix this asap.

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.

1 Like

Thank you for your kind words… 2.9x version now available on Gumroad. :v:t2:

2 Likes

Hi! I LOVE this addon!

Maybe I missed something, but is there a way to remove a layer from the RigUI layer list?

1 Like

sure… just set the RigUI layer to -1 :wink: … if you then click on [Audit Layers] it will reset to [Assign RigUI Layer] too.

1 Like

Behold! The mighty boxy bouncy Rrrrrabbit!

He toothless tho… And blind…

Thanks!

1 Like

Awesome! :rabbit:

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?

Can you point me to the documentation please?

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?

Thanks!

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…

rig_ui

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.

Thanks!

1 Like

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…

Thank you

Also a big fan of the addon. On my end with blender 2.91 the generated script works fine.

  1. Create your rig
  2. Name the Bone layers through the addon
  3. Put the bones on the correct layers
  4. Assign Rig UI layers (pick a row number essentially)
  5. Preview the Rig UI under the Rig UI segment to make sure your happy with the layout
  6. Export script
  7. 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.

1 Like

Thanks for this incredible useful addon!

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.

1 Like

thank you … I’ll check it out asap

1 Like

Thanks for the report will get it patched asap…

edit: now fixed

1 Like

nice. Thanx.

1 Like

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()