70 custom_data->
data =
nullptr;
97 if (tdo->
xds ==
nullptr) {
120 if (tdo->
xcs ==
nullptr) {
146 bool skip_invert =
false;
149 float rot[3][3], scale[3];
205 if (skip_invert ==
false && constinv ==
false) {
219 copy_m4_m4(ob->
runtime->object_to_world.ptr(), object_eval->object_to_world().ptr());
273 if (ob->
parent || constinv) {
274 float obmtx[3][3], totmat[3][3], obinv[3][3];
281 copy_m3_m4(totmat, ob->object_to_world().ptr());
375 Object *ob = base->object;
378 while (parsel !=
nullptr) {
381 if (parbase !=
nullptr) {
389 if (parsel !=
nullptr) {
442 while (parent !=
nullptr) {
461 Object *ob = base->object;
533 Object *ob = base->object;
551 ID *
id =
static_cast<ID *
>(ob->
data);
552 if (!
id || id->
lib) {
582 Object *ob = base->object;
617 Object *ob = base->object;
626 if (ob_parent !=
nullptr) {
627 if (!objects_in_transdata.
contains(ob)) {
628 bool parent_in_transdata =
false;
629 while (ob_parent !=
nullptr) {
630 if (objects_in_transdata.
contains(ob_parent)) {
631 parent_in_transdata =
true;
634 ob_parent = ob_parent->
parent;
636 if (parent_in_transdata) {
649#define BASE_XFORM_INDIRECT(base) \
651 ((base->flag_legacy & BA_WAS_SEL) && (base->flag & BASE_SELECTED) == 0)
667 Object *ob = base->object;
668 if (ob->
parent !=
nullptr) {
676 if (ob_parent_recurse !=
nullptr) {
677 while (ob_parent_recurse !=
nullptr) {
678 if (objects_in_transdata.
contains(ob_parent_recurse)) {
681 ob_parent_recurse = ob_parent_recurse->
parent;
684 if (ob_parent_recurse) {
698 Object *ob = base->object;
703 else if (ob->
parent !=
nullptr) {
714 if (ob_parent_recurse) {
727#undef BASE_XFORM_INDIRECT
767 const bool transforming_more_than_one_object)
776 rna_paths.
append({
"location"});
779 else if (transforming_more_than_one_object &&
782 rna_paths.
append({
"location"});
785 rna_paths.
append({
"location"});
797 rna_paths.
append({rotation_path});
803 rna_paths.
append({
"scale"});
809 rna_paths.
append({rotation_path});
810 rna_paths.
append({
"scale"});
820 const bool transforming_more_than_one_object)
828 tmode, scene, view_layer, ob, rotation_path, transforming_more_than_one_object);
831 rna_paths = {{
"location"}, {rotation_path}, {
"scale"}};
838 bool motionpath_update =
false;
847 for (
int i = 0;
i < tc->data_len;
i++, td++) {
872 if (motionpath_update) {
901 bool motionpath_update =
false;
958 if (motionpath_update) {
Functions and classes to work with Actions.
Functions to insert, delete or modify keyframes.
Helper functions for animation to interact with the RNA system.
#define CTX_DATA_BEGIN(C, Type, instance, member)
#define CTX_DATA_COUNT(C, member)
Main * CTX_data_main(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
constexpr int MAX_DUPLI_RECUR
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
Base * BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
bool BKE_id_is_editable(const Main *bmain, const ID *id)
General operations, lookup, etc. for blender objects.
void BKE_object_mat3_to_rot(Object *ob, float r_mat[3][3], bool use_compat)
bool BKE_object_is_in_editmode(const Object *ob)
void BKE_object_tfm_copy(Object *object_dst, const Object *object_src)
void BKE_object_to_mat3(const Object *ob, float r_mat[3][3])
void BKE_object_where_is_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob, struct Scene *scene, int duplis)
#define PTCACHE_TYPE_PARTICLES
#define PTCACHE_RESET_OUTDATED
int BKE_ptcache_object_reset(struct Scene *scene, struct Object *ob, int mode)
API for Blender-side Rigid Body stuff.
void BKE_rigidbody_aftertrans_update(struct Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle)
bool BKE_rigidbody_check_sim_running(struct RigidBodyWorld *rbw, float ctime)
float BKE_scene_ctime_get(const Scene *scene)
Depsgraph * BKE_scene_ensure_depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer)
void BKE_scene_base_flag_to_objects(const Scene *scene, ViewLayer *view_layer)
GHash * BLI_ghash_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void copy_m3_m3(float m1[3][3], const float m2[3][3])
void unit_m3(float m[3][3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], const float wmat[4][4])
void invert_m3_m3_safe_ortho(float inverse[3][3], const float mat[3][3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
bool orthogonalize_m3_zero_axes(float m[3][3], float unit_length)
void mul_m3_m3m3(float R[3][3], const float A[3][3], const float B[3][3])
void copy_qt_qt(float q[4], const float a[4])
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_graph_relations_update(Depsgraph *graph)
void DEG_foreach_dependent_ID_component(const Depsgraph *depsgraph, const ID *id, eDepsObjectComponentType source_component_type, int flags, DEGForeachIDComponentCallback callback)
@ DEG_FOREACH_COMPONENT_IGNORE_TRANSFORM_SOLVERS
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
@ MOTIONPATH_BAKE_HAS_PATHS
@ BA_TRANSFORM_LOCKED_IN_PLACE
@ BA_SNAP_FIX_DEPS_FIASCO
#define BASE_SELECTED(v3d, base)
#define BASE_SELECTED_EDITABLE(v3d, base)
#define BASE_EDITABLE(v3d, base)
#define BASE_SELECTABLE(v3d, base)
@ AUTOKEY_FLAG_INSERTNEEDED
@ V3D_AROUND_LOCAL_ORIGINS
Read Guarded memory(de)allocation.
void ANIM_deselect_keys_in_animation_editors(bContext *C)
BPy_StructRNA * depsgraph
bool contains(const Key &key) const
void append(const T &value)
void append_non_duplicates(const T &value)
Span< T > as_span() const
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
bool is_autokey_on(const Scene *scene)
bool autokeyframe_cfra_can_key(const Scene *scene, ID *id)
StringRef get_rotation_mode_path(eRotationModes rotation_mode)
void autokeyframe_object(bContext *C, const Scene *scene, Object *ob, Span< RNAPath > rna_paths)
bool is_keying_flag(const Scene *scene, eKeying_Flag flag)
@ OBJECT_PATH_CALC_RANGE_CHANGED
@ OBJECT_PATH_CALC_RANGE_CURRENT_FRAME
void motion_paths_recalc_selected(bContext *C, Scene *scene, eObjectPathCalcRange range)
void data_xform_container_destroy(XFormObjectData_Container *xds)
void base_select(Base *base, eObjectSelect_Mode mode)
XFormObjectSkipChild_Container * xform_skip_child_container_create()
void data_xform_container_update_all(XFormObjectData_Container *xds, Main *bmain, Depsgraph *depsgraph)
void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs)
void object_xform_skip_child_container_item_ensure(XFormObjectSkipChild_Container *xcs, Object *ob, Object *ob_parent_recurse, int mode)
void data_xform_container_item_ensure(XFormObjectData_Container *xds, Object *ob)
void object_xform_skip_child_container_update_all(XFormObjectSkipChild_Container *xcs, Main *bmain, Depsgraph *depsgraph)
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT
@ XFORM_OB_SKIP_CHILD_PARENT_APPLY
XFormObjectData_Container * data_xform_container_create()
ObjectRuntimeHandle * runtime
struct RigidBodyOb * rigidbody_object
struct RigidBodyWorld * rigidbody_world
struct ToolSettings * toolsettings