[Bf-blender-cvs] [bae4e213042] greasepencil-edit-curve: Merge branch 'master' into greasepencil-edit-curve

Antonio Vazquez noreply at git.blender.org
Mon Oct 12 15:43:22 CEST 2020


Commit: bae4e2130423055dbbd7d2ede5abd3bea8452a8e
Author: Antonio Vazquez
Date:   Mon Oct 12 15:43:01 2020 +0200
Branches: greasepencil-edit-curve
https://developer.blender.org/rBbae4e2130423055dbbd7d2ede5abd3bea8452a8e

Merge branch 'master' into greasepencil-edit-curve

 Conflicts:
	source/blender/editors/gpencil/gpencil_edit.c

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



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

diff --cc source/blender/editors/gpencil/gpencil_edit.c
index b58db7002aa,fa7fe27635a..7303d7487e9
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@@ -3178,70 -2766,21 +3178,70 @@@ static int gpencil_snap_to_grid(bContex
            continue;
          }
  
 -        /* TODO: if entire stroke is selected, offset entire stroke by same amount? */
 -        for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
 -          /* only if point is selected */
 -          if (pt->flag & GP_SPOINT_SELECT) {
 -            /* apply parent transformations */
 -            float fpt[3];
 -            mul_v3_m4v3(fpt, diff_mat, &pt->x);
 +        if (is_curve_edit) {
 +          if (gps->editcurve == NULL) {
 +            continue;
 +          }
 +          float inv_diff_mat[4][4];
 +          invert_m4_m4_safe(inv_diff_mat, diff_mat);
 +
 +          bGPDcurve *gpc = gps->editcurve;
 +          for (int i = 0; i < gpc->tot_curve_points; i++) {
 +            bGPDcurve_point *gpc_pt = &gpc->curve_points[i];
 +            BezTriple *bezt = &gpc_pt->bezt;
 +            if (gpc_pt->flag & GP_CURVE_POINT_SELECT) {
 +              float tmp0[3], tmp1[3], tmp2[3], offset[3];
 +              mul_v3_m4v3(tmp0, diff_mat, bezt->vec[0]);
 +              mul_v3_m4v3(tmp1, diff_mat, bezt->vec[1]);
 +              mul_v3_m4v3(tmp2, diff_mat, bezt->vec[2]);
 +
 +              /* calculate the offset vector */
 +              offset[0] = gridf * floorf(0.5f + tmp1[0] / gridf) - tmp1[0];
 +              offset[1] = gridf * floorf(0.5f + tmp1[1] / gridf) - tmp1[1];
 +              offset[2] = gridf * floorf(0.5f + tmp1[2] / gridf) - tmp1[2];
 +
 +              /* shift bezTriple */
 +              add_v3_v3(bezt->vec[0], offset);
 +              add_v3_v3(bezt->vec[1], offset);
 +              add_v3_v3(bezt->vec[2], offset);
 +
 +              mul_v3_m4v3(tmp0, inv_diff_mat, bezt->vec[0]);
 +              mul_v3_m4v3(tmp1, inv_diff_mat, bezt->vec[1]);
 +              mul_v3_m4v3(tmp2, inv_diff_mat, bezt->vec[2]);
 +              copy_v3_v3(bezt->vec[0], tmp0);
 +              copy_v3_v3(bezt->vec[1], tmp1);
 +              copy_v3_v3(bezt->vec[2], tmp2);
 +
 +              changed = true;
 +            }
 +          }
 +
 +          if (changed) {
 +            BKE_gpencil_editcurve_recalculate_handles(gps);
 +            gps->flag |= GP_STROKE_NEEDS_CURVE_UPDATE;
 +            BKE_gpencil_stroke_geometry_update(gpd, gps);
 +          }
 +        }
 +        else {
-           // TODO: if entire stroke is selected, offset entire stroke by same amount?
++          /* TODO: if entire stroke is selected, offset entire stroke by same amount? */
 +          for (int i = 0; i < gps->totpoints; i++) {
 +            bGPDspoint *pt = &gps->points[i];
 +            /* only if point is selected */
 +            if (pt->flag & GP_SPOINT_SELECT) {
 +              /* apply parent transformations */
 +              float fpt[3];
 +              mul_v3_m4v3(fpt, diff_mat, &pt->x);
 +
 +              fpt[0] = gridf * floorf(0.5f + fpt[0] / gridf);
 +              fpt[1] = gridf * floorf(0.5f + fpt[1] / gridf);
 +              fpt[2] = gridf * floorf(0.5f + fpt[2] / gridf);
  
 -            fpt[0] = gridf * floorf(0.5f + fpt[0] / gridf);
 -            fpt[1] = gridf * floorf(0.5f + fpt[1] / gridf);
 -            fpt[2] = gridf * floorf(0.5f + fpt[2] / gridf);
 +              /* return data */
 +              copy_v3_v3(&pt->x, fpt);
 +              gpencil_apply_parent_point(depsgraph, obact, gpl, pt);
  
 -            /* return data */
 -            copy_v3_v3(&pt->x, fpt);
 -            gpencil_apply_parent_point(depsgraph, obact, gpl, pt);
 +              changed = true;
 +            }
            }
          }
        }



More information about the Bf-blender-cvs mailing list