diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2022-03-07 14:31:36 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2022-03-07 14:36:47 +0300 |
commit | 4ffe2fec169c67655aad6a866be3a949b4062108 (patch) | |
tree | 347e8052ee29561beb70225e65499911df8d494a /source/blender/editors/gpencil | |
parent | 548eabbaa14fb6bcdc927333b7d912eea0c61a59 (diff) |
Python: Add new `annotation_pre` & `annotation_post` handlers
Annotation tool is used as a general mark tool for many add-ons. To be able to detect when an annotation is done is very handy to integrate the annotation tool in add-ons and other studio workflows.
The new callback names are: `annotation_pre` and `annotation_post`
Both callbacks are exposed via the Python module `bpy.app.handlers`
Example use:
```
import bpy
def annotation_starts(gpd):
print("Annotation starts")
def annotation_done(gpd):
print("Annotation done")
bpy.app.handlers.annotation_pre.clear()
bpy.app.handlers.annotation_pre.append(annotation_starts)
bpy.app.handlers.annotation_post.clear()
bpy.app.handlers.annotation_post.append(annotation_done)
```
Note: The handlers are called for any annotation tool, including eraser.
Reviewed By: campbellbarton
Differential Revision: https://developer.blender.org/D14221
Diffstat (limited to 'source/blender/editors/gpencil')
-rw-r--r-- | source/blender/editors/gpencil/annotate_paint.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c index 1a7b034f2f8..b33b676c078 100644 --- a/source/blender/editors/gpencil/annotate_paint.c +++ b/source/blender/editors/gpencil/annotate_paint.c @@ -22,6 +22,7 @@ #include "PIL_time.h" +#include "BKE_callbacks.h" #include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_global.h" @@ -1509,6 +1510,9 @@ static void annotation_paint_initstroke(tGPsdata *p, Scene *scene = p->scene; ToolSettings *ts = scene->toolsettings; + /* Call to the annotation pre handler to notify python the annotation starts. */ + BKE_callback_exec_id_depsgraph(p->bmain, &p->gpd->id, p->depsgraph, BKE_CB_EVT_ANNOTATION_PRE); + /* get active layer (or add a new one if non-existent) */ p->gpl = BKE_gpencil_layer_active_get(p->gpd); if (p->gpl == NULL) { @@ -1675,6 +1679,9 @@ static void annotation_paint_strokeend(tGPsdata *p) annotation_stroke_newfrombuffer(p); } + /* Call to the annotation post handler to notify python the annotation is done. */ + BKE_callback_exec_id_depsgraph(p->bmain, &p->gpd->id, p->depsgraph, BKE_CB_EVT_ANNOTATION_POST); + /* clean up buffer now */ annotation_session_validatebuffer(p); } |