[Bf-blender-cvs] [efc03eaf594] temp-gpencil-bezier-stroke-type: GPencil: Cleanup armature deform code

Falk David noreply at git.blender.org
Wed Apr 7 08:46:28 CEST 2021


Commit: efc03eaf5947ac3e3c390ce10092187082be5d27
Author: Falk David
Date:   Wed Apr 7 08:44:42 2021 +0200
Branches: temp-gpencil-bezier-stroke-type
https://developer.blender.org/rBefc03eaf5947ac3e3c390ce10092187082be5d27

GPencil: Cleanup armature deform code

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

M	source/blender/blenkernel/intern/armature_deform.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c

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

diff --git a/source/blender/blenkernel/intern/armature_deform.c b/source/blender/blenkernel/intern/armature_deform.c
index 32624c85cc8..94eb046e46e 100644
--- a/source/blender/blenkernel/intern/armature_deform.c
+++ b/source/blender/blenkernel/intern/armature_deform.c
@@ -524,10 +524,9 @@ static void armature_deform_coords_impl(const Object *ob_arm,
       if (GPENCIL_STROKE_TYPE_BEZIER(gps_target)) {
         bGPDcurve *gpc = gps_target->editcurve;
         dverts = gpc->dvert;
-        if (dverts) {
+        if (dverts != NULL) {
           dverts_len = gpc->tot_curve_points * 3;
           temp_dverts = MEM_mallocN(sizeof(MDeformVert) * dverts_len, __func__);
-          dverts = temp_dverts;
           for (i = 0; i < gpc->tot_curve_points; i++) {
             MDeformVert *dvert_src = &gpc->dvert[i];
             int idx = i * 3;
@@ -541,6 +540,7 @@ static void armature_deform_coords_impl(const Object *ob_arm,
               }
             }
           }
+          dverts = temp_dverts;
         }
       }
       else {
@@ -638,7 +638,7 @@ static void armature_deform_coords_impl(const Object *ob_arm,
     MEM_freeN(pchan_from_defbase);
   }
 
-  if (temp_dverts) {
+  if (temp_dverts != NULL) {
     bGPDcurve *gpc = gps_target->editcurve;
     for (int i = 0; i < gpc->tot_curve_points * 3; i++) {
       MDeformVert *dvert = &temp_dverts[i];
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
index 1180e49d09f..085b19192aa 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
@@ -41,6 +41,7 @@
 #include "BKE_armature.h"
 #include "BKE_context.h"
 #include "BKE_gpencil.h"
+#include "BKE_gpencil_curve.h"
 #include "BKE_gpencil_geom.h"
 #include "BKE_gpencil_modifier.h"
 #include "BKE_lib_query.h"
@@ -117,15 +118,14 @@ static void gpencil_deform_bezier_verts(ArmatureGpencilModifierData *mmd,
                                         bGPDstroke *gps)
 {
   bGPDcurve *gpc = gps->editcurve;
-  bGPDcurve_point *pt = gpc->curve_points;
   const int totpoints = gpc->tot_curve_points * 3;
   float(*vert_coords)[3] = MEM_mallocN(sizeof(float[3]) * totpoints, __func__);
-  int i;
 
   BKE_gpencil_dvert_ensure(gps);
 
   /* prepare array of points */
-  for (i = 0; i < gpc->tot_curve_points; i++, pt++) {
+  for (int i = 0; i < gpc->tot_curve_points; i++) {
+    bGPDcurve_point *pt = &gpc->curve_points[i];
     BezTriple *bezt = &pt->bezt;
     int idx = i * 3;
     copy_v3_v3(vert_coords[idx], bezt->vec[0]);
@@ -145,8 +145,8 @@ static void gpencil_deform_bezier_verts(ArmatureGpencilModifierData *mmd,
                                                  gps);
 
   /* Apply deformed coordinates */
-  pt = gpc->curve_points;
-  for (i = 0; i < gpc->tot_curve_points; i++, pt++) {
+  for (int i = 0; i < gpc->tot_curve_points; i++) {
+    bGPDcurve_point *pt = &gpc->curve_points[i];
     BezTriple *bezt = &pt->bezt;
     int idx = i * 3;
     copy_v3_v3(bezt->vec[0], vert_coords[idx]);
@@ -154,6 +154,9 @@ static void gpencil_deform_bezier_verts(ArmatureGpencilModifierData *mmd,
     copy_v3_v3(bezt->vec[2], vert_coords[idx + 2]);
   }
 
+  /* Recalculate the handles. */
+  BKE_gpencil_editcurve_recalculate_handles(gps);
+
   MEM_freeN(vert_coords);
 }



More information about the Bf-blender-cvs mailing list