2023年7月24日月曜日

異なるアーマチュアからボーンの名前をコピーする

import bpy

import math


def find_nearest_bone(target_bone, reference_armature):

    min_distance = float('inf')

    nearest_bone_name = None


    for bone in reference_armature.data.bones:

        distance = (bone.head - target_bone.head).length

        if distance < min_distance:

            min_distance = distance

            nearest_bone_name = bone.name


    return nearest_bone_name


# ArmatureAとArmatureBを取得

armature_a = bpy.data.objects.get("ArmatureA")

armature_b = bpy.data.objects.get("ArmatureB")


# ArmatureAがアーマチュアであることを確認

if armature_a and armature_a.type == 'ARMATURE':

    # ArmatureBがアーマチュアであることを確認

    if armature_b and armature_b.type == 'ARMATURE':


        # ArmatureAのボーンに対して処理を行う

        for bone_a in armature_a.data.bones:

            # ArmatureBの中で一番近いボーンを見つける

            nearest_bone_name = find_nearest_bone(bone_a, armature_b)


            # ボーンの名前を変更

            bone_a.name = nearest_bone_name


    else:

        print("ArmatureB is not an armature.")

else:

    print("ArmatureA is not an armature.")