Fix (unreported) several issues when converting MBall to Mesh.
authorBastien Montagne <montagne29@wanadoo.fr>
Sun, 9 Jun 2019 20:56:37 +0000 (22:56 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Sun, 9 Jun 2019 20:59:36 +0000 (22:59 +0200)
Redo panel would be hidden (when 'keep original' was not set), due to
same kind of (un)selected issue as in T65301 (see previous commit).

Further more, not all MBall objects of the family were properly removed.

source/blender/editors/object/object_add.c

index 7d54f12df8f49a17f846c8497edd83eeb11b43e9..4ab4290d8677f07fc9a6dc9994ccfa9ef31a6910 100644 (file)
@@ -2320,6 +2320,7 @@ static int convert_exec(bContext *C, wmOperator *op)
         if (obact->type == OB_MBALL) {
           basact = basen;
         }
+        ED_object_base_select(basen, BA_SELECT);
 
         mballConverted = 1;
       }
@@ -2359,13 +2360,22 @@ static int convert_exec(bContext *C, wmOperator *op)
 
   if (!keep_original) {
     if (mballConverted) {
+      /* We need to remove non-basis MBalls first, otherwise we won't be able to detect them if
+       * their basis happens to be removed first. */
+      FOREACH_SCENE_OBJECT_BEGIN (scene, ob_mball) {
+        if (ob_mball->type == OB_MBALL) {
+          Object *ob_basis = NULL;
+          if (!BKE_mball_is_basis(ob_mball) &&
+              ((ob_basis = BKE_mball_basis_find(scene, ob_mball)) && (ob_basis->flag & OB_DONE))) {
+            ED_object_base_free_and_unlink(bmain, scene, ob_mball);
+          }
+        }
+      }
+      FOREACH_SCENE_OBJECT_END;
       FOREACH_SCENE_OBJECT_BEGIN (scene, ob_mball) {
         if (ob_mball->type == OB_MBALL) {
           if (ob_mball->flag & OB_DONE) {
-            Object *ob_basis = NULL;
-            if (BKE_mball_is_basis(ob_mball) ||
-                ((ob_basis = BKE_mball_basis_find(scene, ob_mball)) &&
-                 (ob_basis->flag & OB_DONE))) {
+            if (BKE_mball_is_basis(ob_mball)) {
               ED_object_base_free_and_unlink(bmain, scene, ob_mball);
             }
           }