Blender  V2.93
Macros | Functions
armature_utils.c File Reference
#include "DNA_armature_types.h"
#include "DNA_object_types.h"
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_string_utils.h"
#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_deform.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
#include "BKE_lib_id.h"
#include "BKE_main.h"
#include "DEG_depsgraph.h"
#include "ED_armature.h"
#include "ED_util.h"
#include "armature_intern.h"

Go to the source code of this file.

Macros

#define EBONE_TEMP_UINT(ebone)   (*((uint *)(&((ebone)->temp))))
 

Functions

void ED_armature_edit_sync_selection (ListBase *edbo)
 
void ED_armature_edit_validate_active (struct bArmature *arm)
 
void ED_armature_edit_refresh_layer_used (bArmature *arm)
 
int bone_looper (Object *ob, Bone *bone, void *data, int(*bone_func)(Object *, Bone *, void *))
 
void bone_free (bArmature *arm, EditBone *bone)
 
void ED_armature_ebone_remove_ex (bArmature *arm, EditBone *exBone, bool clear_connected)
 
void ED_armature_ebone_remove (bArmature *arm, EditBone *exBone)
 
bool ED_armature_ebone_is_child_recursive (EditBone *ebone_parent, EditBone *ebone_child)
 
EditBoneED_armature_ebone_find_shared_parent (EditBone *ebone_child[], const uint ebone_child_tot)
 
void ED_armature_ebone_to_mat3 (EditBone *ebone, float r_mat[3][3])
 
void ED_armature_ebone_to_mat4 (EditBone *ebone, float r_mat[4][4])
 
void ED_armature_ebone_from_mat3 (EditBone *ebone, const float mat[3][3])
 
void ED_armature_ebone_from_mat4 (EditBone *ebone, const float mat[4][4])
 
EditBoneED_armature_ebone_find_name (const ListBase *edbo, const char *name)
 
EditBoneED_armature_ebone_get_mirrored (const ListBase *edbo, EditBone *ebo)
 
void armature_select_mirrored_ex (bArmature *arm, const int flag)
 
void armature_select_mirrored (bArmature *arm)
 
void armature_tag_select_mirrored (bArmature *arm)
 
void armature_tag_unselect (bArmature *arm)
 
void ED_armature_ebone_transform_mirror_update (bArmature *arm, EditBone *ebo, bool check_select)
 
void ED_armature_edit_transform_mirror_update (Object *obedit)
 
static EditBonemake_boneList_recursive (ListBase *edbo, ListBase *bones, EditBone *parent, Bone *actBone)
 
static EditBonefind_ebone_link (ListBase *edbo, Bone *link)
 
EditBonemake_boneList (ListBase *edbo, ListBase *bones, struct Bone *actBone)
 
static void armature_finalize_restpose (ListBase *bonelist, ListBase *editbonelist)
 
void ED_armature_from_edit (Main *bmain, bArmature *arm)
 
void ED_armature_edit_free (struct bArmature *arm)
 
void ED_armature_to_edit (bArmature *arm)
 
void ED_armature_ebone_listbase_free (ListBase *lb, const bool do_id_user)
 
void ED_armature_ebone_listbase_copy (ListBase *lb_dst, ListBase *lb_src, const bool do_id_user)
 
void ED_armature_ebone_listbase_temp_clear (ListBase *lb)
 
int ED_armature_ebone_selectflag_get (const EditBone *ebone)
 
void ED_armature_ebone_selectflag_set (EditBone *ebone, int flag)
 
void ED_armature_ebone_selectflag_enable (EditBone *ebone, int flag)
 
void ED_armature_ebone_selectflag_disable (EditBone *ebone, int flag)
 
void ED_armature_ebone_select_set (EditBone *ebone, bool select)
 

Macro Definition Documentation

◆ EBONE_TEMP_UINT

#define EBONE_TEMP_UINT (   ebone)    (*((uint *)(&((ebone)->temp))))

Function Documentation

◆ armature_finalize_restpose()

static void armature_finalize_restpose ( ListBase bonelist,
ListBase editbonelist 
)
static

This function:

Note
The order is crucial here, we can only handle child if all its parents in chain have already been handled (this is ensured by recursive process).

Definition at line 622 of file armature_utils.c.

