[Bf-blender-cvs] [7395f7a0049] greasepencil-object: GPencil: Fix problem with some linked not selected

Antonio Vazquez noreply at git.blender.org
Tue Apr 7 17:10:35 CEST 2020


Commit: 7395f7a004944b60c3c98f58e6e3b694c96d968e
Author: Antonio Vazquez
Date:   Tue Apr 7 17:10:25 2020 +0200
Branches: greasepencil-object
https://developer.blender.org/rB7395f7a004944b60c3c98f58e6e3b694c96d968e

GPencil: Fix problem with some linked not selected

In some files, the active object is not visible in the selected objects of the view.

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

M	source/blender/editors/gpencil/gpencil_mesh.c

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

diff --git a/source/blender/editors/gpencil/gpencil_mesh.c b/source/blender/editors/gpencil/gpencil_mesh.c
index cb4bdc7cd4b..516d7e5712d 100644
--- a/source/blender/editors/gpencil/gpencil_mesh.c
+++ b/source/blender/editors/gpencil/gpencil_mesh.c
@@ -86,36 +86,56 @@ typedef struct GpBakeOb {
   Object *ob;
 } GpBakeOb;
 
+static void gp_bake_duplilist(Depsgraph *depsgraph, Scene *scene, Object *ob, ListBase *list)
+{
+  GpBakeOb *elem = NULL;
+  ListBase *lb;
+  DupliObject *dob;
+  lb = object_duplilist(depsgraph, scene, ob);
+  for (dob = lb->first; dob; dob = dob->next) {
+    if (dob->ob->type != OB_MESH) {
+      continue;
+    }
+    elem = MEM_callocN(sizeof(GpBakeOb), __func__);
+    elem->ob = dob->ob;
+    BLI_addtail(list, elem);
+  }
+
+  free_object_duplilist(lb);
+}
+
 static void gp_bake_ob_list(bContext *C, Depsgraph *depsgraph, Scene *scene, ListBase *list)
 {
   GpBakeOb *elem = NULL;
-  Object *ob = NULL;
 
-  /* Add selected objects. */
-  CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) {
-    ob = base->object;
+  /* Add active object. In some files this could not be in selected array. */
+  Object *obact = CTX_data_active_object(C);
+
+  if (obact->type == OB_MESH) {
+    elem = MEM_callocN(sizeof(GpBakeOb), __func__);
+    elem->ob = obact;
+    BLI_addtail(list, elem);
+  }
+  /* Add duplilist. */
+  else if (obact->type == OB_EMPTY) {
+    gp_bake_duplilist(depsgraph, scene, obact, list);
+  }
+
+  /* Add other selected objects. */
+  CTX_DATA_BEGIN (C, Object *, ob, selected_objects) {
+    if (ob == obact) {
+      continue;
+    }
     /* Add selected meshes.*/
     if (ob->type == OB_MESH) {
       elem = MEM_callocN(sizeof(GpBakeOb), __func__);
-      elem->ob = base->object;
+      elem->ob = ob;
       BLI_addtail(list, elem);
     }
 
     /* Add duplilist. */
     if (ob->type == OB_EMPTY) {
-      ListBase *lb;
-      DupliObject *dob;
-      lb = object_duplilist(depsgraph, scene, ob);
-      for (dob = lb->first; dob; dob = dob->next) {
-        if (dob->ob->type != OB_MESH) {
-          continue;
-        }
-        elem = MEM_callocN(sizeof(GpBakeOb), __func__);
-        elem->ob = dob->ob;
-        BLI_addtail(list, elem);
-      }
-
-      free_object_duplilist(lb);
+      gp_bake_duplilist(depsgraph, scene, obact, list);
     }
   }
   CTX_DATA_END;
@@ -142,9 +162,9 @@ static int gp_bake_mesh_animation_exec(bContext *C, wmOperator *op)
 
   /* Cannot check this in poll because the active object changes. */
   if (list.first == NULL) {
-    BKE_report(op->reports, RPT_ERROR, "No valid object selected");
+    BKE_report(op->reports, RPT_INFO, "No valid object selected");
     gp_bake_free_ob_list(&list);
-    return OPERATOR_CANCELLED;
+    return OPERATOR_FINISHED;
   }
 
   /* Grab all relevant settings. */



More information about the Bf-blender-cvs mailing list