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.
This commit is contained in:
Yusarina
2024-07-25 21:48:40 +01:00
parent d4e8ffeebb
commit 83366072b8
9 changed files with 106 additions and 86 deletions
+11 -9
View File
@@ -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",
+33 -32
View File
@@ -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}個のボーンをヒューマノイド名に変換できませんでした。それらの名前に\"<noik>\"を追加しています。",
"Tools.bones_translated_with_fails": "{translate_bone_fails}個のボーンをヒューマノイド名に変換できませんでした。それらの名前に\"<noik>\"を追加します。",
"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のエクスポートに似ています。"
}
}
+6 -1
View File
@@ -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,6 +70,9 @@ class TextureAtlasPanel(Panel):
def draw(self, context: Context):
layout = self.layout
armature = get_selected_armature(context)
if armature:
row = layout.row()
boxoutter = row.box()
direction_icon = 'RIGHTARROW' if not context.scene.texture_atlas_Has_Mat_List_Shown else 'DOWNARROW_HLT'
@@ -81,3 +84,5 @@ class TextureAtlasPanel(Panel):
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')
+12 -7
View File
@@ -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"))
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.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"))
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.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')
+1 -1
View File
@@ -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")
+10 -8
View File
@@ -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'}
+6 -4
View File
@@ -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')
+4 -4
View File
@@ -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')
+10 -7
View File
@@ -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')