66 custom_data->
data =
nullptr;
93 if (tdo->
xds ==
nullptr) {
116 if (tdo->
xcs ==
nullptr) {
142 bool skip_invert =
false;
145 float rot[3][3], scale[3];
201 if (skip_invert ==
false && constinv ==
false) {
208 object_eval->
transflag &= ~OB_NO_CONSTRAINTS;
215 copy_m4_m4(ob->
runtime->object_to_world.ptr(), object_eval->object_to_world().ptr());
265 copy_v3_v3(td->center, ob->object_to_world().location());
270 if (ob->
parent || constinv) {
271 float obmtx[3][3], totmat[3][3], obinv[3][3];
278 copy_m3_m4(totmat, ob->object_to_world().ptr());
302 base->object->id.tag &= ~ID_TAG_DOIT;
372 Object *ob = base->object;
375 while (parsel !=
nullptr) {
378 if (parbase !=
nullptr) {
386 if (parsel !=
nullptr) {
393 base->
flag &= ~BASE_SELECTED;
439 while (parent !=
nullptr) {
458 Object *ob = base->object;
529 tdo->
xds = object::data_xform_container_create();
533 Object *ob = base->object;
551 ID *
id =
static_cast<ID *
>(ob->
data);
552 if (!
id || id->lib) {
563 if ((td->flag &
TD_SKIP) == 0) {
564 object::data_xform_container_item_ensure(tdo->
xds, ob);
582 Object *ob = base->object;
605 for (
int i = 0; i < tc->
data_len; i++, td++) {
606 if ((td->flag &
TD_SKIP) == 0) {
617 Object *ob = base->object;
626 if (ob_parent !=
nullptr) {
628 bool parent_in_transdata =
false;
629 while (ob_parent !=
nullptr) {
631 parent_in_transdata =
true;
634 ob_parent = ob_parent->
parent;
636 if (parent_in_transdata) {
637 object::data_xform_container_item_ensure(tdo->
xds, ob);
648 tdo->
xcs = object::xform_skip_child_container_create();
650#define BASE_XFORM_INDIRECT(base) \
652 ((base->flag_legacy & BA_WAS_SEL) && (base->flag & BASE_SELECTED) == 0)
657 for (
int i = 0; i < tc->
data_len; i++, td++) {
658 if ((td->flag &
TD_SKIP) == 0) {
668 Object *ob = base->object;
669 if (ob->
parent !=
nullptr) {
677 if (ob_parent_recurse !=
nullptr) {
678 while (ob_parent_recurse !=
nullptr) {
682 ob_parent_recurse = ob_parent_recurse->
parent;
685 if (ob_parent_recurse) {
686 object::object_xform_skip_child_container_item_ensure(
687 tdo->
xcs, ob, ob_parent_recurse, object::XFORM_OB_SKIP_CHILD_PARENT_APPLY);
699 Object *ob = base->object;
704 else if (ob->
parent !=
nullptr) {
710 object::object_xform_skip_child_container_item_ensure(
711 tdo->
xcs, ob,
nullptr, object::XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM);
717 if (ob_parent_recurse) {
718 object::object_xform_skip_child_container_item_ensure(
722 object::XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT);
731#undef BASE_XFORM_INDIRECT
771 const bool transforming_more_than_one_object)
780 rna_paths.
append({
"location"});
783 else if (transforming_more_than_one_object &&
786 rna_paths.
append({
"location"});
789 rna_paths.
append({
"location"});
801 rna_paths.
append({rotation_path});
807 rna_paths.
append({
"scale"});
813 rna_paths.
append({rotation_path});
814 rna_paths.
append({
"scale"});
824 const bool transforming_more_than_one_object)
833 tmode, scene, view_layer, ob, rotation_path, transforming_more_than_one_object);
836 rna_paths = {{
"location"}, {rotation_path}, {
"scale"}};
844 bool motionpath_update =
false;
853 for (
int i = 0; i < tc->data_len; i++, td++) {
878 if (motionpath_update) {
880 object::motion_paths_recalc_selected(
881 t->
context, t->
scene, object::OBJECT_PATH_CALC_RANGE_CURRENT_FRAME);
908 bool motionpath_update =
false;
912 for (
int i = 0; i < tc->
data_len; i++) {
914 objects.append(td->
ob);
919 for (
int i = 0; i < tc->
data_len; i++) {
970 if (motionpath_update) {
973 object::OBJECT_PATH_CALC_RANGE_CURRENT_FRAME :
974 object::OBJECT_PATH_CALC_RANGE_CHANGED;
975 object::motion_paths_recalc_selected(C, t->
scene, range);
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)
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)
bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
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)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
GSet * BLI_gset_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_gset_add(GSet *gs, void *key)
#define LISTBASE_FOREACH(type, var, list)
void void BLI_freelistN(struct 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
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
@ 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)
void append(const T &value)
void append_non_duplicates(const T &value)
Span< T > as_span() const
const Depsgraph * depsgraph
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void autokeyframe_object(bContext *C, Scene *scene, Object *ob, Span< RNAPath > rna_paths)
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)
bool is_keying_flag(const Scene *scene, eKeying_Flag flag)
void data_xform_container_destroy(XFormObjectData_Container *xds)
void base_select(Base *base, eObjectSelect_Mode mode)
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_update_all(XFormObjectSkipChild_Container *xcs, Main *bmain, Depsgraph *depsgraph)
ObjectRuntimeHandle * runtime
struct RigidBodyOb * rigidbody_object
struct RigidBodyWorld * rigidbody_world
void(* free_cb)(TransInfo *, TransDataContainer *tc, TransCustomData *custom_data)
TransDataExtension * data_ext
float axismtx_gimbal[3][3]
blender::ed::object::XFormObjectData_Container * xds
blender::ed::object::XFormObjectSkipChild_Container * xcs
TransCustomDataContainer custom