[Bf-blender-cvs] [f6cb9433d45] master: GPencil: Refactor Append operators

Antonio Vazquez noreply at git.blender.org
Fri May 14 18:02:09 CEST 2021


Commit: f6cb9433d45a5504ffba17d0971e9b23b3632a54
Author: Antonio  Vazquez
Date:   Fri May 14 17:59:16 2021 +0200
Branches: master
https://developer.blender.org/rBf6cb9433d45a5504ffba17d0971e9b23b3632a54

GPencil: Refactor Append operators

Now the operators work like other areas of Blender using the list of selected objects.

Also, the name has been changed to:

```Layers:
- Copy Layer to Selected
- Copy All Layers to Selected

Materials:
- Copy Material to Selected
- Copy All Materials to Selected```

Reviewed By: mendio, pablovazquez, pepeland

Differential Revision: https://developer.blender.org/D11216

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

M	release/scripts/startup/bl_ui/properties_data_gpencil.py
M	release/scripts/startup/bl_ui/properties_material_gpencil.py
M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/gpencil_curve.c
M	source/blender/blenkernel/intern/gpencil_geom.c
M	source/blender/editors/gpencil/annotate_paint.c
M	source/blender/editors/gpencil/gpencil_add_blank.c
M	source/blender/editors/gpencil/gpencil_add_lineart.c
M	source/blender/editors/gpencil/gpencil_add_monkey.c
M	source/blender/editors/gpencil/gpencil_add_stroke.c
M	source/blender/editors/gpencil/gpencil_convert.c
M	source/blender/editors/gpencil/gpencil_data.c
M	source/blender/editors/gpencil/gpencil_edit.c
M	source/blender/editors/gpencil/gpencil_fill.c
M	source/blender/editors/gpencil/gpencil_intern.h
M	source/blender/editors/gpencil/gpencil_ops.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/gpencil/gpencil_primitive.c
M	source/blender/editors/gpencil/gpencil_trace_ops.c
M	source/blender/editors/space_view3d/view3d_gizmo_ruler.c
M	source/blender/io/gpencil/intern/gpencil_io_import_svg.cc
M	source/blender/makesrna/intern/rna_gpencil.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_gpencil.py b/release/scripts/startup/bl_ui/properties_data_gpencil.py
index d88c9a3502d..e71ea2f31a4 100644
--- a/release/scripts/startup/bl_ui/properties_data_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_data_gpencil.py
@@ -113,8 +113,8 @@ class GPENCIL_MT_layer_context_menu(Menu):
         layout.operator("gpencil.layer_merge", icon='SORT_ASC', text="Merge Down")
 
         layout.separator()
-        layout.menu("VIEW3D_MT_gpencil_append_active_layer")
-        layout.menu("VIEW3D_MT_gpencil_append_all_layers")
+        layout.operator("gpencil.layer_duplicate_object", text="Copy Layer to Selected").only_active=True
+        layout.operator("gpencil.layer_duplicate_object", text="Copy All Layers to Selected").only_active=False
 
 
 class DATA_PT_gpencil_layers(DataButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_material_gpencil.py b/release/scripts/startup/bl_ui/properties_material_gpencil.py
index ed5863b463a..9d099ff2231 100644
--- a/release/scripts/startup/bl_ui/properties_material_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_material_gpencil.py
@@ -46,16 +46,18 @@ class GPENCIL_MT_material_context_menu(Menu):
 
         layout.separator()
 
-        layout.operator("object.material_slot_remove_unused")
-        layout.operator("gpencil.stroke_merge_material", text="Merge Similar")
-
-        layout.separator()
         layout.operator("gpencil.material_to_vertex_color", text="Convert Materials to Vertex Color")
         layout.operator("gpencil.extract_palette_vertex", text="Extract Palette from Vertex Color")
 
         layout.separator()
-        layout.menu("VIEW3D_MT_gpencil_append_active_material")
-        layout.menu("VIEW3D_MT_gpencil_append_all_materials")
+
+        layout.operator("gpencil.materials_copy_to_object", text="Copy Material to Selected").only_active = True
+        layout.operator("gpencil.materials_copy_to_object", text="Copy All Materials to Selected").only_active = False
+
+        layout.separator()
+
+        layout.operator("gpencil.stroke_merge_material", text="Merge Similar")
+        layout.operator("object.material_slot_remove_unused")
 
 
 class GPENCIL_UL_matslots(UIList):
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 4b06a2df3a0..df004b21077 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -4956,75 +4956,6 @@ class VIEW3D_MT_assign_material(Menu):
                                 icon='LAYER_ACTIVE' if mat == mat_active else 'BLANK1').material = mat.name
 
 
