diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2022-09-02 17:05:36 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2022-09-02 17:07:37 +0300 |
commit | 426d6b4baad9be74c177f8c3376177135447be4f (patch) | |
tree | 758681a3143b462fa8dbd500f5244d73f1794028 /source/blender/blenkernel/intern/gpencil_geom.cc | |
parent | 633117669bcec0f5320cb88443d12b6661bc4886 (diff) |
GPencil: Simplify Perimeter functions to not use RegionView3D
This makes the api more portable and not depend on
any visual area for background tasks like future modifiers.
Diffstat (limited to 'source/blender/blenkernel/intern/gpencil_geom.cc')
-rw-r--r-- | source/blender/blenkernel/intern/gpencil_geom.cc | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/gpencil_geom.cc b/source/blender/blenkernel/intern/gpencil_geom.cc index ce2e106c664..d833249add8 100644 --- a/source/blender/blenkernel/intern/gpencil_geom.cc +++ b/source/blender/blenkernel/intern/gpencil_geom.cc @@ -3767,7 +3767,7 @@ void BKE_gpencil_stroke_uniform_subdivide(bGPdata *gpd, BKE_gpencil_stroke_geometry_update(gpd, gps); } -void BKE_gpencil_stroke_to_view_space(RegionView3D *rv3d, +void BKE_gpencil_stroke_to_view_space(float viewmat[4][4], bGPDstroke *gps, const float diff_mat[4][4]) { @@ -3776,11 +3776,11 @@ void BKE_gpencil_stroke_to_view_space(RegionView3D *rv3d, /* Point to parent space. */ mul_v3_m4v3(&pt->x, diff_mat, &pt->x); /* point to view space */ - mul_m4_v3(rv3d->viewmat, &pt->x); + mul_m4_v3(viewmat, &pt->x); } } -void BKE_gpencil_stroke_from_view_space(RegionView3D *rv3d, +void BKE_gpencil_stroke_from_view_space(float viewinv[4][4], bGPDstroke *gps, const float diff_mat[4][4]) { @@ -3789,7 +3789,7 @@ void BKE_gpencil_stroke_from_view_space(RegionView3D *rv3d, for (int i = 0; i < gps->totpoints; i++) { bGPDspoint *pt = &gps->points[i]; - mul_v3_m4v3(&pt->x, rv3d->viewinv, &pt->x); + mul_v3_m4v3(&pt->x, viewinv, &pt->x); mul_m4_v3(inverse_diff_mat, &pt->x); } } @@ -4206,7 +4206,7 @@ static ListBase *gpencil_stroke_perimeter_ex(const bGPdata *gpd, return perimeter_list; } -bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d, +bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(float viewmat[4][4], bGPdata *gpd, const bGPDlayer *gpl, bGPDstroke *gps, @@ -4217,6 +4217,10 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d, if (gps->totpoints == 0) { return nullptr; } + + float viewinv[4][4]; + invert_m4_m4(viewinv, viewmat); + /* Duplicate only points and fill data. Weight and Curve are not needed. */ bGPDstroke *gps_temp = (bGPDstroke *)MEM_dupallocN(gps); gps_temp->prev = gps_temp->next = nullptr; @@ -4241,7 +4245,7 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d, pt_dst->uv_rot = 0; } - BKE_gpencil_stroke_to_view_space(rv3d, gps_temp, diff_mat); + BKE_gpencil_stroke_to_view_space(viewmat, gps_temp, diff_mat); int num_perimeter_points = 0; ListBase *perimeter_points = gpencil_stroke_perimeter_ex( gpd, gpl, gps_temp, subdivisions, thickness_chg, &num_perimeter_points); @@ -4264,7 +4268,7 @@ bGPDstroke *BKE_gpencil_stroke_perimeter_from_view(struct RegionView3D *rv3d, pt->flag |= GP_SPOINT_SELECT; } - BKE_gpencil_stroke_from_view_space(rv3d, perimeter_stroke, diff_mat); + BKE_gpencil_stroke_from_view_space(viewinv, perimeter_stroke, diff_mat); /* Free temp data. */ BLI_freelistN(perimeter_points); |