major progress in addon creation
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
import bpy
|
||||
import math
|
||||
|
||||
from . import bones_skel_struct
|
||||
from . import bones_fingers_struct
|
||||
from . import bones_toes_struct
|
||||
from . import bones_web_struct
|
||||
|
||||
# mabulig_coll_name = None
|
||||
# new_amt_obj = None
|
||||
# matrix_world_inv = None
|
||||
|
||||
|
||||
# Modify Bone Function
|
||||
def modifybone(bone, head_empt, tail_empt, armature, matrixworldinv):
|
||||
edit_bone = armature.data.edit_bones.get(bone)
|
||||
print(edit_bone)
|
||||
empty_head = bpy.data.objects.get(head_empt)
|
||||
empty_tail = bpy.data.objects.get(tail_empt)
|
||||
allowhead = False
|
||||
allowtail = False
|
||||
alloweditbone = False
|
||||
|
||||
# Fetch world coordinates of the empties
|
||||
if empty_head:
|
||||
allowhead = True
|
||||
# else:
|
||||
# print(f"Helper '{head_empt}' not found.")
|
||||
|
||||
if empty_tail:
|
||||
allowtail = True
|
||||
# else:
|
||||
# print(f"Helper '{tail_empt}' not found.")
|
||||
|
||||
if edit_bone:
|
||||
alloweditbone = True
|
||||
# else:
|
||||
# print(f"Bone '{bone}' not found.")
|
||||
|
||||
if allowhead and allowtail and alloweditbone:
|
||||
head_world_pos = empty_head.matrix_world.translation
|
||||
print(f"Head: {head_empt} - success")
|
||||
tail_world_pos = empty_tail.matrix_world.translation
|
||||
print(f"Tail: {tail_empt} - success")
|
||||
# Multiply the inverse matrix by the world positions using the '@' operator
|
||||
edit_bone.head = matrixworldinv @ head_world_pos
|
||||
edit_bone.tail = matrixworldinv @ tail_world_pos
|
||||
# else:
|
||||
# print("Error")
|
||||
|
||||
|
||||
|
||||
def startAutoRig():
|
||||
mabulig_coll_name = "Mabulig-Rig"
|
||||
og_amt_obj = bpy.data.objects.get("OG_Armature")
|
||||
|
||||
# =========== Duplicate OG armature for future editing ===========
|
||||
target_coll = bpy.data.collections.get(mabulig_coll_name)
|
||||
armaturecheck = bpy.data.objects.get("Armature")
|
||||
|
||||
if armaturecheck:
|
||||
print("Armature already exist")
|
||||
new_amt_obj = armaturecheck
|
||||
|
||||
else:
|
||||
# Duplicate the armature object
|
||||
new_amt_obj = og_amt_obj.copy()
|
||||
|
||||
# Duplicate the underlying armature data (bones, constraints, etc.)
|
||||
new_amt_obj.data = og_amt_obj.data.copy()
|
||||
|
||||
new_amt_obj.name = "Armature"
|
||||
new_amt_obj.data.name = "Armature"
|
||||
|
||||
target_coll.objects.link(new_amt_obj)
|
||||
|
||||
new_amt_obj.hide_viewport = False
|
||||
|
||||
|
||||
|
||||
# Calculate the armature's inverse world matrix
|
||||
matrix_world_inv = new_amt_obj.matrix_world.inverted()
|
||||
|
||||
print(new_amt_obj.name)
|
||||
|
||||
# =========== Skeleton Bones Setup ===========
|
||||
|
||||
bone_data_list = bones_skel_struct.bones_data
|
||||
|
||||
for item in bone_data_list:
|
||||
b_name = item["bone_name"]
|
||||
h_helper = item["head_helper"]
|
||||
t_helper = item["tail_helper"]
|
||||
|
||||
modifybone(b_name, h_helper, t_helper, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
|
||||
|
||||
# # =========== Belly Bones Setup ===========
|
||||
|
||||
# belly_l_collection = bpy.data.collections.get("belly_l")
|
||||
# belly_r_collection = bpy.data.collections.get("belly_r")
|
||||
|
||||
# # For Left Belly
|
||||
# for obj in belly_l_collection.objects:
|
||||
# modifybone(obj.name, "belly_base_l", obj.name, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
# # For Right Belly
|
||||
# for obj in belly_r_collection.objects:
|
||||
# modifybone(obj.name, "belly_base_r", obj.name, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
|
||||
|
||||
# # =========== Gullar Bones Setup ===========
|
||||
|
||||
# gular_collection = bpy.data.collections.get("gular")
|
||||
|
||||
# for obj in gular_collection.objects:
|
||||
# modifybone(obj.name, "gular_base", obj.name, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
|
||||
|
||||
# # =========== Nostril Bones Setup ===========
|
||||
|
||||
# nostril_l_collection = bpy.data.collections.get("nostril_l")
|
||||
# nostril_r_collection = bpy.data.collections.get("nostril_r")
|
||||
|
||||
# # For Left Nostril
|
||||
# for obj in nostril_l_collection.objects:
|
||||
# modifybone(obj.name, "nostril_base_l", obj.name, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
|
||||
# # For Right Nostril
|
||||
# for obj in nostril_r_collection.objects:
|
||||
# modifybone(obj.name, "nostril_base_r", obj.name, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
|
||||
|
||||
# # =========== Metacarpal and Finger Bones Setup ===========
|
||||
|
||||
# bones_fingers_data_list = bones_fingers_struct.fingers_data
|
||||
|
||||
# for item in bones_fingers_data_list:
|
||||
# b_name = item["bone_name"]
|
||||
# h_helper = item["head_helper"]
|
||||
# t_helper = item["tail_helper"]
|
||||
|
||||
# modifybone(b_name, h_helper, t_helper, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
|
||||
|
||||
# # =========== Metatarsus and Toe Bones Setup ===========
|
||||
|
||||
# bones_toes_data_list = bones_toes_struct.toes_data
|
||||
|
||||
# for item in bones_toes_data_list:
|
||||
# b_name = item["bone_name"]
|
||||
# h_helper = item["head_helper"]
|
||||
# t_helper = item["tail_helper"]
|
||||
|
||||
# modifybone(b_name, h_helper, t_helper, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
|
||||
|
||||
|
||||
# # =========== Webbing Bones ===========
|
||||
|
||||
# bones_web_data_list = bones_web_struct.webbing_data
|
||||
|
||||
# for item in bones_web_data_list:
|
||||
# b_name = item["bone_name"]
|
||||
# h_helper = item["head_helper"]
|
||||
# t_helper = item["tail_helper"]
|
||||
|
||||
# modifybone(b_name, h_helper, t_helper, new_amt_obj, matrix_world_inv) # Call Modify Bone Function
|
||||
Reference in New Issue
Block a user