[Bf-blender-cvs] [d1ce52120cd] temp-gpencil-bezier-stroke-type: GPencil: Add Bezier support to Array modifier
Antonio Vazquez
noreply at git.blender.org
Tue Mar 30 15:13:37 CEST 2021
Commit: d1ce52120cd32ea2274387672fb9de2982f03593
Author: Antonio Vazquez
Date: Tue Mar 30 15:13:32 2021 +0200
Branches: temp-gpencil-bezier-stroke-type
https://developer.blender.org/rBd1ce52120cd32ea2274387672fb9de2982f03593
GPencil: Add Bezier support to Array modifier
===================================================================
M source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
===================================================================
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index f6f726f0bf3..41207457b26 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -260,20 +260,47 @@ static void generate_geometry(GpencilModifierData *md,
/* Duplicate stroke */
bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(iter->gps, true, true);
- /* Move points */
- for (int i = 0; i < iter->gps->totpoints; i++) {
- bGPDspoint *pt = &gps_dst->points[i];
- /* Apply randomness matrix. */
- mul_m4_v3(mat_rnd, &pt->x);
-
- /* Apply object local transform (Rot/Scale). */
- if ((mmd->flag & GP_ARRAY_USE_OB_OFFSET) && (mmd->object)) {
- mul_m4_v3(mat, &pt->x);
+ /* Bezier type. */
+ if (GPENCIL_STROKE_TYPE_BEZIER(gps_dst)) {
+ bGPDcurve *gpc = gps_dst->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++) {
+ /* Apply randomness matrix. */
+ mul_m4_v3(mat_rnd, bezt->vec[j]);
+ /* Apply object local transform (Rot/Scale). */
+ if ((mmd->flag & GP_ARRAY_USE_OB_OFFSET) && (mmd->object)) {
+ mul_m4_v3(mat, bezt->vec[j]);
+ }
+ /* Global Rotate and scale. */
+ mul_mat3_m4_v3(current_offset, bezt->vec[j]);
+ /* Global translate. */
+ add_v3_v3(bezt->vec[j], current_offset[3]);
+ }
}
- /* Global Rotate and scale. */
- mul_mat3_m4_v3(current_offset, &pt->x);
- /* Global translate. */
- add_v3_v3(&pt->x, current_offset[3]);
+ gps_dst->flag |= GP_STROKE_NEEDS_CURVE_UPDATE; /* Calc geometry data. */
+ BKE_gpencil_stroke_geometry_update(gpd, gps_dst);
+ }
+ else {
+ /* Polygon type. */
+ for (int i = 0; i < iter->gps->totpoints; i++) {
+ bGPDspoint *pt = &gps_dst->points[i];
+ /* Apply randomness matrix. */
+ mul_m4_v3(mat_rnd, &pt->x);
+
+ /* Apply object local transform (Rot/Scale). */
+ if ((mmd->flag & GP_ARRAY_USE_OB_OFFSET) && (mmd->object)) {
+ mul_m4_v3(mat, &pt->x);
+ }
+ /* Global Rotate and scale. */
+ mul_mat3_m4_v3(current_offset, &pt->x);
+ /* Global translate. */
+ add_v3_v3(&pt->x, current_offset[3]);
+ }
+ /* Calc bounding box. */
+ BKE_gpencil_stroke_boundingbox_calc(gps_dst);
}
/* If replace material, use new one. */
@@ -283,8 +310,6 @@ static void generate_geometry(GpencilModifierData *md,
/* Add new stroke. */
BLI_addhead(&iter->gpf->strokes, gps_dst);
- /* Calc bounding box. */
- BKE_gpencil_stroke_boundingbox_calc(gps_dst);
}
}
More information about the Bf-blender-cvs
mailing list