[Bf-blender-cvs] [6e5080bd643] temp-gpencil-bezier-stroke-type: GPencil: Add Bezier support to Mirror modifier
Antonio Vazquez
noreply at git.blender.org
Tue Mar 30 16:34:41 CEST 2021
Commit: 6e5080bd643c443f11bdbbda6fbb4d70e8e4a785
Author: Antonio Vazquez
Date: Tue Mar 30 16:34:38 2021 +0200
Branches: temp-gpencil-bezier-stroke-type
https://developer.blender.org/rB6e5080bd643c443f11bdbbda6fbb4d70e8e4a785
GPencil: Add Bezier support to Mirror modifier
===================================================================
M source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
index ac51f5139f5..a565fa8b88b 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
@@ -39,6 +39,7 @@
#include "BKE_context.h"
#include "BKE_gpencil.h"
+#include "BKE_gpencil_geom.h"
#include "BKE_gpencil_modifier.h"
#include "BKE_lib_query.h"
#include "BKE_main.h"
@@ -79,8 +80,20 @@ static void update_mirror_local(bGPDstroke *gps, int axis)
float factor[3] = {1.0f, 1.0f, 1.0f};
factor[axis] = -1.0f;
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- mul_v3_v3(&pt->x, factor);
+ if (GPENCIL_STROKE_TYPE_BEZIER(gps)) {
+ bGPDcurve *gpc = gps->editcurve;
+ for (int i = 0; i < gpc->tot_curve_points; i++) {
+ bGPDcurve_point *pt = &gpc->curve_points[i];
+ BezTriple *bezt = &pt->bezt;
+ for (int j = 0; j < 3; j++) {
+ mul_v3_v3(bezt->vec[j], factor);
+ }
+ }
+ }
+ else {
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ mul_v3_v3(&pt->x, factor);
+ }
}
}
@@ -101,8 +114,20 @@ static void update_mirror_object(Object *ob,
invert_m4_m4(itmp, tmp);
mul_m4_series(mtx, itmp, mtx, tmp);
- for (int i = 0; i < gps->totpoints; i++) {
- mul_m4_v3(mtx, &gps->points[i].x);
+ if (GPENCIL_STROKE_TYPE_BEZIER(gps)) {
+ bGPDcurve *gpc = gps->editcurve;
+ for (int i = 0; i < gpc->tot_curve_points; i++) {
+ bGPDcurve_point *pt = &gpc->curve_points[i];
+ BezTriple *bezt = &pt->bezt;
+ for (int j = 0; j < 3; j++) {
+ mul_m4_v3(mtx, bezt->vec[j]);
+ }
+ }
+ }
+ else {
+ for (int i = 0; i < gps->totpoints; i++) {
+ mul_m4_v3(mtx, &gps->points[i].x);
+ }
}
}
@@ -120,6 +145,7 @@ static void generate_geometry(GpencilModifierData *md, Object *ob, bGPDlayer *gp
{
MirrorGpencilModifierData *mmd = (MirrorGpencilModifierData *)md;
bGPDstroke *gps, *gps_new = NULL;
+ bGPdata *gpd = ob->data;
int tot_strokes;
int i;
@@ -145,6 +171,10 @@ static void generate_geometry(GpencilModifierData *md, Object *ob, bGPDlayer *gp
mmd->flag & GP_MIRROR_INVERT_MATERIAL)) {
gps_new = BKE_gpencil_stroke_duplicate(gps, true, true);
update_position(ob, mmd, gps_new, xi);
+ if (GPENCIL_STROKE_TYPE_BEZIER(gps_new)) {
+ gps_new->flag |= GP_STROKE_NEEDS_CURVE_UPDATE;
+ BKE_gpencil_stroke_geometry_update(gpd, gps_new);
+ }
BLI_addtail(&gpf->strokes, gps_new);
}
}
More information about the Bf-blender-cvs
mailing list