From 83366072b84c506ea9015080c01cce545f0b7e0a Mon Sep 17 00:00:00 2001 From: Yusarina Date: Thu, 25 Jul 2024 21:48:40 +0100 Subject: [PATCH] UI Updates - Added icons to ui. - Re-organised the UI slightly. - Added some more Titles such as Join Meshes and etc. - Slight wording changing on descriptions. --- resources/translations/en_US.json | 20 +++++----- resources/translations/ja_JP.json | 65 ++++++++++++++++--------------- ui/atlas_materials.py | 27 +++++++------ ui/optimization.py | 25 +++++++----- ui/panel.py | 2 +- ui/quick_access.py | 18 +++++---- ui/settings.py | 10 +++-- ui/tools.py | 8 ++-- ui/viseme.py | 17 ++++---- 9 files changed, 106 insertions(+), 86 deletions(-) diff --git a/resources/translations/en_US.json b/resources/translations/en_US.json index 8d6f720..2d96efe 100644 --- a/resources/translations/en_US.json +++ b/resources/translations/en_US.json @@ -9,8 +9,9 @@ "AvatarToolkit.description": "creating and editing avatars in blender,", "AvatarToolkit.alpha_warning": "This is an early alpha version, so expect bugs and issues.", "Quick_Access.label": "Quick Access", - "Quick_Access.import_export.label": "Import/Export", - "Quick_Access.options": "Quick Access Options", + "Quick_Access.import_export.label": "Import/Export:", + "Quick_Access.options": "Quick Access:", + "Quick_Access.select_armature": "Select Armature:", "Quick_Access.import_menu.label": "Import Menu", "Quick_Access.import": "Import", "Quick_Access.export": "Export", @@ -29,15 +30,16 @@ "Export.resonite.label": "Export to Resonite", "Export.resonite.desc": "Export a GLB with all animations and materials. For animation data see:", "Optimization.label": "Optimization", - "Optimization.options.label": "Optimization Options", + "Optimization.options.label": "Optimization:", "Optimization.combine_materials.label": "Combine Materials", - "Optimization.combine_materials.desc": "Combine similar materials to optimize the model", + "Optimization.combine_materials.desc": "Combine similar materials to reduce draw calls and improve performance", + "Optimization.joinmeshes.label": "Join Meshes:", "Optimization.join_all_meshes.label": "Join All Meshes", - "Optimization.join_all_meshes.desc": "Join all meshes into one", + "Optimization.join_all_meshes.desc": "Merge all meshes into a single object to reduce draw calls", "Optimization.join_selected_meshes.label": "Join Selected Meshes", - "Optimization.join_selected_meshes.desc": "Join all currently Selected Meshes into one", + "Optimization.join_selected_meshes.desc": "Merge only the selected meshes into a single object", "Optimization.remove_doubles_safely.label": "Remove Doubles Safely", - "Optimization.remove_doubles_safely.desc": "Remove doubles on all meshes, making sure not to fuse things like mouths together", + "Optimization.remove_doubles_safely.desc": "Remove duplicate vertices while preserving important features like mouth shapes", "Optimization.no_armature_selected": "No armature selected", "Optimization.no_meshes_found": "No meshes found for the selected armature", "Optimization.materials_combined": "Combined {num_combined} materials", @@ -52,7 +54,7 @@ "Optimization.select_armature": "Please select an armature", "Tools.select_armature": "Please select an armature", "Tools.label": "Tools", - "Tools.tools_title.label": "Tools", + "Tools.tools_title.label": "Tools:", "Tools.convert_to_resonite.label": "Convert to Resonite", "Tools.convert_to_resonite.desc": "Converts bone names on a model to names compatible with Resonite", "Tools.create_digitigrade_legs.label": "Create Digitigrade Legs", @@ -102,7 +104,7 @@ "AutoVisemeButton.error.selectShapekeys": "Please Select shape keys", "AutoVisemeButton.success": "Visemes created successfully", "Settings.label": "Settings", - "Settings.language.label": "Language", + "Settings.language.label": "Language:", "Settings.language.desc": "Select the language for the addon's UI", "Settings.translation_restart_popup.label": "Translation Update", "Settings.translation_restart_popup.description": "Information about translation updates", diff --git a/resources/translations/ja_JP.json b/resources/translations/ja_JP.json index fcbf679..736486a 100644 --- a/resources/translations/ja_JP.json +++ b/resources/translations/ja_JP.json @@ -1,16 +1,17 @@ { - "authors": ["Avatar Toolkit チーム"], + "authors": ["Avatar Toolkit Team"], "messages": { "Language.auto": "自動", "Language.en_US": "English", "Language.ja_JP": "日本語", "AvatarToolkit.label": "アバターツールキット", - "AvatarToolkit.welcome": "アバターツールキットへようこそ、これは", + "AvatarToolkit.welcome": "アバターツールキットへようこそ、", "AvatarToolkit.description": "Blenderでアバターを作成・編集するためのツールです。", "AvatarToolkit.alpha_warning": "これは早期アルファ版なので、バグや問題が予想されます。", "Quick_Access.label": "クイックアクセス", - "Quick_Access.import_export.label": "インポート/エクスポート", - "Quick_Access.options": "クイックアクセスオプション", + "Quick_Access.import_export.label": "インポート/エクスポート:", + "Quick_Access.options": "クイックアクセス:", + "Quick_Access.select_armature": "アーマチュアを選択:", "Quick_Access.import_menu.label": "インポートメニュー", "Quick_Access.import": "インポート", "Quick_Access.export": "エクスポート", @@ -29,46 +30,47 @@ "Export.resonite.label": "Resoniteにエクスポート", "Export.resonite.desc": "すべてのアニメーションとマテリアルを含むGLBをエクスポートします。アニメーションデータについては以下を参照:", "Optimization.label": "最適化", - "Optimization.options.label": "最適化オプション", + "Optimization.options.label": "最適化オプション:", "Optimization.combine_materials.label": "マテリアルを結合", - "Optimization.combine_materials.desc": "類似したマテリアルを結合してモデルを最適化", + "Optimization.combine_materials.desc": "類似したマテリアルを結合してドローコールを減らし、パフォーマンスを向上させます", + "Optimization.joinmeshes.label": "メッシュを結合:", "Optimization.join_all_meshes.label": "すべてのメッシュを結合", - "Optimization.join_all_meshes.desc": "すべてのメッシュを1つに結合", + "Optimization.join_all_meshes.desc": "すべてのメッシュを1つのオブジェクトに結合してドローコールを減らします", "Optimization.join_selected_meshes.label": "選択したメッシュを結合", - "Optimization.join_selected_meshes.desc": "現在選択されているすべてのメッシュを1つに結合", + "Optimization.join_selected_meshes.desc": "選択したメッシュのみを1つのオブジェクトに結合します", "Optimization.remove_doubles_safely.label": "安全に重複頂点を削除", - "Optimization.remove_doubles_safely.desc": "口などの部分が融合しないように注意しながら、すべてのメッシュの重複頂点を削除", + "Optimization.remove_doubles_safely.desc": "口の形状などの重要な特徴を保持しながら重複頂点を削除します", "Optimization.no_armature_selected": "アーマチュアが選択されていません", "Optimization.no_meshes_found": "選択されたアーマチュアにメッシュが見つかりません", "Optimization.materials_combined": "{num_combined}個のマテリアルを結合しました", "Optimization.meshes_joined": "メッシュが正常に結合されました", "Optimization.no_mesh_selected": "メッシュオブジェクトが選択されていません", "Optimization.select_at_least_two_meshes": "少なくとも2つのメッシュオブジェクトを選択してください", - "Optimization.selected_meshes_joined": "選択されたメッシュが正常に結合されました", - "Optimization.vertex_excluded": "シェイプキーのインデックス\"{index}\"の頂点が移動しているため、重複マージから除外しました!", + "Optimization.selected_meshes_joined": "選択したメッシュが正常に結合されました", + "Optimization.vertex_excluded": "シェイプキーのインデックス\"{index}\"で頂点が移動しています。重複マージから除外します!", "Optimization.processing_shapekey": "メッシュ\"{mesh_name}\"のシェイプキー\"{shapekeyname}\"を処理中", "Optimization.processing_mesh_no_shapekeys": "シェイプキーのないメッシュ\"{mesh_name}\"を処理中", "Optimization.remove_doubles_completed": "重複頂点の削除が完了しました", "Optimization.select_armature": "アーマチュアを選択してください", "Tools.select_armature": "アーマチュアを選択してください", "Tools.label": "ツール", - "Tools.tools_title.label": "ツール", + "Tools.tools_title.label": "ツール:", "Tools.convert_to_resonite.label": "Resoniteに変換", "Tools.convert_to_resonite.desc": "モデルのボーン名をResoniteと互換性のある名前に変換します", - "Tools.create_digitigrade_legs.label": "デジタイグレード脚を作成", - "Tools.create_digitigrade_legs.desc": "選択したボーンチェーンからデジタイグレード脚を作成", - "Tools.digitigrade_legs.error.bone_format": "ボーンフォーマットが正しくありません!4つの連続したボーンのチェーンを選択してください!", - "Tools.digitigrade_legs.success": "デジタイグレード脚が正常に作成されました", + "Tools.create_digitigrade_legs.label": "デジティグレード脚を作成", + "Tools.create_digitigrade_legs.desc": "選択したボーンチェーンからデジティグレード脚を作成します", + "Tools.digitigrade_legs.error.bone_format": "ボーンの形式が正しくありません!4つの連続したボーンのチェーンを選択してください!", + "Tools.digitigrade_legs.success": "デジティグレード脚が正常に作成されました", "Tools.no_armature_selected": "アーマチュアが選択されていません", - "Tools.bones_translated_with_fails": "{translate_bone_fails}個のボーンをヒューマノイド名に変換できませんでした。それらの名前に\"\"を追加しています。", + "Tools.bones_translated_with_fails": "{translate_bone_fails}個のボーンをヒューマノイド名に変換できませんでした。それらの名前に\"\"を追加します。", "Tools.bones_translated_success": "すべてのボーンをヒューマノイド名に正常に変換しました", - "Tools.import_any_model.desc": "FBX、SMD、DMX、GLTF、PMD、PMXなど、サポートされているすべてのモデルをインポートします。", + "Tools.import_any_model.desc": "サポートされているモデル(FBX、SMD、DMX、GLTF、PMD、PMXなど)をインポートします。", "TextureAtlas.label": "テクスチャアトラス", - "TextureAtlas.material_list_label": "テクスチャアトラスマテリアルリストマテリアル", + "TextureAtlas.material_list_label": "テクスチャアトラスマテリアルリストのマテリアル", "TextureAtlas.reload_list": "テクスチャアトラスマテリアルリストを再読み込み", "TextureAtlas.loaded_list": "テクスチャアトラスマテリアルリストを読み込みました", - "TextureAtlas.atlas_materials": "アトラスマテリアル", - "TextureAtlas.atlas_materials_desc": "モデルを最適化するためにマテリアルをアトラス化", + "TextureAtlas.atlas_materials": "マテリアルをアトラス化", + "TextureAtlas.atlas_materials_desc": "モデルを最適化するためにマテリアルをアトラス化します", "TextureAtlas.atlas_completed": "テクスチャアトラスの作成が完了しました", "TextureAtlas.atlas_error": "テクスチャアトラスの作成中にエラーが発生しました", "VisemePanel.label": "ビセーム", @@ -79,7 +81,7 @@ "VisemePanel.mouth_o.desc": "'O'の口の形のシェイプキー", "VisemePanel.mouth_ch.label": "口 CH", "VisemePanel.mouth_ch.desc": "'CH'の口の形のシェイプキー", - "VisemePanel.shape_intensity": "シェイプの強度", + "VisemePanel.shape_intensity": "形状の強度", "VisemePanel.shape_intensity_desc": "ビセームシェイプキーの強度", "VisemePanel.create_visemes": "ビセームを作成", "VisemePanel.error.noMesh": "メッシュが選択されていません", @@ -87,28 +89,28 @@ "VisemePanel.error.selectMesh": "ビセームを作成するメッシュを選択してください", "VisemePanel.error.noArmature": "アーマチュアが選択されていません", "VisemePanel.info.selectMesh": "ビセームを作成するメッシュを選択してください", - "VisemePanel.start_viseme_creation": "ビセーム作成を開始しています...", - "VisemePanel.selected_shapes": "選択されたシェイプ: A={shape_a}, O={shape_o}, CH={shape_ch}", + "VisemePanel.start_viseme_creation": "ビセームの作成を開始しています...", + "VisemePanel.selected_shapes": "選択された形状: A={shape_a}, O={shape_o}, CH={shape_ch}", "VisemePanel.creating_viseme": "ビセームを作成中: {viseme_name}", - "VisemePanel.sorting_shapekeys": "シェイプキーをソート中...", - "VisemePanel.viseme_creation_completed": "ビセーム作成が完了しました。", + "VisemePanel.sorting_shapekeys": "シェイプキーを並べ替えています...", + "VisemePanel.viseme_creation_completed": "ビセームの作成が完了しました。", "VisemePanel.creating_viseme_detail": "ビセームを作成中: {viseme_name}", "VisemePanel.removing_existing_viseme": "既存のビセームを削除中: {viseme_name}", - "VisemePanel.mixing_shape": "シェイプをミックス中: {shape_name} 値: {value}", + "VisemePanel.mixing_shape": "形状をミックス中: {shape_name} 値: {value}", "VisemePanel.viseme_created_successfully": "ビセーム {viseme_name} が正常に作成されました", "AutoVisemeButton.label": "ビセームを作成", - "AutoVisemeButton.desc": "シェイプキーに基づいて自動的にビセームを作成", + "AutoVisemeButton.desc": "シェイプキーに基づいて自動的にビセームを作成します", "AutoVisemeButton.error.noShapekeys": "シェイプキーが見つかりません", "AutoVisemeButton.error.selectShapekeys": "シェイプキーを選択してください", "AutoVisemeButton.success": "ビセームが正常に作成されました", "Settings.label": "設定", - "Settings.language.label": "言語", - "Settings.language.desc": "アドオンのUIの言語を選択", + "Settings.language.label": "言語:", + "Settings.language.desc": "アドオンのUI言語を選択", "Settings.translation_restart_popup.label": "翻訳の更新", "Settings.translation_restart_popup.description": "翻訳の更新に関する情報", "Settings.translation_restart_popup.message1": "一部の翻訳は適用されない場合があります", "Settings.translation_restart_popup.message2": "Blenderを再起動するまで。", - "Importing.need_importer": "{extension}タイプに必要なインポーターがありません!インポーター検索用のウェブブラウザを開いています...", + "Importing.need_importer": "{extension}タイプに必要なインポーターがありません!インポーター検索用のウェブブラウザを開きます...", "Importer.mmd_anim_importer.label": "MMDアニメーション", "Importer.mmd_anim_importer.desc": "MMDアニメーション(.vmd)をインポート", "Importing.importer_search_term": "https://search.brave.com/search?q=blender+{extension}+importer+addon&source=web", @@ -118,4 +120,3 @@ "Importer.export_vrchat.desc": "VRChatにエクスポートします。ChilloutVRでも動作する可能性があります。Catsのエクスポートに似ています。" } } - diff --git a/ui/atlas_materials.py b/ui/atlas_materials.py index 63805a2..7d0f7c3 100644 --- a/ui/atlas_materials.py +++ b/ui/atlas_materials.py @@ -2,7 +2,7 @@ from bpy.types import UIList, Panel, UILayout, Object, Context,Material, Operato import bpy from ..core.register import register_wrap from .panel import AvatarToolkitPanel -from ..core.common import SceneMatClass, material_list_bool +from ..core.common import SceneMatClass, material_list_bool, get_selected_armature from ..functions.atlas_materials import Atlas_Materials from ..functions.translations import t @@ -70,14 +70,19 @@ class TextureAtlasPanel(Panel): def draw(self, context: Context): layout = self.layout - row = layout.row() - boxoutter = row.box() - direction_icon = 'RIGHTARROW' if not context.scene.texture_atlas_Has_Mat_List_Shown else 'DOWNARROW_HLT' - row = boxoutter.row() - row.operator(ExpandSection_Materials.bl_idname, text=(t("TextureAtlas.reload_list") if not context.scene.texture_atlas_Has_Mat_List_Shown else t("TextureAtlas.loaded_list")), icon=direction_icon) - if context.scene.texture_atlas_Has_Mat_List_Shown: - row = boxoutter.row() - row.template_list(MaterialTextureAtlasProperties.bl_idname, 'material_list', context.scene, 'materials', - context.scene, 'texture_atlas_material_index', rows=12, type='DEFAULT') + armature = get_selected_armature(context) + + if armature: row = layout.row() - row.operator(Atlas_Materials.bl_idname, text=t("TextureAtlas.atlas_materials")) + boxoutter = row.box() + direction_icon = 'RIGHTARROW' if not context.scene.texture_atlas_Has_Mat_List_Shown else 'DOWNARROW_HLT' + row = boxoutter.row() + row.operator(ExpandSection_Materials.bl_idname, text=(t("TextureAtlas.reload_list") if not context.scene.texture_atlas_Has_Mat_List_Shown else t("TextureAtlas.loaded_list")), icon=direction_icon) + if context.scene.texture_atlas_Has_Mat_List_Shown: + row = boxoutter.row() + row.template_list(MaterialTextureAtlasProperties.bl_idname, 'material_list', context.scene, 'materials', + context.scene, 'texture_atlas_material_index', rows=12, type='DEFAULT') + row = layout.row() + row.operator(Atlas_Materials.bl_idname, text=t("TextureAtlas.atlas_materials")) + else: + layout.label(text=t("Tools.select_armature"), icon='ERROR') diff --git a/ui/optimization.py b/ui/optimization.py index 3701ea5..3a618bd 100644 --- a/ui/optimization.py +++ b/ui/optimization.py @@ -19,19 +19,24 @@ class AvatarToolkitOptimizationPanel(bpy.types.Panel): armature = get_selected_armature(context) if armature: - layout.label(text=t("Optimization.options.label")) + layout.label(text=t("Optimization.options.label"), icon='SETTINGS') row = layout.row() row.scale_y = 1.2 - row.operator("avatar_toolkit.combine_materials", text=t("Optimization.combine_materials.label")) - - layout.separator(factor=0.5) - + row.operator("avatar_toolkit.combine_materials", text=t("Optimization.combine_materials.label"), icon='MATERIAL') row = layout.row(align=True) row.scale_y = 1.2 - row.operator("avatar_toolkit.join_all_meshes", text=t("Optimization.join_all_meshes.label")) - row.operator("avatar_toolkit.join_selected_meshes", text=t("Optimization.join_selected_meshes.label")) - row.operator("avatar_toolkit.remove_doubles_safely", text=t("Optimization.remove_doubles_safely.label")) - else: - layout.label(text=t("Optimization.select_armature")) + row.operator("avatar_toolkit.remove_doubles_safely", text=t("Optimization.remove_doubles_safely.label"), icon='SNAP_VERTEX') + + layout.separator(factor=0.5) + + layout.label(text=t("Optimization.joinmeshes.label"), icon='SETTINGS') + row = layout.row(align=True) + row.scale_y = 1.2 + row.operator("avatar_toolkit.join_all_meshes", text=t("Optimization.join_all_meshes.label"), icon='OUTLINER_OB_MESH') + row.operator("avatar_toolkit.join_selected_meshes", text=t("Optimization.join_selected_meshes.label"), icon='STICKY_UVS_LOC') + + else: + layout.label(text=t("Optimization.select_armature"), icon='ERROR') + diff --git a/ui/panel.py b/ui/panel.py index b8afd9e..629fee3 100644 --- a/ui/panel.py +++ b/ui/panel.py @@ -15,5 +15,5 @@ class AvatarToolkitPanel(bpy.types.Panel): layout.label(text=t("AvatarToolkit.welcome")) layout.label(text=t("AvatarToolkit.description")) layout.label(text=t("AvatarToolkit.alpha_warning")) - #print("Avatar Toolkit Panel is being drawn") + diff --git a/ui/quick_access.py b/ui/quick_access.py index cf767a0..e79d7a1 100644 --- a/ui/quick_access.py +++ b/ui/quick_access.py @@ -9,6 +9,7 @@ from ..core.import_pmd import import_pmd from ..functions.import_anything import ImportAnyModel from ..core.common import get_selected_armature, set_selected_armature +@register_wrap @register_wrap class AvatarToolkitQuickAccessPanel(bpy.types.Panel): bl_label = t("Quick_Access.label") @@ -21,9 +22,11 @@ class AvatarToolkitQuickAccessPanel(bpy.types.Panel): def draw(self, context: Context): layout = self.layout - layout.label(text=t("Quick_Access.options")) + layout.label(text=t("Quick_Access.options"), icon='TOOL_SETTINGS') - layout.prop(context.scene, "selected_armature", text="Select Armature") + layout.label(text=t("Quick_Access.select_armature"), icon='ARMATURE_DATA') + + layout.prop(context.scene, "selected_armature", text="") row = layout.row() row.label(text=t("Quick_Access.import_export.label"), icon='IMPORT') @@ -32,8 +35,8 @@ class AvatarToolkitQuickAccessPanel(bpy.types.Panel): row = layout.row(align=True) row.scale_y = 1.5 - row.operator(ImportAnyModel.bl_idname, text=t("Quick_Access.import")) - row.operator("avatar_toolkit.export_menu", text=t("Quick_Access.export")) + row.operator(ImportAnyModel.bl_idname, text=t("Quick_Access.import"), icon='IMPORT') + row.operator("avatar_toolkit.export_menu", text=t("Quick_Access.export"), icon='EXPORT') @register_wrap class AVATAR_TOOLKIT_OT_export_menu(bpy.types.Operator): @@ -54,9 +57,9 @@ class AVATAR_TOOLKIT_OT_export_menu(bpy.types.Operator): def draw(self, context: Context): layout = self.layout - layout.label(text=t("Quick_Access.select_export.label")) - layout.operator("avatar_toolkit.export_resonite", text=t("Quick_Access.select_export_resonite.label")) - layout.operator("avatar_toolkit.export_fbx", text=t("Quick_Access.export_fbx.label")) + layout.label(text=t("Quick_Access.select_export.label"), icon='EXPORT') + layout.operator("avatar_toolkit.export_resonite", text=t("Quick_Access.select_export_resonite.label"), icon='SCENE_DATA') + layout.operator("avatar_toolkit.export_fbx", text=t("Quick_Access.export_fbx.label"), icon='OBJECT_DATA') @register_wrap class AVATAR_TOOLKIT_OT_export_fbx(bpy.types.Operator): @@ -68,4 +71,3 @@ class AVATAR_TOOLKIT_OT_export_fbx(bpy.types.Operator): def execute(self, context): bpy.ops.export_scene.fbx('INVOKE_DEFAULT') return {'FINISHED'} - diff --git a/ui/settings.py b/ui/settings.py index 6425922..48ae72b 100644 --- a/ui/settings.py +++ b/ui/settings.py @@ -15,7 +15,9 @@ class AvatarToolkitSettingsPanel(bpy.types.Panel): def draw(self, context): layout = self.layout - layout.prop(context.scene, "avatar_toolkit_language", text=t("Settings.language.label")) + + layout.label(text=t("Settings.language.label")) + layout.prop(context.scene, "avatar_toolkit_language", text="", icon='WORLD') @register_wrap class AVATAR_TOOLKIT_OT_translation_restart_popup(bpy.types.Operator): @@ -26,7 +28,6 @@ class AVATAR_TOOLKIT_OT_translation_restart_popup(bpy.types.Operator): def execute(self, context): if context.scene.avatar_toolkit_language_changed: - # Reload the addon after the popup is closed bpy.ops.script.reload() context.scene.avatar_toolkit_language_changed = False return {'FINISHED'} @@ -36,5 +37,6 @@ class AVATAR_TOOLKIT_OT_translation_restart_popup(bpy.types.Operator): def draw(self, context): layout = self.layout - layout.label(text=t("Settings.translation_restart_popup.message1")) - layout.label(text=t("Settings.translation_restart_popup.message2")) + layout.label(text=t("Settings.translation_restart_popup.message1"), icon='INFO') + layout.label(text=t("Settings.translation_restart_popup.message2"), icon='FILE_REFRESH') + diff --git a/ui/tools.py b/ui/tools.py index d139d7d..78dfbe1 100644 --- a/ui/tools.py +++ b/ui/tools.py @@ -21,13 +21,13 @@ class AvatarToolkitToolsPanel(bpy.types.Panel): armature = get_selected_armature(context) if armature: - layout.label(text=t("Tools.tools_title.label")) + layout.label(text=t("Tools.tools_title.label"), icon='TOOL_SETTINGS') layout.separator(factor=0.5) row = layout.row(align=True) row.scale_y = 1.5 - row.operator("avatar_toolkit.convert_to_resonite", text=t("Tools.convert_to_resonite.label")) + row.operator("avatar_toolkit.convert_to_resonite", text=t("Tools.convert_to_resonite.label"), icon='SCENE_DATA') row = layout.row(align=True) - row.operator(CreateDigitigradeLegs.bl_idname, text=t("Tools.create_digitigrade_legs.label")) + row.operator(CreateDigitigradeLegs.bl_idname, text=t("Tools.create_digitigrade_legs.label"), icon='BONE_DATA') else: - layout.label(text=t("Tools.select_armature")) + layout.label(text=t("Tools.select_armature"), icon='ERROR') diff --git a/ui/viseme.py b/ui/viseme.py index 239154b..7dbf49d 100644 --- a/ui/viseme.py +++ b/ui/viseme.py @@ -18,18 +18,21 @@ class AvatarToolkitVisemePanel(bpy.types.Panel): armature = get_selected_armature(context) if armature: - layout.prop(context.scene, "selected_mesh", text=t("VisemePanel.select_mesh")) + layout.prop(context.scene, "selected_mesh", text=t("VisemePanel.select_mesh"), icon='OUTLINER_OB_MESH') + row = layout.row() mesh = bpy.data.objects.get(context.scene.selected_mesh) if mesh and mesh.type == 'MESH': if mesh.data.shape_keys: - layout.prop_search(context.scene, "mouth_a", mesh.data.shape_keys, "key_blocks", text=t('VisemePanel.mouth_a.label')) - layout.prop_search(context.scene, "mouth_o", mesh.data.shape_keys, "key_blocks", text=t('VisemePanel.mouth_o.label')) - layout.prop_search(context.scene, "mouth_ch", mesh.data.shape_keys, "key_blocks", text=t('VisemePanel.mouth_ch.label')) + layout.prop_search(context.scene, "mouth_a", mesh.data.shape_keys, "key_blocks", text=t('VisemePanel.mouth_a.label'), icon='SHAPEKEY_DATA') + layout.prop_search(context.scene, "mouth_o", mesh.data.shape_keys, "key_blocks", text=t('VisemePanel.mouth_o.label'), icon='SHAPEKEY_DATA') + layout.prop_search(context.scene, "mouth_ch", mesh.data.shape_keys, "key_blocks", text=t('VisemePanel.mouth_ch.label'), icon='SHAPEKEY_DATA') - layout.prop(context.scene, 'shape_intensity', text=t('VisemePanel.shape_intensity')) + layout.prop(context.scene, 'shape_intensity', text=t('VisemePanel.shape_intensity'), icon='FORCE_LENNARDJONES') - layout.operator("avatar_toolkit.create_visemes", text=t('VisemePanel.create_visemes'), icon='TRIA_RIGHT') + row = layout.row() + row.scale_y = 1.2 + row.operator("avatar_toolkit.create_visemes", text=t('VisemePanel.create_visemes'), icon='TRIA_RIGHT') else: layout.label(text=t('VisemePanel.error.noShapekeys'), icon='ERROR') else: @@ -38,4 +41,4 @@ class AvatarToolkitVisemePanel(bpy.types.Panel): layout.label(text=t('VisemePanel.error.noArmature'), icon='ERROR') layout.separator() - layout.label(text=t('VisemePanel.info.selectMesh')) + layout.label(text=t('VisemePanel.info.selectMesh'), icon='HELP')