From 4701164a6cf6761a6da7760ff8f83e9c7ebcff3d Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Fri, 8 Apr 2022 21:50:31 +0800 Subject: [PATCH] add panel code basically. preparing for future dev --- .../PROPS_virtools_group.py | 60 ++++++++++++++ .../PROPS_virtools_material.py | 26 ++++++ .../UTILS_virtools_prop.py | 82 +++++++++++++++++++ ballance_blender_plugin/__init__.py | 28 ++++++- 4 files changed, 193 insertions(+), 3 deletions(-) create mode 100644 ballance_blender_plugin/PROPS_virtools_group.py create mode 100644 ballance_blender_plugin/PROPS_virtools_material.py create mode 100644 ballance_blender_plugin/UTILS_virtools_prop.py diff --git a/ballance_blender_plugin/PROPS_virtools_group.py b/ballance_blender_plugin/PROPS_virtools_group.py new file mode 100644 index 0000000..fb8d0ec --- /dev/null +++ b/ballance_blender_plugin/PROPS_virtools_group.py @@ -0,0 +1,60 @@ +import bpy +from . import UTILS_constants, UTILS_functions, UTILS_virtools_prop + +class BALLANCE_OT_add_virtools_group(bpy.types.Operator): + """Add a Virtools Group for Active Object.""" + bl_idname = "ballance.add_virtools_group" + bl_label = "Add Virtools Group" + bl_options = {'UNDO'} + + @classmethod + def poll(self, context): + return context.object is not None + + def execute(self, context): + obj = context.object + UTILS_virtools_prop.set_virtools_group_data(obj, ("aaa", "bbb", "ccc")) + return {'FINISHED'} + +class BALLANCE_OT_rm_virtools_group(bpy.types.Operator): + """Remove a Virtools Group for Active Object.""" + bl_idname = "ballance.rm_virtools_group" + bl_label = "Remove Virtools Group" + bl_options = {'UNDO'} + + @classmethod + def poll(self, context): + return context.object is not None + + def execute(self, context): + obj = context.object + print(UTILS_virtools_prop.get_virtools_group_data(obj)) + return {'FINISHED'} + +class BALLANCE_UL_virtools_group(bpy.types.UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_propname): + layout.prop(item, 'group_name', icon='GROUP', text="") + +class BALLANCE_PT_virtools_group(bpy.types.Panel): + """Show Virtools Group Properties.""" + bl_label = "Virtools Group" + bl_idname = "BALLANCE_PT_virtools_group" + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "object" + + @classmethod + def poll(cls, context): + return context.object is not None + + def draw(self, context): + layout = self.layout + target = bpy.context.active_object + + row = layout.row() + row.template_list("BALLANCE_UL_virtools_group", "", target, "virtools_group", + target, "active_virtools_group") + + col = row.column(align=True) + col.operator(BALLANCE_OT_add_virtools_group.bl_idname, icon='ADD', text="") + col.operator(BALLANCE_OT_rm_virtools_group.bl_idname, icon='REMOVE', text="") diff --git a/ballance_blender_plugin/PROPS_virtools_material.py b/ballance_blender_plugin/PROPS_virtools_material.py new file mode 100644 index 0000000..c07097d --- /dev/null +++ b/ballance_blender_plugin/PROPS_virtools_material.py @@ -0,0 +1,26 @@ +import bpy +from . import UTILS_constants, UTILS_functions, UTILS_virtools_prop + +class BALLANCE_PT_virtools_material(bpy.types.Panel): + """Show Virtools Material Properties.""" + bl_label = "Virtools Material" + bl_idname = "BALLANCE_PT_virtools_material" + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "material" + + @classmethod + def poll(cls, context): + return context.material is not None + + def draw(self, context): + layout = self.layout + #target = bpy.context.active_object.active_material + target = UTILS_virtools_prop.get_virtools_material(context.material) + + layout.prop(target, 'ambient') + layout.prop(target, 'diffuse') + layout.prop(target, 'specular') + layout.prop(target, 'emissive') + layout.prop(target, 'specular_power') + diff --git a/ballance_blender_plugin/UTILS_virtools_prop.py b/ballance_blender_plugin/UTILS_virtools_prop.py new file mode 100644 index 0000000..493154c --- /dev/null +++ b/ballance_blender_plugin/UTILS_virtools_prop.py @@ -0,0 +1,82 @@ +import bpy +from . import UTILS_constants, UTILS_functions + +class BALLANCE_PG_virtools_material(bpy.types.PropertyGroup): + ambient: bpy.props.FloatVectorProperty(name="Ambient", + subtype='COLOR', + min=0.0, + max=1.0, + default=[0.0,0.0,0.0]) + + diffuse: bpy.props.FloatVectorProperty(name="Diffuse", + subtype='COLOR', + min=0.0, + max=1.0, + default=[0.0,0.0,0.0]) + + specular: bpy.props.FloatVectorProperty(name="Specular", + subtype='COLOR', + min=0.0, + max=1.0, + default=[0.0,0.0,0.0]) + + emissive: bpy.props.FloatVectorProperty(name="Emissive", + subtype='COLOR', + min=0.0, + max=1.0, + default=[0.0,0.0,0.0]) + + specular_power: bpy.props.FloatProperty( + name="Specular Power", + min=0.0, + max=100.0, + default=0.0, + ) + +class BALLANCE_PG_virtools_group(bpy.types.PropertyGroup): + group_name: bpy.props.StringProperty( + name="Group Name", + default="" + ) + +def get_virtools_material(mtl): + return mtl.virtools_material + +def get_virtools_material_data(mtl): + data = get_virtools_material(mtl) + return (data.ambient, data.diffuse, data.specular, data.emissive, data.specular_power) + +def set_virtools_material_data(mtl, ambient, diffuse, specular, emissive, specular_power): + data = get_virtools_material(mtl) + data.ambient = ambient + data.diffuse = diffuse + data.specular = specular + data.emissive = emissive + data.specular_power = specular_power + +def get_virtools_group(obj): + return obj.virtools_group + +def get_virtools_group_data(obj): + return tuple(str(item.group_name) for item in get_virtools_group(obj)) + +def set_virtools_group_data(obj, new_data): + data = get_virtools_group(obj) + data.clear() + + for item in new_data: + it = data.add() + it.name = "" + it.group_name = item + +def register_props(): + bpy.types.Object.virtools_group = bpy.props.CollectionProperty(type=BALLANCE_PG_virtools_group) + bpy.types.Object.active_virtools_group = bpy.props.IntProperty() + bpy.types.Material.virtools_material = bpy.props.PointerProperty(type=BALLANCE_PG_virtools_material) + +def unregister_props(): + del bpy.types.Material.virtools_material + del bpy.types.Object.virtools_group + del bpy.types.Object.active_virtools_group + + diff --git a/ballance_blender_plugin/__init__.py b/ballance_blender_plugin/__init__.py index f5a8791..d212e51 100644 --- a/ballance_blender_plugin/__init__.py +++ b/ballance_blender_plugin/__init__.py @@ -29,6 +29,8 @@ if "bpy" in locals(): importlib.reload(UTILS_file_io) if "UTILS_zip_helper" in locals(): importlib.reload(UTILS_zip_helper) + if "UTILS_virtools_prop" in locals(): + importlib.reload(UTILS_virtools_prop) if "BMFILE_export" in locals(): importlib.reload(BMFILE_export) @@ -52,11 +54,17 @@ if "bpy" in locals(): if "NAMES_rename_system" in locals(): importlib.reload(NAMES_rename_system) -from . import UTILS_constants, UTILS_functions, UTILS_preferences + if "PROPS_virtools_group" in locals(): + importlib.reload(PROPS_virtools_group) + if "PROPS_virtools_material" in locals(): + importlib.reload(PROPS_virtools_material) + +from . import UTILS_constants, UTILS_functions, UTILS_preferences, UTILS_virtools_prop from . import BMFILE_export, BMFILE_import from . import MODS_3dsmax_align, MODS_flatten_uv, MODS_rail_uv from . import OBJS_add_components, OBJS_add_floors, OBJS_add_rails from . import NAMES_rename_system +from . import PROPS_virtools_group, PROPS_virtools_material # ============================================= # menu system @@ -132,7 +140,16 @@ classes = ( NAMES_rename_system.BALLANCE_OT_rename_by_group, NAMES_rename_system.BALLANCE_OT_convert_name, NAMES_rename_system.BALLANCE_OT_auto_grouping, - BALLANCE_MT_OutlinerMenu + BALLANCE_MT_OutlinerMenu, + + UTILS_virtools_prop.BALLANCE_PG_virtools_material, + UTILS_virtools_prop.BALLANCE_PG_virtools_group, + PROPS_virtools_group.BALLANCE_OT_add_virtools_group, + PROPS_virtools_group.BALLANCE_OT_rm_virtools_group, + PROPS_virtools_group.BALLANCE_UL_virtools_group, + PROPS_virtools_group.BALLANCE_PT_virtools_group, + PROPS_virtools_material.BALLANCE_PT_virtools_material + ) def menu_func_bm_import(self, context): @@ -169,13 +186,15 @@ def register(): bpy.utils.register_class(cls) bpy.types.Scene.BallanceBlenderPluginProperty = bpy.props.PointerProperty(type=UTILS_preferences.MyPropertyGroup) - + UTILS_virtools_prop.register_props() + bpy.types.TOPBAR_MT_file_import.append(menu_func_bm_import) bpy.types.TOPBAR_MT_file_export.append(menu_func_bm_export) bpy.types.VIEW3D_MT_editor_menus.prepend(menu_func_ballance_3d) bpy.types.VIEW3D_MT_add.append(menu_func_ballance_add) bpy.types.OUTLINER_HT_header.append(menu_func_ballance_rename) + def unregister(): bpy.types.TOPBAR_MT_file_import.remove(menu_func_bm_import) bpy.types.TOPBAR_MT_file_export.remove(menu_func_bm_export) @@ -184,6 +203,9 @@ def unregister(): bpy.types.VIEW3D_MT_add.remove(menu_func_ballance_add) bpy.types.OUTLINER_HT_header.remove(menu_func_ballance_rename) + UTILS_virtools_prop.unregister_props() + del bpy.types.Scene.BallanceBlenderPluginProperty + for cls in classes: bpy.utils.unregister_class(cls)