-def gpencil_layer_append_menu_items(context, layout, only_active):
-    done = False
-    view_layer = context.view_layer
-    obact = context.active_object
-    gpl = context.active_gpencil_layer
-
-    done = False
-    if gpl is not None:
-        for ob in view_layer.objects:
-            if ob.type == 'GPENCIL' and ob != obact:
-                op = layout.operator("gpencil.layer_duplicate_object", text=ob.name)
-                op.object = ob.name
-                op.only_active = only_active
-                done = True
-
-        if done is False:
-            layout.label(text="No destination object", icon='ERROR')
-    else:
-        layout.label(text="No layer to copy", icon='ERROR')
-
-
-class VIEW3D_MT_gpencil_append_active_layer(Menu):
-    bl_label = "Append Active Layer to Object"
-
-    def draw(self, context):
-        layout = self.layout
-        gpencil_layer_append_menu_items(context, layout, True)
-
-
-class VIEW3D_MT_gpencil_append_all_layers(Menu):
-    bl_label = "Append All Layers to Object"
-
-    def draw(self, context):
-        layout = self.layout
-        gpencil_layer_append_menu_items(context, layout, False)
-
-
-def gpencil_material_menu_items(context, layout, only_selected):
-    done = False
-    view_layer = context.view_layer
-    obact = context.active_object
-
-    for ob in view_layer.objects:
-        if ob.type == 'GPENCIL' and ob != obact:
-            op = layout.operator("gpencil.materials_append_to_object", text=ob.name)
-            op.object = ob.name
-            op.only_selected = only_selected
-            done = True
-
-    if done is False:
-        layout.label(text="No destination object", icon='ERROR')
-
-
-class VIEW3D_MT_gpencil_append_active_material(Menu):
-    bl_label = "Append Active Material to Object"
-
-    def draw(self, context):
-        layout = self.layout
-        gpencil_material_menu_items(context, layout, True)
-
-
-class VIEW3D_MT_gpencil_append_all_materials(Menu):
-    bl_label = "Append All Materials to Object"
-
-    def draw(self, context):
-        layout = self.layout
-        gpencil_material_menu_items(context, layout, False)
-
-
 class VIEW3D_MT_edit_gpencil(Menu):
     bl_label = "Grease Pencil"
 
@@ -7689,10 +7620,6 @@ classes = (
     VIEW3D_MT_weight_gpencil,
     VIEW3D_MT_gpencil_animation,
     VIEW3D_MT_gpencil_simplify,
-    VIEW3D_MT_gpencil_append_active_layer,
-    VIEW3D_MT_gpencil_append_all_layers,
-    VIEW3D_MT_gpencil_append_active_material,
-    VIEW3D_MT_gpencil_append_all_materials,
     VIEW3D_MT_gpencil_autoweights,
     VIEW3D_MT_gpencil_edit_context_menu,
     VIEW3D_MT_edit_curve,
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 4b4886e8bf3..bb145580928 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -108,7 +108,10 @@ void BKE_gpencil_stroke_select_index_reset(struct bGPDstroke *gps);
 
 struct bGPDframe *BKE_gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe);
 struct bGPDframe *BKE_gpencil_frame_addcopy(struct bGPDlayer *gpl, int cframe);
