From 8c2c52f882e6e7f722fca09ec20bc935206fa34b Mon Sep 17 00:00:00 2001 From: Yusarina Date: Fri, 1 Aug 2025 12:01:22 +0100 Subject: [PATCH] Fixed issue where some bones was not being renamed --- core/dictionaries.py | 32 +++++++++---------- functions/tools/standardize_armature.py | 41 ++++++++++--------------- 2 files changed, 33 insertions(+), 40 deletions(-) diff --git a/core/dictionaries.py b/core/dictionaries.py index 552e832..e065c14 100644 --- a/core/dictionaries.py +++ b/core/dictionaries.py @@ -743,17 +743,17 @@ non_standard_mappings = { 'left_arm': [ 'mixamorig:LeftArm', 'mixamorig_LeftArm', 'ORG-upper_arm.L', 'upper_arm.L', - 'lShldrBend', 'lShldrTwist', 'lArm' + 'lShldrBend', 'lShldrTwist', 'lArm', 'UpperArm.L' ], 'left_elbow': [ 'mixamorig:LeftForeArm', 'mixamorig_LeftForeArm', 'ORG-forearm.L', 'forearm.L', - 'lForearmBend', 'lElbow', 'lForeArm' + 'lForearmBend', 'lElbow', 'lForeArm', 'LowerArm.L' ], 'left_wrist': [ 'mixamorig:LeftHand', 'mixamorig_LeftHand', 'ORG-hand.L', 'hand.L', - 'lHand', 'lWrist' + 'lHand', 'lWrist', 'Hand.L' ], 'right_shoulder': [ @@ -764,59 +764,59 @@ non_standard_mappings = { 'right_arm': [ 'mixamorig:RightArm', 'mixamorig_RightArm', 'ORG-upper_arm.R', 'upper_arm.R', - 'rShldrBend', 'rShldrTwist', 'rArm' + 'rShldrBend', 'rShldrTwist', 'rArm', 'UpperArm.R' ], 'right_elbow': [ 'mixamorig:RightForeArm', 'mixamorig_RightForeArm', 'ORG-forearm.R', 'forearm.R', - 'rForearmBend', 'rElbow', 'rForeArm' + 'rForearmBend', 'rElbow', 'rForeArm', 'LowerArm.R' ], 'right_wrist': [ 'mixamorig:RightHand', 'mixamorig_RightHand', 'ORG-hand.R', 'hand.R', - 'rHand', 'rWrist' + 'rHand', 'rWrist', 'Hand.R' ], 'left_leg': [ 'mixamorig:LeftUpLeg', 'mixamorig_LeftUpLeg', 'ORG-thigh.L', 'thigh.L', - 'lThighBend', 'lThigh' + 'lThighBend', 'lThigh', 'UpperLeg.L' ], 'left_knee': [ 'mixamorig:LeftLeg', 'mixamorig_LeftLeg', 'ORG-shin.L', 'shin.L', - 'lShin', 'lKnee', 'lLeg' + 'lShin', 'lKnee', 'lLeg', 'LowerLeg.L' ], 'left_ankle': [ 'mixamorig:LeftFoot', 'mixamorig_LeftFoot', 'ORG-foot.L', 'foot.L', - 'lFoot', 'lAnkle' + 'lFoot', 'lAnkle', 'Foot.L' ], 'left_toe': [ 'mixamorig:LeftToeBase', 'mixamorig_LeftToeBase', 'ORG-toe.L', 'toe.L', - 'lToe' + 'lToe', 'Toes.L' ], 'right_leg': [ 'mixamorig:RightUpLeg', 'mixamorig_RightUpLeg', 'ORG-thigh.R', 'thigh.R', - 'rThighBend', 'rThigh' + 'rThighBend', 'rThigh', 'UpperLeg.R' ], 'right_knee': [ 'mixamorig:RightLeg', 'mixamorig_RightLeg', 'ORG-shin.R', 'shin.R', - 'rShin', 'rKnee', 'rLeg' + 'rShin', 'rKnee', 'rLeg', 'LowerLeg.R' ], 'right_ankle': [ 'mixamorig:RightFoot', 'mixamorig_RightFoot', 'ORG-foot.R', 'foot.R', - 'rFoot', 'rAnkle' + 'rFoot', 'rAnkle', 'Foot.R' ], 'right_toe': [ 'mixamorig:RightToeBase', 'mixamorig_RightToeBase', 'ORG-toe.R', 'toe.R', - 'rToe' + 'rToe', 'Toes.R' ], 'thumb_1_l': [ @@ -982,12 +982,12 @@ non_standard_mappings = { 'left_eye': [ 'mixamorig:LeftEye', 'mixamorig_LeftEye', 'ORG-eye.L', 'eye.L', - 'lEye' + 'lEye', 'Eye.L' ], 'right_eye': [ 'mixamorig:RightEye', 'mixamorig_RightEye', 'ORG-eye.R', 'eye.R', - 'rEye' + 'rEye', 'Eye.R' ] } diff --git a/functions/tools/standardize_armature.py b/functions/tools/standardize_armature.py index e88558d..7d5fdcf 100644 --- a/functions/tools/standardize_armature.py +++ b/functions/tools/standardize_armature.py @@ -13,7 +13,9 @@ from ...core.dictionaries import ( bone_hierarchy, acceptable_bone_names, acceptable_bone_hierarchy, - non_standard_mappings + non_standard_mappings, + reverse_bone_lookup, + simplify_bonename ) class AvatarToolkit_OT_StandardizeArmature(Operator): @@ -134,17 +136,14 @@ class AvatarToolkit_OT_StandardizeArmature(Operator): existing_standard_bones.add(bone.name) logger.debug(f"Found existing standard bone: {bone.name}") - # Build a mapping of non-standard bone names to standard names + # Use the reverse bone lookup that's already built and simplified name_mapping: Dict[str, str] = {} - for category, standard_name in standard_bones.items(): - # Skip if this standard bone already exists - if standard_name in existing_standard_bones: - continue - - # Get all variants for this category - if category in non_standard_mappings: - for variant in non_standard_mappings[category]: - name_mapping[variant.lower()] = standard_name + for simplified_name, category in reverse_bone_lookup.items(): + if category in standard_bones: + standard_name = standard_bones[category] + # Skip if this standard bone already exists + if standard_name not in existing_standard_bones: + name_mapping[simplified_name] = standard_name # First pass: identify bones to rename bones_to_rename: Dict[str, str] = {} @@ -155,20 +154,14 @@ class AvatarToolkit_OT_StandardizeArmature(Operator): if original_name in standard_bones.values(): continue - simplified_name: str = original_name.lower().replace(' ', '').replace('_', '').replace('.', '') + simplified_name: str = simplify_bonename(original_name) - # Check if this bone matches any known pattern - for variant, standard_name in name_mapping.items(): - # More precise matching - exact match or with common separators - if (variant == simplified_name or - variant == original_name.lower() or - f"{variant}_" in simplified_name or - f"{variant}." in simplified_name): - - if original_name != standard_name: - bones_to_rename[original_name] = standard_name - logger.debug(f"Identified bone to rename: {original_name} -> {standard_name}") - break + # Check if this simplified bone name has a standard mapping + if simplified_name in name_mapping: + standard_name = name_mapping[simplified_name] + if original_name != standard_name: + bones_to_rename[original_name] = standard_name + logger.debug(f"Identified bone to rename: {original_name} -> {standard_name}") # Special case for spine/chest hierarchy # If we don't have an upper chest, don't rename chest to upper chest because it will break hierarchy