45 switch (obedit->
type) {
80 if (ml_act && (!select_only || (ml_act->
flag &
SELECT))) {
114 mul_m4_v3(ob->object_to_world().ptr(), r_center);
121 mul_m4_v3(ob->object_to_world().ptr(), r_center);
127 copy_v3_v3(r_center, ob->object_to_world().location());
176 for (
uint ob_index = 0; ob_index < objects_len; ob_index++) {
177 Object *ob = objects[ob_index];
183 Object *ob = base->object;
184 if (ob->
parent !=
nullptr) {
194 if (ob_parent_recurse !=
nullptr) {
195 while (ob_parent_recurse !=
nullptr) {
199 ob_parent_recurse = ob_parent_recurse->
parent;
202 if (ob_parent_recurse) {
213 Object *ob = base->object;
218 else if (ob->
parent !=
nullptr) {
238 Object *ob_parent_recurse,
249 if (ob_parent_recurse) {
282 float parent_recurse_obmat_inv[4][4];
283 invert_m4_m4(parent_recurse_obmat_inv, ob_parent_recurse_eval->object_to_world().ptr());
286 float parent_obmat_calc[4][4];
297 float parent_recurse_obmat_inv[4][4];
298 invert_m4_m4(parent_recurse_obmat_inv, ob_parent_recurse_eval->object_to_world().ptr());
301 float obmat_calc[4][4];
306 float obmat_parent_relative_orig[4][4];
307 float obmat_parent_relative_calc[4][4];
308 float obmat_parent_relative_inv_orig[4][4];
312 invert_m4_m4(obmat_parent_relative_inv_orig, obmat_parent_relative_orig);
315 mul_m4_m4m4(dmat, obmat_parent_relative_calc, obmat_parent_relative_inv_orig);
375 if (xf->
xod ==
nullptr) {
380 float imat[4][4], dmat[4][4];
382 mul_m4_m4m4(dmat, imat, ob_eval->object_to_world().ptr());
431 for (
Object *parent = ob->
parent; parent; parent = parent->parent) {
444 for (
uint i = 0; i < objects_len; i++) {
447 for (
uint i = 0; i < objects_len;) {
449 objects[i] = objects[--objects_len];
459 bool is_translation_only;
461 float test_m4_a[4][4], test_m4_b[4][4];
465 is_translation_only =
equals_m4m4(test_m4_a, test_m4_b);
468 if (is_translation_only) {
469 for (
uint i = 0; i < objects_len; i++) {
476 for (
uint i = 0; i < objects_len; i++) {
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_active_if_bonecoll_visible(Object *ob) ATTR_WARN_UNUSED_RESULT
BMEditMesh * BKE_editmesh_from_object(Object *ob)
Return the BMEditMesh for a given object.
BPoint * BKE_lattice_active_point_get(Lattice *lt)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
ListBase * BKE_view_layer_object_bases_get(ViewLayer *view_layer)
General operations, lookup, etc. for blender objects.
void BKE_object_apply_mat4(Object *ob, const float mat[4][4], bool use_compat, bool use_parent)
void BKE_object_to_mat4(const Object *ob, float r_mat[4][4])
void BKE_scene_graph_evaluated_ensure(Depsgraph *depsgraph, Main *bmain)
BLI_INLINE void * BLI_ghashIterator_getKey(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
bool BLI_gset_haskey(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
#define GHASH_ITER(gh_iter_, ghash_)
void * BLI_gset_lookup(const GSet *gs, const void *key) ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
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_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
bool BLI_gset_add(GSet *gs, void *key)
#define LISTBASE_FOREACH(type, var, list)
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void unit_m4(float m[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
bool equals_m4m4(const float mat1[4][4], const float mat2[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
bool invert_m4(float mat[4][4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void zero_v3(float r[3])
MINLINE void add_v3_v3(float r[3], const float a[3])
void DEG_id_tag_update(ID *id, unsigned int flags)
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
Object is a sort of wrapper for general info.
#define BASE_SELECTED(v3d, base)
Read Guarded memory(de)allocation.
void BM_editselection_center(BMEditSelection *ese, float r_center[3])
bool BM_select_history_active_get(BMesh *bm, BMEditSelection *ese)
const Depsgraph * depsgraph
bool ED_curve_active_center(Curve *cu, float center[3])
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
XFormObjectData * data_xform_create(ID *id)
bool calc_active_center(Object *ob, bool select_only, float r_center[3])
void xform_skip_child_container_item_ensure_from_array(XFormObjectSkipChild_Container *xcs, const Scene *scene, ViewLayer *view_layer, Object **objects, uint objects_len)
void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4])
void data_xform_container_destroy(XFormObjectData_Container *xds)
void data_xform_destroy(XFormObjectData *xod_base)
XFormObjectSkipChild_Container * xform_skip_child_container_create()
void data_xform_by_mat4(XFormObjectData *xod, const float mat[4][4])
static void trans_obdata_in_obmode_free_elem(void *xf_p)
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)
bool calc_active_center_for_editmode(Object *obedit, bool select_only, float r_center[3])
bool calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3])
static bool object_parent_in_set(GSet *objects_set, Object *ob)
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()
struct EditBone * act_edbone