Commit: 32de646d3d03852949b5622e1ce978fe8a3ea077
Author: Campbell Barton
Date:   Tue Oct 23 17:55:02 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB32de646d3d03852949b5622e1ce978fe8a3ea077

Multi-Objects: Calculate Transform origin w/ all editmode meshes

D3550 by @Leon95

===================================================================

M       source/blender/editors/transform/transform_gizmo_3d.c

===================================================================

diff --git a/source/blender/editors/transform/transform_gizmo_3d.c 
b/source/blender/editors/transform/transform_gizmo_3d.c
index 921a2090d19..bf5500903a2 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -48,6 +48,7 @@
 #include "BKE_context.h"
 #include "BKE_curve.h"
 #include "BKE_global.h"
+#include "BKE_layer.h"
 #include "BKE_particle.h"
 #include "BKE_pointcache.h"
 #include "BKE_editmesh.h"
@@ -819,19 +820,46 @@ int ED_transform_calc_gizmo_stats(
                                totsel = 1;
                        }
                        else {
-                               BMesh *bm = em->bm;
-                               BMVert *eve;
+                               uint objects_len = 0;
+                               Object **objects = 
BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len);
 
-                               BMIter iter;
+                               float mat_local[4][4];
+                               invert_m4_m4(obedit->imat, obedit->obmat);
 
-                               BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) 
{
-                                       if (!BM_elem_flag_test(eve, 
BM_ELEM_HIDDEN)) {
-                                               if (BM_elem_flag_test(eve, 
BM_ELEM_SELECT)) {
-                                                       totsel++;
-                                                       calc_tw_center(tbounds, 
eve->co);
+                               for (uint ob_index = 0; ob_index < objects_len; 
ob_index++) {
+                                       Object *ob_iter = objects[ob_index];
+                                       BMEditMesh *em_iter = 
BKE_editmesh_from_object(ob_iter);
+                                       BMesh *bm = em_iter->bm;
+
+                                       if (bm->totvertsel == 0) {
+                                               continue;
+                                       }
+
+                                       BMVert *eve;
+                                       BMIter iter;
+
+                                       const bool use_mat_local = (ob_iter != 
obedit);
+                                       if (use_mat_local) {
+                                               mul_m4_m4m4(mat_local, 
obedit->imat, ob_iter->obmat);
+                                       }
+
+                                       BM_ITER_MESH (eve, &iter, bm, 
BM_VERTS_OF_MESH) {
+                                               if (!BM_elem_flag_test(eve, 
BM_ELEM_HIDDEN)) {
+                                                       if 
(BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
+                                                               float co[3];
+                                                               if 
(use_mat_local) {
+                                                                       
mul_v3_m4v3(co, mat_local, eve->co);
+                                                               }
+                                                               else {
+                                                                       
copy_v3_v3(co, eve->co);
+                                                               }
+                                                               
calc_tw_center(tbounds, co);
+                                                               totsel++;
+                                                       }
                                                }
                                        }
                                }
+                               MEM_freeN(objects);
                        }
                } /* end editmesh */
                else if (obedit->type == OB_ARMATURE) {
@@ -853,6 +881,7 @@ int ED_transform_calc_gizmo_stats(
                                protectflag_to_drawflags_ebone(rv3d, ebo);
                        }
                        else {
+                               /* TODO: multi-object support. */
                                for (ebo = arm->edbo->first; ebo; ebo = 
ebo->next) {
                                        if (EBONE_VISIBLE(arm, ebo)) {
                                                if (ebo->flag & BONE_TIPSEL) {
@@ -885,6 +914,7 @@ int ED_transform_calc_gizmo_stats(
                                totsel++;
                        }
                        else {
+                               /* TODO: multi-object support. */
                                Nurb *nu;
                                BezTriple *bezt;
                                BPoint *bp;
@@ -949,6 +979,7 @@ int ED_transform_calc_gizmo_stats(
                                totsel++;
                        }
                        else {
+                               /* TODO: multi-object support. */
                                for (ml = mb->editelems->first; ml; ml = 
ml->next) {
                                        if (ml->flag & SELECT) {
                                                calc_tw_center(tbounds, &ml->x);
@@ -966,6 +997,7 @@ int ED_transform_calc_gizmo_stats(
                                totsel++;
                        }
                        else {
+                               /* TODO: multi-object support. */
                                bp = lt->def;
                                a = lt->pntsu * lt->pntsv * lt->pntsw;
                                while (a--) {

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to