References Bone::arm_head, Bone::arm_mat, Bone::arm_tail, KDL::atan2(), atan2f, BKE_armature_where_is_bone(), EditBone::bone, Bone::childbase, copy_m3_m4(), copy_v3_v3(), ED_armature_ebone_to_mat3(), ListBase::first, Bone::head, invert_m3_m3(), invert_m4_m4(), mul_m3_m3m3(), mul_mat3_m4_v3(), Bone::name, EditBone::next, Bone::next, Bone::parent, print_m4(), RAD2DEGF, Bone::roll, sub_v3_v3v3(), Bone::tail, and EditBone::temp.

Referenced by ED_armature_from_edit().

◆ armature_select_mirrored()

void armature_select_mirrored ( bArmature arm)

Definition at line 342 of file armature_utils.c.

References armature_select_mirrored_ex(), and BONE_SELECTED.

Referenced by armature_delete_selected_exec().

◆ armature_select_mirrored_ex()

void armature_select_mirrored_ex ( bArmature arm,
const int  flag 
)

◆ armature_tag_select_mirrored()

void armature_tag_select_mirrored ( bArmature arm)

◆ armature_tag_unselect()

void armature_tag_unselect ( bArmature arm)

◆ bone_free()

void bone_free ( bArmature arm,
EditBone bone 
)

◆ bone_looper()

int bone_looper ( Object ob,
Bone bone,
void *  data,
int(*)(Object *, Bone *, void *)  bone_func 
)

Definition at line 106 of file armature_utils.c.

References Bone::childbase, count, data, ListBase::first, and Bone::next.

◆ ED_armature_ebone_find_name()

EditBone* ED_armature_ebone_find_name ( const ListBase edbo,
const char *  name 
)

◆ ED_armature_ebone_find_shared_parent()

EditBone* ED_armature_ebone_find_shared_parent ( EditBone ebone_child[],
const uint  ebone_child_tot 
)

Finds the first parent shared by ebone_child

Parameters
ebone_childChildren bones to search
ebone_child_totSize of the ebone_child array
Returns
The shared parent or NULL.

Definition at line 200 of file armature_utils.c.

References EBONE_TEMP_UINT, NULL, and EditBone::parent.

Referenced by armature_shortest_path_pick_invoke().

◆ ED_armature_ebone_from_mat3()

void ED_armature_ebone_from_mat3 ( EditBone ebone,
const float  mat[3][3] 
)

◆ ED_armature_ebone_from_mat4()

void ED_armature_ebone_from_mat4 ( EditBone ebone,
const float  mat[4][4] 
)

◆ ED_armature_ebone_get_mirrored()

EditBone* ED_armature_ebone_get_mirrored ( const ListBase edbo,
EditBone ebo 
)

◆ ED_armature_ebone_is_child_recursive()

bool ED_armature_ebone_is_child_recursive ( EditBone ebone_parent,
EditBone ebone_child 
)

◆ ED_armature_ebone_listbase_copy()

void ED_armature_ebone_listbase_copy ( ListBase lb_dst,
ListBase lb_src,
const bool  do_id_user 
)

◆ ED_armature_ebone_listbase_free()

void ED_armature_ebone_listbase_free ( ListBase lb,
const bool  do_id_user 
)

◆ ED_armature_ebone_listbase_temp_clear()

void ED_armature_ebone_listbase_temp_clear ( ListBase lb)

◆ ED_armature_ebone_remove()

void ED_armature_ebone_remove ( bArmature arm,
EditBone exBone 
)

Definition at line 178 of file armature_utils.c.

References ED_armature_ebone_remove_ex().

Referenced by armature_delete_selected_exec().

◆ ED_armature_ebone_remove_ex()

void ED_armature_ebone_remove_ex ( bArmature arm,
EditBone exBone,
bool  clear_connected 
)
Parameters
clear_connectedWhen false caller is responsible for keeping the flag in a valid state.

Definition at line 161 of file armature_utils.c.

References BONE_CONNECTED, bone_free(), bArmature::edbo, ListBase::first, EditBone::flag, EditBone::next, and EditBone::parent.

Referenced by armature_dissolve_selected_exec(), and ED_armature_ebone_remove().

◆ ED_armature_ebone_select_set()

void ED_armature_ebone_select_set ( EditBone ebone,
bool  select 
)

◆ ED_armature_ebone_selectflag_disable()

void ED_armature_ebone_selectflag_disable ( EditBone ebone,
int  flag 
)

◆ ED_armature_ebone_selectflag_enable()

void ED_armature_ebone_selectflag_enable ( EditBone ebone,
int  flag 
)

◆ ED_armature_ebone_selectflag_get()

int ED_armature_ebone_selectflag_get ( const EditBone ebone)

◆ ED_armature_ebone_selectflag_set()

