128 lines
5.8 KiB
Python
128 lines
5.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2014 MMD Tools authors
|
|
# This file was originally part of the MMD Tools add-on for Blender
|
|
# You can find MMD Tools here: https://github.com/MMD-Blender/blender_mmd_tools
|
|
# Neoneko has modified this file to work with Avatar Toolkit and may of made changes or improvements.
|
|
# MMD Tools is licensed under the terms of the GNU General Public License version 3 (GPLv3) same as Avatar Toolkit.
|
|
|
|
from typing import Dict, List, Optional, Tuple
|
|
|
|
import bpy
|
|
|
|
from ..core.translations import FnTranslations, MMDTranslationElementType
|
|
from ..translations import DictionaryEnum
|
|
|
|
MMD_TRANSLATION_ELEMENT_TYPE_ENUM_ITEMS = [
|
|
(MMDTranslationElementType.BONE.name, MMDTranslationElementType.BONE.value, "Bones", 1),
|
|
(MMDTranslationElementType.MORPH.name, MMDTranslationElementType.MORPH.value, "Morphs", 2),
|
|
(MMDTranslationElementType.MATERIAL.name, MMDTranslationElementType.MATERIAL.value, "Materials", 4),
|
|
(MMDTranslationElementType.DISPLAY.name, MMDTranslationElementType.DISPLAY.value, "Display frames", 8),
|
|
(MMDTranslationElementType.PHYSICS.name, MMDTranslationElementType.PHYSICS.value, "Rigidbodies and joints", 16),
|
|
(MMDTranslationElementType.INFO.name, MMDTranslationElementType.INFO.value, "Model name and comments", 32),
|
|
]
|
|
|
|
|
|
class MMDTranslationElement(bpy.types.PropertyGroup):
|
|
type: bpy.props.EnumProperty(items=MMD_TRANSLATION_ELEMENT_TYPE_ENUM_ITEMS)
|
|
object: bpy.props.PointerProperty(type=bpy.types.Object)
|
|
data_path: bpy.props.StringProperty()
|
|
name: bpy.props.StringProperty()
|
|
name_j: bpy.props.StringProperty()
|
|
name_e: bpy.props.StringProperty()
|
|
|
|
|
|
class MMDTranslationElementIndex(bpy.types.PropertyGroup):
|
|
value: bpy.props.IntProperty()
|
|
|
|
|
|
BATCH_OPERATION_SCRIPT_PRESETS: Dict[str, Tuple[Optional[str], str, str, int]] = {
|
|
"NOTHING": ("", "", "", 1),
|
|
"CLEAR": (None, "Clear", '""', 10),
|
|
"TO_ENGLISH": ("BLENDER", "Translate to English", "to_english(name)", 2),
|
|
"TO_MMD_LR": ("JAPANESE", "Blender L/R to MMD L/R", "to_mmd_lr(name)", 3),
|
|
"TO_BLENDER_LR": ("BLENDER", "MMD L/R to Blender L/R", "to_blender_lr(name_j)", 4),
|
|
"RESTORE_BLENDER": ("BLENDER", "Restore Blender Names", "org_name", 5),
|
|
"RESTORE_JAPANESE": ("JAPANESE", "Restore Japanese MMD Names", "org_name_j", 6),
|
|
"RESTORE_ENGLISH": ("ENGLISH", "Restore English MMD Names", "org_name_e", 7),
|
|
"ENGLISH_IF_EMPTY_JAPANESE": (None, "Copy English MMD Names, if empty copy Japanese MMD Name", "name_e if name_e else name_j", 8),
|
|
"JAPANESE_IF_EMPTY_ENGLISH": (None, "Copy Japanese MMD Names, if empty copy English MMD Name", "name_j if name_j else name_e", 9),
|
|
}
|
|
|
|
BATCH_OPERATION_SCRIPT_PRESET_ITEMS: List[Tuple[str, str, str, int]] = [(k, t[1], t[2], t[3]) for k, t in BATCH_OPERATION_SCRIPT_PRESETS.items()]
|
|
|
|
|
|
class MMDTranslation(bpy.types.PropertyGroup):
|
|
@staticmethod
|
|
def _update_index(mmd_translation: "MMDTranslation", _context):
|
|
FnTranslations.update_index(mmd_translation)
|
|
|
|
@staticmethod
|
|
def _collect_data(mmd_translation: "MMDTranslation", _context):
|
|
FnTranslations.collect_data(mmd_translation)
|
|
|
|
@staticmethod
|
|
def _update_query(mmd_translation: "MMDTranslation", _context):
|
|
FnTranslations.update_query(mmd_translation)
|
|
|
|
@staticmethod
|
|
def _update_batch_operation_script_preset(mmd_translation: "MMDTranslation", _context):
|
|
if mmd_translation.batch_operation_script_preset == "NOTHING":
|
|
return
|
|
|
|
id2scripts: Dict[str, str] = {i[0]: i[2] for i in BATCH_OPERATION_SCRIPT_PRESET_ITEMS}
|
|
|
|
batch_operation_script = id2scripts.get(mmd_translation.batch_operation_script_preset)
|
|
if batch_operation_script is None:
|
|
return
|
|
|
|
mmd_translation.batch_operation_script = batch_operation_script
|
|
batch_operation_target = BATCH_OPERATION_SCRIPT_PRESETS[mmd_translation.batch_operation_script_preset][0]
|
|
if batch_operation_target:
|
|
mmd_translation.batch_operation_target = batch_operation_target
|
|
|
|
translation_elements: bpy.props.CollectionProperty(type=MMDTranslationElement)
|
|
filtered_translation_element_indices_active_index: bpy.props.IntProperty(update=_update_index.__func__)
|
|
filtered_translation_element_indices: bpy.props.CollectionProperty(type=MMDTranslationElementIndex)
|
|
|
|
filter_japanese_blank: bpy.props.BoolProperty(name="Japanese Blank", default=False, update=_update_query.__func__)
|
|
filter_english_blank: bpy.props.BoolProperty(name="English Blank", default=False, update=_update_query.__func__)
|
|
filter_restorable: bpy.props.BoolProperty(name="Restorable", default=False, update=_update_query.__func__)
|
|
filter_selected: bpy.props.BoolProperty(name="Selected", default=False, update=_update_query.__func__)
|
|
filter_visible: bpy.props.BoolProperty(name="Visible", default=False, update=_update_query.__func__)
|
|
filter_types: bpy.props.EnumProperty(
|
|
items=MMD_TRANSLATION_ELEMENT_TYPE_ENUM_ITEMS,
|
|
default={
|
|
"BONE",
|
|
"MORPH",
|
|
"MATERIAL",
|
|
"DISPLAY",
|
|
"PHYSICS",
|
|
},
|
|
options={"ENUM_FLAG"},
|
|
update=_update_query.__func__,
|
|
)
|
|
|
|
dictionary: bpy.props.EnumProperty(
|
|
items=DictionaryEnum.get_dictionary_items,
|
|
name="Dictionary",
|
|
)
|
|
|
|
batch_operation_target: bpy.props.EnumProperty(
|
|
items=[
|
|
("BLENDER", "Blender Name (name)", "", 1),
|
|
("JAPANESE", "Japanese MMD Name (name_j)", "", 2),
|
|
("ENGLISH", "English MMD Name (name_e)", "", 3),
|
|
],
|
|
name="Operation Target",
|
|
default="JAPANESE",
|
|
)
|
|
|
|
batch_operation_script_preset: bpy.props.EnumProperty(
|
|
items=BATCH_OPERATION_SCRIPT_PRESET_ITEMS,
|
|
name="Operation Script Preset",
|
|
default="NOTHING",
|
|
update=_update_batch_operation_script_preset.__func__,
|
|
)
|
|
|
|
batch_operation_script: bpy.props.StringProperty()
|