add addon pref and file browser wrapper
This commit is contained in:
parent
5584bc66a0
commit
b94e7e2b22
@ -742,9 +742,26 @@ class BBP_PT_virtools_material(bpy.types.Panel):
|
|||||||
layout.prop(props, 'z_func')
|
layout.prop(props, 'z_func')
|
||||||
|
|
||||||
|
|
||||||
|
g_BldClasses: tuple[typing.Any, ...] = (
|
||||||
|
# basic property
|
||||||
|
BBP_PG_virtools_material,
|
||||||
|
# 2 operator used in panel
|
||||||
|
BBP_OT_apply_virtools_material,
|
||||||
|
BBP_OT_preset_virtools_material,
|
||||||
|
# panel
|
||||||
|
BBP_PT_virtools_material,
|
||||||
|
)
|
||||||
|
|
||||||
def register_prop():
|
def register():
|
||||||
|
for cls in g_BldClasses:
|
||||||
|
bpy.utils.register_class(cls)
|
||||||
|
|
||||||
|
# add into material metadata
|
||||||
bpy.types.Material.virtools_material = bpy.props.PointerProperty(type = BBP_PG_virtools_material)
|
bpy.types.Material.virtools_material = bpy.props.PointerProperty(type = BBP_PG_virtools_material)
|
||||||
|
|
||||||
def unregister_prop():
|
def unregister():
|
||||||
|
# del from material metadata
|
||||||
del bpy.types.Material.virtools_material
|
del bpy.types.Material.virtools_material
|
||||||
|
|
||||||
|
for cls in g_BldClasses:
|
||||||
|
bpy.utils.unregister_class(cls)
|
||||||
|
98
bbp_ng/UTIL_file_browser.py
Normal file
98
bbp_ng/UTIL_file_browser.py
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
import bpy, bpy_extras
|
||||||
|
|
||||||
|
## File Browser Usage
|
||||||
|
# These created file browser is just a futher wrapper of `bpy_extras.io_utils.ExportHelper`
|
||||||
|
# So user must use it like ExportHelper. It mean inhert it and no need to write invoke function.
|
||||||
|
#
|
||||||
|
# These wrapper also provide general visitor for getting input file name or directory:
|
||||||
|
# * general_get_filename()
|
||||||
|
# * general_get_directory()
|
||||||
|
#
|
||||||
|
# For example:
|
||||||
|
# ```
|
||||||
|
# class BBP_OT_custom_import(bpy.types.Operator, UTIL_file_browser.OpenBmxFile)
|
||||||
|
#
|
||||||
|
# def execute(self, context):
|
||||||
|
# print(self.general_get_filename()) # get file name if support
|
||||||
|
# print(self.general_get_directory()) # get file name if support
|
||||||
|
#
|
||||||
|
# ```
|
||||||
|
|
||||||
|
class ImportBallanceImage(bpy_extras.io_utils.ImportHelper):
|
||||||
|
|
||||||
|
# no need to set file ext because we support multiple file ext.
|
||||||
|
# see ImportGLTF2 for more info.
|
||||||
|
# filename_ext = ".bmp"
|
||||||
|
|
||||||
|
# set with 2 file ext with ; as spelittor
|
||||||
|
# see ImportGLTF2 for more info.
|
||||||
|
filter_glob: bpy.props.StringProperty(
|
||||||
|
default = "*.bmp;*.tga",
|
||||||
|
options = {'HIDDEN'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def general_get_filename(self) -> str:
|
||||||
|
return self.filepath
|
||||||
|
|
||||||
|
class ImportBmxFile(bpy_extras.io_utils.ImportHelper):
|
||||||
|
|
||||||
|
# set file ext filter
|
||||||
|
filename_ext = ".bmx"
|
||||||
|
filter_glob: bpy.props.StringProperty(
|
||||||
|
default = "*.bmx",
|
||||||
|
options = {'HIDDEN'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def general_get_filename(self) -> str:
|
||||||
|
return self.filepath
|
||||||
|
|
||||||
|
class ExportBmxFile(bpy_extras.io_utils.ExportHelper):
|
||||||
|
|
||||||
|
# set file ext filter
|
||||||
|
filename_ext = ".bmx"
|
||||||
|
filter_glob: bpy.props.StringProperty(
|
||||||
|
default = "*.bmx",
|
||||||
|
options = {'HIDDEN'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def general_get_filename(self) -> str:
|
||||||
|
return self.filepath
|
||||||
|
|
||||||
|
class ImportVirtoolsFile(bpy_extras.io_utils.ImportHelper):
|
||||||
|
|
||||||
|
# we support multiple file ext, set like ImportBallanceImage
|
||||||
|
# filename_ext = ".nmo"
|
||||||
|
filter_glob: bpy.props.StringProperty(
|
||||||
|
default = "*.nmo;*.cmo;*.vmo",
|
||||||
|
options = {'HIDDEN'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def general_get_filename(self) -> str:
|
||||||
|
return self.filepath
|
||||||
|
|
||||||
|
class ExportVirtoolsFile(bpy_extras.io_utils.ExportHelper):
|
||||||
|
|
||||||
|
# only support export nmo file
|
||||||
|
filename_ext = ".nmo"
|
||||||
|
filter_glob: bpy.props.StringProperty(
|
||||||
|
default = "*.nmo",
|
||||||
|
options = {'HIDDEN'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def general_get_filename(self) -> str:
|
||||||
|
return self.filepath
|
||||||
|
|
||||||
|
class ImportDirectory(bpy_extras.io_utils.ImportHelper):
|
||||||
|
|
||||||
|
# add directory prop to receive directory
|
||||||
|
directory: bpy.props.StringProperty()
|
||||||
|
|
||||||
|
# blank filter
|
||||||
|
filter_glob: bpy.props.StringProperty(
|
||||||
|
default = "",
|
||||||
|
options = {'HIDDEN'}
|
||||||
|
)
|
||||||
|
|
||||||
|
def general_get_directory(self) -> str:
|
||||||
|
return self.directory
|
||||||
|
|
55
bbp_ng/UTIL_preferences.py
Normal file
55
bbp_ng/UTIL_preferences.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import bpy
|
||||||
|
import os
|
||||||
|
|
||||||
|
class RawPreferences():
|
||||||
|
mBallanceTextureFolder: str
|
||||||
|
mNoComponentCollection: str
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
self.mBallanceTextureFolder = kwargs.get("mBallanceTextureFolder", "")
|
||||||
|
self.mNoComponentCollection = kwargs.get("mNoComponentCollection", "")
|
||||||
|
|
||||||
|
def has_valid_blc_tex_folder(self) -> bool:
|
||||||
|
return os.path.isdir(self.mBallanceTextureFolder)
|
||||||
|
|
||||||
|
class BBPPreferences(bpy.types.AddonPreferences):
|
||||||
|
bl_idname = __package__
|
||||||
|
|
||||||
|
ballance_texture_folder: bpy.props.StringProperty(
|
||||||
|
name = "Ballance Texture Folder",
|
||||||
|
description = "The path to folder which will be used by this plugin to get external Ballance texture.",
|
||||||
|
subtype='DIR_PATH'
|
||||||
|
)
|
||||||
|
|
||||||
|
no_component_collection: bpy.props.StringProperty(
|
||||||
|
name = "No Component Collection",
|
||||||
|
description = "(Import) The object which stored in this collectiion will not be saved as component. (Export) All forced no component objects will be stored in this collection",
|
||||||
|
)
|
||||||
|
|
||||||
|
def draw(self, context):
|
||||||
|
layout = self.layout
|
||||||
|
|
||||||
|
row = layout.row()
|
||||||
|
col = row.column()
|
||||||
|
col.label(text = "Ballance Texture Folder")
|
||||||
|
col.prop(self, "ballance_texture_folder", text = "")
|
||||||
|
col.label(text = "No Component Collection")
|
||||||
|
col.prop(self, "no_component_collection", text = "")
|
||||||
|
|
||||||
|
def get_preferences() -> BBPPreferences:
|
||||||
|
return bpy.context.preferences.addons[__package__].preferences
|
||||||
|
|
||||||
|
def get_raw_preferences() -> RawPreferences:
|
||||||
|
pref: BBPPreferences = get_preferences()
|
||||||
|
rawdata: RawPreferences = RawPreferences()
|
||||||
|
|
||||||
|
rawdata.mBallanceTextureFolder = pref.ballance_texture_folder
|
||||||
|
rawdata.mNoComponentCollection = pref.no_component_collection
|
||||||
|
|
||||||
|
return rawdata
|
||||||
|
|
||||||
|
def register() -> None:
|
||||||
|
bpy.utils.register_class(BBPPreferences)
|
||||||
|
|
||||||
|
def unregister() -> None:
|
||||||
|
bpy.utils.unregister_class(BBPPreferences)
|
@ -23,6 +23,7 @@ if "bpy" in locals():
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
from . import UTIL_preferences
|
||||||
from . import PROP_virtools_material
|
from . import PROP_virtools_material
|
||||||
from . import OP_UV_flatten_uv
|
from . import OP_UV_flatten_uv
|
||||||
|
|
||||||
@ -52,14 +53,9 @@ def menu_drawer_view3d(self, context):
|
|||||||
|
|
||||||
#region Register and Unregister.
|
#region Register and Unregister.
|
||||||
|
|
||||||
g_Classes: tuple[typing.Any, ...] = (
|
g_BldClasses: tuple[typing.Any, ...] = (
|
||||||
OP_UV_flatten_uv.BBP_OT_flatten_uv,
|
OP_UV_flatten_uv.BBP_OT_flatten_uv,
|
||||||
BBP_MT_View3DMenu,
|
BBP_MT_View3DMenu,
|
||||||
|
|
||||||
PROP_virtools_material.BBP_PG_virtools_material,
|
|
||||||
PROP_virtools_material.BBP_OT_apply_virtools_material,
|
|
||||||
PROP_virtools_material.BBP_OT_preset_virtools_material,
|
|
||||||
PROP_virtools_material.BBP_PT_virtools_material,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
class MenuEntry():
|
class MenuEntry():
|
||||||
@ -70,20 +66,22 @@ class MenuEntry():
|
|||||||
self.mContainerMenu = cont
|
self.mContainerMenu = cont
|
||||||
self.mIsAppend = is_append
|
self.mIsAppend = is_append
|
||||||
self.mMenuDrawer = menu_func
|
self.mMenuDrawer = menu_func
|
||||||
g_Menus: tuple[MenuEntry, ...] = (
|
|
||||||
|
g_BldMenus: tuple[MenuEntry, ...] = (
|
||||||
MenuEntry(bpy.types.VIEW3D_MT_editor_menus, False, menu_drawer_view3d),
|
MenuEntry(bpy.types.VIEW3D_MT_editor_menus, False, menu_drawer_view3d),
|
||||||
)
|
)
|
||||||
|
|
||||||
def register() -> None:
|
def register() -> None:
|
||||||
# register all classes
|
# register module
|
||||||
for cls in g_Classes:
|
UTIL_preferences.register()
|
||||||
|
PROP_virtools_material.register()
|
||||||
|
|
||||||
|
# register other classes
|
||||||
|
for cls in g_BldClasses:
|
||||||
bpy.utils.register_class(cls)
|
bpy.utils.register_class(cls)
|
||||||
|
|
||||||
# register properties
|
|
||||||
PROP_virtools_material.register_prop()
|
|
||||||
|
|
||||||
# add menu drawer
|
# add menu drawer
|
||||||
for entry in g_Menus:
|
for entry in g_BldMenus:
|
||||||
if entry.mIsAppend:
|
if entry.mIsAppend:
|
||||||
entry.mContainerMenu.append(entry.mMenuDrawer)
|
entry.mContainerMenu.append(entry.mMenuDrawer)
|
||||||
else:
|
else:
|
||||||
@ -91,16 +89,17 @@ def register() -> None:
|
|||||||
|
|
||||||
def unregister() -> None:
|
def unregister() -> None:
|
||||||
# remove menu drawer
|
# remove menu drawer
|
||||||
for entry in g_Menus:
|
for entry in g_BldMenus:
|
||||||
entry.mContainerMenu.remove(entry.mMenuDrawer)
|
entry.mContainerMenu.remove(entry.mMenuDrawer)
|
||||||
|
|
||||||
# unregister properties
|
# unregister other classes
|
||||||
PROP_virtools_material.unregister_prop()
|
for cls in g_BldClasses:
|
||||||
|
|
||||||
# unregister classes
|
|
||||||
for cls in g_Classes:
|
|
||||||
bpy.utils.unregister_class(cls)
|
bpy.utils.unregister_class(cls)
|
||||||
|
|
||||||
|
# unregister modules
|
||||||
|
PROP_virtools_material.unregister()
|
||||||
|
UTIL_preferences.unregister()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
register()
|
register()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user