[Bf-blender-cvs] [4c0fd967689] temp-gpencil-bezier-stroke-type: GPencil: Change Array modifier to work with Bezier type

Antonio Vazquez noreply at git.blender.org
Mon Mar 15 15:29:07 CET 2021


Commit: 4c0fd9676896d8ed992b4030579516b6f9feec17
Author: Antonio Vazquez
Date:   Mon Mar 15 15:29:01 2021 +0100
Branches: temp-gpencil-bezier-stroke-type
https://developer.blender.org/rB4c0fd9676896d8ed992b4030579516b6f9feec17

GPencil: Change Array modifier to work with Bezier type

===================================================================

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 b8fa88327fc..4edd172046d 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -265,7 +265,29 @@ static void generate_geometry(GpencilModifierData *md,
         /* Duplicate stroke */
         bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(iter->gps, true, true);
 
-        /* Move points */
+        /* 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]);
+            }
+          }
+        }
+
+        /* Polygon type. Do always because point data is used by draw manager. */
         for (int i = 0; i < iter->gps->totpoints; i++) {
           bGPDspoint *pt = &gps_dst->points[i];
           /* Apply randomness matrix. */



More information about the Bf-blender-cvs mailing list