void ED_armature_ebone_selectflag_set ( EditBone ebone,
int  flag 
)

◆ ED_armature_ebone_to_mat3()

void ED_armature_ebone_to_mat3 ( EditBone ebone,
float  r_mat[3][3] 
)

◆ ED_armature_ebone_to_mat4()

void ED_armature_ebone_to_mat4 ( EditBone ebone,
float  r_mat[4][4] 
)

◆ ED_armature_ebone_transform_mirror_update()

void ED_armature_ebone_transform_mirror_update ( bArmature arm,
EditBone ebo,
bool  check_select 
)

◆ ED_armature_edit_free()

void ED_armature_edit_free ( struct bArmature arm)

◆ ED_armature_edit_refresh_layer_used()

void ED_armature_edit_refresh_layer_used ( bArmature arm)

◆ ED_armature_edit_sync_selection()

void ED_armature_edit_sync_selection ( ListBase edbo)

◆ ED_armature_edit_transform_mirror_update()

void ED_armature_edit_transform_mirror_update ( Object obedit)

◆ ED_armature_edit_validate_active()

void ED_armature_edit_validate_active ( struct bArmature arm)

◆ ED_armature_from_edit()

void ED_armature_from_edit ( Main bmain,
bArmature arm 
)

Definition at line 691 of file armature_utils.c.

References bArmature::act_bone, bArmature::act_edbone, Bone::arm_head, Bone::arm_roll, Bone::arm_tail, armature_finalize_restpose(), EditBone::bbone_next, Bone::bbone_next, EditBone::bbone_next_type, Bone::bbone_next_type, EditBone::bbone_prev, Bone::bbone_prev, EditBone::bbone_prev_type, Bone::bbone_prev_type, BKE_armature_bone_hash_free(), BKE_armature_bone_hash_make(), BKE_armature_bonelist_free(), BKE_pose_rebuild(), BLI_addtail(), BLI_strncpy(), EditBone::bone, bone_free(), bArmature::bonebase, Bone::childbase, copy_v3_v3(), EditBone::curve_in_x, Bone::curve_in_x, EditBone::curve_in_y, Bone::curve_in_y, EditBone::curve_out_x, Bone::curve_out_x, EditBone::curve_out_y, Bone::curve_out_y, Object::data, DEG_id_tag_update(), EditBone::dist, Bone::dist, EditBone::ease1, Bone::ease1, EditBone::ease2, Bone::ease2, bArmature::edbo, ListBase::first, EditBone::flag, Bone::flag, G, G_DEBUG, EditBone::head, bArmature::id, Object::id, IDP_CopyProperty(), EditBone::inherit_scale_mode, Bone::inherit_scale_mode, EditBone::layer, Bone::layer, len_squared_v3v3(), MEM_callocN, EditBone::name, Bone::name, EditBone::next, ID::next, NULL, Main::objects, EditBone::parent, Bone::parent, EditBone::prop, Bone::prop, EditBone::rad_head, Bone::rad_head, EditBone::rad_tail, Bone::rad_tail, EditBone::roll, Bone::roll, EditBone::roll1, Bone::roll1, EditBone::roll2, Bone::roll2, EditBone::scale_in_x, Bone::scale_in_x, EditBone::scale_in_y, Bone::scale_in_y, EditBone::scale_out_x, Bone::scale_out_x, EditBone::scale_out_y, Bone::scale_out_y, EditBone::segments, Bone::segments, square_f(), EditBone::tail, EditBone::temp, EditBone::weight, Bone::weight, EditBone::xwidth, Bone::xwidth, EditBone::zwidth, and Bone::zwidth.

Referenced by apply_armature_pose2bones_exec(), ED_armature_join_objects_exec(), ED_armature_origin_set(), ED_object_editmode_load_free_ex(), ArmatureImporter::make_armatures(), modifier_skin_armature_create(), separate_armature_bones(), and separate_armature_exec().

◆ ED_armature_to_edit()

void ED_armature_to_edit ( bArmature arm)

◆ find_ebone_link()

static EditBone* find_ebone_link ( ListBase edbo,
Bone link 
)
static

Definition at line 580 of file armature_utils.c.

References LISTBASE_FOREACH, and NULL.

Referenced by make_boneList().

◆ make_boneList()

EditBone* make_boneList ( ListBase edbo,
ListBase bones,
struct Bone actBone 
)

◆ make_boneList_recursive()

static EditBone* make_boneList_recursive ( ListBase edbo,
ListBase bones,
EditBone parent,
Bone actBone 
)
static