yyc12345
4ffe29654b
- add translation context for operator, menu, panel and etc. and their associated properties. - improve some name and description but not finished. - move reset BME material function inside BMEMaterialsHelper. - rename variable of collection visitor in BME adder operator for clear meaning. - replace some message box to report in ballance elements reset operator, BME materials reset operator and rail UV operator
88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
import bpy
|
|
import typing, enum
|
|
from . import UTIL_functions, UTIL_virtools_types
|
|
|
|
# Raw Data
|
|
|
|
class RawVirtoolsMesh():
|
|
# Instance Member Declarations
|
|
mLitMode: UTIL_virtools_types.VXMESH_LITMODE
|
|
# Default Value Declarations
|
|
cDefaultLitMode: typing.ClassVar[UTIL_virtools_types.VXMESH_LITMODE] = UTIL_virtools_types.VXMESH_LITMODE.VX_LITMESH
|
|
|
|
def __init__(self, **kwargs):
|
|
# assign default value for each component
|
|
self.mLitMode = kwargs.get('mLitMode', RawVirtoolsMesh.cDefaultLitMode)
|
|
|
|
# blender enum prop helper defines
|
|
_g_Helper_VXMESH_LITMODE: UTIL_virtools_types.EnumPropHelper = UTIL_virtools_types.EnumPropHelper(UTIL_virtools_types.VXMESH_LITMODE)
|
|
|
|
# Blender Property Group
|
|
|
|
class BBP_PG_virtools_mesh(bpy.types.PropertyGroup):
|
|
lit_mode: bpy.props.EnumProperty(
|
|
name = "Lit Mode",
|
|
description = "Lighting mode of the mesh.",
|
|
items = _g_Helper_VXMESH_LITMODE.generate_items(),
|
|
default = _g_Helper_VXMESH_LITMODE.to_selection(RawVirtoolsMesh.cDefaultLitMode),
|
|
translation_context = 'BBP_PG_virtools_mesh/property'
|
|
) # type: ignore
|
|
|
|
# Getter Setter
|
|
|
|
def get_virtools_mesh(mesh: bpy.types.Mesh) -> BBP_PG_virtools_mesh:
|
|
return mesh.virtools_mesh
|
|
|
|
def get_raw_virtools_mesh(mesh: bpy.types.Mesh) -> RawVirtoolsMesh:
|
|
props: BBP_PG_virtools_mesh = get_virtools_mesh(mesh)
|
|
rawdata: RawVirtoolsMesh = RawVirtoolsMesh()
|
|
|
|
rawdata.mLitMode = _g_Helper_VXMESH_LITMODE.get_selection(props.lit_mode)
|
|
|
|
return rawdata
|
|
|
|
def set_raw_virtools_mesh(mesh: bpy.types.Mesh, rawdata: RawVirtoolsMesh) -> None:
|
|
props: BBP_PG_virtools_mesh = get_virtools_mesh(mesh)
|
|
|
|
props.lit_mode = _g_Helper_VXMESH_LITMODE.to_selection(rawdata.mLitMode)
|
|
|
|
# Display Panel
|
|
|
|
class BBP_PT_virtools_mesh(bpy.types.Panel):
|
|
"""Show Virtools Mesh Properties."""
|
|
bl_label = "Virtools Mesh"
|
|
bl_idname = "BBP_PT_virtools_mesh"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "data" # idk why blender use `data` as the mesh tab.
|
|
bl_translation_context = 'BBP_PT_virtools_mesh'
|
|
|
|
@classmethod
|
|
def poll(cls, context):
|
|
return context.mesh is not None
|
|
|
|
def draw(self, context):
|
|
# get layout and target
|
|
layout = self.layout
|
|
props: BBP_PG_virtools_mesh = get_virtools_mesh(context.mesh)
|
|
|
|
# draw data
|
|
layout.prop(props, 'lit_mode')
|
|
|
|
# Register
|
|
|
|
def register() -> None:
|
|
bpy.utils.register_class(BBP_PG_virtools_mesh)
|
|
bpy.utils.register_class(BBP_PT_virtools_mesh)
|
|
|
|
# add into mesh metadata
|
|
bpy.types.Mesh.virtools_mesh = bpy.props.PointerProperty(type = BBP_PG_virtools_mesh)
|
|
|
|
def unregister() -> None:
|
|
# remove from metadata
|
|
del bpy.types.Mesh.virtools_mesh
|
|
|
|
bpy.utils.unregister_class(BBP_PT_virtools_mesh)
|
|
bpy.utils.unregister_class(BBP_PG_virtools_mesh)
|
|
|