feat: finish i18n extract work
- masically finish u18n extract work (most fields are extracted)
This commit is contained in:
parent
4ffe29654b
commit
04aa879c22
@ -55,7 +55,7 @@ class BBP_OT_add_bme_struct(bpy.types.Operator):
|
|||||||
|
|
||||||
## Compromise used "outdated" flag.
|
## Compromise used "outdated" flag.
|
||||||
outdated_flag: bpy.props.BoolProperty(
|
outdated_flag: bpy.props.BoolProperty(
|
||||||
# TR: Internal property should not have name and desc otherwise they will be written in translation.
|
# TR: Property not showen should not have name and desc.
|
||||||
# name = "Outdated Type",
|
# name = "Outdated Type",
|
||||||
# description = "Internal flag.",
|
# description = "Internal flag.",
|
||||||
options = {'HIDDEN', 'SKIP_SAVE'},
|
options = {'HIDDEN', 'SKIP_SAVE'},
|
||||||
@ -243,49 +243,49 @@ class BBP_OT_add_bme_struct(bpy.types.Operator):
|
|||||||
op_cfgs_visitor: UTIL_functions.CollectionVisitor[BBP_PG_bme_adder_cfgs]
|
op_cfgs_visitor: UTIL_functions.CollectionVisitor[BBP_PG_bme_adder_cfgs]
|
||||||
op_cfgs_visitor = UTIL_functions.CollectionVisitor(self.bme_struct_cfgs)
|
op_cfgs_visitor = UTIL_functions.CollectionVisitor(self.bme_struct_cfgs)
|
||||||
# visit cfgs cache list to show cfg
|
# visit cfgs cache list to show cfg
|
||||||
layout.label(text = "Prototype Configurations:")
|
layout.label(text="Prototype Configurations:", text_ctxt='BBP_OT_add_bme_struct/draw')
|
||||||
for (cfg, cfg_index) in self.bme_struct_cfg_index_cache:
|
for (cfg, cfg_index) in self.bme_struct_cfg_index_cache:
|
||||||
# create box for cfgs
|
# create box for cfgs
|
||||||
box_layout: bpy.types.UILayout = layout.box()
|
box_layout: bpy.types.UILayout = layout.box()
|
||||||
|
|
||||||
# draw title and description first
|
# draw title and description first
|
||||||
box_layout.label(text = cfg.get_title())
|
box_layout.label(text=cfg.get_title()) # TODO: finish translation context
|
||||||
box_layout.label(text = cfg.get_desc())
|
box_layout.label(text=cfg.get_desc())
|
||||||
|
|
||||||
# show prop differently by cfg type
|
# show prop differently by cfg type
|
||||||
match(cfg.get_type()):
|
match(cfg.get_type()):
|
||||||
case UTIL_bme.PrototypeShowcaseCfgsTypes.Integer:
|
case UTIL_bme.PrototypeShowcaseCfgsTypes.Integer:
|
||||||
box_layout.prop(op_cfgs_visitor[cfg_index], 'prop_int', text = '')
|
box_layout.prop(op_cfgs_visitor[cfg_index], 'prop_int', text='')
|
||||||
case UTIL_bme.PrototypeShowcaseCfgsTypes.Float:
|
case UTIL_bme.PrototypeShowcaseCfgsTypes.Float:
|
||||||
box_layout.prop(op_cfgs_visitor[cfg_index], 'prop_float', text = '')
|
box_layout.prop(op_cfgs_visitor[cfg_index], 'prop_float', text='')
|
||||||
case UTIL_bme.PrototypeShowcaseCfgsTypes.Boolean:
|
case UTIL_bme.PrototypeShowcaseCfgsTypes.Boolean:
|
||||||
box_layout.prop(op_cfgs_visitor[cfg_index], 'prop_bool', text = '')
|
box_layout.prop(op_cfgs_visitor[cfg_index], 'prop_bool', text='')
|
||||||
case UTIL_bme.PrototypeShowcaseCfgsTypes.Face:
|
case UTIL_bme.PrototypeShowcaseCfgsTypes.Face:
|
||||||
# face will show a special layout (grid view)
|
# face will show a special layout (grid view)
|
||||||
grids = box_layout.grid_flow(
|
grids = box_layout.grid_flow(
|
||||||
row_major=True, columns=3, even_columns=True, even_rows=True, align=True)
|
row_major=True, columns=3, even_columns=True, even_rows=True, align=True)
|
||||||
grids.alignment = 'CENTER'
|
grids.alignment = 'CENTER'
|
||||||
grids.separator()
|
grids.separator()
|
||||||
grids.prop(op_cfgs_visitor[cfg_index + 0], 'prop_bool', text = 'Top') # top
|
grids.prop(op_cfgs_visitor[cfg_index + 0], 'prop_bool', text='Top', text_ctxt='BBP_OT_add_bme_struct/draw') # top
|
||||||
grids.prop(op_cfgs_visitor[cfg_index + 2], 'prop_bool', text = 'Front') # front
|
grids.prop(op_cfgs_visitor[cfg_index + 2], 'prop_bool', text='Front', text_ctxt='BBP_OT_add_bme_struct/draw') # front
|
||||||
grids.prop(op_cfgs_visitor[cfg_index + 4], 'prop_bool', text = 'Left') # left
|
grids.prop(op_cfgs_visitor[cfg_index + 4], 'prop_bool', text='Left', text_ctxt='BBP_OT_add_bme_struct/draw') # left
|
||||||
grids.label(text = '', icon = 'CUBE') # show a 3d cube as icon
|
grids.label(text='', icon='CUBE') # show a 3d cube as icon
|
||||||
grids.prop(op_cfgs_visitor[cfg_index + 5], 'prop_bool', text = 'Right') # right
|
grids.prop(op_cfgs_visitor[cfg_index + 5], 'prop_bool', text='Right', text_ctxt='BBP_OT_add_bme_struct/draw') # right
|
||||||
grids.prop(op_cfgs_visitor[cfg_index + 3], 'prop_bool', text = 'Back') # back
|
grids.prop(op_cfgs_visitor[cfg_index + 3], 'prop_bool', text='Back', text_ctxt='BBP_OT_add_bme_struct/draw') # back
|
||||||
grids.prop(op_cfgs_visitor[cfg_index + 1], 'prop_bool', text = 'Bottom') # bottom
|
grids.prop(op_cfgs_visitor[cfg_index + 1], 'prop_bool', text='Bottom', text_ctxt='BBP_OT_add_bme_struct/draw') # bottom
|
||||||
grids.separator()
|
grids.separator()
|
||||||
|
|
||||||
# show extra transform props
|
# show extra transform props
|
||||||
# forcely order that each one are placed horizontally
|
# forcely order that each one are placed horizontally
|
||||||
layout.label(text = "Extra Transform")
|
layout.label(text="Extra Transform", text_ctxt='BBP_OT_add_bme_struct/draw')
|
||||||
# translation
|
# translation
|
||||||
layout.label(text = 'Translation')
|
layout.label(text='Translation', text_ctxt='BBP_OT_add_bme_struct/draw')
|
||||||
hbox_layout: bpy.types.UILayout = layout.row()
|
hbox_layout: bpy.types.UILayout = layout.row()
|
||||||
hbox_layout.prop(self, 'extra_translation', text = '')
|
hbox_layout.prop(self, 'extra_translation', text='')
|
||||||
# rotation
|
# rotation
|
||||||
layout.label(text = 'Rotation')
|
layout.label(text='Rotation', text_ctxt='BBP_OT_add_bme_struct/draw')
|
||||||
hbox_layout = layout.row()
|
hbox_layout = layout.row()
|
||||||
hbox_layout.prop(self, 'extra_rotation', text = '')
|
hbox_layout.prop(self, 'extra_rotation', text='')
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def draw_blc_menu(cls, layout: bpy.types.UILayout):
|
def draw_blc_menu(cls, layout: bpy.types.UILayout):
|
||||||
|
@ -224,7 +224,9 @@ class BBP_OT_add_component(bpy.types.Operator, ComponentSectorParam):
|
|||||||
# check for some special components and show warning
|
# check for some special components and show warning
|
||||||
elename: str | None = _check_component_existance(_g_EnumHelper_Component.get_selection(self.component_type), self.general_get_component_sector())
|
elename: str | None = _check_component_existance(_g_EnumHelper_Component.get_selection(self.component_type), self.general_get_component_sector())
|
||||||
if elename is not None:
|
if elename is not None:
|
||||||
layout.label(text = f'Warning: {elename} already exist.')
|
tr_text: str = bpy.app.translations.pgettext_iface(
|
||||||
|
'Warning: {0} already exist.', 'BBP_OT_add_component/draw')
|
||||||
|
layout.label(text=tr_text.format(elename), translate=False)
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# call general creator
|
# call general creator
|
||||||
@ -324,7 +326,8 @@ class BBP_OT_add_nong_ventilator(bpy.types.Operator, ComponentSectorParam, Compo
|
|||||||
self.draw_component_sector_params(layout)
|
self.draw_component_sector_params(layout)
|
||||||
|
|
||||||
# draw count settings by different source
|
# draw count settings by different source
|
||||||
layout.label(text = 'Count')
|
layout.separator()
|
||||||
|
layout.label(text='Count Source', text_ctxt='BBP_OT_add_nong_ventilator/draw')
|
||||||
layout.prop(self, 'ventilator_count_source', expand = True)
|
layout.prop(self, 'ventilator_count_source', expand = True)
|
||||||
if (self.ventilator_count_source == 'CUSTOM'):
|
if (self.ventilator_count_source == 'CUSTOM'):
|
||||||
self.draw_component_count_params(layout)
|
self.draw_component_count_params(layout)
|
||||||
@ -551,16 +554,20 @@ class BBP_OT_add_sector_component_pair(bpy.types.Operator, ComponentSectorParam)
|
|||||||
layout = self.layout
|
layout = self.layout
|
||||||
self.draw_component_sector_params(layout)
|
self.draw_component_sector_params(layout)
|
||||||
|
|
||||||
|
# fetch warning string
|
||||||
|
tr_text: str = bpy.app.translations.pgettext_iface(
|
||||||
|
'Warning: {0} already exist.', 'BBP_OT_add_sector_component_pair/draw')
|
||||||
|
|
||||||
# check checkpoint and resetpoint name conflict and show warnings
|
# check checkpoint and resetpoint name conflict and show warnings
|
||||||
(checkp_ty, checkp_sector) = self.__get_checkpoint()
|
(checkp_ty, checkp_sector) = self.__get_checkpoint()
|
||||||
elename: str | None = _check_component_existance(checkp_ty, checkp_sector)
|
elename: str | None = _check_component_existance(checkp_ty, checkp_sector)
|
||||||
if elename is not None:
|
if elename is not None:
|
||||||
layout.label(text = f'Warning: {elename} already exist.')
|
layout.label(text=tr_text.format(elename), translate=False)
|
||||||
|
|
||||||
(resetp_ty, resetp_sector) = self.__get_resetpoint()
|
(resetp_ty, resetp_sector) = self.__get_resetpoint()
|
||||||
elename = _check_component_existance(resetp_ty, resetp_sector)
|
elename = _check_component_existance(resetp_ty, resetp_sector)
|
||||||
if elename is not None:
|
if elename is not None:
|
||||||
layout.label(text = f'Warning: {elename} already exist.')
|
layout.label(text=tr_text.format(elename), translate=False)
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# create checkpoint and resetpoint individually in element context
|
# create checkpoint and resetpoint individually in element context
|
||||||
|
@ -62,15 +62,15 @@ class SharedExtraTransform():
|
|||||||
def draw_extra_transform_input(self, layout: bpy.types.UILayout) -> None:
|
def draw_extra_transform_input(self, layout: bpy.types.UILayout) -> None:
|
||||||
# show extra transform props
|
# show extra transform props
|
||||||
# forcely order that each one are placed horizontally
|
# forcely order that each one are placed horizontally
|
||||||
layout.label(text = "Extra Transform")
|
layout.label(text="Extra Transform", text_ctxt='BBP/OP_ADDS_rail.SharedExtraTransform/draw')
|
||||||
# translation
|
# translation
|
||||||
layout.label(text = 'Translation')
|
layout.label(text='Translation', text_ctxt='BBP/OP_ADDS_rail.SharedExtraTransform/draw')
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(self, 'extra_translation', text = '')
|
row.prop(self, 'extra_translation', text='')
|
||||||
# rotation
|
# rotation
|
||||||
layout.label(text = 'Rotation')
|
layout.label(text='Rotation', text_ctxt='BBP/OP_ADDS_rail.SharedExtraTransform/draw')
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(self, 'extra_rotation', text = '')
|
row.prop(self, 'extra_rotation', text='')
|
||||||
|
|
||||||
def general_get_extra_transform(self) -> mathutils.Matrix:
|
def general_get_extra_transform(self) -> mathutils.Matrix:
|
||||||
return mathutils.Matrix.LocRotScale(
|
return mathutils.Matrix.LocRotScale(
|
||||||
@ -124,7 +124,7 @@ class SharedRailCapInputProperty():
|
|||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_rail_cap_input(self, layout: bpy.types.UILayout) -> None:
|
def draw_rail_cap_input(self, layout: bpy.types.UILayout) -> None:
|
||||||
layout.label(text = "Cap Options")
|
layout.label(text="Cap Options", text_ctxt='BBP/OP_ADDS_rail.SharedRailCapInputProperty/draw')
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(self, "rail_start_cap", toggle = 1)
|
row.prop(self, "rail_start_cap", toggle = 1)
|
||||||
row.prop(self, "rail_end_cap", toggle = 1)
|
row.prop(self, "rail_end_cap", toggle = 1)
|
||||||
@ -209,7 +209,7 @@ class SharedScrewRailInputProperty():
|
|||||||
|
|
||||||
def draw_screw_rail_flip_input(self, layout: bpy.types.UILayout) -> None:
|
def draw_screw_rail_flip_input(self, layout: bpy.types.UILayout) -> None:
|
||||||
# flip options should placed horizontally
|
# flip options should placed horizontally
|
||||||
layout.label(text = "Flip Options")
|
layout.label(text="Flip Options", text_ctxt='BBP/OP_ADDS_rail.SharedScrewRailInputProperty/draw')
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.prop(self, "rail_screw_flip_x", toggle = 1)
|
row.prop(self, "rail_screw_flip_x", toggle = 1)
|
||||||
row.prop(self, "rail_screw_flip_y", toggle = 1)
|
row.prop(self, "rail_screw_flip_y", toggle = 1)
|
||||||
@ -263,7 +263,7 @@ class BBP_OT_add_transition_section(bpy.types.Operator):
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'No Options Available')
|
layout.label(text='No Options Available', text_ctxt='BBP_OT_add_transition_section/draw')
|
||||||
|
|
||||||
class BBP_OT_add_straight_rail(SharedExtraTransform, SharedRailSectionInputProperty, SharedRailCapInputProperty, SharedStraightRailInputProperty, bpy.types.Operator):
|
class BBP_OT_add_straight_rail(SharedExtraTransform, SharedRailSectionInputProperty, SharedRailCapInputProperty, SharedStraightRailInputProperty, bpy.types.Operator):
|
||||||
"""Add Straight Rail"""
|
"""Add Straight Rail"""
|
||||||
@ -286,7 +286,7 @@ class BBP_OT_add_straight_rail(SharedExtraTransform, SharedRailSectionInputPrope
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'Straight Rail')
|
layout.label(text='Straight Rail', text_ctxt='BBP_OT_add_straight_rail/draw')
|
||||||
self.draw_rail_section_input(layout)
|
self.draw_rail_section_input(layout)
|
||||||
self.draw_straight_rail_input(layout)
|
self.draw_straight_rail_input(layout)
|
||||||
layout.separator()
|
layout.separator()
|
||||||
@ -315,7 +315,7 @@ class BBP_OT_add_transition_rail(SharedExtraTransform, SharedRailCapInputPropert
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'Transition Rail')
|
layout.label(text='Transition Rail', text_ctxt='BBP_OT_add_transition_rail/draw')
|
||||||
self.draw_straight_rail_input(layout)
|
self.draw_straight_rail_input(layout)
|
||||||
layout.separator()
|
layout.separator()
|
||||||
self.draw_rail_cap_input(layout)
|
self.draw_rail_cap_input(layout)
|
||||||
@ -355,7 +355,7 @@ class BBP_OT_add_side_rail(SharedExtraTransform, SharedRailCapInputProperty, Sha
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'Side Rail')
|
layout.label(text='Side Rail', text_ctxt='BBP_OT_add_side_rail/draw')
|
||||||
layout.prop(self, 'side_rail_type')
|
layout.prop(self, 'side_rail_type')
|
||||||
self.draw_straight_rail_input(layout)
|
self.draw_straight_rail_input(layout)
|
||||||
layout.separator()
|
layout.separator()
|
||||||
@ -395,7 +395,7 @@ class BBP_OT_add_arc_rail(SharedExtraTransform, SharedRailSectionInputProperty,
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'Arc Rail')
|
layout.label(text='Arc Rail', text_ctxt='BBP_OT_add_arc_rail/draw')
|
||||||
self.draw_rail_section_input(layout)
|
self.draw_rail_section_input(layout)
|
||||||
self.draw_screw_rail_input(layout)
|
self.draw_screw_rail_input(layout)
|
||||||
layout.prop(self, "rail_screw_angle")
|
layout.prop(self, "rail_screw_angle")
|
||||||
@ -445,7 +445,7 @@ class BBP_OT_add_spiral_rail(SharedExtraTransform, SharedRailCapInputProperty, S
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'Spiral Rail')
|
layout.label(text='Spiral Rail', text_ctxt='BBP_OT_add_spiral_rail/draw')
|
||||||
self.draw_screw_rail_input(layout)
|
self.draw_screw_rail_input(layout)
|
||||||
layout.prop(self, "rail_screw_screw")
|
layout.prop(self, "rail_screw_screw")
|
||||||
layout.prop(self, "rail_screw_iterations")
|
layout.prop(self, "rail_screw_iterations")
|
||||||
@ -489,7 +489,7 @@ class BBP_OT_add_side_spiral_rail(SharedExtraTransform, SharedRailSectionInputPr
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text = 'Spiral Rail')
|
layout.label(text='Spiral Rail', text_ctxt='BBP_OT_add_side_spiral_rail/draw')
|
||||||
self.draw_screw_rail_input(layout)
|
self.draw_screw_rail_input(layout)
|
||||||
layout.prop(self, "rail_screw_iterations")
|
layout.prop(self, "rail_screw_iterations")
|
||||||
layout.separator()
|
layout.separator()
|
||||||
|
@ -79,7 +79,9 @@ def _export_virtools(
|
|||||||
|
|
||||||
# create temp folder
|
# create temp folder
|
||||||
with tempfile.TemporaryDirectory() as vt_temp_folder:
|
with tempfile.TemporaryDirectory() as vt_temp_folder:
|
||||||
print(f'Virtools Engine Temp: {vt_temp_folder}')
|
tr_text: str = bpy.app.translations.pgettext_rpt(
|
||||||
|
'Virtools Engine Temporary Directory: {0}', 'BBP_OT_export_virtools/execute')
|
||||||
|
print(tr_text.format(vt_temp_folder))
|
||||||
|
|
||||||
# create virtools reader context
|
# create virtools reader context
|
||||||
with bmap.BMFileWriter(
|
with bmap.BMFileWriter(
|
||||||
|
@ -43,7 +43,9 @@ class BBP_OT_import_virtools(bpy.types.Operator, UTIL_file_browser.ImportVirtool
|
|||||||
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:
|
||||||
# create temp folder
|
# create temp folder
|
||||||
with tempfile.TemporaryDirectory() as vt_temp_folder:
|
with tempfile.TemporaryDirectory() as vt_temp_folder:
|
||||||
print(f'Virtools Engine Temp: {vt_temp_folder}')
|
tr_text: str = bpy.app.translations.pgettext_rpt(
|
||||||
|
'Virtools Engine Temporary Directory: {0}', 'BBP_OT_import_virtools/execute')
|
||||||
|
print(tr_text.format(vt_temp_folder))
|
||||||
|
|
||||||
# create virtools reader context
|
# create virtools reader context
|
||||||
with bmap.BMFileReader(
|
with bmap.BMFileReader(
|
||||||
@ -82,7 +84,9 @@ def _import_virtools_textures(
|
|||||||
|
|
||||||
# create another temp folder for raw data virtools texture importing
|
# create another temp folder for raw data virtools texture importing
|
||||||
with tempfile.TemporaryDirectory() as rawdata_temp:
|
with tempfile.TemporaryDirectory() as rawdata_temp:
|
||||||
print(f'Texture Raw Data Temp: {rawdata_temp}')
|
tr_text: str = bpy.app.translations.pgettext_rpt(
|
||||||
|
'Texture Raw Data Temporary Directory: {0}', 'BBP_OT_import_virtools/execute')
|
||||||
|
print(tr_text.format(rawdata_temp))
|
||||||
|
|
||||||
for vttexture in reader.get_textures():
|
for vttexture in reader.get_textures():
|
||||||
tex_cret: typing.Callable[[], bpy.types.Image]
|
tex_cret: typing.Callable[[], bpy.types.Image]
|
||||||
|
@ -30,7 +30,9 @@ class BBP_OT_fix_all_material(bpy.types.Operator):
|
|||||||
counter_suc += 1
|
counter_suc += 1
|
||||||
|
|
||||||
# report and return
|
# report and return
|
||||||
self.report({'INFO'}, f'Fix {counter_suc}/{counter_all} materials.')
|
tr_text: str = bpy.app.translations.pgettext_rpt(
|
||||||
|
'Fix {0}/{1} materials.', 'BBP_OT_fix_all_material/draw')
|
||||||
|
self.report({'INFO'}, tr_text.format(counter_suc, counter_all))
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
def register() -> None:
|
def register() -> None:
|
||||||
|
@ -112,22 +112,22 @@ class BBP_OT_legacy_align(bpy.types.Operator):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
apply_flag: bpy.props.BoolProperty(
|
apply_flag: bpy.props.BoolProperty(
|
||||||
name = "Apply Flag",
|
# TR: Property not showen should not have name and desc.
|
||||||
description = "Internal flag.",
|
# name = "Apply Flag",
|
||||||
|
# description = "Internal flag.",
|
||||||
options = {'HIDDEN', 'SKIP_SAVE'},
|
options = {'HIDDEN', 'SKIP_SAVE'},
|
||||||
default = True, # default True value to make it as a "light" button, not a grey one.
|
default = True, # default True value to make it as a "light" button, not a grey one.
|
||||||
update = apply_flag_updated,
|
update = apply_flag_updated
|
||||||
translation_context = 'BBP_OT_legacy_align/property'
|
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
recursive_hinder: bpy.props.BoolProperty(
|
recursive_hinder: bpy.props.BoolProperty(
|
||||||
# TR: internal used property should not have name and description, otherwise it will be translated.
|
# TR: Property not showen should not have name and desc.
|
||||||
# name = "Recursive Hinder",
|
# name = "Recursive Hinder",
|
||||||
# description = "An internal flag to prevent the loop calling to apply_flags's updator.",
|
# description = "An internal flag to prevent the loop calling to apply_flags's updator.",
|
||||||
options = {'HIDDEN', 'SKIP_SAVE'},
|
options = {'HIDDEN', 'SKIP_SAVE'},
|
||||||
default = False
|
default = False
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
align_history : bpy.props.CollectionProperty(
|
align_history : bpy.props.CollectionProperty(
|
||||||
# TR: same reason for no name and description.
|
# TR: Property not showen should not have name and desc.
|
||||||
# name = "Historys",
|
# name = "Historys",
|
||||||
# description = "Align history.",
|
# description = "Align history.",
|
||||||
type = BBP_PG_legacy_align_history
|
type = BBP_PG_legacy_align_history
|
||||||
@ -179,7 +179,7 @@ class BBP_OT_legacy_align(bpy.types.Operator):
|
|||||||
col = layout.column()
|
col = layout.column()
|
||||||
|
|
||||||
# show axis
|
# show axis
|
||||||
col.label(text="Align Axis (Multi-selection)")
|
col.label(text="Align Axis (Multi-selection)", text_ctxt='BBP_OT_legacy_align/draw')
|
||||||
row = col.row()
|
row = col.row()
|
||||||
row.prop(entry, "align_x", toggle = 1)
|
row.prop(entry, "align_x", toggle = 1)
|
||||||
row.prop(entry, "align_y", toggle = 1)
|
row.prop(entry, "align_y", toggle = 1)
|
||||||
@ -187,9 +187,9 @@ class BBP_OT_legacy_align(bpy.types.Operator):
|
|||||||
|
|
||||||
# show mode
|
# show mode
|
||||||
col.separator()
|
col.separator()
|
||||||
col.label(text = 'Current Object (Active Object)')
|
col.label(text='Current Object (Active Object)', text_ctxt='BBP_OT_legacy_align/draw')
|
||||||
col.prop(entry, "current_align_mode", expand = True)
|
col.prop(entry, "current_align_mode", expand = True)
|
||||||
col.label(text = 'Target Objects (Selected Objects)')
|
col.label(text='Target Objects (Selected Objects)', text_ctxt='BBP_OT_legacy_align/draw')
|
||||||
col.prop(entry, "target_align_mode", expand = True)
|
col.prop(entry, "target_align_mode", expand = True)
|
||||||
|
|
||||||
# show apply button
|
# show apply button
|
||||||
@ -198,8 +198,10 @@ class BBP_OT_legacy_align(bpy.types.Operator):
|
|||||||
# only allow Apply when there is a selected axis
|
# only allow Apply when there is a selected axis
|
||||||
conditional_disable_area.enabled = entry.align_x == True or entry.align_y == True or entry.align_z == True
|
conditional_disable_area.enabled = entry.align_x == True or entry.align_y == True or entry.align_z == True
|
||||||
# show apply and counter
|
# show apply and counter
|
||||||
conditional_disable_area.prop(self, 'apply_flag', text = 'Apply', icon = 'CHECKMARK', toggle = 1)
|
conditional_disable_area.prop(self, 'apply_flag', toggle = 1, text='Apply', icon='CHECKMARK', text_ctxt='BBP_OT_legacy_align/draw')
|
||||||
conditional_disable_area.label(text = f'Total {len(histories) - 1} applied alignments')
|
tr_text: str = bpy.app.translations.pgettext_iface(
|
||||||
|
'Total {0} applied alignments', 'BBP_OT_legacy_align/draw')
|
||||||
|
conditional_disable_area.label(text=tr_text.format(len(histories) - 1), translate=False)
|
||||||
|
|
||||||
#region Core Functions
|
#region Core Functions
|
||||||
|
|
||||||
|
@ -82,11 +82,14 @@ def _rename_core(
|
|||||||
reporter.leave_object(obj)
|
reporter.leave_object(obj)
|
||||||
|
|
||||||
# report data
|
# report data
|
||||||
|
tr_text_1: str = bpy.app.translations.pgettext_rpt('View console to get more detail', 'BBP/OP_OBJECT_naming_convention._rename_core()')
|
||||||
|
tr_text_2: str = bpy.app.translations.pgettext_rpt('All: {0}', 'BBP/OP_OBJECT_naming_convention._rename_core()')
|
||||||
|
tr_text_3: str = bpy.app.translations.pgettext_rpt('Failed: {0}', 'BBP/OP_OBJECT_naming_convention._rename_core()')
|
||||||
UTIL_functions.message_box(
|
UTIL_functions.message_box(
|
||||||
(
|
(
|
||||||
'View console to get more detail',
|
tr_text_1,
|
||||||
f'All: {reporter.get_all_objs_count()}',
|
tr_text_2.format(reporter.get_all_objs_count()),
|
||||||
f'Failed: {reporter.get_failed_objs_count()}'
|
tr_text_3.format(reporter.get_failed_objs_count())
|
||||||
),
|
),
|
||||||
'Rename System Report',
|
'Rename System Report',
|
||||||
UTIL_icons_manager.BlenderPresetIcons.Info.value
|
UTIL_icons_manager.BlenderPresetIcons.Info.value
|
||||||
|
@ -60,12 +60,12 @@ class BBP_OT_select_object_by_virtools_group(bpy.types.Operator, PROP_virtools_g
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text='Selection Mode')
|
layout.label(text='Selection Mode', text_ctxt='BBP_OT_select_object_by_virtools_group/draw')
|
||||||
sublayout = layout.column() # make selection expand vertically, not horizontal.
|
sublayout = layout.column() # make selection expand vertically, not horizontal.
|
||||||
sublayout.prop(self, 'selection_mode', expand = True)
|
sublayout.prop(self, 'selection_mode', expand = True)
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text='Group Parameters')
|
layout.label(text='Group Parameters', text_ctxt='BBP_OT_select_object_by_virtools_group/draw')
|
||||||
self.draw_group_name_input(layout)
|
self.draw_group_name_input(layout)
|
||||||
|
|
||||||
def _select_object_by_virtools_group(context: bpy.types.Context, group_name: str, mode: SelectMode) -> None:
|
def _select_object_by_virtools_group(context: bpy.types.Context, group_name: str, mode: SelectMode) -> None:
|
||||||
|
@ -171,24 +171,26 @@ class BBP_OT_flatten_uv(bpy.types.Operator):
|
|||||||
# do flatten uv and report
|
# do flatten uv and report
|
||||||
failed: int = _flatten_uv_wrapper(context.active_object.data, flatten_param_)
|
failed: int = _flatten_uv_wrapper(context.active_object.data, flatten_param_)
|
||||||
if failed != 0:
|
if failed != 0:
|
||||||
print(f'[Flatten UV] {failed} faces are not be processed correctly because process failed.')
|
tr_text: str = bpy.app.translations.pgettext_rpt(
|
||||||
|
'[Flatten UV] {0} faces are not be processed correctly because process failed.', 'BBP_OT_flatten_uv/execute')
|
||||||
|
print(tr_text.format(failed))
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.emboss = 'NORMAL'
|
layout.emboss = 'NORMAL'
|
||||||
layout.label(text = "Flatten Method")
|
layout.label(text="Flatten Method", text_ctxt='BBP_OT_flatten_uv/draw')
|
||||||
sublayout = layout.row()
|
sublayout = layout.row()
|
||||||
sublayout.prop(self, "flatten_method", expand = True)
|
sublayout.prop(self, "flatten_method", expand = True)
|
||||||
layout.prop(self, "reference_edge")
|
layout.prop(self, "reference_edge")
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text = "Scale Mode")
|
layout.label(text="Scale Mode", text_ctxt='BBP_OT_flatten_uv/draw')
|
||||||
sublayout = layout.row()
|
sublayout = layout.row()
|
||||||
sublayout.prop(self, "scale_mode", expand = True)
|
sublayout.prop(self, "scale_mode", expand = True)
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text = "Scale Config")
|
layout.label(text="Scale Configuration", text_ctxt='BBP_OT_flatten_uv/draw')
|
||||||
if self.scale_mode == 'NUM':
|
if self.scale_mode == 'NUM':
|
||||||
layout.prop(self, "scale_number")
|
layout.prop(self, "scale_number")
|
||||||
else:
|
else:
|
||||||
|
@ -76,8 +76,12 @@ def _get_rail_target(context: bpy.types.Context) -> tuple[bool, typing.Iterable[
|
|||||||
if has_invalid_objs:
|
if has_invalid_objs:
|
||||||
# output to console
|
# output to console
|
||||||
print('')
|
print('')
|
||||||
print('========== Rail UV Report ==========')
|
tr_text: str = bpy.app.translations.pgettext_rpt('Rail UV Report', 'BBP_OT_rail_uv/execute')
|
||||||
print('Following objects are not processed by Rail UV because they do not meet the requirements of Rail UV.')
|
print(f'========== {tr_text} ==========')
|
||||||
|
print(bpy.app.translations.pgettext_rpt(
|
||||||
|
'Following objects are not processed by Rail UV because they do not meet the requirements of Rail UV.',
|
||||||
|
'BBP_OT_rail_uv/execute'
|
||||||
|
))
|
||||||
for objname in error_objname:
|
for objname in error_objname:
|
||||||
print(objname)
|
print(objname)
|
||||||
print('')
|
print('')
|
||||||
|
@ -39,9 +39,9 @@ class BBPPreferences(bpy.types.AddonPreferences):
|
|||||||
|
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
col = row.column()
|
col = row.column()
|
||||||
col.label(text = "Ballance Texture Folder")
|
col.label(text="Ballance Texture Folder", text_ctxt='BBPPreferences/draw')
|
||||||
col.prop(self, "ballance_texture_folder", text = "")
|
col.prop(self, "ballance_texture_folder", text = "")
|
||||||
col.label(text = "No Component Collection")
|
col.label(text="No Component Collection", text_ctxt='BBPPreferences/draw')
|
||||||
col.prop(self, "no_component_collection", text = "")
|
col.prop(self, "no_component_collection", text = "")
|
||||||
|
|
||||||
def get_preferences() -> BBPPreferences:
|
def get_preferences() -> BBPPreferences:
|
||||||
|
@ -12,6 +12,7 @@ from . import UTIL_functions, UTIL_virtools_types
|
|||||||
class BBP_PG_bmap_encoding(bpy.types.PropertyGroup):
|
class BBP_PG_bmap_encoding(bpy.types.PropertyGroup):
|
||||||
encoding: bpy.props.StringProperty(
|
encoding: bpy.props.StringProperty(
|
||||||
name = "Encoding",
|
name = "Encoding",
|
||||||
|
description = "The name of BMap used encoding.",
|
||||||
default = "",
|
default = "",
|
||||||
translation_context = 'BBP_PG_bmap_encoding/property'
|
translation_context = 'BBP_PG_bmap_encoding/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
@ -42,7 +43,7 @@ class BBP_PG_ptrprop_resolver(bpy.types.PropertyGroup):
|
|||||||
translation_context = 'BBP_PG_ptrprop_resolver/property'
|
translation_context = 'BBP_PG_ptrprop_resolver/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
# TR: These encoding related items should not have explicit name and description
|
# TR: Properties not showen should not have name and desc.
|
||||||
ioport_encodings: bpy.props.CollectionProperty(type = BBP_PG_bmap_encoding) # type: ignore
|
ioport_encodings: bpy.props.CollectionProperty(type = BBP_PG_bmap_encoding) # type: ignore
|
||||||
active_ioport_encodings: bpy.props.IntProperty() # type: ignore
|
active_ioport_encodings: bpy.props.IntProperty() # type: ignore
|
||||||
|
|
||||||
|
@ -252,21 +252,21 @@ class SharedGroupNameInputProperties():
|
|||||||
('DEFINED', "Predefined", "Pre-defined group name."),
|
('DEFINED', "Predefined", "Pre-defined group name."),
|
||||||
('CUSTOM', "Custom", "User specified group name."),
|
('CUSTOM', "Custom", "User specified group name."),
|
||||||
),
|
),
|
||||||
translation_context = 'BME/PROP_virtools_grourp.SharedGroupNameInputProperties/property'
|
translation_context = 'BBP/PROP_virtools_grourp.SharedGroupNameInputProperties/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
preset_group_name: bpy.props.EnumProperty(
|
preset_group_name: bpy.props.EnumProperty(
|
||||||
name = "Group Name",
|
name = "Group Name",
|
||||||
description = "Pick vanilla Ballance group name.",
|
description = "Pick vanilla Ballance group name.",
|
||||||
items = _g_EnumHelper_Group.generate_items(),
|
items = _g_EnumHelper_Group.generate_items(),
|
||||||
translation_context = 'BME/PROP_virtools_grourp.SharedGroupNameInputProperties/property'
|
translation_context = 'BBP/PROP_virtools_grourp.SharedGroupNameInputProperties/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
custom_group_name: bpy.props.StringProperty(
|
custom_group_name: bpy.props.StringProperty(
|
||||||
name = "Custom Group Name",
|
name = "Custom Group Name",
|
||||||
description = "Input your custom group name.",
|
description = "Input your custom group name.",
|
||||||
default = "",
|
default = "",
|
||||||
translation_context = 'BME/PROP_virtools_grourp.SharedGroupNameInputProperties/property'
|
translation_context = 'BBP/PROP_virtools_grourp.SharedGroupNameInputProperties/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_group_name_input(self, layout: bpy.types.UILayout) -> None:
|
def draw_group_name_input(self, layout: bpy.types.UILayout) -> None:
|
||||||
@ -388,7 +388,9 @@ class BBP_PT_virtools_groups(bpy.types.Panel):
|
|||||||
|
|
||||||
# notify on non-mesh object
|
# notify on non-mesh object
|
||||||
if target.type != 'MESH':
|
if target.type != 'MESH':
|
||||||
layout.label(text = 'Virtools Group is invalid on non-mesh object!', icon = 'ERROR')
|
layout.label(
|
||||||
|
text='Virtools Group is invalid on non-mesh object!', icon='ERROR',
|
||||||
|
text_ctxt='BBP_PT_virtools_groups/draw')
|
||||||
|
|
||||||
# draw main body
|
# draw main body
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
|
@ -283,11 +283,13 @@ class BBP_PT_virtools_light(bpy.types.Panel):
|
|||||||
rawdata: RawVirtoolsLight = get_raw_virtools_light(lit)
|
rawdata: RawVirtoolsLight = get_raw_virtools_light(lit)
|
||||||
|
|
||||||
# draw operator
|
# draw operator
|
||||||
layout.operator(BBP_OT_apply_virtools_light.bl_idname, text = 'Apply', icon = 'NODETREE')
|
layout.operator(
|
||||||
|
BBP_OT_apply_virtools_light.bl_idname, text='Apply', icon='NODETREE',
|
||||||
|
text_ctxt='BBP_PT_virtools_light/draw')
|
||||||
|
|
||||||
# draw data
|
# draw data
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text = 'Basics')
|
layout.label(text='Basics', text_ctxt='BBP_PT_virtools_light/draw')
|
||||||
# all lights has type and color property
|
# all lights has type and color property
|
||||||
sublayout = layout.row()
|
sublayout = layout.row()
|
||||||
sublayout.use_property_split = False
|
sublayout.use_property_split = False
|
||||||
@ -300,15 +302,15 @@ class BBP_PT_virtools_light(bpy.types.Panel):
|
|||||||
# all light has attenuation exception directional light
|
# all light has attenuation exception directional light
|
||||||
if rawdata.mType != UTIL_virtools_types.VXLIGHT_TYPE.VX_LIGHTDIREC:
|
if rawdata.mType != UTIL_virtools_types.VXLIGHT_TYPE.VX_LIGHTDIREC:
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text = 'Attenuation')
|
layout.label(text='Attenuation', text_ctxt='BBP_PT_virtools_light/draw')
|
||||||
layout.prop(props, 'constant_attenuation', text = 'Constant')
|
layout.prop(props, 'constant_attenuation', text='Constant', text_ctxt='BBP_PT_virtools_light/draw')
|
||||||
layout.prop(props, 'linear_attenuation', text = 'Linear')
|
layout.prop(props, 'linear_attenuation', text='Linear', text_ctxt='BBP_PT_virtools_light/draw')
|
||||||
layout.prop(props, 'quadratic_attenuation', text = 'Quadratic')
|
layout.prop(props, 'quadratic_attenuation', text='Quadratic', text_ctxt='BBP_PT_virtools_light/draw')
|
||||||
|
|
||||||
# only spot light has spot cone properties.
|
# only spot light has spot cone properties.
|
||||||
if rawdata.mType == UTIL_virtools_types.VXLIGHT_TYPE.VX_LIGHTSPOT:
|
if rawdata.mType == UTIL_virtools_types.VXLIGHT_TYPE.VX_LIGHTSPOT:
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text = 'Spot Cone')
|
layout.label(text='Spot Cone', text_ctxt='BBP_PT_virtools_light/draw')
|
||||||
layout.prop(props, 'hot_spot')
|
layout.prop(props, 'hot_spot')
|
||||||
layout.prop(props, 'falloff')
|
layout.prop(props, 'falloff')
|
||||||
layout.prop(props, 'falloff_shape')
|
layout.prop(props, 'falloff_shape')
|
||||||
|
@ -907,7 +907,7 @@ class BBP_OT_apply_virtools_material(bpy.types.Operator):
|
|||||||
return context.material is not None
|
return context.material is not None
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
mtl: bpy.types.Material = context.material
|
mtl = typing.cast(bpy.types.Material, context.material)
|
||||||
apply_to_blender_material(mtl)
|
apply_to_blender_material(mtl)
|
||||||
return {'FINISHED'}
|
return {'FINISHED'}
|
||||||
|
|
||||||
@ -930,7 +930,7 @@ class BBP_OT_fix_single_material(bpy.types.Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# get mtl and try to fix
|
# get mtl and try to fix
|
||||||
mtl: bpy.types.Material = context.material
|
mtl = typing.cast(bpy.types.Material, context.material)
|
||||||
ret: bool = fix_material(mtl)
|
ret: bool = fix_material(mtl)
|
||||||
|
|
||||||
# if suc, apply to blender mtl and show info
|
# if suc, apply to blender mtl and show info
|
||||||
@ -969,7 +969,7 @@ class BBP_OT_preset_virtools_material(bpy.types.Operator):
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# get essential value
|
# get essential value
|
||||||
mtl: bpy.types.Material = context.material
|
mtl = typing.cast(bpy.types.Material, context.material)
|
||||||
expected_preset: MaterialPresetType = _g_Helper_MtlPreset.get_selection(self.preset_type)
|
expected_preset: MaterialPresetType = _g_Helper_MtlPreset.get_selection(self.preset_type)
|
||||||
|
|
||||||
# apply preset to material
|
# apply preset to material
|
||||||
@ -982,7 +982,7 @@ class BBP_OT_direct_set_virtools_texture(bpy.types.Operator, UTIL_file_browser.I
|
|||||||
"""Import and Assign Texture Directly"""
|
"""Import and Assign Texture Directly"""
|
||||||
bl_idname = "bbp.direct_set_virtools_texture"
|
bl_idname = "bbp.direct_set_virtools_texture"
|
||||||
bl_label = "Import and Assign Texture"
|
bl_label = "Import and Assign Texture"
|
||||||
bl_options = {'UNDO'}
|
bl_options = {'UNDO', 'INTERNAL'} # NOTE: Use 'INTERNAL' to remove it from search result.
|
||||||
bl_translation_context = 'BBP_OT_direct_set_virtools_texture'
|
bl_translation_context = 'BBP_OT_direct_set_virtools_texture'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -1004,7 +1004,7 @@ class BBP_OT_direct_set_virtools_texture(bpy.types.Operator, UTIL_file_browser.I
|
|||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
# get assoc mtl
|
# get assoc mtl
|
||||||
mtl: bpy.types.Material = context.material
|
mtl = typing.cast(bpy.types.Material, context.material)
|
||||||
rawmtl: RawVirtoolsMaterial = get_raw_virtools_material(mtl)
|
rawmtl: RawVirtoolsMaterial = get_raw_virtools_material(mtl)
|
||||||
|
|
||||||
# import texture according to whether it is ballance texture
|
# import texture according to whether it is ballance texture
|
||||||
@ -1045,18 +1045,22 @@ class BBP_PT_virtools_material(bpy.types.Panel):
|
|||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
# get layout and target
|
# get layout and target
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
mtl: bpy.types.Material = context.material
|
mtl = typing.cast(bpy.types.Material, context.material)
|
||||||
props: BBP_PG_virtools_material = get_virtools_material(mtl)
|
props: BBP_PG_virtools_material = get_virtools_material(mtl)
|
||||||
rawdata: RawVirtoolsMaterial = get_raw_virtools_material(mtl)
|
rawdata: RawVirtoolsMaterial = get_raw_virtools_material(mtl)
|
||||||
|
|
||||||
# draw operator
|
# draw operator
|
||||||
row = layout.row()
|
row = layout.row()
|
||||||
row.operator(BBP_OT_preset_virtools_material.bl_idname, text = 'Preset', icon = "PRESET")
|
row.operator(
|
||||||
row.operator(BBP_OT_apply_virtools_material.bl_idname, text = 'Apply', icon = "NODETREE")
|
BBP_OT_preset_virtools_material.bl_idname, text='Preset', icon = "PRESET",
|
||||||
row.operator(BBP_OT_fix_single_material.bl_idname, text = '', icon = "MODIFIER")
|
text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
|
row.operator(
|
||||||
|
BBP_OT_apply_virtools_material.bl_idname, text='Apply', icon = "NODETREE",
|
||||||
|
text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
|
row.operator(BBP_OT_fix_single_material.bl_idname, text='', icon = "MODIFIER")
|
||||||
|
|
||||||
# draw data
|
# draw data
|
||||||
layout.label(text="Color Parameters")
|
layout.label(text="Color Parameters", text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
layout.prop(props, 'ambient')
|
layout.prop(props, 'ambient')
|
||||||
layout.prop(props, 'diffuse')
|
layout.prop(props, 'diffuse')
|
||||||
layout.prop(props, 'specular')
|
layout.prop(props, 'specular')
|
||||||
@ -1064,22 +1068,22 @@ class BBP_PT_virtools_material(bpy.types.Panel):
|
|||||||
layout.prop(props, 'specular_power')
|
layout.prop(props, 'specular_power')
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Mode Parameters")
|
layout.label(text="Mode Parameters", text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
layout.prop(props, 'enable_two_sided')
|
layout.prop(props, 'enable_two_sided')
|
||||||
layout.prop(props, 'fill_mode')
|
layout.prop(props, 'fill_mode')
|
||||||
layout.prop(props, 'shade_mode')
|
layout.prop(props, 'shade_mode')
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Texture Parameters")
|
layout.label(text="Texture Parameters", text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
# texture prop with direct importing
|
# texture prop with direct importing
|
||||||
sublay = layout.row()
|
sublay = layout.row()
|
||||||
sublay.prop(props, 'texture', emboss = True)
|
sublay.prop(props, 'texture', emboss = True)
|
||||||
sublay.operator(BBP_OT_direct_set_virtools_texture.bl_idname, text = '', icon = 'FILEBROWSER')
|
sublay.operator(BBP_OT_direct_set_virtools_texture.bl_idname, text='', icon='FILEBROWSER')
|
||||||
# texture detail
|
# texture detail
|
||||||
if rawdata.mTexture is not None:
|
if rawdata.mTexture is not None:
|
||||||
# have texture, show texture settings and enclosed by a border.
|
# have texture, show texture settings and enclosed by a border.
|
||||||
boxlayout = layout.box()
|
boxlayout = layout.box()
|
||||||
boxlayout.label(text="Virtools Texture Settings")
|
boxlayout.label(text="Virtools Texture Settings", text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
PROP_virtools_texture.draw_virtools_texture(props.texture, boxlayout)
|
PROP_virtools_texture.draw_virtools_texture(props.texture, boxlayout)
|
||||||
|
|
||||||
layout.prop(props, 'texture_blend_mode')
|
layout.prop(props, 'texture_blend_mode')
|
||||||
@ -1091,21 +1095,21 @@ class BBP_PT_virtools_material(bpy.types.Panel):
|
|||||||
layout.prop(props, 'texture_border_color')
|
layout.prop(props, 'texture_border_color')
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Alpha Test Parameters")
|
layout.label(text="Alpha Test Parameters", text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
layout.prop(props, 'enable_alpha_test')
|
layout.prop(props, 'enable_alpha_test')
|
||||||
if rawdata.mEnableAlphaTest:
|
if rawdata.mEnableAlphaTest:
|
||||||
layout.prop(props, 'alpha_func')
|
layout.prop(props, 'alpha_func')
|
||||||
layout.prop(props, 'alpha_ref')
|
layout.prop(props, 'alpha_ref')
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Alpha Blend Parameters")
|
layout.label(text="Alpha Blend Parameters", text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
layout.prop(props, 'enable_alpha_blend')
|
layout.prop(props, 'enable_alpha_blend')
|
||||||
if rawdata.mEnableAlphaBlend:
|
if rawdata.mEnableAlphaBlend:
|
||||||
layout.prop(props, 'source_blend')
|
layout.prop(props, 'source_blend')
|
||||||
layout.prop(props, 'dest_blend')
|
layout.prop(props, 'dest_blend')
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Z Write Parameters")
|
layout.label(text="Z Write Parameters", text_ctxt='BBP_PT_virtools_material/draw')
|
||||||
layout.prop(props, 'enable_z_write')
|
layout.prop(props, 'enable_z_write')
|
||||||
if rawdata.mEnableZWrite:
|
if rawdata.mEnableZWrite:
|
||||||
layout.prop(props, 'z_func')
|
layout.prop(props, 'z_func')
|
||||||
|
@ -88,7 +88,7 @@ class ExportVirtoolsFile(bpy_extras.io_utils.ExportHelper):
|
|||||||
class ImportDirectory(bpy_extras.io_utils.ImportHelper):
|
class ImportDirectory(bpy_extras.io_utils.ImportHelper):
|
||||||
|
|
||||||
# add directory prop to receive directory
|
# add directory prop to receive directory
|
||||||
directory: bpy.props.StringProperty()
|
directory: bpy.props.StringProperty() # type: ignore
|
||||||
|
|
||||||
# blank filter
|
# blank filter
|
||||||
filter_glob: bpy.props.StringProperty(
|
filter_glob: bpy.props.StringProperty(
|
||||||
|
@ -159,7 +159,7 @@ class ImportParams():
|
|||||||
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
||||||
description = "Define how to process texture name conflict",
|
description = "Define how to process texture name conflict",
|
||||||
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Current),
|
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Current),
|
||||||
translation_context = 'BME/UTIL_ioport_shared.ImportParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.ImportParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
material_conflict_strategy: bpy.props.EnumProperty(
|
material_conflict_strategy: bpy.props.EnumProperty(
|
||||||
@ -167,7 +167,7 @@ class ImportParams():
|
|||||||
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
||||||
description = "Define how to process material name conflict",
|
description = "Define how to process material name conflict",
|
||||||
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
||||||
translation_context = 'BME/UTIL_ioport_shared.ImportParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.ImportParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
mesh_conflict_strategy: bpy.props.EnumProperty(
|
mesh_conflict_strategy: bpy.props.EnumProperty(
|
||||||
@ -175,7 +175,7 @@ class ImportParams():
|
|||||||
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
||||||
description = "Define how to process mesh name conflict",
|
description = "Define how to process mesh name conflict",
|
||||||
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
||||||
translation_context = 'BME/UTIL_ioport_shared.ImportParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.ImportParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
light_conflict_strategy: bpy.props.EnumProperty(
|
light_conflict_strategy: bpy.props.EnumProperty(
|
||||||
@ -183,7 +183,7 @@ class ImportParams():
|
|||||||
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
||||||
description = "Define how to process light name conflict",
|
description = "Define how to process light name conflict",
|
||||||
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
||||||
translation_context = 'BME/UTIL_ioport_shared.ImportParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.ImportParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
object_conflict_strategy: bpy.props.EnumProperty(
|
object_conflict_strategy: bpy.props.EnumProperty(
|
||||||
@ -191,28 +191,29 @@ class ImportParams():
|
|||||||
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
items = _g_EnumHelper_ConflictStrategy.generate_items(),
|
||||||
description = "Define how to process object name conflict",
|
description = "Define how to process object name conflict",
|
||||||
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
default = _g_EnumHelper_ConflictStrategy.to_selection(ConflictStrategy.Rename),
|
||||||
translation_context = 'BME/UTIL_ioport_shared.ImportParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.ImportParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_import_params(self, layout: bpy.types.UILayout) -> None:
|
def draw_import_params(self, 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_import_params", default_closed=False)
|
header, body = layout.panel("BBP_PT_ioport_shared_import_params", default_closed=False)
|
||||||
header.label(text = 'Import Parameters')
|
header.label(text='Import Parameters', text_ctxt='BBP/UTIL_ioport_shared.ImportParams/draw')
|
||||||
|
# NOTE: if panel is collapsed, body will be None. So we need check it.
|
||||||
if body is None: return
|
if body is None: return
|
||||||
|
|
||||||
body.label(text = 'Name Conflict Strategy')
|
body.label(text='Name Conflict Strategy', text_ctxt='BBP/UTIL_ioport_shared.ImportParams/draw')
|
||||||
grid = body.grid_flow(row_major = False, columns = 2)
|
grid = body.grid_flow(row_major=False, columns=2)
|
||||||
grid.label(text = 'Object', icon = 'CUBE')
|
grid.label(text='Object', icon='CUBE', text_ctxt='BBP/UTIL_ioport_shared.ImportParams/draw')
|
||||||
grid.label(text = 'Light', icon = 'LIGHT')
|
grid.label(text='Light', icon='LIGHT', text_ctxt='BBP/UTIL_ioport_shared.ImportParams/draw')
|
||||||
grid.label(text = 'Mesh', icon = 'MESH_DATA')
|
grid.label(text='Mesh', icon='MESH_DATA', text_ctxt='BBP/UTIL_ioport_shared.ImportParams/draw')
|
||||||
grid.label(text = 'Material', icon = 'MATERIAL')
|
grid.label(text='Material', icon='MATERIAL', text_ctxt='BBP/UTIL_ioport_shared.ImportParams/draw')
|
||||||
grid.label(text = 'Texture', icon = 'TEXTURE')
|
grid.label(text='Texture', icon='TEXTURE', text_ctxt='BBP/UTIL_ioport_shared.ImportParams/draw')
|
||||||
grid.prop(self, 'object_conflict_strategy', text = '')
|
grid.prop(self, 'object_conflict_strategy', text='')
|
||||||
grid.prop(self, 'light_conflict_strategy', text = '')
|
grid.prop(self, 'light_conflict_strategy', text='')
|
||||||
grid.prop(self, 'mesh_conflict_strategy', text = '')
|
grid.prop(self, 'mesh_conflict_strategy', text='')
|
||||||
grid.prop(self, 'material_conflict_strategy', text = '')
|
grid.prop(self, 'material_conflict_strategy', text='')
|
||||||
grid.prop(self, 'texture_conflict_strategy', text = '')
|
grid.prop(self, 'texture_conflict_strategy', text='')
|
||||||
|
|
||||||
def general_get_texture_conflict_strategy(self) -> ConflictStrategy:
|
def general_get_texture_conflict_strategy(self) -> ConflictStrategy:
|
||||||
return _g_EnumHelper_ConflictStrategy.get_selection(self.texture_conflict_strategy)
|
return _g_EnumHelper_ConflictStrategy.get_selection(self.texture_conflict_strategy)
|
||||||
@ -245,20 +246,20 @@ class ExportParams():
|
|||||||
('COLLECTION', "Collection", "Export a collection", 'OUTLINER_COLLECTION', 0),
|
('COLLECTION', "Collection", "Export a collection", 'OUTLINER_COLLECTION', 0),
|
||||||
('OBJECT', "Object", "Export an object", 'OBJECT_DATA', 1),
|
('OBJECT', "Object", "Export an object", 'OBJECT_DATA', 1),
|
||||||
),
|
),
|
||||||
translation_context = 'BME/UTIL_ioport_shared.ExportParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.ExportParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_export_params(self, context: bpy.types.Context, 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)
|
||||||
header.label(text = 'Export Parameters')
|
header.label(text='Export Parameters', text_ctxt='BBP/UTIL_ioport_shared.ExportParams/draw')
|
||||||
if body is None: return
|
if body is None: return
|
||||||
|
|
||||||
# make prop expand horizontaly, not vertical.
|
# make prop expand horizontaly, not vertical.
|
||||||
horizon_body = body.row()
|
horizon_body = body.row()
|
||||||
# draw switch
|
# draw switch
|
||||||
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)
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
@ -291,14 +292,14 @@ class VirtoolsParams():
|
|||||||
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.",
|
||||||
items = _g_EnumHelper_CK_TEXTURE_SAVEOPTIONS.generate_items(),
|
items = _g_EnumHelper_CK_TEXTURE_SAVEOPTIONS.generate_items(),
|
||||||
default = _g_EnumHelper_CK_TEXTURE_SAVEOPTIONS.to_selection(UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_EXTERNAL),
|
default = _g_EnumHelper_CK_TEXTURE_SAVEOPTIONS.to_selection(UTIL_virtools_types.CK_TEXTURE_SAVEOPTIONS.CKTEXTURE_EXTERNAL),
|
||||||
translation_context = 'BME/UTIL_ioport_shared.VirtoolsParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.VirtoolsParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
use_compress: bpy.props.BoolProperty(
|
use_compress: bpy.props.BoolProperty(
|
||||||
name="Use Compress",
|
name="Use Compress",
|
||||||
description = "Whether use ZLib to compress result when saving composition.",
|
description = "Whether use ZLib to compress result when saving composition.",
|
||||||
default = True,
|
default = True,
|
||||||
translation_context = 'BME/UTIL_ioport_shared.VirtoolsParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.VirtoolsParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
compress_level: bpy.props.IntProperty(
|
compress_level: bpy.props.IntProperty(
|
||||||
@ -306,29 +307,29 @@ class VirtoolsParams():
|
|||||||
description = "The ZLib compress level used by Virtools Engine when saving composition.",
|
description = "The ZLib compress level used by Virtools Engine when saving composition.",
|
||||||
min = 1, max = 9,
|
min = 1, max = 9,
|
||||||
default = 5,
|
default = 5,
|
||||||
translation_context = 'BME/UTIL_ioport_shared.VirtoolsParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.VirtoolsParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_virtools_params(self, context: bpy.types.Context, 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)
|
||||||
header.label(text = 'Virtools Parameters')
|
header.label(text='Virtools Parameters', text_ctxt='BBP/UTIL_ioport_shared.VirtoolsParams/draw')
|
||||||
if body is None: return
|
if body is None: return
|
||||||
|
|
||||||
# draw encodings
|
# draw encodings
|
||||||
body.label(text = 'Encodings')
|
body.label(text='Encodings', text_ctxt='BBP/UTIL_ioport_shared.VirtoolsParams/draw')
|
||||||
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
ptrprops = PROP_ptrprop_resolver.PropsVisitor(context.scene)
|
||||||
ptrprops.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:
|
||||||
body.separator()
|
body.separator()
|
||||||
body.label(text = 'Global Texture Save Options')
|
body.label(text='Global Texture Save Options', text_ctxt='BBP/UTIL_ioport_shared.VirtoolsParams/draw')
|
||||||
body.prop(self, 'texture_save_opt', text = '')
|
body.prop(self, 'texture_save_opt', text='')
|
||||||
|
|
||||||
body.separator()
|
body.separator()
|
||||||
body.label(text = 'Compression')
|
body.label(text='Compression', text_ctxt='BBP/UTIL_ioport_shared.VirtoolsParams/draw')
|
||||||
body.prop(self, 'use_compress')
|
body.prop(self, 'use_compress')
|
||||||
if self.use_compress:
|
if self.use_compress:
|
||||||
body.prop(self, 'compress_level')
|
body.prop(self, 'compress_level')
|
||||||
@ -353,7 +354,7 @@ class BallanceParams():
|
|||||||
name="Successive Sector",
|
name="Successive Sector",
|
||||||
description = "Whether order exporter to use document specified sector count to make sure sector is successive.",
|
description = "Whether order exporter to use document specified sector count to make sure sector is successive.",
|
||||||
default = True,
|
default = True,
|
||||||
translation_context = 'BME/UTIL_ioport_shared.BallanceParams/property'
|
translation_context = 'BBP/UTIL_ioport_shared.BallanceParams/property'
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
|
|
||||||
def draw_ballance_params(self, layout: bpy.types.UILayout, is_importer: bool) -> None:
|
def draw_ballance_params(self, layout: bpy.types.UILayout, is_importer: bool) -> None:
|
||||||
@ -365,12 +366,14 @@ class BallanceParams():
|
|||||||
header: bpy.types.UILayout
|
header: bpy.types.UILayout
|
||||||
body: bpy.types.UILayout
|
body: bpy.types.UILayout
|
||||||
header, body = layout.panel("BBP_PT_ioport_shared_ballance_params", default_closed=False)
|
header, body = layout.panel("BBP_PT_ioport_shared_ballance_params", default_closed=False)
|
||||||
header.label(text = 'Ballance Parameters')
|
header.label(text='Ballance Parameters', text_ctxt='BBP/UTIL_ioport_shared.BallanceParams/draw')
|
||||||
if body is None: return
|
if body is None: return
|
||||||
|
|
||||||
map_info: PROP_ballance_map_info.RawBallanceMapInfo = PROP_ballance_map_info.get_raw_ballance_map_info(bpy.context.scene)
|
map_info: PROP_ballance_map_info.RawBallanceMapInfo = PROP_ballance_map_info.get_raw_ballance_map_info(bpy.context.scene)
|
||||||
body.prop(self, 'successive_sector')
|
body.prop(self, 'successive_sector')
|
||||||
body.label(text = f'Map Sectors: {map_info.mSectorCount}')
|
tr_text: str = bpy.app.translations.pgettext_iface(
|
||||||
|
'Map Sectors: {0}', 'BBP/UTIL_ioport_shared.BallanceParams/draw')
|
||||||
|
body.label(text=tr_text.format(map_info.mSectorCount), translate=False)
|
||||||
|
|
||||||
def general_get_successive_sector(self) -> bool:
|
def general_get_successive_sector(self) -> bool:
|
||||||
return self.successive_sector
|
return self.successive_sector
|
||||||
|
@ -70,7 +70,10 @@ class RenameErrorReporter():
|
|||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
# print console report header
|
# print console report header
|
||||||
print('============')
|
print('============')
|
||||||
print('Rename Report')
|
print(bpy.app.translations.pgettext_rpt(
|
||||||
|
'Rename Report',
|
||||||
|
'BBP/UTIL_naming_convension.RenameErrorReporter'
|
||||||
|
))
|
||||||
print('------------')
|
print('------------')
|
||||||
# return self as context
|
# return self as context
|
||||||
return self
|
return self
|
||||||
@ -78,7 +81,9 @@ class RenameErrorReporter():
|
|||||||
def __exit__(self, exc_type, exc_value, traceback):
|
def __exit__(self, exc_type, exc_value, traceback):
|
||||||
# print console report tail
|
# print console report tail
|
||||||
print('------------')
|
print('------------')
|
||||||
print(f'All / Failed - {self.mAllObjCounter} / {self.mFailedObjCounter}')
|
tr_text: str = bpy.app.translations.pgettext_rpt(
|
||||||
|
'All / Failed - {0} / {1}', 'BBP/UTIL_naming_convension.RenameErrorReporter')
|
||||||
|
print(tr_text.format(self.mAllObjCounter, self.mFailedObjCounter))
|
||||||
print('============')
|
print('============')
|
||||||
# reset variables
|
# reset variables
|
||||||
self.mAllObjCounter = 0
|
self.mAllObjCounter = 0
|
||||||
@ -99,11 +104,14 @@ class RenameErrorReporter():
|
|||||||
|
|
||||||
# output header
|
# output header
|
||||||
# if new name is different with old name, output both of them
|
# if new name is different with old name, output both of them
|
||||||
|
tr_text: str
|
||||||
new_name: str = obj.name
|
new_name: str = obj.name
|
||||||
if self.mOldName == new_name:
|
if self.mOldName == new_name:
|
||||||
print(f'For object "{new_name}"')
|
tr_text = bpy.app.translations.pgettext_rpt('For object "{0}"', 'BBP/UTIL_naming_convension.RenameErrorReporter')
|
||||||
|
print(tr_text.format(new_name))
|
||||||
else:
|
else:
|
||||||
print(f'For object "{new_name}" (Old name: "{self.mOldName}")')
|
tr_text = bpy.app.translations.pgettext_rpt('For object "{0}" (Old name: "{1}")', 'BBP/UTIL_naming_convension.RenameErrorReporter')
|
||||||
|
print(tr_text.format(new_name, self.mOldName))
|
||||||
|
|
||||||
# output error list with indent
|
# output error list with indent
|
||||||
for item in self.mErrList:
|
for item in self.mErrList:
|
||||||
@ -116,9 +124,12 @@ class RenameErrorReporter():
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def __errtype_to_string(err_v: _RenameErrorType) -> str:
|
def __errtype_to_string(err_v: _RenameErrorType) -> str:
|
||||||
match(err_v):
|
match(err_v):
|
||||||
case _RenameErrorType.ERROR: return 'ERROR'
|
case _RenameErrorType.ERROR:
|
||||||
case _RenameErrorType.WARNING: return 'WARN'
|
return bpy.app.translations.pgettext_rpt('ERROR', 'BBP/UTIL_naming_convension.RenameErrorReporter')
|
||||||
case _RenameErrorType.INFO: return 'INFO'
|
case _RenameErrorType.WARNING:
|
||||||
|
return bpy.app.translations.pgettext_rpt('WARN', 'BBP/UTIL_naming_convension.RenameErrorReporter')
|
||||||
|
case _RenameErrorType.INFO:
|
||||||
|
return bpy.app.translations.pgettext_rpt('INFO', 'BBP/UTIL_naming_convension.RenameErrorReporter')
|
||||||
case _: raise UTIL_functions.BBPException("Unknown error type.")
|
case _: raise UTIL_functions.BBPException("Unknown error type.")
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __erritem_to_string(item: _RenameErrorItem) -> str:
|
def __erritem_to_string(item: _RenameErrorItem) -> str:
|
||||||
|
@ -9,18 +9,21 @@ import bpy
|
|||||||
# BME module has its own context naming convention which make sure all configuration fields of prototypes are properly translated.
|
# BME module has its own context naming convention which make sure all configuration fields of prototypes are properly translated.
|
||||||
# This module also provide a corresponding function to compute these context string from given BME prototype name and the index of configuration fields.
|
# This module also provide a corresponding function to compute these context string from given BME prototype name and the index of configuration fields.
|
||||||
#
|
#
|
||||||
# For BBP plugin self, there is a priniciple list which you should follow when providing translation context.
|
# For BBP plugin self, there is a list containing multiple priniciples which you should follow when providing translation context.
|
||||||
# - For operator, menu, panel and etc, set their `bl_translation_context` to their names, such as `BBP_OT_some_operator`
|
# - For operator, menu, panel and etc.
|
||||||
# - For property located in operator, menu, panel and etc, set their `translation_context` to corresponding class name,
|
# * For themselves, fill `bl_translation_context` to their name, such as `BBP_OT_some_operator`.
|
||||||
# plus `/property` suffix, such as `BBP_OT_some_operator/property`.
|
# * For properties located inside, add `/property` suffix, such as `BBP_OT_some_operator/property`.
|
||||||
# - For draw function located in operator, menu, panel and etc, set their `translation_context` to corresponding class name,
|
# * For draw function (any function callings requiring translation context inside it), add `/draw` suffix, such as `BBP_OT_some_operator/draw`.
|
||||||
# plus `/draw` suffix, such as `BBP_OT_some_operator/draw`.
|
# * For execute function, or any functions mainly called by this execution function, add `/execute` suffix, such as `BBP_OT_some_operator/execute`.
|
||||||
# - For property loacted in shared class (usually shared by multiple operators), set their `translation_context` to `BME/<MODULE_NAME>.<CLASS_NAME>/property`.
|
# - For shared class (usually shared by multiple operators).
|
||||||
# `<MODULE_NAME>` is the module name (file name) where this class located. `<CLASS_NAME>` is the name of this class.
|
# * For themselves (usually not used because they don't have `bl_translation_context`), the default context is `BME/<MODULE_NAME>.<CLASS_NAME>`, such as `BBP/some_module.some_class`.
|
||||||
# For example, `BBP/some_module.some_class/property`
|
# * For properties located inside, add `/property` suffix, such as `BBP/some_module.some_class/property`.
|
||||||
#
|
# * For draw function (any function callings requiring translation context inside it), add `/draw` suffix, such as `BBP/some_module.some_class/draw`.
|
||||||
# Due to the shitty design, I can't find a way to add translation context for descrption field.
|
# - For menu draw function (usually defined in __init__ module).
|
||||||
# So these description may collide with Blender official translation and thus not put in result file.
|
# * For themselves (any calling inside them), the context is `BME/<MODULE_NAME>.<METHOD_NAME>()`, such as `BBP/some_module.some_method()`.
|
||||||
|
#
|
||||||
|
# Due to the shitty design, I can't find a way to add translation context for descrption field and report function used string.
|
||||||
|
# So these description may collide with Blender official translation, thus they may not be put in result translation file.
|
||||||
# I have no idea about this.
|
# I have no idea about this.
|
||||||
#
|
#
|
||||||
# Due to the shitty static analyse ability of Blender I18N plugin, all context should be written in literal,
|
# Due to the shitty static analyse ability of Blender I18N plugin, all context should be written in literal,
|
||||||
@ -32,9 +35,18 @@ import bpy
|
|||||||
# please use `bpy.app.translations.pgettext_rpt()` to get translation message because they are report.
|
# please use `bpy.app.translations.pgettext_rpt()` to get translation message because they are report.
|
||||||
# For the string given to `UTIL_functions.message_box()`, please use `bpy.app.translations.pgettext_iface` because they are UI elements.
|
# For the string given to `UTIL_functions.message_box()`, please use `bpy.app.translations.pgettext_iface` because they are UI elements.
|
||||||
#
|
#
|
||||||
# It seema that `bpy.app.translations.pgettext` function family has fatal error when extracting message with context
|
# `bpy.app.translations.pgettext` function family has fatal error when extracting message with context
|
||||||
# (it will produce a correct one and a wrong one which just simply concat the message and its context. I don't know why).
|
# (it will produce a correct one and a wrong one which just simply concat the message and its context. I don't know why).
|
||||||
#
|
# This will happen if you put `bpy.app.translations.pgettext` calling inside `UILayout.label` or any UILayout functions like it.
|
||||||
|
# `bpy.app.translations.pgettext` will produce the correct entry but Blender used "magic of `UILayout.label` will produce the wrong one.
|
||||||
|
# It seems that Blender's magic just join the string provided in `text` argument as much as possible.
|
||||||
|
# So the solution is simple:
|
||||||
|
# - If we use `bpy.app.translations.pgettext` and `UILayout.label` together
|
||||||
|
# * Create a variable holding the result of `bpy.app.translations.pgettext`.
|
||||||
|
# * Format this gotten string if necessary.
|
||||||
|
# * Call `UILayout.label` and use this variable as its `text` argument. Then set `translated` to False.
|
||||||
|
# - If we use `bpy.app.translations.pgettext` with other non-Blender functions, such as `print`.
|
||||||
|
# * Use it as a normal function.
|
||||||
#
|
#
|
||||||
# All translation annotation are started with `TR:`
|
# All translation annotation are started with `TR:`
|
||||||
#
|
#
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import mathutils
|
import bpy, mathutils
|
||||||
import typing, math
|
import typing, math
|
||||||
from . import UTIL_functions
|
from . import UTIL_functions
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ class EnumPropHelper(UTIL_functions.EnumPropHelper):
|
|||||||
|
|
||||||
def virtools_name_regulator(name: str | None) -> str:
|
def virtools_name_regulator(name: str | None) -> str:
|
||||||
if name: return name
|
if name: return name
|
||||||
else: return 'annoymous'
|
else: return bpy.app.translations.pgettext_data('annoymous', 'BME/UTIL_virtools_types.virtools_name_regulator()')
|
||||||
|
|
||||||
## Default Encoding for PyBMap
|
## Default Encoding for PyBMap
|
||||||
# Use semicolon split each encodings. Support Western European and Simplified Chinese in default.
|
# Use semicolon split each encodings. Support Western European and Simplified Chinese in default.
|
||||||
|
@ -39,17 +39,17 @@ class BBP_MT_View3DMenu(bpy.types.Menu):
|
|||||||
|
|
||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
layout.label(text='UV', icon='UV')
|
layout.label(text='UV', icon='UV', text_ctxt='BBP_MT_View3DMenu/draw')
|
||||||
layout.operator(OP_UV_flatten_uv.BBP_OT_flatten_uv.bl_idname)
|
layout.operator(OP_UV_flatten_uv.BBP_OT_flatten_uv.bl_idname)
|
||||||
layout.operator(OP_UV_rail_uv.BBP_OT_rail_uv.bl_idname)
|
layout.operator(OP_UV_rail_uv.BBP_OT_rail_uv.bl_idname)
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text='Align', icon='SNAP_ON')
|
layout.label(text='Align', icon='SNAP_ON', text_ctxt='BBP_MT_View3DMenu/draw')
|
||||||
layout.operator(OP_OBJECT_legacy_align.BBP_OT_legacy_align.bl_idname)
|
layout.operator(OP_OBJECT_legacy_align.BBP_OT_legacy_align.bl_idname)
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text='Select', icon='SELECT_SET')
|
layout.label(text='Select', icon='SELECT_SET', text_ctxt='BBP_MT_View3DMenu/draw')
|
||||||
layout.operator(OP_OBJECT_virtools_group.BBP_OT_select_object_by_virtools_group.bl_idname)
|
layout.operator(OP_OBJECT_virtools_group.BBP_OT_select_object_by_virtools_group.bl_idname)
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text='Material', icon='MATERIAL')
|
layout.label(text='Material', icon='MATERIAL', text_ctxt='BBP_MT_View3DMenu/draw')
|
||||||
layout.operator(OP_MTL_fix_material.BBP_OT_fix_all_material.bl_idname)
|
layout.operator(OP_MTL_fix_material.BBP_OT_fix_all_material.bl_idname)
|
||||||
|
|
||||||
class BBP_MT_AddBmeMenu(bpy.types.Menu):
|
class BBP_MT_AddBmeMenu(bpy.types.Menu):
|
||||||
@ -71,18 +71,18 @@ class BBP_MT_AddRailMenu(bpy.types.Menu):
|
|||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
|
|
||||||
layout.label(text="Sections", icon='MESH_CIRCLE')
|
layout.label(text="Sections", icon='MESH_CIRCLE', text_ctxt='BBP_MT_AddRailMenu/draw')
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_rail_section.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_rail_section.bl_idname)
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_transition_section.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_transition_section.bl_idname)
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Straight Rails", icon='IPO_CONSTANT')
|
layout.label(text="Straight Rails", icon='IPO_CONSTANT', text_ctxt='BBP_MT_AddRailMenu/draw')
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_straight_rail.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_straight_rail.bl_idname)
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_transition_rail.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_transition_rail.bl_idname)
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_side_rail.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_side_rail.bl_idname)
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Curve Rails", icon='MOD_SCREW')
|
layout.label(text="Curve Rails", icon='MOD_SCREW', text_ctxt='BBP_MT_AddRailMenu/draw')
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_arc_rail.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_arc_rail.bl_idname)
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_spiral_rail.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_spiral_rail.bl_idname)
|
||||||
layout.operator(OP_ADDS_rail.BBP_OT_add_side_spiral_rail.bl_idname)
|
layout.operator(OP_ADDS_rail.BBP_OT_add_side_spiral_rail.bl_idname)
|
||||||
@ -96,22 +96,22 @@ class BBP_MT_AddComponentsMenu(bpy.types.Menu):
|
|||||||
def draw(self, context):
|
def draw(self, context):
|
||||||
layout = self.layout
|
layout = self.layout
|
||||||
|
|
||||||
layout.label(text="Basic Components")
|
layout.label(text="Basic Components", text_ctxt='BBP_MT_AddComponentsMenu/draw')
|
||||||
OP_ADDS_component.BBP_OT_add_component.draw_blc_menu(layout)
|
OP_ADDS_component.BBP_OT_add_component.draw_blc_menu(layout)
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Nong Components")
|
layout.label(text="Nong Components", text_ctxt='BBP_MT_AddComponentsMenu/draw')
|
||||||
OP_ADDS_component.BBP_OT_add_nong_extra_point.draw_blc_menu(layout)
|
OP_ADDS_component.BBP_OT_add_nong_extra_point.draw_blc_menu(layout)
|
||||||
OP_ADDS_component.BBP_OT_add_nong_ventilator.draw_blc_menu(layout)
|
OP_ADDS_component.BBP_OT_add_nong_ventilator.draw_blc_menu(layout)
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Series Components")
|
layout.label(text="Series Components", text_ctxt='BBP_MT_AddComponentsMenu/draw')
|
||||||
OP_ADDS_component.BBP_OT_add_tilting_block_series.draw_blc_menu(layout)
|
OP_ADDS_component.BBP_OT_add_tilting_block_series.draw_blc_menu(layout)
|
||||||
OP_ADDS_component.BBP_OT_add_swing_series.draw_blc_menu(layout)
|
OP_ADDS_component.BBP_OT_add_swing_series.draw_blc_menu(layout)
|
||||||
OP_ADDS_component.BBP_OT_add_ventilator_series.draw_blc_menu(layout)
|
OP_ADDS_component.BBP_OT_add_ventilator_series.draw_blc_menu(layout)
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Components Pair")
|
layout.label(text="Components Pair", text_ctxt='BBP_MT_AddComponentsMenu/draw')
|
||||||
OP_ADDS_component.BBP_OT_add_sector_component_pair.draw_blc_menu(layout)
|
OP_ADDS_component.BBP_OT_add_sector_component_pair.draw_blc_menu(layout)
|
||||||
|
|
||||||
# ===== Menu Drawer =====
|
# ===== Menu Drawer =====
|
||||||
@ -120,13 +120,29 @@ MenuDrawer_t = typing.Callable[[typing.Any, typing.Any], None]
|
|||||||
|
|
||||||
def menu_drawer_import(self, context) -> None:
|
def menu_drawer_import(self, context) -> None:
|
||||||
layout: bpy.types.UILayout = self.layout
|
layout: bpy.types.UILayout = self.layout
|
||||||
#layout.operator(OP_IMPORT_bmfile.BBP_OT_import_bmfile.bl_idname, text="Ballance Map (.bmx)")
|
# layout.operator(
|
||||||
layout.operator(OP_IMPORT_virtools.BBP_OT_import_virtools.bl_idname, text="Virtools File (.nmo/.cmo/.vmo) (experimental)")
|
# OP_IMPORT_bmfile.BBP_OT_import_bmfile.bl_idname,
|
||||||
|
# text="Ballance Map (.bmx)",
|
||||||
|
# text_ctxt='BBP/__init__.menu_drawer_import()'
|
||||||
|
# )
|
||||||
|
layout.operator(
|
||||||
|
OP_IMPORT_virtools.BBP_OT_import_virtools.bl_idname,
|
||||||
|
text="Virtools File (.nmo/.cmo/.vmo) (experimental)",
|
||||||
|
text_ctxt='BBP/__init__.menu_drawer_import()'
|
||||||
|
)
|
||||||
|
|
||||||
def menu_drawer_export(self, context) -> None:
|
def menu_drawer_export(self, context) -> None:
|
||||||
layout: bpy.types.UILayout = self.layout
|
layout: bpy.types.UILayout = self.layout
|
||||||
#layout.operator(OP_EXPORT_bmfile.BBP_OT_export_bmfile.bl_idname, text="Ballance Map (.bmx)")
|
# layout.operator(
|
||||||
layout.operator(OP_EXPORT_virtools.BBP_OT_export_virtools.bl_idname, text="Virtools File (.nmo/.cmo/.vmo) (experimental)")
|
# OP_EXPORT_bmfile.BBP_OT_export_bmfile.bl_idname,
|
||||||
|
# text="Ballance Map (.bmx)",
|
||||||
|
# text_ctxt='BBP/__init__.menu_drawer_export()'
|
||||||
|
# )
|
||||||
|
layout.operator(
|
||||||
|
OP_EXPORT_virtools.BBP_OT_export_virtools.bl_idname,
|
||||||
|
text="Virtools File (.nmo/.cmo/.vmo) (experimental)",
|
||||||
|
text_ctxt='BBP/__init__.menu_drawer_export()'
|
||||||
|
)
|
||||||
|
|
||||||
def menu_drawer_view3d(self, context) -> None:
|
def menu_drawer_view3d(self, context) -> None:
|
||||||
layout: bpy.types.UILayout = self.layout
|
layout: bpy.types.UILayout = self.layout
|
||||||
@ -135,7 +151,7 @@ def menu_drawer_view3d(self, context) -> None:
|
|||||||
def menu_drawer_add(self, context) -> None:
|
def menu_drawer_add(self, context) -> None:
|
||||||
layout: bpy.types.UILayout = self.layout
|
layout: bpy.types.UILayout = self.layout
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Ballance")
|
layout.label(text="Ballance", text_ctxt='BBP/__init__.menu_drawer_add()')
|
||||||
layout.menu(BBP_MT_AddBmeMenu.bl_idname, icon='MESH_CUBE')
|
layout.menu(BBP_MT_AddBmeMenu.bl_idname, icon='MESH_CUBE')
|
||||||
layout.menu(BBP_MT_AddRailMenu.bl_idname, icon='MESH_CIRCLE')
|
layout.menu(BBP_MT_AddRailMenu.bl_idname, icon='MESH_CIRCLE')
|
||||||
layout.menu(BBP_MT_AddComponentsMenu.bl_idname, icon='MESH_ICOSPHERE')
|
layout.menu(BBP_MT_AddComponentsMenu.bl_idname, icon='MESH_ICOSPHERE')
|
||||||
@ -151,15 +167,21 @@ def menu_drawer_grouping(self, context) -> None:
|
|||||||
col = layout.column()
|
col = layout.column()
|
||||||
col.operator_context = 'INVOKE_DEFAULT'
|
col.operator_context = 'INVOKE_DEFAULT'
|
||||||
|
|
||||||
col.label(text="Virtools Group")
|
col.label(text="Virtools Group", text_ctxt='BBP/__init__.menu_drawer_grouping()')
|
||||||
col.operator(OP_OBJECT_virtools_group.BBP_OT_add_objects_virtools_group.bl_idname, icon='ADD', text="Group into...")
|
col.operator(
|
||||||
col.operator(OP_OBJECT_virtools_group.BBP_OT_rm_objects_virtools_group.bl_idname, icon='REMOVE', text="Ungroup from...")
|
OP_OBJECT_virtools_group.BBP_OT_add_objects_virtools_group.bl_idname, icon='ADD', text="Group into...",
|
||||||
col.operator(OP_OBJECT_virtools_group.BBP_OT_clear_objects_virtools_group.bl_idname, icon='TRASH', text="Clear All Groups")
|
text_ctxt='BBP/__init__.menu_drawer_grouping()')
|
||||||
|
col.operator(
|
||||||
|
OP_OBJECT_virtools_group.BBP_OT_rm_objects_virtools_group.bl_idname, icon='REMOVE', text="Ungroup from...",
|
||||||
|
text_ctxt='BBP/__init__.menu_drawer_grouping()')
|
||||||
|
col.operator(
|
||||||
|
OP_OBJECT_virtools_group.BBP_OT_clear_objects_virtools_group.bl_idname, icon='TRASH', text="Clear All Groups",
|
||||||
|
text_ctxt='BBP/__init__.menu_drawer_grouping()')
|
||||||
|
|
||||||
def menu_drawer_snoop_then_conv(self, context) -> None:
|
def menu_drawer_snoop_then_conv(self, context) -> None:
|
||||||
layout: bpy.types.UILayout = self.layout
|
layout: bpy.types.UILayout = self.layout
|
||||||
layout.separator()
|
layout.separator()
|
||||||
layout.label(text="Ballance")
|
layout.label(text="Ballance", text_ctxt='BBP/__init__.menu_drawer_snoop_then_conv()')
|
||||||
layout.operator(OP_OBJECT_snoop_group_then_to_mesh.BBP_OT_snoop_group_then_to_mesh.bl_idname, icon='OUTLINER_OB_MESH')
|
layout.operator(OP_OBJECT_snoop_group_then_to_mesh.BBP_OT_snoop_group_then_to_mesh.bl_idname, icon='OUTLINER_OB_MESH')
|
||||||
|
|
||||||
def menu_drawer_naming_convention(self, context) -> None:
|
def menu_drawer_naming_convention(self, context) -> None:
|
||||||
@ -170,7 +192,7 @@ def menu_drawer_naming_convention(self, context) -> None:
|
|||||||
col = layout.column()
|
col = layout.column()
|
||||||
col.operator_context = 'INVOKE_DEFAULT'
|
col.operator_context = 'INVOKE_DEFAULT'
|
||||||
|
|
||||||
col.label(text="Ballance")
|
col.label(text="Ballance", text_ctxt='BBP/__init__.menu_drawer_naming_convention()')
|
||||||
col.operator(OP_OBJECT_naming_convention.BBP_OT_regulate_objects_name.bl_idname, icon='GREASEPENCIL')
|
col.operator(OP_OBJECT_naming_convention.BBP_OT_regulate_objects_name.bl_idname, icon='GREASEPENCIL')
|
||||||
col.operator(OP_OBJECT_naming_convention.BBP_OT_auto_grouping.bl_idname, icon='GROUP')
|
col.operator(OP_OBJECT_naming_convention.BBP_OT_auto_grouping.bl_idname, icon='GROUP')
|
||||||
col.operator(OP_OBJECT_naming_convention.BBP_OT_convert_to_imengyu.bl_idname, icon='ARROW_LEFTRIGHT')
|
col.operator(OP_OBJECT_naming_convention.BBP_OT_convert_to_imengyu.bl_idname, icon='ARROW_LEFTRIGHT')
|
||||||
|
Loading…
Reference in New Issue
Block a user