32 #define DNA_DEPRECATED_ALLOW
111 FCurve *fcurve_dst, *fcurve_src;
120 for (fcurve_src = action_src->
curves.
first; fcurve_src; fcurve_src = fcurve_src->
next) {
131 group_dst && group_src;
132 group_dst = group_dst->
next, group_src = group_src->
next) {
133 if (fcurve_src->
grp == group_src) {
134 fcurve_dst->
grp = group_dst;
256 if (marker->camera) {
284 if (marker->camera) {
294 .struct_size =
sizeof(
bAction),
296 .name_plural =
"actions",
305 .foreach_cache =
NULL,
313 .blend_read_undo_preserve =
NULL,
315 .lib_override_apply_post =
NULL,
361 if ((grp == agrp) && (
select)) {
377 bTheme *btheme =
U.themes.first;
391 else if (grp->
cs.
solid[0] == 0) {
434 if (
ELEM(
NULL, act, agrp, fcurve)) {
474 for (grp = agrp->
prev; grp; grp = grp->
prev) {
521 if (fcurve->grp ==
NULL) {
526 if (last_grp != grp) {
619 if (
ELEM(
NULL, pose, name) || (name[0] ==
'\0')) {
719 if ((pchan->bone) && (pchan->bone == arm->
act_bone) && (pchan->bone->layer & arm->
layer)) {
768 if (!
STREQ(name_flip, name)) {
797 const bool copy_constraints)
846 if (copy_constraints) {
867 if (copy_constraints) {
923 if ((
data->rootbone == 0) || (
data->rootbone > level)) {
971 if (pchan->bbone_prev == unlinked_pchan) {
972 pchan->bbone_prev =
NULL;
974 if (pchan->bbone_next == unlinked_pchan) {
975 pchan->bbone_next =
NULL;
977 if (pchan->custom_tx == unlinked_pchan) {
978 pchan->custom_tx =
NULL;
987 bool (*filter_fn)(
const char *bone_name,
void *
user_data),
996 pchan_next = pchan->
next;
1017 for (ct = targets.
first; ct; ct = ct->
next) {
1018 if (ct->
tar == ob) {
1090 memset(runtime, 0,
sizeof(*runtime));
1097 memset(runtime, 0,
sizeof(*runtime));
1229 if (pchan_from->
prop) {
1271 if (
data->rootbone < 0) {
1286 parchan = parchan->
parent;
1327 name =
DATA_(
"Group");
1416 float min = 999999999.0f,
max = -999999999.0f;
1417 short foundvert = 0, foundmod = 0;
1447 switch (fcm->
type) {
1485 if (foundvert || foundmod) {
1507 char *basePath =
NULL;
1523 if (basePath ==
NULL) {
1531 const char *bPtr =
NULL, *pPtr =
NULL;
1545 bPtr = strstr(fcu->
rna_path, basePath);
1551 bPtr += strlen(basePath);
1561 pPtr = strstr(bPtr,
"location");
1573 pPtr = strstr(bPtr,
"scale");
1585 pPtr = strstr(bPtr,
"rotation");
1598 pPtr = strstr(bPtr,
"bbone_");
1611 pPtr = strstr(bPtr,
"[\"");
1655 pchan->
size[0] = pchan->
size[1] = pchan->
size[2] = 1.0f;
1707 &
LOG,
"Pose copy error, pose to:%p from:%p", (
void *)to, (
void *)
from);
1716 for (pchanfrom =
from->chanbase.first; pchanfrom; pchanfrom = pchanfrom->
next) {
1718 if (pchanto !=
NULL) {
1770 workob->
pose = pose;
1825 const SessionUUID *session_uuid = &pchan->runtime.session_uuid;
1827 printf(
"Pose channel %s does not have UUID generated.\n", pchan->name);
1832 printf(
"Pose channel %s has duplicate UUID generated.\n", pchan->name);
1934 pchan->draw_data =
NULL;
1946 if (!pose || !arm) {
1951 bool rebuild =
false;
1988 pchan->bone->flag |= pchan->selectflag;
void BIK_clear_data(struct bPose *pose)
Blender kernel action and pose functionality.
bool BKE_animdata_action_ensure_idroot(const struct ID *owner, struct bAction *action)
void animviz_free_motionpath(struct bMotionPath *mpath)
struct bMotionPath * animviz_copy_motionpath(const struct bMotionPath *mpath_src)
void animviz_motionpath_blend_write(struct BlendWriter *writer, struct bMotionPath *mpath)
void animviz_motionpath_blend_read_data(struct BlendDataReader *reader, struct bMotionPath *mpath)
void animsys_evaluate_action_group(struct PointerRNA *ptr, struct bAction *act, struct bActionGroup *agrp, const struct AnimationEvalContext *anim_eval_context)
void BKE_animsys_evaluate_animdata(struct ID *id, struct AnimData *adt, const struct AnimationEvalContext *anim_eval_context, eAnimData_Recalc recalc, const bool flush_to_original)
struct Bone * BKE_armature_find_bone_name(struct bArmature *arm, const char *name)
#define PBONE_VISIBLE(arm, bone)
void BKE_constraints_free_ex(struct ListBase *list, bool do_id_user)
void BKE_constraint_blend_write(struct BlendWriter *writer, struct ListBase *conlist)
void BKE_constraint_blend_read_expand(struct BlendExpander *expander, struct ListBase *lb)
void BKE_constraint_blend_read_data(struct BlendDataReader *reader, struct ListBase *lb)
void BKE_constraints_copy(struct ListBase *dst, const struct ListBase *src, bool do_extern)
void BKE_constraints_copy_ex(struct ListBase *dst, const struct ListBase *src, const int flag, bool do_extern)
void BKE_constraint_blend_read_lib(struct BlendLibReader *reader, struct ID *id, struct ListBase *conlist)
const bConstraintTypeInfo * BKE_constraint_typeinfo_get(struct bConstraint *con)
bool BKE_fcurve_calc_range(struct FCurve *fcu, float *min, float *max, const bool do_sel_only, const bool do_min_length)
void BKE_fcurve_blend_write(struct BlendWriter *writer, struct ListBase *fcurves)
void BKE_fcurve_blend_read_data(struct BlendDataReader *reader, struct ListBase *fcurves)
void BKE_fcurve_foreach_id(struct FCurve *fcu, struct LibraryForeachIDData *data)
void BKE_fcurve_blend_read_lib(struct BlendLibReader *reader, struct ID *id, struct ListBase *fcurves)
struct FCurve * BKE_fcurve_copy(const struct FCurve *fcu)
void BKE_fcurve_blend_read_expand(struct BlendExpander *expander, struct ListBase *fcurves)
void BKE_fcurves_free(ListBase *list)
void BKE_previewimg_free(struct PreviewImage **prv)
void BKE_previewimg_id_copy(struct ID *new_id, const struct ID *old_id)
void BKE_previewimg_blend_read(struct BlendDataReader *reader, struct PreviewImage *prv)
void BKE_previewimg_blend_write(struct BlendWriter *writer, const struct PreviewImage *prv)
void IDP_BlendReadExpand(struct BlendExpander *expander, struct IDProperty *prop)
void IDP_FreeProperty_ex(struct IDProperty *prop, const bool do_id_user)
void IDP_BlendWrite(struct BlendWriter *writer, const struct IDProperty *prop)
void IDP_BlendReadLib(struct BlendLibReader *reader, struct IDProperty *prop)
#define IDP_BlendDataRead(reader, prop)
void IDP_FreeProperty(struct IDProperty *prop)
struct IDProperty * IDP_CopyProperty_ex(const struct IDProperty *prop, const int flag) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
struct IDProperty * IDP_CopyProperty(const struct IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
@ IDTYPE_FLAGS_NO_ANIMDATA
void id_us_min(struct ID *id)
@ LIB_ID_CREATE_NO_USER_REFCOUNT
void id_us_plus(struct ID *id)
void BKE_id_blend_write(struct BlendWriter *writer, struct ID *id)
void * BKE_id_new(struct Main *bmain, const short type, const char *name)
#define BKE_LIB_FOREACHID_PROCESS(_data, _id_super, _cb_flag)
General operations, lookup, etc. for blender objects.
void BKE_object_workob_clear(struct Object *workob)
GHash * BLI_ghash_str_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
GSet * BLI_gset_new(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_gset_insert(GSet *gs, void *key)
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void * BLI_gset_lookup(GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
void * BLI_ghash_lookup(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void void void BLI_duplicatelist(struct ListBase *dst, const struct ListBase *src) ATTR_NONNULL(1
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
struct LinkData * BLI_genericNodeN(void *data)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE void rgba_uchar_args_set(unsigned char col[4], const unsigned char r, const unsigned char g, const unsigned char b, const unsigned char a)
void unit_m4(float m[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void unit_axis_angle(float axis[3], float *angle)
void copy_qt_qt(float q[4], const float a[4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void zero_v3(float r[3])
bool BLI_session_uuid_ghash_compare(const void *lhs_v, const void *rhs_v)
SessionUUID BLI_session_uuid_generate(void)
uint BLI_session_uuid_ghash_hash(const void *uuid_v)
bool BLI_session_uuid_is_generated(const SessionUUID *uuid)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
void BLI_string_flip_side_name(char *r_name, const char *from_name, const bool strip_number, const size_t name_len)
bool BLI_uniquename(struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t len)
#define BLO_read_data_address(reader, ptr_p)
struct Main * BLO_read_lib_get_main(BlendLibReader *reader)
void BLO_write_struct_by_name(BlendWriter *writer, const char *struct_name, const void *data_ptr)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
#define BLO_write_struct(writer, struct_name, data_ptr)
void BLO_read_list(BlendDataReader *reader, struct ListBase *list)
bool BLO_read_lib_is_undo(BlendLibReader *reader)
#define BLO_read_id_address(reader, lib, id_ptr_p)
#define BLO_expand(expander, id)
bool BLO_write_is_undo(BlendWriter *writer)
#define BLT_I18NCONTEXT_ID_ACTION
#define CLOG_ERROR(clg_ref,...)
void DEG_id_tag_update_ex(struct Main *bmain, struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
@ ITASC_INITIAL_REITERATION
@ POSE_CONSTRAINTS_NEED_UPDATE_FLAGS
@ POSE_CONSTRAINTS_TIMEDEPEND
@ CONSTRAINT_TYPE_SPLINEIK
@ CONSTRAINT_TYPE_KINEMATIC
@ CONSTRAINT_TYPE_FOLLOWPATH
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
Group RGB to Bright Vector Camera CLAMP
bAction * BKE_action_add(Main *bmain, const char name[])
void BKE_pose_channels_remove(Object *ob, bool(*filter_fn)(const char *bone_name, void *user_data), void *user_data)
void BKE_pose_channels_free(bPose *pose)
void BKE_pose_check_uuids_unique_and_report(const bPose *pose)
static void action_blend_read_expand(BlendExpander *expander, ID *id)
bool BKE_pose_channels_is_valid(const bPose *pose)
bPoseChannel * BKE_pose_channel_active_or_first_selected(struct Object *ob)
void BKE_pose_channel_runtime_reset(bPoseChannel_Runtime *runtime)
void BKE_pose_free_data(bPose *pose)
void BKE_pose_blend_read_expand(BlendExpander *expander, bPose *pose)
bool action_has_motion(const bAction *act)
void BKE_pose_tag_recalc(Main *bmain, bPose *pose)
void BKE_pose_channel_copy_data(bPoseChannel *pchan, const bPoseChannel *pchan_from)
void BKE_pose_remove_group_index(bPose *pose, const int index)
bool BKE_pose_copy_result(bPose *to, bPose *from)
void BKE_pose_remove_group(bPose *pose, bActionGroup *grp, const int index)
static void action_blend_write(BlendWriter *writer, ID *id, const void *id_address)
void set_active_action_group(bAction *act, bActionGroup *agrp, short select)
void BKE_pose_channel_runtime_free(bPoseChannel_Runtime *runtime)
static bool pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan, int level)
void BKE_pose_channel_session_uuid_generate(bPoseChannel *pchan)
void BKE_pose_tag_update_constraint_flags(bPose *pose)
void action_groups_clear_tempflags(bAction *act)
void BKE_pose_ikparam_init(bPose *pose)
static void pose_channels_remove_internal_links(Object *ob, bPoseChannel *unlinked_pchan)
void BKE_pose_free_data_ex(bPose *pose, bool do_id_user)
void BKE_pose_itasc_init(bItasc *itasc)
static void action_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src, const int flag)
static void action_blend_read_data(BlendDataReader *reader, ID *id)
bPoseChannel * BKE_pose_channel_get_mirrored(const bPose *pose, const char *name)
void BKE_pose_copy_pchan_result(bPoseChannel *pchanto, const bPoseChannel *pchanfrom)
void BKE_pose_channel_free(bPoseChannel *pchan)
bActionGroup * BKE_action_group_find_name(bAction *act, const char name[])
const char * BKE_pose_ikparam_get_name(bPose *pose)
void BKE_pose_free_ex(bPose *pose, bool do_id_user)
void BKE_action_groups_reconstruct(bAction *act)
void action_groups_add_channel(bAction *act, bActionGroup *agrp, FCurve *fcurve)
void BKE_pose_copy_data_ex(bPose **dst, const bPose *src, const int flag, const bool copy_constraints)
void BKE_pose_blend_read_lib(BlendLibReader *reader, Object *ob, bPose *pose)
void BKE_pose_channels_hash_make(bPose *pose)
void BKE_pose_free(bPose *pose)
bActionGroup * BKE_pose_add_group(bPose *pose, const char *name)
void action_groups_remove_channel(bAction *act, FCurve *fcu)
bPoseChannel * BKE_pose_channel_active(Object *ob)
bool BKE_pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan)
static void action_foreach_id(ID *id, LibraryForeachIDData *data)
void BKE_pose_channel_free_bbone_cache(bPoseChannel_Runtime *runtime)
bActionGroup * get_active_actiongroup(bAction *act)
void BKE_pose_channel_runtime_reset_on_copy(bPoseChannel_Runtime *runtime)
void BKE_pose_channels_free_ex(bPose *pose, bool do_id_user)
void BKE_pose_blend_write(BlendWriter *writer, bPose *pose, bArmature *arm)
bActionGroup * action_groups_add_new(bAction *act, const char name[])
void BKE_pose_update_constraint_flags(bPose *pose)
static void blend_read_lib_constraint_channels(BlendLibReader *reader, ID *id, ListBase *chanbase)
bPoseChannel * BKE_pose_channel_verify(bPose *pose, const char *name)
static void blend_read_expand_constraint_channels(BlendExpander *expander, ListBase *chanbase)
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
void calc_action_range(const bAction *act, float *start, float *end, short incl_modifiers)
void BKE_pose_blend_read_data(BlendDataReader *reader, bPose *pose)
void BKE_pose_channels_hash_free(bPose *pose)
void action_group_colors_sync(bActionGroup *grp, const bActionGroup *ref_grp)
short action_get_item_transforms(bAction *act, Object *ob, bPoseChannel *pchan, ListBase *curves)
void what_does_obaction(Object *ob, Object *workob, bPose *pose, bAction *act, char groupname[], const AnimationEvalContext *anim_eval_context)
static void action_blend_read_lib(BlendLibReader *reader, ID *id)
void BKE_pose_channel_free_ex(bPoseChannel *pchan, bool do_id_user)
static void action_free_data(struct ID *id)
void BKE_pose_copy_data(bPose **dst, const bPose *src, const bool copy_constraints)
void BKE_pose_rest(bPose *pose, bool selected_bones_only)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
char * RNA_path_from_ID_to_struct(PointerRNA *ptr)
struct bActionGroup * prev
struct bActionGroup * next
struct bConstraintTarget * next
int(* get_constraint_targets)(struct bConstraint *con, struct ListBase *list)
void(* flush_constraint_targets)(struct bConstraint *con, struct ListBase *list, bool no_copy)
struct bConstraint * next
struct Mat4 * bbone_deform_mats
struct DualQuat * bbone_dual_quats
struct Mat4 * bbone_pose_mats
struct Mat4 * bbone_rest_mats
bPoseChannelDrawData * draw_data
struct bPoseChannel * parent
struct bPoseChannel * custom_tx
struct bPoseChannel * bbone_next
struct bPoseChannel * next
struct bPoseChannel_Runtime runtime
struct bPoseChannel * bbone_prev
bPoseChannel ** chan_array
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)