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());
234 td_ext->
quat =
nullptr;
240 td_ext->
rot =
nullptr;
243 td_ext->
quat =
nullptr;
254 td_ext->
rot =
nullptr;
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());
404 Object *ob = base->object;
407 while (parsel !=
nullptr) {
410 if (parbase !=
nullptr) {
418 if (parsel !=
nullptr) {
469 while (parent !=
nullptr) {
488 Object *ob = base->object;
560 Object *ob = base->object;
577 ID *
id =
static_cast<ID *
>(ob->
data);
578 if (!
id || id->
lib) {
608 Object *ob = base->object;
642 Object *ob = base->object;
651 if (ob_parent !=
nullptr) {
652 if (!objects_in_transdata.
contains(ob)) {
653 bool parent_in_transdata =
false;
654 while (ob_parent !=
nullptr) {
655 if (objects_in_transdata.
contains(ob_parent)) {
656 parent_in_transdata =
true;
659 ob_parent = ob_parent->
parent;
661 if (parent_in_transdata) {
674#define BASE_XFORM_INDIRECT(base) \
676 ((base->flag_legacy & BA_WAS_SEL) && (base->flag & BASE_SELECTED) == 0)
692 Object *ob = base->object;
693 if (ob->
parent !=
nullptr) {
701 if (ob_parent_recurse !=
nullptr) {
702 while (ob_parent_recurse !=
nullptr) {
703 if (objects_in_transdata.
contains(ob_parent_recurse)) {
706 ob_parent_recurse = ob_parent_recurse->
parent;
709 if (ob_parent_recurse) {
724 Object *ob = base->object;
729 else if (ob->
parent !=
nullptr) {
741 if (ob_parent_recurse) {
754#undef BASE_XFORM_INDIRECT
794 const bool transforming_more_than_one_object)
803 rna_paths.
append({
"location"});
806 else if (transforming_more_than_one_object &&
809 rna_paths.
append({
"location"});
812 rna_paths.
append({
"location"});
824 rna_paths.
append({rotation_path});
830 rna_paths.
append({
"scale"});
836 rna_paths.
append({rotation_path});
837 rna_paths.
append({
"scale"});
847 const bool transforming_more_than_one_object)
855 tmode, scene, view_layer, ob, rotation_path, transforming_more_than_one_object);
858 rna_paths = {{
"location"}, {rotation_path}, {
"scale"}};
865 bool motionpath_update =
false;
874 for (
int i = 0;
i < tc->data_len;
i++, td++) {
899 if (motionpath_update) {
928 bool motionpath_update =
false;
982 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
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT
@ XFORM_OB_SKIP_CHILD_PARENT_APPLY
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)
XFormObjectData_Container * data_xform_container_create()
ObjectRuntimeHandle * runtime
struct RigidBodyOb * rigidbody_object
struct RigidBodyWorld * rigidbody_world
struct ToolSettings * toolsettings