fix: fix previous commit remained issues.
- vt encodings in list showcase now works. - modify some usage of message_box to Operator.report to make it more like blender suggested.
This commit is contained in:
parent
0862ecd269
commit
77315ffbea
@ -1,5 +1,5 @@
|
|||||||
import bpy
|
import bpy
|
||||||
from . import PROP_preferences, UTIL_functions, UTIL_file_browser, UTIL_blender_mesh, UTIL_icons_manager, UTIL_ioport_shared
|
from . import PROP_preferences, UTIL_functions, UTIL_file_browser, UTIL_blender_mesh, UTIL_ioport_shared
|
||||||
|
|
||||||
class BBP_OT_export_bmfile(bpy.types.Operator, UTIL_file_browser.ExportBmxFile, UTIL_ioport_shared.ExportParams):
|
class BBP_OT_export_bmfile(bpy.types.Operator, UTIL_file_browser.ExportBmxFile, UTIL_ioport_shared.ExportParams):
|
||||||
"""Save a Ballance Map File (BM File Spec 1.4)"""
|
"""Save a Ballance Map File (BM File Spec 1.4)"""
|
||||||
@ -12,18 +12,14 @@ class BBP_OT_export_bmfile(bpy.types.Operator, UTIL_file_browser.ExportBmxFile,
|
|||||||
return PROP_preferences.get_raw_preferences().has_valid_blc_tex_folder()
|
return PROP_preferences.get_raw_preferences().has_valid_blc_tex_folder()
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
UTIL_functions.message_box(
|
self.report({'ERROR'}, 'This function not supported yet.')
|
||||||
('This function not supported yet.', ),
|
# self.report({'INFO'}, "BM File Exporting Finished.")
|
||||||
'No Implement',
|
|
||||||
UTIL_icons_manager.BlenderPresetIcons.Error.value
|
|
||||||
)
|
|
||||||
self.report({'INFO'}, "BM File Exporting Finished.")
|
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'Export Target')
|
layout.label(text = 'Export Target')
|
||||||
self.draw_export_params(layout.box())
|
self.draw_export_params(context, layout.box())
|
||||||
|
|
||||||
def register() -> None:
|
def register() -> None:
|
||||||
bpy.utils.register_class(BBP_OT_export_bmfile)
|
bpy.utils.register_class(BBP_OT_export_bmfile)
|
||||||
|
@ -2,7 +2,7 @@ import bpy, mathutils
|
|||||||
from bpy_extras.wm_utils.progress_report import ProgressReport
|
from bpy_extras.wm_utils.progress_report import ProgressReport
|
||||||
import tempfile, os, typing
|
import tempfile, os, typing
|
||||||
from . import PROP_preferences, UTIL_ioport_shared
|
from . import PROP_preferences, UTIL_ioport_shared
|
||||||
from . import UTIL_virtools_types, UTIL_functions, UTIL_file_browser, UTIL_blender_mesh, UTIL_ballance_texture, UTIL_icons_manager, UTIL_naming_convension
|
from . import UTIL_virtools_types, UTIL_functions, UTIL_file_browser, UTIL_blender_mesh, UTIL_ballance_texture, UTIL_naming_convension
|
||||||
from . import PROP_virtools_group, PROP_virtools_material, PROP_virtools_mesh, PROP_virtools_texture, PROP_virtools_light
|
from . import PROP_virtools_group, PROP_virtools_material, PROP_virtools_mesh, PROP_virtools_texture, PROP_virtools_light
|
||||||
from .PyBMap import bmap_wrapper as bmap
|
from .PyBMap import bmap_wrapper as bmap
|
||||||
|
|
||||||
@ -20,30 +20,28 @@ class BBP_OT_export_virtools(bpy.types.Operator, UTIL_file_browser.ExportVirtool
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# check selecting first
|
# check selecting first
|
||||||
objls: tuple[bpy.types.Object] | None = self.general_get_export_objects()
|
objls: tuple[bpy.types.Object] | None = self.general_get_export_objects(context)
|
||||||
if objls is None:
|
if objls is None:
|
||||||
UTIL_functions.message_box(
|
self.report({'ERROR'}, 'No selected target!')
|
||||||
('No selected target!', ),
|
|
||||||
'Lost Parameters',
|
|
||||||
UTIL_icons_manager.BlenderPresetIcons.Error.value
|
|
||||||
)
|
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
|
|
||||||
# check texture save option to prevent real stupid user.
|
# check texture save option to avoid real stupid user.
|
||||||
texture_save_opt = self.general_get_texture_save_opt()
|
texture_save_opt = self.general_get_texture_save_opt()
|
||||||
if texture_save_opt == UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_USEGLOBAL:
|
if texture_save_opt == UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_USEGLOBAL:
|
||||||
UTIL_functions.message_box(
|
self.report({'ERROR'}, 'You can not specify "Use Global" as global texture save option!')
|
||||||
('You can not specify "Use Global" as global texture save option!', ),
|
return {'CANCELLED'}
|
||||||
'Wrong Parameters',
|
|
||||||
UTIL_icons_manager.BlenderPresetIcons.Error.value
|
# check whether encoding list is empty to avoid real stupid user.
|
||||||
)
|
encodings = self.general_get_vt_encodings(context)
|
||||||
|
if len(encodings) == 0:
|
||||||
|
self.report({'ERROR'}, 'You must specify at least one encoding for file saving (e.g. cp1252, gb2312)!')
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
|
|
||||||
# start exporting
|
# start exporting
|
||||||
with UTIL_ioport_shared.ExportEditModeBackup() as editmode_guard:
|
with UTIL_ioport_shared.ExportEditModeBackup() as editmode_guard:
|
||||||
_export_virtools(
|
_export_virtools(
|
||||||
self.general_get_filename(),
|
self.general_get_filename(),
|
||||||
self.general_get_vt_encodings(),
|
encodings,
|
||||||
texture_save_opt,
|
texture_save_opt,
|
||||||
self.general_get_use_compress(),
|
self.general_get_use_compress(),
|
||||||
self.general_get_compress_level(),
|
self.general_get_compress_level(),
|
||||||
@ -57,8 +55,8 @@ class BBP_OT_export_virtools(bpy.types.Operator, UTIL_file_browser.ExportVirtool
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
self.draw_export_params(layout)
|
self.draw_export_params(context, layout)
|
||||||
self.draw_virtools_params(layout, False)
|
self.draw_virtools_params(context, layout, False)
|
||||||
self.draw_ballance_params(layout, False)
|
self.draw_ballance_params(layout, False)
|
||||||
|
|
||||||
_TObj3dPair = tuple[bpy.types.Object, bmap.BM3dObject]
|
_TObj3dPair = tuple[bpy.types.Object, bmap.BM3dObject]
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import bpy
|
import bpy
|
||||||
from . import PROP_preferences, UTIL_functions, UTIL_file_browser, UTIL_blender_mesh, UTIL_icons_manager, UTIL_ioport_shared
|
from . import PROP_preferences, UTIL_functions, UTIL_file_browser, UTIL_blender_mesh, UTIL_ioport_shared
|
||||||
|
|
||||||
class BBP_OT_import_bmfile(bpy.types.Operator, UTIL_file_browser.ImportBmxFile, UTIL_ioport_shared.ImportParams):
|
class BBP_OT_import_bmfile(bpy.types.Operator, UTIL_file_browser.ImportBmxFile, UTIL_ioport_shared.ImportParams):
|
||||||
"""Load a Ballance Map File (BM File Spec 1.4)"""
|
"""Load a Ballance Map File (BM File Spec 1.4)"""
|
||||||
@ -12,12 +12,8 @@ class BBP_OT_import_bmfile(bpy.types.Operator, UTIL_file_browser.ImportBmxFile,
|
|||||||
return PROP_preferences.get_raw_preferences().has_valid_blc_tex_folder()
|
return PROP_preferences.get_raw_preferences().has_valid_blc_tex_folder()
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
UTIL_functions.message_box(
|
self.report({'ERROR'}, 'This function not supported yet.')
|
||||||
('This function not supported yet.', ),
|
# self.report({'INFO'}, "BM File Importing Finished.")
|
||||||
'No Implement',
|
|
||||||
UTIL_icons_manager.BlenderPresetIcons.Error.value
|
|
||||||
)
|
|
||||||
self.report({'INFO'}, "BM File Importing Finished.")
|
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
|
@ -19,9 +19,15 @@ class BBP_OT_import_virtools(bpy.types.Operator, UTIL_file_browser.ImportVirtool
|
|||||||
and bmap.is_bmap_available())
|
and bmap.is_bmap_available())
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
|
# check whether encoding list is empty to avoid real stupid user.
|
||||||
|
encodings = self.general_get_vt_encodings(context)
|
||||||
|
if len(encodings) == 0:
|
||||||
|
self.report({'ERROR'}, 'You must specify at least one encoding for file loading (e.g. cp1252, gb2312)!')
|
||||||
|
return {'CANCELLED'}
|
||||||
|
|
||||||
_import_virtools(
|
_import_virtools(
|
||||||
self.general_get_filename(),
|
self.general_get_filename(),
|
||||||
self.general_get_vt_encodings(),
|
encodings,
|
||||||
self.general_get_conflict_resolver()
|
self.general_get_conflict_resolver()
|
||||||
)
|
)
|
||||||
self.report({'INFO'}, "Virtools File Importing Finished.")
|
self.report({'INFO'}, "Virtools File Importing Finished.")
|
||||||
@ -30,7 +36,7 @@ class BBP_OT_import_virtools(bpy.types.Operator, UTIL_file_browser.ImportVirtool
|
|||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
self.draw_import_params(layout)
|
self.draw_import_params(layout)
|
||||||
self.draw_virtools_params(layout, True)
|
self.draw_virtools_params(context, layout, True)
|
||||||
self.draw_ballance_params(layout, True)
|
self.draw_ballance_params(layout, True)
|
||||||
|
|
||||||
def _import_virtools(file_name_: str, encodings_: tuple[str], resolver: UTIL_ioport_shared.ConflictResolver) -> None:
|
def _import_virtools(file_name_: str, encodings_: tuple[str], resolver: UTIL_ioport_shared.ConflictResolver) -> None:
|
||||||
|
@ -19,13 +19,10 @@ class BBP_OT_rail_uv(bpy.types.Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# check material
|
# check material
|
||||||
mtl: bpy.types.Material = PROP_ptrprop_resolver.PtrPropResolver.get_rail_uv_material()
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
|
mtl: bpy.types.Material = ptrprops.get_rail_uv_material()
|
||||||
if mtl is None:
|
if mtl is None:
|
||||||
UTIL_functions.message_box(
|
self.report({'ERROR'}, "Specified material is empty.")
|
||||||
("No specific material", ),
|
|
||||||
"Lost Parameter",
|
|
||||||
UTIL_icons_manager.BlenderPresetIcons.Error.value
|
|
||||||
)
|
|
||||||
return {'CANCELLED'}
|
return {'CANCELLED'}
|
||||||
|
|
||||||
# apply rail uv
|
# apply rail uv
|
||||||
@ -34,7 +31,8 @@ class BBP_OT_rail_uv(bpy.types.Operator):
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout: bpy.types.UILayout = self.layout
|
layout: bpy.types.UILayout = self.layout
|
||||||
PROP_ptrprop_resolver.PtrPropResolver.draw_rail_uv_material(layout)
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
|
ptrprops.draw_rail_uv_material(layout)
|
||||||
|
|
||||||
#region Real Worker Functions
|
#region Real Worker Functions
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import bpy
|
import bpy
|
||||||
from bpy.types import Context, Event
|
from bpy.types import Context, Event
|
||||||
from . import UTIL_functions
|
from . import UTIL_functions, UTIL_virtools_types
|
||||||
|
|
||||||
## Intent
|
## Intent
|
||||||
# Operator is not allowed to register Pointer Properties.
|
# Operator is not allowed to register Pointer Properties.
|
||||||
@ -45,15 +45,15 @@ class BBP_PG_ptrprop_resolver(bpy.types.PropertyGroup):
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
def get_ptrprop_resolver() -> BBP_PG_ptrprop_resolver:
|
def get_ptrprop_resolver(scene: bpy.types.Scene) -> BBP_PG_ptrprop_resolver:
|
||||||
return bpy.context.scene.bbp_ptrprop_resolver
|
return scene.bbp_ptrprop_resolver
|
||||||
|
|
||||||
def get_ioport_encodings() -> UTIL_functions.CollectionVisitor[BBP_PG_bmap_encoding]:
|
def get_ioport_encodings(scene: bpy.types.Scene) -> UTIL_functions.CollectionVisitor[BBP_PG_bmap_encoding]:
|
||||||
return UTIL_functions.CollectionVisitor(get_ptrprop_resolver().ioport_encodings)
|
return UTIL_functions.CollectionVisitor(get_ptrprop_resolver(scene).ioport_encodings)
|
||||||
def get_active_ioport_encoding() -> int:
|
def get_active_ioport_encoding(scene: bpy.types.Scene) -> int:
|
||||||
return get_ptrprop_resolver().active_ioport_encodings
|
return get_ptrprop_resolver(scene).active_ioport_encodings
|
||||||
def set_active_ioport_encoding(val: int) -> None:
|
def set_active_ioport_encoding(scene: bpy.types.Scene, val: int) -> None:
|
||||||
get_ptrprop_resolver().active_ioport_encodings = val
|
get_ptrprop_resolver(scene).active_ioport_encodings = val
|
||||||
|
|
||||||
#region Blender Operator Defines for Encodings
|
#region Blender Operator Defines for Encodings
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ class BBP_OT_add_ioport_encodings(bpy.types.Operator):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
encodings = get_ioport_encodings()
|
encodings = get_ioport_encodings(context.scene)
|
||||||
encodings.add()
|
encodings.add()
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
@ -80,13 +80,19 @@ class BBP_OT_rm_ioport_encodings(bpy.types.Operator):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context: bpy.types.Context) -> bool:
|
def poll(cls, context: bpy.types.Context) -> bool:
|
||||||
encodings = get_ioport_encodings()
|
encodings = get_ioport_encodings(context.scene)
|
||||||
index = get_active_ioport_encoding()
|
index = get_active_ioport_encoding(context.scene)
|
||||||
return index >= 0 and index < len(encodings)
|
return index >= 0 and index < len(encodings)
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
encodings = get_ioport_encodings()
|
# delete selected item
|
||||||
encodings.remove(get_active_ioport_encoding())
|
encodings = get_ioport_encodings(context.scene)
|
||||||
|
index = get_active_ioport_encoding(context.scene)
|
||||||
|
encodings.remove(index)
|
||||||
|
# try to correct selected item
|
||||||
|
if index >= len(encodings): index = len(encodings) - 1
|
||||||
|
if index < 0: index = 0
|
||||||
|
set_active_ioport_encoding(context.scene, index)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
class BBP_OT_up_ioport_encodings(bpy.types.Operator):
|
class BBP_OT_up_ioport_encodings(bpy.types.Operator):
|
||||||
@ -97,15 +103,15 @@ class BBP_OT_up_ioport_encodings(bpy.types.Operator):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context: bpy.types.Context) -> bool:
|
def poll(cls, context: bpy.types.Context) -> bool:
|
||||||
encodings = get_ioport_encodings()
|
encodings = get_ioport_encodings(context.scene)
|
||||||
index = get_active_ioport_encoding()
|
index = get_active_ioport_encoding(context.scene)
|
||||||
return index >= 1 and index < len(encodings)
|
return index >= 1 and index < len(encodings)
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
encodings = get_ioport_encodings()
|
encodings = get_ioport_encodings(context.scene)
|
||||||
index = get_active_ioport_encoding()
|
index = get_active_ioport_encoding(context.scene)
|
||||||
encodings.move(index, index - 1)
|
encodings.move(index, index - 1)
|
||||||
set_active_ioport_encoding(index - 1)
|
set_active_ioport_encoding(context.scene, index - 1)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
class BBP_OT_down_ioport_encodings(bpy.types.Operator):
|
class BBP_OT_down_ioport_encodings(bpy.types.Operator):
|
||||||
@ -116,15 +122,15 @@ class BBP_OT_down_ioport_encodings(bpy.types.Operator):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context: bpy.types.Context) -> bool:
|
def poll(cls, context: bpy.types.Context) -> bool:
|
||||||
encodings = get_ioport_encodings()
|
encodings = get_ioport_encodings(context.scene)
|
||||||
index = get_active_ioport_encoding()
|
index = get_active_ioport_encoding(context.scene)
|
||||||
return index >= 0 and index < len(encodings) - 1
|
return index >= 0 and index < len(encodings) - 1
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
encodings = get_ioport_encodings()
|
encodings = get_ioport_encodings(context.scene)
|
||||||
index = get_active_ioport_encoding()
|
index = get_active_ioport_encoding(context.scene)
|
||||||
encodings.move(index, index + 1)
|
encodings.move(index, index + 1)
|
||||||
set_active_ioport_encoding(index + 1)
|
set_active_ioport_encoding(context.scene, index + 1)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
class BBP_OT_clear_ioport_encodings(bpy.types.Operator):
|
class BBP_OT_clear_ioport_encodings(bpy.types.Operator):
|
||||||
@ -142,55 +148,46 @@ class BBP_OT_clear_ioport_encodings(bpy.types.Operator):
|
|||||||
return wm.invoke_confirm(self, event)
|
return wm.invoke_confirm(self, event)
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
encodings = get_ioport_encodings()
|
encodings = get_ioport_encodings(context.scene)
|
||||||
encodings.clear()
|
encodings.clear()
|
||||||
set_active_ioport_encoding(0)
|
set_active_ioport_encoding(context.scene, 0)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
class PtrPropResolver():
|
class PropsVisitor():
|
||||||
"""
|
"""
|
||||||
All outside code should use this class static methods to fetch property data or draw property.
|
When outside code want to fetch or draw properties defined in ptrprop_resolver,
|
||||||
All function inside in this module should not be called directly.
|
they should create the instance of this class with given associated scene instance first.
|
||||||
|
Then use this class provided member function to draw or fetch these properties.
|
||||||
|
The function located in this module should not be called directly!
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@staticmethod
|
__mAssocScene: bpy.types.Scene
|
||||||
def get_rail_uv_material() -> bpy.types.Material:
|
|
||||||
return get_ptrprop_resolver().rail_uv_material
|
|
||||||
@staticmethod
|
|
||||||
def draw_rail_uv_material(layout: bpy.types.UILayout) -> None:
|
|
||||||
layout.prop(get_ptrprop_resolver(), 'rail_uv_material')
|
|
||||||
|
|
||||||
@staticmethod
|
def __init__(self, assoc_scene: bpy.types.Scene):
|
||||||
def get_export_collection() -> bpy.types.Collection:
|
self.__mAssocScene = assoc_scene
|
||||||
return get_ptrprop_resolver().export_collection
|
|
||||||
@staticmethod
|
|
||||||
def draw_export_collection(layout: bpy.types.UILayout) -> None:
|
|
||||||
layout.prop(get_ptrprop_resolver(), 'export_collection')
|
|
||||||
|
|
||||||
@staticmethod
|
def get_rail_uv_material(self) -> bpy.types.Material:
|
||||||
def get_export_object() -> bpy.types.Object:
|
return get_ptrprop_resolver(self.__mAssocScene).rail_uv_material
|
||||||
return get_ptrprop_resolver().export_object
|
def draw_rail_uv_material(self, layout: bpy.types.UILayout) -> None:
|
||||||
@staticmethod
|
layout.prop(get_ptrprop_resolver(self.__mAssocScene), 'rail_uv_material')
|
||||||
def draw_export_object(layout: bpy.types.UILayout) -> None:
|
|
||||||
layout.prop(get_ptrprop_resolver(), 'export_object')
|
|
||||||
|
|
||||||
@staticmethod
|
def get_export_collection(self) -> bpy.types.Collection:
|
||||||
def get_ioport_encodings() -> tuple[str, ...]:
|
return get_ptrprop_resolver(self.__mAssocScene).export_collection
|
||||||
encodings = get_ioport_encodings()
|
def draw_export_collection(self, layout: bpy.types.UILayout) -> None:
|
||||||
|
layout.prop(get_ptrprop_resolver(self.__mAssocScene), 'export_collection')
|
||||||
|
|
||||||
|
def get_export_object(self) -> bpy.types.Object:
|
||||||
|
return get_ptrprop_resolver(self.__mAssocScene).export_object
|
||||||
|
def draw_export_object(self, layout: bpy.types.UILayout) -> None:
|
||||||
|
layout.prop(get_ptrprop_resolver(self.__mAssocScene), 'export_object')
|
||||||
|
|
||||||
|
def get_ioport_encodings(self) -> tuple[str, ...]:
|
||||||
|
encodings = get_ioport_encodings(self.__mAssocScene)
|
||||||
return tuple(i.encoding for i in encodings)
|
return tuple(i.encoding for i in encodings)
|
||||||
@staticmethod
|
def draw_ioport_encodings(self, layout: bpy.types.UILayout) -> None:
|
||||||
def set_ioport_encodings(user_encodings: tuple[str, ...]) -> None:
|
target = get_ptrprop_resolver(self.__mAssocScene)
|
||||||
encodings = get_ioport_encodings()
|
|
||||||
# clear and apply user encoding one by one
|
|
||||||
encodings.clear()
|
|
||||||
for user_encoding in user_encodings:
|
|
||||||
item = encodings.add()
|
|
||||||
item.encoding = user_encoding
|
|
||||||
@staticmethod
|
|
||||||
def draw_ioport_encodings(layout: bpy.types.UILayout) -> None:
|
|
||||||
target = get_ptrprop_resolver()
|
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
|
|
||||||
# draw main list
|
# draw main list
|
||||||
@ -212,11 +209,24 @@ class PtrPropResolver():
|
|||||||
col.separator()
|
col.separator()
|
||||||
col.operator(BBP_OT_clear_ioport_encodings.bl_idname, icon='TRASH', text='')
|
col.operator(BBP_OT_clear_ioport_encodings.bl_idname, icon='TRASH', text='')
|
||||||
|
|
||||||
|
@bpy.app.handlers.persistent
|
||||||
|
def _ioport_encodings_initializer(file_path: str):
|
||||||
|
# if we can fetch property, and it is empty after loading file
|
||||||
|
# we fill it with default value
|
||||||
|
encodings = get_ioport_encodings(bpy.context.scene)
|
||||||
|
if len(encodings) == 0:
|
||||||
|
for default_enc in UTIL_virtools_types.g_PyBMapDefaultEncodings:
|
||||||
|
item = encodings.add()
|
||||||
|
item.encoding = default_enc
|
||||||
|
|
||||||
def register() -> None:
|
def register() -> None:
|
||||||
bpy.utils.register_class(BBP_PG_bmap_encoding)
|
bpy.utils.register_class(BBP_PG_bmap_encoding)
|
||||||
bpy.utils.register_class(BBP_UL_bmap_encoding)
|
bpy.utils.register_class(BBP_UL_bmap_encoding)
|
||||||
bpy.utils.register_class(BBP_PG_ptrprop_resolver)
|
bpy.utils.register_class(BBP_PG_ptrprop_resolver)
|
||||||
|
|
||||||
|
# register ioport encodings default value
|
||||||
|
bpy.app.handlers.load_post.append(_ioport_encodings_initializer)
|
||||||
|
|
||||||
bpy.utils.register_class(BBP_OT_add_ioport_encodings)
|
bpy.utils.register_class(BBP_OT_add_ioport_encodings)
|
||||||
bpy.utils.register_class(BBP_OT_rm_ioport_encodings)
|
bpy.utils.register_class(BBP_OT_rm_ioport_encodings)
|
||||||
bpy.utils.register_class(BBP_OT_up_ioport_encodings)
|
bpy.utils.register_class(BBP_OT_up_ioport_encodings)
|
||||||
@ -234,6 +244,9 @@ def unregister() -> None:
|
|||||||
bpy.utils.unregister_class(BBP_OT_rm_ioport_encodings)
|
bpy.utils.unregister_class(BBP_OT_rm_ioport_encodings)
|
||||||
bpy.utils.unregister_class(BBP_OT_add_ioport_encodings)
|
bpy.utils.unregister_class(BBP_OT_add_ioport_encodings)
|
||||||
|
|
||||||
|
# unregister ioport encodings default value
|
||||||
|
bpy.app.handlers.load_post.remove(_ioport_encodings_initializer)
|
||||||
|
|
||||||
bpy.utils.unregister_class(BBP_PG_ptrprop_resolver)
|
bpy.utils.unregister_class(BBP_PG_ptrprop_resolver)
|
||||||
bpy.utils.unregister_class(BBP_UL_bmap_encoding)
|
bpy.utils.unregister_class(BBP_UL_bmap_encoding)
|
||||||
bpy.utils.unregister_class(BBP_PG_bmap_encoding)
|
bpy.utils.unregister_class(BBP_PG_bmap_encoding)
|
||||||
|
@ -242,7 +242,7 @@ class ExportParams():
|
|||||||
),
|
),
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_export_params(self, layout: bpy.types.UILayout) -> None:
|
def draw_export_params(self, context: bpy.types.Context, layout: bpy.types.UILayout) -> None:
|
||||||
header: bpy.types.UILayout
|
header: bpy.types.UILayout
|
||||||
body: bpy.types.UILayout
|
body: bpy.types.UILayout
|
||||||
header, body = layout.panel("BBP_PT_ioport_shared_export_params", default_closed=False)
|
header, body = layout.panel("BBP_PT_ioport_shared_export_params", default_closed=False)
|
||||||
@ -255,22 +255,24 @@ class ExportParams():
|
|||||||
horizon_body.prop(self, "export_mode", expand = True)
|
horizon_body.prop(self, "export_mode", expand = True)
|
||||||
|
|
||||||
# draw picker
|
# draw picker
|
||||||
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
if self.export_mode == 'COLLECTION':
|
if self.export_mode == 'COLLECTION':
|
||||||
PROP_ptrprop_resolver.PtrPropResolver.draw_export_collection(body)
|
ptrprops.draw_export_collection(body)
|
||||||
elif self.export_mode == 'OBJECT':
|
elif self.export_mode == 'OBJECT':
|
||||||
PROP_ptrprop_resolver.PtrPropResolver.draw_export_object(body)
|
ptrprops.draw_export_object(body)
|
||||||
|
|
||||||
def general_get_export_objects(self) -> tuple[bpy.types.Object] | None:
|
def general_get_export_objects(self, context: bpy.types.Context) -> tuple[bpy.types.Object] | None:
|
||||||
"""
|
"""
|
||||||
Return resolved exported objects or None if no selection.
|
Return resolved exported objects or None if no selection.
|
||||||
"""
|
"""
|
||||||
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
if self.export_mode == 'COLLECTION':
|
if self.export_mode == 'COLLECTION':
|
||||||
col: bpy.types.Collection = PROP_ptrprop_resolver.PtrPropResolver.get_export_collection()
|
col: bpy.types.Collection = ptrprops.get_export_collection()
|
||||||
if col is None: return None
|
if col is None: return None
|
||||||
else:
|
else:
|
||||||
return tuple(col.all_objects)
|
return tuple(col.all_objects)
|
||||||
else:
|
else:
|
||||||
obj: bpy.types.Object = PROP_ptrprop_resolver.PtrPropResolver.get_export_object()
|
obj: bpy.types.Object = ptrprops.get_export_object()
|
||||||
if obj is None: return None
|
if obj is None: return None
|
||||||
else: return (obj, )
|
else: return (obj, )
|
||||||
|
|
||||||
@ -278,12 +280,6 @@ class ExportParams():
|
|||||||
_g_EnumHelper_CK_TEXTURE_SAVEOPTIONS: UTIL_virtools_types.EnumPropHelper = UTIL_virtools_types.EnumPropHelper(UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS)
|
_g_EnumHelper_CK_TEXTURE_SAVEOPTIONS: UTIL_virtools_types.EnumPropHelper = UTIL_virtools_types.EnumPropHelper(UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS)
|
||||||
|
|
||||||
class VirtoolsParams():
|
class VirtoolsParams():
|
||||||
vt_encodings: bpy.props.StringProperty(
|
|
||||||
name = "Encodings",
|
|
||||||
description = "The encoding list used by Virtools engine to resolve object name. Use `;` to split multiple encodings",
|
|
||||||
default = UTIL_virtools_types.g_PyBMapDefaultEncoding
|
|
||||||
) # type: ignore
|
|
||||||
|
|
||||||
texture_save_opt: bpy.props.EnumProperty(
|
texture_save_opt: bpy.props.EnumProperty(
|
||||||
name = "Global Texture Save Options",
|
name = "Global Texture Save Options",
|
||||||
description = "Decide how texture saved if texture is specified as Use Global as its Save Options.",
|
description = "Decide how texture saved if texture is specified as Use Global as its Save Options.",
|
||||||
@ -304,7 +300,7 @@ class VirtoolsParams():
|
|||||||
default = 5,
|
default = 5,
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_virtools_params(self, layout: bpy.types.UILayout, is_importer: bool) -> None:
|
def draw_virtools_params(self, context: bpy.types.Context, layout: bpy.types.UILayout, is_importer: bool) -> None:
|
||||||
header: bpy.types.UILayout
|
header: bpy.types.UILayout
|
||||||
body: bpy.types.UILayout
|
body: bpy.types.UILayout
|
||||||
header, body = layout.panel("BBP_PT_ioport_shared_virtools_params", default_closed=False)
|
header, body = layout.panel("BBP_PT_ioport_shared_virtools_params", default_closed=False)
|
||||||
@ -313,8 +309,8 @@ class VirtoolsParams():
|
|||||||
|
|
||||||
# draw encodings
|
# draw encodings
|
||||||
body.label(text = 'Encodings')
|
body.label(text = 'Encodings')
|
||||||
body.prop(self, 'vt_encodings', text = '')
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
PROP_ptrprop_resolver.PtrPropResolver.draw_ioport_encodings(body)
|
ptrprops.draw_ioport_encodings(body)
|
||||||
|
|
||||||
# following field are only valid in exporter
|
# following field are only valid in exporter
|
||||||
if not is_importer:
|
if not is_importer:
|
||||||
@ -329,10 +325,10 @@ class VirtoolsParams():
|
|||||||
body.prop(self, 'compress_level')
|
body.prop(self, 'compress_level')
|
||||||
|
|
||||||
|
|
||||||
def general_get_vt_encodings(self) -> tuple[str]:
|
def general_get_vt_encodings(self, context: bpy.types.Context) -> tuple[str, ...]:
|
||||||
# get encoding, split it by `;` and strip blank chars.
|
# get from ptrprop resolver then filter empty item
|
||||||
encodings: str = self.vt_encodings
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
return tuple(map(lambda x: x.strip(), encodings.split(';')))
|
return tuple(filter(lambda encoding: len(encoding) != 0, ptrprops.get_ioport_encodings()))
|
||||||
|
|
||||||
def general_get_texture_save_opt(self) -> UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS:
|
def general_get_texture_save_opt(self) -> UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS:
|
||||||
return _g_EnumHelper_CK_TEXTURE_SAVEOPTIONS.get_selection(self.texture_save_opt)
|
return _g_EnumHelper_CK_TEXTURE_SAVEOPTIONS.get_selection(self.texture_save_opt)
|
||||||
|
@ -270,6 +270,9 @@ def virtools_name_regulator(name: str | None) -> str:
|
|||||||
# Since LibCmo 0.2, the encoding name of LibCmo become universal encoding which is platfoorm independent.
|
# Since LibCmo 0.2, the encoding name of LibCmo become universal encoding which is platfoorm independent.
|
||||||
# So no need set it according to different platform.
|
# So no need set it according to different platform.
|
||||||
# Use universal encoding name (like Python).
|
# Use universal encoding name (like Python).
|
||||||
g_PyBMapDefaultEncoding: str = 'cp1252;gb2312'
|
g_PyBMapDefaultEncodings: tuple[str, ...] = (
|
||||||
|
'cp1252',
|
||||||
|
'gb2312'
|
||||||
|
)
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
Loading…
Reference in New Issue
Block a user