[Bf-blender-cvs] [9874890ef79] temp-gpencil-interpolate: GPencil: New interpolation set operator

Antonio Vazquez noreply at git.blender.org
Sun Dec 20 12:26:18 CET 2020


Commit: 9874890ef796a25ec6834baa2d8f9da247dd5e35
Author: Antonio Vazquez
Date:   Sat Dec 19 14:18:45 2020 +0100
Branches: temp-gpencil-interpolate
https://developer.blender.org/rB9874890ef796a25ec6834baa2d8f9da247dd5e35

GPencil: New interpolation set operator

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/editors/gpencil/gpencil_intern.h
M	source/blender/editors/gpencil/gpencil_interpolate.c
M	source/blender/editors/gpencil/gpencil_ops.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index d3990851e2c..b6768087c86 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -3169,6 +3169,7 @@ def km_grease_pencil_stroke_edit_mode(params):
         # Interpolation
         ("gpencil.interpolate", {"type": 'E', "value": 'PRESS', "ctrl": True}, None),
         ("gpencil.interpolate_sequence", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True}, None),
+        ("gpencil.interpolate_set", {"type": 'P', "value": 'PRESS', "shift": True}, None),
         # Normal select
         ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value},
          {"properties": [("deselect_all", not params.legacy)]}),
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 577f9678a62..ee2214cf3dc 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1693,6 +1693,8 @@ class VIEW3D_PT_tools_grease_pencil_interpolate(Panel):
 
         col = layout.column(align=True)
         col.label(text="Interpolate Strokes")
+        col.operator("gpencil.interpolate_set", text="Set")
+        col.separator()
         col.operator("gpencil.interpolate", text="Interpolate")
         col.operator("gpencil.interpolate_sequence", text="Sequence")
         col.operator("gpencil.interpolate_reverse", text="Remove Breakdowns")
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index ef8a1176b67..1ea725753e4 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -562,6 +562,7 @@ void gpencil_undo_finish(void);
 void GPENCIL_OT_interpolate(struct wmOperatorType *ot);
 void GPENCIL_OT_interpolate_sequence(struct wmOperatorType *ot);
 void GPENCIL_OT_interpolate_reverse(struct wmOperatorType *ot);
+void GPENCIL_OT_interpolate_set(struct wmOperatorType *ot);
 
 /* primitives ---------- */
 
diff --git a/source/blender/editors/gpencil/gpencil_interpolate.c b/source/blender/editors/gpencil/gpencil_interpolate.c
index 58220cf540c..7d6a71f45bc 100644
--- a/source/blender/editors/gpencil/gpencil_interpolate.c
+++ b/source/blender/editors/gpencil/gpencil_interpolate.c
@@ -89,15 +89,15 @@ static bool gpencil_view3d_poll(bContext *C)
   /* only 3D view */
   ScrArea *area = CTX_wm_area(C);
   if (area && area->spacetype != SPACE_VIEW3D) {
-    return 0;
+    return false;
   }
 
   /* need data to interpolate */
   if (ELEM(NULL, gpd, gpl)) {
-    return 0;
+    return false;
   }
 
-  return 1;
+  return true;
 }
 
 /* Return the stroke related to the selection index, returning the stroke with
@@ -1257,4 +1257,80 @@ void GPENCIL_OT_interpolate_reverse(wmOperatorType *ot)
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
+/* ******************** Set Interpolate range ************************ */
+static bool gpencil_interpolate_set_poll(bContext *C)
+{
+  if (!gpencil_view3d_poll(C)) {
+    return false;
+  }
+
+  bGPdata *gpd = CTX_data_gpencil_data(C);
+  if (!GPENCIL_EDIT_MODE(gpd)) {
+    return false;
+  }
+
+  return true;
+}
+
+static int gpencil_interpolate_set_exec(bContext *C, wmOperator *op)
+{
+  Scene *scene = CTX_data_scene(C);
+  bGPdata *gpd = ED_gpencil_data_get_active(C);
+  bGPDlayer *gpl = CTX_data_active_gpencil_layer(C);
+  bGPDframe *gpf_prv = gpencil_get_previous_keyframe(gpl, CFRA);
+  bGPDframe *gpf_next = gpencil_get_next_keyframe(gpl, CFRA);
+
+  if (ELEM(NULL, gpf_prv, gpf_next)) {
+    BKE_report(
+        op->reports,
+        RPT_ERROR,
+        "Cannot find a pair of grease pencil frames to interpolate between in active layer");
+    return OPERATOR_CANCELLED;
+  }
+
+  /* Enable Multiframe mode. */
+  gpd->flag |= GP_DATA_STROKE_MULTIEDIT;
+
+  /* Go through each layer, and Unselect all frames.*/
+  CTX_DATA_BEGIN (C, bGPDlayer *, gpl, editable_gpencil_layers) {
+    LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) {
+      gpf->flag &= ~GP_FRAME_SELECT;
+    }
+  }
+  CTX_DATA_END;
+
+  /* Go through each layer, and select extreme range frames.*/
+  CTX_DATA_BEGIN (C, bGPDlayer *, gpl, editable_gpencil_layers) {
+    bGPDframe *gpf = BKE_gpencil_layer_frame_find(gpl, gpf_prv->framenum);
+    if (gpf) {
+      gpf->flag |= GP_FRAME_SELECT;
+    }
+    gpf = BKE_gpencil_layer_frame_find(gpl, gpf_next->framenum);
+    if (gpf) {
+      gpf->flag |= GP_FRAME_SELECT;
+    }
+  }
+  CTX_DATA_END;
+
+  /* notifiers */
+  DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
+  WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
+
+  return OPERATOR_FINISHED;
+}
+
+void GPENCIL_OT_interpolate_set(wmOperatorType *ot)
+{
+  /* identifiers */
+  ot->name = "Interpolate Set";
+  ot->idname = "GPENCIL_OT_interpolate_set";
+  ot->description = "Set interpolate range and prepare environment";
+
+  /* callbacks */
+  ot->exec = gpencil_interpolate_set_exec;
+  ot->poll = gpencil_interpolate_set_poll;
+
+  /* flags */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
 /* *************************************************************** */
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index 0a29b83bc4f..42f07a25564 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -688,6 +688,7 @@ void ED_operatortypes_gpencil(void)
   WM_operatortype_append(GPENCIL_OT_interpolate);
   WM_operatortype_append(GPENCIL_OT_interpolate_sequence);
   WM_operatortype_append(GPENCIL_OT_interpolate_reverse);
+  WM_operatortype_append(GPENCIL_OT_interpolate_set);
 
   /* Primitives */
   WM_operatortype_append(GPENCIL_OT_primitive_box);



More information about the Bf-blender-cvs mailing list