import bpy from bpy.types import UIList #import collections #import inspect from .core.addon_utils import get_operator_from_id, get_picker_collection from .core.bl_utils import get_mat import re # class RP_UL_picker_source(UIList): # def draw_item(self, context, layout, data, item, _icon, _active_data, _active_propname, _index): # ob = context.object # row = layout.row(align=True) # is_packed = ('picker' in ob.data.rig_picker.keys()) # sub_row = row.row(align=True) # sub_row.prop(item, 'source', text='') # sub_row.enabled = not is_packed # #row.operator('rigpicker.pack_picker', icon='PACKAGE' if is_packed else 'UGLYPACKAGE', text='') class RP_PT_picker_maker_panel(bpy.types.Panel): bl_label = 'Rig Picker' bl_category = 'Rigging' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' @classmethod def poll(cls, context): return context.object def draw_header_preset(self, context): self.layout.operator('rigpicker.add_picker_collection', text="", icon='ADD', emboss=False) def draw(self, context): ob = context.object scn = context.scene collection = get_picker_collection(ob) layout = self.layout col = layout.column(align=False) if collection: col.prop_search(collection.rig_picker, 'rig', scn, 'objects', text='Rig ') col.prop_search(collection.rig_picker, 'canvas', scn, 'objects', text='Canvas ') col.prop_search(collection.rig_picker, 'symmetry', scn, 'objects', text='Symmetry ') if ob.type == 'ARMATURE': box = col.box() box.enabled = not ob.data.library col = box.column(align=False) row = col.row(align=True) row.separator(factor=0.5) row.label(text="Sources") is_packed = ('pickers' in ob.data.rig_picker.keys()) row.operator('rigpicker.pack_picker', icon='PACKAGE' if is_packed else 'UGLYPACKAGE', text='', emboss=False) row.operator("rigpicker.add_picker_source", icon ='ADD', text="", emboss=False) for i, item in enumerate(ob.data.rig_picker.sources): row = col.row(align=True) row.enabled = not is_packed row.prop(item, 'source', text='') row.operator("rigpicker.remove_picker_source", icon ='PANEL_CLOSE', text="", emboss=False).index=i if collection: #layout.separator() layout.prop(collection.rig_picker, 'destination', text='Filepath') layout.operator('rigpicker.save_picker', icon='PASTEDOWN', text='Save Picker') class RP_PT_shape(bpy.types.Panel): bl_label = 'Shape' bl_category = 'Rigging' bl_space_type = 'VIEW_3D' bl_region_type = 'UI' bl_parent_id = "RP_PT_picker_maker_panel" def draw(self, context): ob = context.object scn = context.scene collection = get_picker_collection(ob) layout = self.layout col = layout.column(align=False) if collection: #if context.collection and context.collection.rig_picker.enabled: col = layout.column(align=True) row = col.row(align=True) row.operator('rigpicker.create_shape', icon='MESH_DATA', text='Create Shape') row.operator('rigpicker.mirror_shape', icon='MOD_MIRROR', text='Mirror Shape') col.operator('rigpicker.name_from_bone', icon='SORTALPHA' , text='Name From Bones') col.prop(scn.rig_picker, 'use_pick_bone', icon='EYEDROPPER', text='Auto Bone Assign') if ob.type != 'ARMATURE': box = layout.box() col = box.column(align=False) material_row = col.row(align=True) material_row.operator('rigpicker.remove_mat', icon='REMOVE', text='') material_row.operator('rigpicker.add_mat', icon='ADD', text='') mat = False if ob.type in ('MESH', 'CURVE', 'FONT') and ob.data.materials: mat = get_mat(ob) if mat and mat.node_tree: emission_nodes = [n for n in mat.node_tree.nodes if n.type =='EMISSION'] if emission_nodes: material_row.prop(emission_nodes[0].inputs[0], 'default_value', text='') mat = True if not mat: material_row.label(text='No Material') material_row.operator('rigpicker.eyedropper_mat', icon='EYEDROPPER', text='') shape_type_row = col.row(align=True) shape_type_row.prop(ob.rig_picker,'shape_type',expand = True) shape_type_row.operator('rigpicker.select_shape_type', text='', icon='RESTRICT_SELECT_OFF') if ob.rig_picker.shape_type == 'OPERATOR': op_row = col.row(align=True) op_row.prop(ob.rig_picker, 'operator', text='') op_row.operator('rigpicker.operator_selector', text='', icon='COLLAPSEMENU') if ob.rig_picker.operator: col.prop(ob.rig_picker, 'name', text='Tooltip') col.prop(ob.rig_picker,'shortcut', text='Shortcut') else: col.prop(ob.rig_picker, 'name', text='Tooltip') elif ob.rig_picker.shape_type == 'BONE': if collection and collection.rig_picker.rig: col.prop_search(ob.rig_picker, 'name', collection.rig_picker.rig.pose, 'bones', text='Bone') classes = ( #RP_UL_picker_source, RP_PT_picker_maker_panel, RP_PT_shape ) register, unregister = bpy.utils.register_classes_factory(classes)