47 const short actcol_test = std::clamp(index + 1, 1, ob->
totcol);
48 if (ob->
actcol != actcol_test) {
65 switch (obedit->
type) {
100 if (ml_act && (!select_only || (ml_act->
flag &
SELECT))) {
117 mul_m4_v3(obedit->world_to_object().ptr(), r_center);
139 mul_m4_v3(ob->object_to_world().ptr(), r_center);
146 mul_m4_v3(ob->object_to_world().ptr(), r_center);
152 copy_v3_v3(r_center, ob->object_to_world().location());
203 Object *ob = base->object;
204 if (ob->
parent !=
nullptr) {
205 if (!objects_in_transdata.
contains(ob)) {
214 if (ob_parent_recurse !=
nullptr) {
215 while (ob_parent_recurse !=
nullptr) {
216 if (objects_in_transdata.
contains(ob_parent_recurse)) {
219 ob_parent_recurse = ob_parent_recurse->
parent;
222 if (ob_parent_recurse) {
233 Object *ob = base->object;
235 if (objects_in_transdata.
contains(ob)) {
238 else if (ob->
parent !=
nullptr) {
240 if (!objects_in_transdata.
contains(ob)) {
257 Object *ob_parent_recurse,
267 if (ob_parent_recurse) {
300 float parent_recurse_obmat_inv[4][4];
301 invert_m4_m4(parent_recurse_obmat_inv, ob_parent_recurse_eval->object_to_world().ptr());
304 float parent_obmat_calc[4][4];
315 float parent_recurse_obmat_inv[4][4];
316 invert_m4_m4(parent_recurse_obmat_inv, ob_parent_recurse_eval->object_to_world().ptr());
319 float obmat_calc[4][4];
324 float obmat_parent_relative_orig[4][4];
325 float obmat_parent_relative_calc[4][4];
326 float obmat_parent_relative_inv_orig[4][4];
330 invert_m4_m4(obmat_parent_relative_inv_orig, obmat_parent_relative_orig);
333 mul_m4_m4m4(dmat, obmat_parent_relative_calc, obmat_parent_relative_inv_orig);
358 std::unique_ptr<XFormObjectData>
xod;
457 for (
uint i = 0;
i < objects_len;) {
459 objects[
i] = objects[--objects_len];
468 bool is_translation_only;
470 float test_m4_a[4][4], test_m4_b[4][4];
474 is_translation_only =
equals_m4m4(test_m4_a, test_m4_b);
477 if (is_translation_only) {
478 for (
uint i = 0;
i < objects_len;
i++) {
485 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
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
#define GHASH_ITER(gh_iter_, ghash_)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
bool BLI_ghash_ensure_p(GHash *gh, void *key, void ***r_val) ATTR_WARN_UNUSED_RESULT
#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 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])
void unit_m4(float m[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)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
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)
BPy_StructRNA * depsgraph
bool contains(const Key &key) const
bool ED_curve_active_center(Curve *cu, float center[3])
void MEM_freeN(void *vmemh)
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)
static bool object_parent_in_set(const Set< Object * > &objects_set, Object *ob)
void object_xform_array_m4(Object **objects, uint objects_len, const float matrix[4][4])
void data_xform_container_destroy(XFormObjectData_Container *xds)
XFormObjectSkipChild_Container * xform_skip_child_container_create()
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM
@ XFORM_OB_SKIP_CHILD_PARENT_IS_XFORM_INDIRECT
@ XFORM_OB_SKIP_CHILD_PARENT_APPLY
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 data_xform_by_mat4(XFormObjectData &xod, const float4x4 &transform)
void object_xform_skip_child_container_destroy(XFormObjectSkipChild_Container *xcs)
std::unique_ptr< XFormObjectData > data_xform_create(ID *id)
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 material_active_index_set(Object *ob, int index)
bool calc_active_center_for_posemode(Object *ob, bool select_only, float r_center[3])
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()
MatBase< float, 4, 4 > float4x4
struct EditBone * act_edbone
const c_style_mat & ptr() const
void WM_main_add_notifier(uint type, void *reference)