Edit Mesh: multi-object support for 'Individual Faces' extrusion (Alt+E)
authorThomas Beck <software@plasmasolutions.de>
Wed, 18 Apr 2018 21:55:27 +0000 (23:55 +0200)
committerThomas Beck <software@plasmasolutions.de>
Wed, 18 Apr 2018 21:55:27 +0000 (23:55 +0200)
source/blender/editors/mesh/editmesh_extrude.c

index ba19025b49640641ff44c4d4a27aa18306f3e32b..6541f56de56f967f2be4997e0d62d7d7f881e60a 100644 (file)
@@ -530,12 +530,23 @@ void MESH_OT_extrude_edges_indiv(wmOperatorType *ot)
 
 static int edbm_extrude_faces_exec(bContext *C, wmOperator *op)
 {
-       Object *obedit = CTX_data_edit_object(C);
-       BMEditMesh *em = BKE_editmesh_from_object(obedit);
+       ViewLayer *view_layer = CTX_data_view_layer(C);
+       uint objects_len = 0;
+       Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len);
+
+       for (uint ob_index = 0; ob_index < objects_len; ob_index++)
+       {
+               Object *obedit = objects[ob_index];
+               BMEditMesh *em = BKE_editmesh_from_object(obedit);
+               if (em->bm->totfacesel == 0) {
+                       continue;
+               }
 
-       edbm_extrude_discrete_faces(em, op, BM_ELEM_SELECT);
+               edbm_extrude_discrete_faces(em, op, BM_ELEM_SELECT);
 
-       EDBM_update_generic(em, true, true);
+               EDBM_update_generic(em, true, true);
+       }
+       MEM_freeN(objects);
 
        return OPERATOR_FINISHED;
 }