199 lines
6.6 KiB
Python
199 lines
6.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.prop(
|
|
scn.rig_picker,
|
|
"use_pick_bone",
|
|
icon="EYEDROPPER",
|
|
text="Auto Bone Assign",
|
|
)
|
|
col.operator(
|
|
"rigpicker.name_from_bone", icon="SORTALPHA", text="Name From Bones"
|
|
)
|
|
else:
|
|
col = layout.column(align=True)
|
|
row = col.row(align=True)
|
|
row.operator(
|
|
"rigpicker.create_shape", icon="MESH_DATA", text="Create Shape"
|
|
)
|
|
|
|
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)
|