-struct bGPDlayer *BKE_gpencil_layer_addnew(struct bGPdata *gpd, const char *name, bool setactive);
+struct bGPDlayer *BKE_gpencil_layer_addnew(struct bGPdata *gpd,
+                                           const char *name,
+                                           const bool setactive,
+                                           const bool add_to_header);
 struct bGPdata *BKE_gpencil_data_addnew(struct Main *bmain, const char name[]);
 
 struct bGPDframe *BKE_gpencil_frame_duplicate(const struct bGPDframe *gpf_src,
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 9c84d155330..421cb0ac4f1 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -653,9 +653,13 @@ bGPDframe *BKE_gpencil_frame_addcopy(bGPDlayer *gpl, int cframe)
  * \param gpd: Grease pencil data-block
  * \param name: Name of the layer
  * \param setactive: Set as active
+ * \param add_to_header: Used to force the layer added at header
  * \return Pointer to new layer
  */
-bGPDlayer *BKE_gpencil_layer_addnew(bGPdata *gpd, const char *name, bool setactive)
+bGPDlayer *BKE_gpencil_layer_addnew(bGPdata *gpd,
+                                    const char *name,
+                                    const bool setactive,
+                                    const bool add_to_header)
 {
   bGPDlayer *gpl = NULL;
   bGPDlayer *gpl_active = NULL;
@@ -671,14 +675,18 @@ bGPDlayer *BKE_gpencil_layer_addnew(bGPdata *gpd, const char *name, bool setacti
   gpl_active = BKE_gpencil_layer_active_get(gpd);
 
   /* Add to data-block. */
-  if (gpl_active == NULL) {
-    BLI_addtail(&gpd->layers, gpl);
+  if (add_to_header) {
+    BLI_addhead(&gpd->layers, gpl);
   }
   else {
-    /* if active layer, add after that layer */
-    BLI_insertlinkafter(&gpd->layers, gpl_active, gpl);
+    if (gpl_active == NULL) {
+      BLI_addtail(&gpd->layers, gpl);
+    }
+    else {
+      /* if active layer, add after that layer */
+      BLI_insertlinkafter(&gpd->layers, gpl_active, gpl);
+    }
   }
-
   /* annotation vs GP Object behavior is slightly different */
   if (gpd->flag & GP_DATA_ANNOTATIONS) {
     /* set default color of new strokes for this layer */
diff --git a/source/blender/blenkernel/intern/gpencil_curve.c b/source/blender/blenkernel/intern/gpencil_curve.c
index 88d3e917a7a..906d0fb0792 100644
--- a/source/blender/blenkernel/intern/gpencil_curve.c
+++ b/source/blender/blenkernel/intern/gpencil_curve.c
@@ -515,7 +515,7 @@ void BKE_gpencil_convert_curve(Main *bmain,
     if (collection != NULL) {
       gpl = BKE_gpencil_layer_named_get(gpd, collection->id.name + 2);
       if (gpl == NULL) {
-        gpl = BKE_gpencil_layer_addnew(gpd, collection->id.name + 2, true);
+        gpl = BKE_gpencil_layer_addnew(gpd, collection->id.name + 2, true, false);
       }
     }
   }
@@ -523,7 +523,7 @@ void BKE_gpencil_convert_curve(Main *bmain,
   if (gpl == NULL) {
     gpl = BKE_gpencil_layer_active_get(gpd);
     if (gpl == NULL) {
-      gpl = BKE_gpencil_layer_addnew(gpd, DATA_("GP_Layer"), true);
+      gpl = BKE_gpencil_layer_addnew(gpd, DATA_("GP_Layer"), true, false);
     }
   }
 
diff --git a/source/blender/blenkernel/intern/gpencil_geom.c b/source/blender/blenkernel/intern/gpencil_geom.c
index 04403e264a4..501ee0c2014 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.c
+++ b/source/blender/blenkernel/intern/gpencil_geom.c
@@ -2439,7 +2439,7 @@ bool BKE_gpencil_convert_mesh(Main *bmain,
       /* Create Layer and Frame. */
       bGPDlayer *gpl_fill = BKE_gpencil_layer_named_get(gpd, element_name);
       if (gpl_fill == NULL) {
-        gpl_fill = BKE_gpencil_layer_addnew(gpd, element_name, true);
+        gpl_fill = BKE_gpencil_layer_addnew(gpd, element_name, true, false);
       }
       bGPDframe *gpf_fill = BKE_gpencil_layer_frame_get(
           gpl_fill, CFRA + frame_offset, GP_GETFRAME_ADD_NEW);
@@ -2492,7 +2492,7 @@ bool BKE_gpencil_convert_mesh(Main *bmain,
   /* Create Layer and Frame. */
   bGPDlayer *gpl_stroke = BKE_gpencil_layer_named_get(gpd, element_name);
   if (gpl_stroke == NULL) {
-    gpl_stroke = BKE_gpencil_layer_addnew(gpd, element_name, true);
+    gpl_stroke = BKE_gpencil_layer_addnew(gpd, element_name, true, false);
   }
   bGPDframe *gpf_stroke = BKE_gpencil_layer_frame_get(
       gpl_stroke, CFRA + frame_offset, GP_GETFRAME_ADD_NEW);
diff --git a/

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list