diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2021-07-16 21:18:30 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2021-07-16 21:18:30 +0300 |
commit | f222bc3ff76ed04ebd93b2de6a3aa60fc407fa4f (patch) | |
tree | c7e036aa8de214350d31548724afc6009c9ad83b /source/blender/editors/gpencil/gpencil_asset.c | |
parent | 2efd744b53230a3cab4c741756c71eaac38a193e (diff) |
GPencil: Add option to reset center of the asset
Diffstat (limited to 'source/blender/editors/gpencil/gpencil_asset.c')
-rw-r--r-- | source/blender/editors/gpencil/gpencil_asset.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/source/blender/editors/gpencil/gpencil_asset.c b/source/blender/editors/gpencil/gpencil_asset.c index 4bf8324d28c..b229f7d2463 100644 --- a/source/blender/editors/gpencil/gpencil_asset.c +++ b/source/blender/editors/gpencil/gpencil_asset.c @@ -174,7 +174,8 @@ static int gpencil_asset_create_exec(bContext *C, wmOperator *op) Object *ob = CTX_data_active_object(C); bGPdata *gpd_src = ob->data; - eGP_AssetModes mode = RNA_enum_get(op->ptr, "mode"); + const eGP_AssetModes mode = RNA_enum_get(op->ptr, "mode"); + const int set_origin = RNA_boolean_get(op->ptr, "set_origin"); /* Create a copy of selected datablock. */ bGPdata *gpd = (bGPdata *)BKE_id_copy(bmain, &gpd_src->id); @@ -214,6 +215,25 @@ static int gpencil_asset_create_exec(bContext *C, wmOperator *op) } } + /* Set origin to bounding box of strokes. */ + if (set_origin) { + float gpcenter[3]; + BKE_gpencil_centroid_3d(gpd, gpcenter); + + LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) { + LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) { + LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { + bGPDspoint *pt; + int i; + for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) { + sub_v3_v3(&pt->x, gpcenter); + } + BKE_gpencil_stroke_boundingbox_calc(gps); + } + } + } + } + if (ED_asset_mark_id(C, &gpd->id)) { } @@ -249,6 +269,11 @@ void GPENCIL_OT_asset_create(wmOperatorType *ot) /* properties */ ot->prop = RNA_def_enum( ot->srna, "mode", mode_types, GP_ASSET_MODE_SELECTED_STROKES, "Mode", ""); + RNA_def_boolean(ot->srna, + "set_origin", + 0, + "Set Origin to Strokes", + "Set origin of the strokes in the center of the bounding box"); } /** \} */ |