144 lines
5.6 KiB
Python
144 lines
5.6 KiB
Python
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) |