[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