Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c')
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c57
1 files changed, 41 insertions, 16 deletions
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 79d4f4dffec..1cca72c3156 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -260,20 +260,46 @@ 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]);
+ BKE_gpencil_stroke_geometry_update(gpd, gps_dst, GP_GEO_UPDATE_DEFAULT);
+ }
+ 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 +309,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);
}
}
@@ -472,7 +496,8 @@ GpencilModifierTypeInfo modifierType_Gpencil_Array = {
/* copyData */ copyData,
- /* deformStroke */ NULL,
+ /* deformPolyline */ NULL,
+ /* deformBezier */ NULL,
/* generateStrokes */ generateStrokes,
/* bakeModifier */ bakeModifier,
/* remapTime */ NULL,