diff options
author | Antonio Vazquez <blendergit@gmail.com> | 2020-07-02 20:47:26 +0300 |
---|---|---|
committer | Antonio Vazquez <blendergit@gmail.com> | 2020-07-02 20:47:58 +0300 |
commit | f708aabf90b09d356154a3b86c043f0639b42901 (patch) | |
tree | 6cfe90c752b417614f8c1039c911467270a72bbb | |
parent | 99c50da0b78830d0efcff2069985f96675afdf18 (diff) |
GPencil: Pass gpd datablock to BKE_gpencil_stroke_geometry_update
This include the reverts commit 6beb37b197abb1542bf11b351299541d6d3404ef.
34 files changed, 235 insertions, 182 deletions
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h index 590addfd37a..ffc16dbbaaf 100644 --- a/source/blender/blenkernel/BKE_gpencil.h +++ b/source/blender/blenkernel/BKE_gpencil.h @@ -250,6 +250,7 @@ float BKE_gpencil_multiframe_falloff_calc( void BKE_gpencil_palette_ensure(struct Main *bmain, struct Scene *scene); bool BKE_gpencil_from_image(struct SpaceImage *sima, + struct bGPdata *gpd, struct bGPDframe *gpf, const float size, const bool mask); diff --git a/source/blender/blenkernel/BKE_gpencil_geom.h b/source/blender/blenkernel/BKE_gpencil_geom.h index b79bbf3948f..0b8428bc610 100644 --- a/source/blender/blenkernel/BKE_gpencil_geom.h +++ b/source/blender/blenkernel/BKE_gpencil_geom.h @@ -52,11 +52,17 @@ void BKE_gpencil_stroke_boundingbox_calc(struct bGPDstroke *gps); /* stroke geometry utilities */ void BKE_gpencil_stroke_normal(const struct bGPDstroke *gps, float r_normal[3]); -void BKE_gpencil_stroke_simplify_adaptive(struct bGPDstroke *gps, float factor); -void BKE_gpencil_stroke_simplify_fixed(struct bGPDstroke *gps); -void BKE_gpencil_stroke_subdivide(struct bGPDstroke *gps, int level, int type); -bool BKE_gpencil_stroke_trim(struct bGPDstroke *gps); -void BKE_gpencil_stroke_merge_distance(struct bGPDframe *gpf, +void BKE_gpencil_stroke_simplify_adaptive(struct bGPdata *gpd, + struct bGPDstroke *gps, + float factor); +void BKE_gpencil_stroke_simplify_fixed(struct bGPdata *gpd, struct bGPDstroke *gps); +void BKE_gpencil_stroke_subdivide(struct bGPdata *gpd, + struct bGPDstroke *gps, + int level, + int type); +bool BKE_gpencil_stroke_trim(struct bGPdata *gpd, struct bGPDstroke *gps); +void BKE_gpencil_stroke_merge_distance(struct bGPdata *gpd, + struct bGPDframe *gpf, struct bGPDstroke *gps, const float threshold, const bool use_unselected); @@ -73,24 +79,31 @@ void BKE_gpencil_stroke_2d_flat_ref(const struct bGPDspoint *ref_points, const float scale, int *r_direction); void BKE_gpencil_stroke_fill_triangulate(struct bGPDstroke *gps); -void BKE_gpencil_stroke_geometry_update(struct bGPDstroke *gps); +void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps); void BKE_gpencil_stroke_uv_update(struct bGPDstroke *gps); void BKE_gpencil_transform(struct bGPdata *gpd, float mat[4][4]); -bool BKE_gpencil_stroke_sample(struct bGPDstroke *gps, const float dist, const bool select); +bool BKE_gpencil_stroke_sample(struct bGPdata *gpd, + struct bGPDstroke *gps, + const float dist, + const bool select); bool BKE_gpencil_stroke_smooth(struct bGPDstroke *gps, int i, float inf); bool BKE_gpencil_stroke_smooth_strength(struct bGPDstroke *gps, int point_index, float influence); bool BKE_gpencil_stroke_smooth_thickness(struct bGPDstroke *gps, int point_index, float influence); bool BKE_gpencil_stroke_smooth_uv(struct bGPDstroke *gps, int point_index, float influence); bool BKE_gpencil_stroke_close(struct bGPDstroke *gps); -void BKE_gpencil_dissolve_points(struct bGPDframe *gpf, struct bGPDstroke *gps, const short tag); +void BKE_gpencil_dissolve_points(struct bGPdata *gpd, + struct bGPDframe *gpf, + struct bGPDstroke *gps, + const short tag); bool BKE_gpencil_stroke_stretch(struct bGPDstroke *gps, const float dist, const float tip_length); bool BKE_gpencil_stroke_trim_points(struct bGPDstroke *gps, const int index_from, const int index_to); -bool BKE_gpencil_stroke_split(struct bGPDframe *gpf, +bool BKE_gpencil_stroke_split(struct bGPdata *gpd, + struct bGPDframe *gpf, struct bGPDstroke *gps, const int before_index, struct bGPDstroke **remaining_gps); diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index d9d2200ec99..2d76d4b3da3 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -1869,7 +1869,8 @@ void BKE_gpencil_palette_ensure(Main *bmain, Scene *scene) } } -bool BKE_gpencil_from_image(SpaceImage *sima, bGPDframe *gpf, const float size, const bool mask) +bool BKE_gpencil_from_image( + SpaceImage *sima, bGPdata *gpd, bGPDframe *gpf, const float size, const bool mask) { Image *image = sima->image; bool done = false; @@ -1917,7 +1918,7 @@ bool BKE_gpencil_from_image(SpaceImage *sima, bGPDframe *gpf, const float size, pt->flag |= GP_SPOINT_SELECT; } } - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } diff --git a/source/blender/blenkernel/intern/gpencil_curve.c b/source/blender/blenkernel/intern/gpencil_curve.c index 01377b1b445..e92e4f7b32b 100644 --- a/source/blender/blenkernel/intern/gpencil_curve.c +++ b/source/blender/blenkernel/intern/gpencil_curve.c @@ -175,6 +175,7 @@ static void gpencil_convert_spline(Main *bmain, Nurb *nu) { Curve *cu = (Curve *)ob_cu->data; + bGPdata *gpd = (bGPdata *)ob_gp->data; bool cyclic = true; /* Create Stroke. */ @@ -389,7 +390,7 @@ static void gpencil_convert_spline(Main *bmain, } /* Recalc fill geometry. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } /** @@ -630,7 +631,7 @@ void BKE_gpencil_selected_strokes_editcurve_update(bGPdata *gpd) gps->editcurve->resolution = gpd->editcurve_resolution; gps->editcurve->flag |= GP_CURVE_RECALC_GEOMETRY; } - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } BKE_gpencil_editcurve_stroke_sync_selection(gps, gps->editcurve); } @@ -779,9 +780,8 @@ void BKE_gpencil_editcurve_recalculate_handles(bGPDstroke *gps) bGPDcurve_point *gpc_pt = &gpc->curve_points[i]; if (gpc_pt->flag & GP_CURVE_POINT_SELECT) { bGPDcurve_point *gpc_pt_prev = (i > 0) ? &gpc->curve_points[i - 1] : NULL; - bGPDcurve_point *gpc_pt_next = (i < gpc->tot_curve_points - 1) ? - &gpc->curve_points[i + 1] : - NULL; + bGPDcurve_point *gpc_pt_next = (i < gpc->tot_curve_points - 1) ? &gpc->curve_points[i + 1] : + NULL; BezTriple *bezt = &gpc_pt->bezt; BezTriple *bezt_prev = gpc_pt_prev != NULL ? &gpc_pt_prev->bezt : NULL; diff --git a/source/blender/blenkernel/intern/gpencil_geom.c b/source/blender/blenkernel/intern/gpencil_geom.c index 9cc03d01241..5eedfb00b75 100644 --- a/source/blender/blenkernel/intern/gpencil_geom.c +++ b/source/blender/blenkernel/intern/gpencil_geom.c @@ -381,10 +381,11 @@ static void stroke_interpolate_deform_weights( /** * Resample a stroke + * \param: gpd: datablock * \param gps: Stroke to sample * \param dist: Distance of one segment */ -bool BKE_gpencil_stroke_sample(bGPDstroke *gps, const float dist, const bool select) +bool BKE_gpencil_stroke_sample(bGPdata *gpd, bGPDstroke *gps, const float dist, const bool select) { bGPDspoint *pt = gps->points; bGPDspoint *pt1 = NULL; @@ -482,7 +483,7 @@ bool BKE_gpencil_stroke_sample(bGPDstroke *gps, const float dist, const bool sel gps->totpoints = i; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); return true; } @@ -594,7 +595,8 @@ bool BKE_gpencil_stroke_trim_points(bGPDstroke *gps, const int index_from, const return true; } -bool BKE_gpencil_stroke_split(bGPDframe *gpf, +bool BKE_gpencil_stroke_split(bGPdata *gpd, + bGPDframe *gpf, bGPDstroke *gps, const int before_index, bGPDstroke **remaining_gps) @@ -644,7 +646,7 @@ bool BKE_gpencil_stroke_split(bGPDframe *gpf, * Keep the end point. */ BKE_gpencil_stroke_trim_points(gps, 0, old_count); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); return true; } @@ -1200,7 +1202,7 @@ void BKE_gpencil_stroke_uv_update(bGPDstroke *gps) } /* Recalc the internal geometry caches for fill and uvs. */ -void BKE_gpencil_stroke_geometry_update(bGPDstroke *gps) +void BKE_gpencil_stroke_geometry_update(bGPdata *UNUSED(gpd), bGPDstroke *gps) { if (gps == NULL) { return; @@ -1254,7 +1256,7 @@ float BKE_gpencil_stroke_length(const bGPDstroke *gps, bool use_3d) * Trim stroke to the first intersection or loop * \param gps: Stroke data */ -bool BKE_gpencil_stroke_trim(bGPDstroke *gps) +bool BKE_gpencil_stroke_trim(bGPdata *gpd, bGPDstroke *gps) { if (gps->totpoints < 4) { return false; @@ -1342,7 +1344,7 @@ bool BKE_gpencil_stroke_trim(bGPDstroke *gps) MEM_SAFE_FREE(old_dvert); } - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); return intersect; } @@ -1436,7 +1438,7 @@ bool BKE_gpencil_stroke_close(bGPDstroke *gps) return true; } /* Dissolve points in stroke */ -void BKE_gpencil_dissolve_points(bGPDframe *gpf, bGPDstroke *gps, const short tag) +void BKE_gpencil_dissolve_points(bGPdata *gpd, bGPDframe *gpf, bGPDstroke *gps, const short tag) { bGPDspoint *pt; MDeformVert *dvert = NULL; @@ -1512,7 +1514,7 @@ void BKE_gpencil_dissolve_points(bGPDframe *gpf, bGPDstroke *gps, const short ta gps->totpoints = tot; /* triangles cache needs to be recalculated */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } @@ -1522,12 +1524,14 @@ void BKE_gpencil_dissolve_points(bGPDframe *gpf, bGPDstroke *gps, const short ta * Reduce a series of points when the distance is below a threshold. * Special case for first and last points (both are keeped) for other points, * the merge point always is at first point. + * \param: gpd: Datablock * \param gpf: Grease Pencil frame * \param gps: Grease Pencil stroke * \param threshold: Distance between points * \param use_unselected: Set to true to analyze all stroke and not only selected points */ -void BKE_gpencil_stroke_merge_distance(bGPDframe *gpf, +void BKE_gpencil_stroke_merge_distance(bGPdata *gpd, + bGPDframe *gpf, bGPDstroke *gps, const float threshold, const bool use_unselected) @@ -1592,11 +1596,11 @@ void BKE_gpencil_stroke_merge_distance(bGPDframe *gpf, /* Dissolve tagged points */ if (tagged) { - BKE_gpencil_dissolve_points(gpf, gps, GP_SPOINT_TAG); + BKE_gpencil_dissolve_points(gpd, gpf, gps, GP_SPOINT_TAG); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } typedef struct GpEdge { @@ -1685,6 +1689,7 @@ static int gpencil_walk_edge(GHash *v_table, } static void gpencil_generate_edgeloops(Object *ob, + bGPdata *gpd, bGPDframe *gpf_stroke, const float angle, const int thickness, @@ -1809,7 +1814,7 @@ static void gpencil_generate_edgeloops(Object *ob, pt->strength = 1.0f; } - BKE_gpencil_stroke_geometry_update(gps_stroke); + BKE_gpencil_stroke_geometry_update(gpd, gps_stroke); } /* Free memory. */ @@ -1973,7 +1978,7 @@ void BKE_gpencil_convert_mesh(Main *bmain, pt->strength = 1.0f; } - BKE_gpencil_stroke_geometry_update(gps_fill); + BKE_gpencil_stroke_geometry_update(gpd, gps_fill); } } } @@ -1985,7 +1990,8 @@ void BKE_gpencil_convert_mesh(Main *bmain, } bGPDframe *gpf_stroke = BKE_gpencil_layer_frame_get( gpl_stroke, CFRA + frame_offset, GP_GETFRAME_ADD_NEW); - gpencil_generate_edgeloops(ob_eval, gpf_stroke, angle, thickness, offset, matrix, use_seams); + gpencil_generate_edgeloops( + ob_eval, gpd, gpf_stroke, angle, thickness, offset, matrix, use_seams); /* Tag for recalculation */ DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE); @@ -2019,18 +2025,19 @@ void BKE_gpencil_transform(bGPdata *gpd, float mat[4][4]) } /* Distortion may mean we need to re-triangulate. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } } } /** * Subdivide a stroke + * \param gpd Datablock * \param gps Stroke * \param level Level of subdivision * \param type Type of subdivision */ -void BKE_gpencil_stroke_subdivide(bGPDstroke *gps, int level, int type) +void BKE_gpencil_stroke_subdivide(bGPdata *gpd, bGPDstroke *gps, int level, int type) { bGPDspoint *temp_points; MDeformVert *temp_dverts = NULL; @@ -2139,7 +2146,7 @@ void BKE_gpencil_stroke_subdivide(bGPDstroke *gps, int level, int type) } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } /* calculate stroke normal using some points */ @@ -2181,7 +2188,7 @@ void BKE_gpencil_stroke_normal(const bGPDstroke *gps, float r_normal[3]) * Ramer - Douglas - Peucker algorithm * by http ://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm */ -void BKE_gpencil_stroke_simplify_adaptive(bGPDstroke *gps, float epsilon) +void BKE_gpencil_stroke_simplify_adaptive(bGPdata *gpd, bGPDstroke *gps, float epsilon) { bGPDspoint *old_points = MEM_dupallocN(gps->points); int totpoints = gps->totpoints; @@ -2278,7 +2285,7 @@ void BKE_gpencil_stroke_simplify_adaptive(bGPDstroke *gps, float epsilon) gps->totpoints = j; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); MEM_SAFE_FREE(old_points); MEM_SAFE_FREE(old_dvert); @@ -2286,7 +2293,7 @@ void BKE_gpencil_stroke_simplify_adaptive(bGPDstroke *gps, float epsilon) } /* Simplify alternate vertex of stroke except extremes */ -void BKE_gpencil_stroke_simplify_fixed(bGPDstroke *gps) +void BKE_gpencil_stroke_simplify_fixed(bGPdata *gpd, bGPDstroke *gps) { if (gps->totpoints < 5) { return; @@ -2340,7 +2347,7 @@ void BKE_gpencil_stroke_simplify_fixed(bGPDstroke *gps) gps->totpoints = j; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); MEM_SAFE_FREE(old_points); MEM_SAFE_FREE(old_dvert); diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index 111ac728cc3..86a4cfd3805 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -4864,7 +4864,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) gps->fill_opacity_fac = 1.0f; /* Calc geometry data because in old versions this data was not saved. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); srgb_to_linearrgb_v4(gps->vert_color_fill, gps->vert_color_fill); int i; diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c index 9d80a75b959..cfaed426d77 100644 --- a/source/blender/editors/gpencil/annotate_paint.c +++ b/source/blender/editors/gpencil/annotate_paint.c @@ -1202,7 +1202,7 @@ static void annotation_stroke_eraser_dostroke(tGPsdata *p, /* Second Pass: Remove any points that are tagged */ if (do_cull) { - gpencil_stroke_delete_tagged_points(gpf, gps, gps->next, GP_SPOINT_TAG, false, 0); + gpencil_stroke_delete_tagged_points(p->gpd, gpf, gps, gps->next, GP_SPOINT_TAG, false, 0); } } } diff --git a/source/blender/editors/gpencil/gpencil_add_monkey.c b/source/blender/editors/gpencil/gpencil_add_monkey.c index 23ca5241866..315b3c281da 100644 --- a/source/blender/editors/gpencil/gpencil_add_monkey.c +++ b/source/blender/editors/gpencil/gpencil_add_monkey.c @@ -861,115 +861,115 @@ void ED_gpencil_create_monkey(bContext *C, Object *ob, float mat[4][4]) /* generate strokes */ gps = BKE_gpencil_stroke_add(frameFills, color_Skin, 270, 75, false); BKE_gpencil_stroke_add_points(gps, data0, 270, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data1, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 18, 60, false); BKE_gpencil_stroke_add_points(gps, data2, 18, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 64, 60, false); BKE_gpencil_stroke_add_points(gps, data3, 64, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data4, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 64, 60, false); BKE_gpencil_stroke_add_points(gps, data5, 64, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data6, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Light, 18, 40, false); BKE_gpencil_stroke_add_points(gps, data7, 18, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Eyes, 49, 60, false); BKE_gpencil_stroke_add_points(gps, data8, 49, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data9, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Eyes, 49, 60, false); BKE_gpencil_stroke_add_points(gps, data10, 49, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 18, 40, false); BKE_gpencil_stroke_add_points(gps, data11, 18, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameFills, color_Skin_Shadow, 18, 40, false); BKE_gpencil_stroke_add_points(gps, data12, 18, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data13, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data14, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 65, 60, false); BKE_gpencil_stroke_add_points(gps, data15, 65, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 34, 60, false); BKE_gpencil_stroke_add_points(gps, data16, 34, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data17, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 40, false); BKE_gpencil_stroke_add_points(gps, data18, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 34, 40, false); BKE_gpencil_stroke_add_points(gps, data19, 34, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data20, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 64, 60, false); BKE_gpencil_stroke_add_points(gps, data21, 64, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Pupils, 26, 60, false); BKE_gpencil_stroke_add_points(gps, data22, 26, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Pupils, 26, 60, false); BKE_gpencil_stroke_add_points(gps, data23, 26, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data24, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 18, 40, false); BKE_gpencil_stroke_add_points(gps, data25, 18, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 18, 40, false); BKE_gpencil_stroke_add_points(gps, data26, 18, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps = BKE_gpencil_stroke_add(frameLines, color_Black, 33, 60, false); BKE_gpencil_stroke_add_points(gps, data27, 33, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); /* update depsgraph */ DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY); diff --git a/source/blender/editors/gpencil/gpencil_add_stroke.c b/source/blender/editors/gpencil/gpencil_add_stroke.c index 39a2d594c13..f26fd936d40 100644 --- a/source/blender/editors/gpencil/gpencil_add_stroke.c +++ b/source/blender/editors/gpencil/gpencil_add_stroke.c @@ -249,7 +249,7 @@ void ED_gpencil_create_stroke(bContext *C, Object *ob, float mat[4][4]) /* generate stroke */ gps = BKE_gpencil_stroke_add(frame_lines, color_black, 175, 75, false); BKE_gpencil_stroke_add_points(gps, data0, 175, mat); - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); /* update depsgraph */ DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY); diff --git a/source/blender/editors/gpencil/gpencil_convert.c b/source/blender/editors/gpencil/gpencil_convert.c index e111ce44bc4..f7d7627b850 100644 --- a/source/blender/editors/gpencil/gpencil_convert.c +++ b/source/blender/editors/gpencil/gpencil_convert.c @@ -1814,12 +1814,12 @@ static int image_to_gpencil_exec(bContext *C, wmOperator *op) bGPdata *gpd = (bGPdata *)ob->data; bGPDlayer *gpl = BKE_gpencil_layer_addnew(gpd, "Image Layer", true); bGPDframe *gpf = BKE_gpencil_frame_addnew(gpl, CFRA); - done = BKE_gpencil_from_image(sima, gpf, size, is_mask); + done = BKE_gpencil_from_image(sima, gpd, gpf, size, is_mask); if (done) { /* Delete any selected point. */ LISTBASE_FOREACH_MUTABLE (bGPDstroke *, gps, &gpf->strokes) { - gpencil_stroke_delete_tagged_points(gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); + gpencil_stroke_delete_tagged_points(gpd, gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); } BKE_reportf(op->reports, RPT_INFO, "Object created"); diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 78e2812fdef..af1d96c7a85 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -802,9 +802,10 @@ void GPENCIL_OT_selection_opacity_toggle(wmOperatorType *ot) * \{ */ /* Make copies of selected point segments in a selected stroke */ -static void gpencil_duplicate_points(const bGPDstroke *gps, - ListBase *new_strokes, - const char *layername) +static void gpencil_duplicate_points(bGPdata *gpd, + const bGPDstroke *gps, + ListBase *new_strokes, + const char *layername) { bGPDspoint *pt; int i; @@ -866,7 +867,7 @@ static void gpencil_duplicate_points(const bGPDstroke *gps, } } - BKE_gpencil_stroke_geometry_update(gpsd); + BKE_gpencil_stroke_geometry_update(gpd, gpsd); /* add to temp buffer */ gpsd->next = gpsd->prev = NULL; @@ -925,7 +926,7 @@ static int gpencil_duplicate_exec(bContext *C, wmOperator *op) BLI_strncpy(gpsd->runtime.tmp_layerinfo, gpl->info, sizeof(gpsd->runtime.tmp_layerinfo)); /* Initialize triangle information. */ - BKE_gpencil_stroke_geometry_update(gpsd); + BKE_gpencil_stroke_geometry_update(gpd, gpsd); /* add to temp buffer */ gpsd->next = gpsd->prev = NULL; @@ -933,7 +934,7 @@ static int gpencil_duplicate_exec(bContext *C, wmOperator *op) } else { /* delegate to a helper, as there's too much to fit in here (for copying subsets)... */ - gpencil_duplicate_points(gps, &new_strokes, gpl->info); + gpencil_duplicate_points(gpd, gps, &new_strokes, gpl->info); } /* deselect original stroke, or else the originals get moved too @@ -1017,7 +1018,7 @@ static void gpencil_copy_move_point(bGPDstroke *gps, } } -static void gpencil_add_move_points(bGPDframe *gpf, bGPDstroke *gps) +static void gpencil_add_move_points(bGPdata *gpd, bGPDframe *gpf, bGPDstroke *gps) { bGPDspoint *temp_points = NULL; MDeformVert *temp_dverts = NULL; @@ -1056,8 +1057,8 @@ static void gpencil_add_move_points(bGPDframe *gpf, bGPDstroke *gps) gpencil_copy_move_point(gps_new, gps->points, gps->dvert, i, 0, true); /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); - BKE_gpencil_stroke_geometry_update(gps_new); + BKE_gpencil_stroke_geometry_update(gpd, gps); + BKE_gpencil_stroke_geometry_update(gpd, gps_new); /* deselect orinal point */ pt->flag &= ~GP_SPOINT_SELECT; @@ -1127,7 +1128,7 @@ static void gpencil_add_move_points(bGPDframe *gpf, bGPDstroke *gps) } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); MEM_SAFE_FREE(temp_points); MEM_SAFE_FREE(temp_dverts); @@ -1167,7 +1168,7 @@ static int gpencil_extrude_exec(bContext *C, wmOperator *op) } if (gps->flag & GP_STROKE_SELECT) { - gpencil_add_move_points(gpf, gps); + gpencil_add_move_points(gpd, gpf, gps); } } /* if not multiedit, exit loop*/ @@ -1386,7 +1387,7 @@ static int gpencil_strokes_copy_exec(bContext *C, wmOperator *op) } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gpsd); + BKE_gpencil_stroke_geometry_update(gpd, gpsd); /* add to temp buffer */ gpsd->next = gpsd->prev = NULL; @@ -1394,7 +1395,7 @@ static int gpencil_strokes_copy_exec(bContext *C, wmOperator *op) } else { /* delegate to a helper, as there's too much to fit in here (for copying subsets)... */ - gpencil_duplicate_points(gps, &gpencil_strokes_copypastebuf, gpl->info); + gpencil_duplicate_points(gpd, gps, &gpencil_strokes_copypastebuf, gpl->info); } } } @@ -1565,7 +1566,7 @@ static int gpencil_strokes_paste_exec(bContext *C, wmOperator *op) new_stroke->next = new_stroke->prev = NULL; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(new_stroke); + BKE_gpencil_stroke_geometry_update(gpd, new_stroke); if (on_back) { BLI_addhead(&gpf->strokes, new_stroke); @@ -2249,7 +2250,7 @@ static int gpencil_dissolve_selected_points(bContext *C, eGP_DissolveMode mode) gps->totpoints = tot; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); /* deselect the stroke, since none of its selected points will still be selected */ gps->flag &= ~GP_STROKE_SELECT; @@ -2277,16 +2278,17 @@ static int gpencil_dissolve_selected_points(bContext *C, eGP_DissolveMode mode) /* Temp data for storing information about an "island" of points * that should be kept when splitting up a stroke. Used in: - * gp_stroke_delete_tagged_points() + * gpencil_stroke_delete_tagged_points() */ typedef struct tGPDeleteIsland { int start_idx; int end_idx; } tGPDeleteIsland; -static void gpencil_stroke_join_islands(bGPDframe *gpf, - bGPDstroke *gps_first, - bGPDstroke *gps_last) +static void gpencil_stroke_join_islands(bGPdata *gpd, + bGPDframe *gpf, + bGPDstroke *gps_first, + bGPDstroke *gps_last) { bGPDspoint *pt = NULL; bGPDspoint *pt_final = NULL; @@ -2361,7 +2363,7 @@ static void gpencil_stroke_join_islands(bGPDframe *gpf, /* add new stroke at head */ BLI_addhead(&gpf->strokes, join_stroke); /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(join_stroke); + BKE_gpencil_stroke_geometry_update(gpd, join_stroke); /* remove first stroke */ BLI_remlink(&gpf->strokes, gps_first); @@ -2386,7 +2388,8 @@ static void gpencil_stroke_join_islands(bGPDframe *gpf, * 2) Each island gets converted to a new stroke * If the number of points is <= limit, the stroke is deleted */ -void gpencil_stroke_delete_tagged_points(bGPDframe *gpf, +void gpencil_stroke_delete_tagged_points(bGPdata *gpd, + bGPDframe *gpf, bGPDstroke *gps, bGPDstroke *next_stroke, int tag_flags, @@ -2509,7 +2512,7 @@ void gpencil_stroke_delete_tagged_points(bGPDframe *gpf, } else { /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(new_stroke); + BKE_gpencil_stroke_geometry_update(gpd, new_stroke); if (next_stroke) { BLI_insertlinkbefore(&gpf->strokes, next_stroke, new_stroke); @@ -2521,7 +2524,7 @@ void gpencil_stroke_delete_tagged_points(bGPDframe *gpf, } /* if cyclic, need to join last stroke with first stroke */ if ((is_cyclic) && (gps_first != NULL) && (gps_first != new_stroke)) { - gpencil_stroke_join_islands(gpf, gps_first, new_stroke); + gpencil_stroke_join_islands(gpd, gpf, gps_first, new_stroke); } } @@ -2568,7 +2571,8 @@ static int gpencil_delete_selected_points(bContext *C) gps->flag &= ~GP_STROKE_SELECT; /* delete unwanted points by splitting stroke into several smaller ones */ - gpencil_stroke_delete_tagged_points(gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); + gpencil_stroke_delete_tagged_points( + gpd, gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); changed = true; } @@ -3502,7 +3506,7 @@ static int gpencil_stroke_join_exec(bContext *C, wmOperator *op) if (type == GP_STROKE_JOIN) { if (stroke_a) { /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(new_stroke); + BKE_gpencil_stroke_geometry_update(gpd, new_stroke); BLI_insertlinkbefore(&gpf_a->strokes, stroke_a, new_stroke); BLI_remlink(&gpf->strokes, stroke_a); @@ -3529,7 +3533,7 @@ static int gpencil_stroke_join_exec(bContext *C, wmOperator *op) activegpl->actframe = BKE_gpencil_frame_addnew(activegpl, gpf_a->framenum); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(new_stroke); + BKE_gpencil_stroke_geometry_update(gpd, new_stroke); BLI_addtail(&activegpl->actframe->strokes, new_stroke); } @@ -3754,7 +3758,7 @@ static int gpencil_recalc_geometry_exec(bContext *C, wmOperator *UNUSED(op)) LISTBASE_FOREACH (bGPDlayer *, gpl, &gpd->layers) { LISTBASE_FOREACH (bGPDframe *, gpf, &gpl->frames) { LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } } @@ -3964,7 +3968,7 @@ static int gpencil_stroke_subdivide_exec(bContext *C, wmOperator *op) } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } GP_EDITABLE_STROKES_END(gpstroke_iter); @@ -4032,7 +4036,7 @@ static int gpencil_stroke_simplify_exec(bContext *C, wmOperator *op) GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) { if (gps->flag & GP_STROKE_SELECT) { /* simplify stroke using Ramer-Douglas-Peucker algorithm */ - BKE_gpencil_stroke_simplify_adaptive(gps, factor); + BKE_gpencil_stroke_simplify_adaptive(gpd, gps, factor); } } GP_EDITABLE_STROKES_END(gpstroke_iter); @@ -4081,7 +4085,7 @@ static int gpencil_stroke_simplify_fixed_exec(bContext *C, wmOperator *op) GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) { if (gps->flag & GP_STROKE_SELECT) { for (int i = 0; i < steps; i++) { - BKE_gpencil_stroke_simplify_fixed(gps); + BKE_gpencil_stroke_simplify_fixed(gpd, gps); } } } @@ -4131,7 +4135,7 @@ static int gpencil_stroke_sample_exec(bContext *C, wmOperator *op) /* Go through each editable + selected stroke */ GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) { if (gps->flag & GP_STROKE_SELECT) { - BKE_gpencil_stroke_sample(gps, length, true); + BKE_gpencil_stroke_sample(gpd, gps, length, true); } } GP_EDITABLE_STROKES_END(gpstroke_iter); @@ -4201,7 +4205,7 @@ static int gpencil_stroke_trim_exec(bContext *C, wmOperator *UNUSED(op)) } if (gps->flag & GP_STROKE_SELECT) { - BKE_gpencil_stroke_trim(gps); + BKE_gpencil_stroke_trim(gpd, gps); } } /* if not multiedit, exit loop*/ @@ -4355,11 +4359,11 @@ static int gpencil_stroke_separate_exec(bContext *C, wmOperator *op) /* delete selected points from destination stroke */ gpencil_stroke_delete_tagged_points( - gpf_dst, gps_dst, NULL, GP_SPOINT_SELECT, false, 0); + gpd_dst, gpf_dst, gps_dst, NULL, GP_SPOINT_SELECT, false, 0); /* delete selected points from origin stroke */ gpencil_stroke_delete_tagged_points( - gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); + gpd_src, gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); } /* selected strokes mode */ else if (mode == GP_SEPARATE_STROKE) { @@ -4514,10 +4518,12 @@ static int gpencil_stroke_split_exec(bContext *C, wmOperator *UNUSED(op)) } /* delete selected points from destination stroke */ - gpencil_stroke_delete_tagged_points(gpf, gps_dst, NULL, GP_SPOINT_SELECT, true, 0); + gpencil_stroke_delete_tagged_points( + gpd, gpf, gps_dst, NULL, GP_SPOINT_SELECT, true, 0); /* delete selected points from origin stroke */ - gpencil_stroke_delete_tagged_points(gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); + gpencil_stroke_delete_tagged_points( + gpd, gpf, gps, gps->next, GP_SPOINT_SELECT, false, 0); } } /* select again tagged points */ @@ -4653,7 +4659,7 @@ typedef bool (*GPencilTestFn)(bGPDstroke *gps, const float diff_mat[4][4], void *user_data); -static void gpencil_cutter_dissolve(bGPDlayer *hit_layer, bGPDstroke *hit_stroke) +static void gpencil_cutter_dissolve(bGPdata *gpd, bGPDlayer *hit_layer, bGPDstroke *hit_stroke) { bGPDspoint *pt = NULL; bGPDspoint *pt1 = NULL; @@ -4698,7 +4704,7 @@ static void gpencil_cutter_dissolve(bGPDlayer *hit_layer, bGPDstroke *hit_stroke } } gpencil_stroke_delete_tagged_points( - hit_layer->actframe, hit_stroke, gpsn, GP_SPOINT_TAG, false, 1); + gpd, hit_layer->actframe, hit_stroke, gpsn, GP_SPOINT_TAG, false, 1); } } @@ -4755,7 +4761,7 @@ static int gpencil_cutter_lasso_select(bContext *C, gps->flag |= GP_STROKE_SELECT; float r_hita[3], r_hitb[3]; if (gps->totpoints > 1) { - ED_gpencil_select_stroke_segment(gpl, gps, pt, true, true, scale, r_hita, r_hitb); + ED_gpencil_select_stroke_segment(gpd, gpl, gps, pt, true, true, scale, r_hita, r_hitb); } /* avoid infinite loops */ if (gps->totpoints > oldtot) { @@ -4785,7 +4791,7 @@ static int gpencil_cutter_lasso_select(bContext *C, } LISTBASE_FOREACH_MUTABLE (bGPDstroke *, gps, &gpf->strokes) { if (gps->flag & GP_STROKE_SELECT) { - gpencil_cutter_dissolve(gpl, gps); + gpencil_cutter_dissolve(gpd, gpl, gps); } } } @@ -4918,7 +4924,7 @@ static int gpencil_merge_by_distance_exec(bContext *C, wmOperator *op) /* Go through each editable selected stroke */ GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) { if (gps->flag & GP_STROKE_SELECT) { - BKE_gpencil_stroke_merge_distance(gpf_, gps, threshold, unselected); + BKE_gpencil_stroke_merge_distance(gpd, gpf_, gps, threshold, unselected); } } GP_EDITABLE_STROKES_END(gpstroke_iter); diff --git a/source/blender/editors/gpencil/gpencil_edit_curve.c b/source/blender/editors/gpencil/gpencil_edit_curve.c index 0a344a9cc1c..f6c7ca9193c 100644 --- a/source/blender/editors/gpencil/gpencil_edit_curve.c +++ b/source/blender/editors/gpencil/gpencil_edit_curve.c @@ -155,7 +155,7 @@ static int gpencil_stroke_enter_editcurve_mode(bContext *C, wmOperator *op) gps->editcurve->resolution = gpd->editcurve_resolution; gps->editcurve->flag |= GP_CURVE_RECALC_GEOMETRY; } - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } } @@ -229,7 +229,7 @@ static int gpencil_editcurve_set_handle_type_exec(bContext *C, wmOperator *op) /* TODO: recalculate curve when handles change */ gps->editcurve->flag |= GP_CURVE_RECALC_GEOMETRY; - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } } diff --git a/source/blender/editors/gpencil/gpencil_fill.c b/source/blender/editors/gpencil/gpencil_fill.c index 168693ff517..d8e62829712 100644 --- a/source/blender/editors/gpencil/gpencil_fill.c +++ b/source/blender/editors/gpencil/gpencil_fill.c @@ -1146,11 +1146,11 @@ static void gpencil_stroke_from_buffer(tGPDfill *tgpf) /* simplify stroke */ for (int b = 0; b < tgpf->fill_simplylvl; b++) { - BKE_gpencil_stroke_simplify_fixed(gps); + BKE_gpencil_stroke_simplify_fixed(tgpf->gpd, gps); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(tgpf->gpd, gps); } /* ----------------------- */ diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h index d6c9df528a1..7473e7dc56f 100644 --- a/source/blender/editors/gpencil/gpencil_intern.h +++ b/source/blender/editors/gpencil/gpencil_intern.h @@ -342,7 +342,8 @@ struct GHash *gpencil_copybuf_validate_colormap(struct bContext *C); /* Stroke Editing ------------------------------------ */ -void gpencil_stroke_delete_tagged_points(bGPDframe *gpf, +void gpencil_stroke_delete_tagged_points(bGPdata *gpd, + bGPDframe *gpf, bGPDstroke *gps, bGPDstroke *next_stroke, int tag_flags, @@ -350,7 +351,7 @@ void gpencil_stroke_delete_tagged_points(bGPDframe *gpf, int limit); int gpencil_delete_selected_point_wrap(bContext *C); -void gpencil_subdivide_stroke(bGPDstroke *gps, const int subdivide); +void gpencil_subdivide_stroke(bGPdata *gpd, bGPDstroke *gps, const int subdivide); /* Layers Enums -------------------------------------- */ diff --git a/source/blender/editors/gpencil/gpencil_interpolate.c b/source/blender/editors/gpencil/gpencil_interpolate.c index 5e653187edb..f3e3104e000 100644 --- a/source/blender/editors/gpencil/gpencil_interpolate.c +++ b/source/blender/editors/gpencil/gpencil_interpolate.c @@ -355,7 +355,7 @@ static void gpencil_interpolate_set_points(bContext *C, tGPDinterpolate *tgpi) } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(new_stroke); + BKE_gpencil_stroke_geometry_update(gpd, new_stroke); /* add to strokes */ BLI_addtail(&tgpil->interFrame->strokes, new_stroke); } @@ -609,7 +609,7 @@ static int gpencil_interpolate_modal(bContext *C, wmOperator *op, const wmEvent /* make copy of source stroke, then adjust pointer to points too */ gps_dst = BKE_gpencil_stroke_duplicate(gps_src, true); /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps_dst); + BKE_gpencil_stroke_geometry_update(tgpi->gpd, gps_dst); BLI_addtail(&gpf_dst->strokes, gps_dst); } @@ -1073,7 +1073,7 @@ static int gpencil_interpolate_seq_exec(bContext *C, wmOperator *op) gpencil_interpolate_update_points(gps_from, gps_to, new_stroke, factor); /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(new_stroke); + BKE_gpencil_stroke_geometry_update(gpd, new_stroke); /* add to strokes */ BLI_addtail(&interFrame->strokes, new_stroke); diff --git a/source/blender/editors/gpencil/gpencil_merge.c b/source/blender/editors/gpencil/gpencil_merge.c index cf806e68837..337cb8f6c0b 100644 --- a/source/blender/editors/gpencil/gpencil_merge.c +++ b/source/blender/editors/gpencil/gpencil_merge.c @@ -171,6 +171,9 @@ static void gpencil_get_elements_len(bContext *C, int *totstrokes, int *totpoint static void gpencil_dissolve_points(bContext *C) { + Object *ob = CTX_data_active_object(C); + bGPdata *gpd = ob->data; + CTX_DATA_BEGIN (C, bGPDlayer *, gpl, editable_gpencil_layers) { bGPDframe *gpf = gpl->actframe; if (gpf == NULL) { @@ -178,7 +181,7 @@ static void gpencil_dissolve_points(bContext *C) } LISTBASE_FOREACH_MUTABLE (bGPDstroke *, gps, &gpf->strokes) { - gpencil_stroke_delete_tagged_points(gpf, gps, gps->next, GP_SPOINT_TAG, false, 0); + gpencil_stroke_delete_tagged_points(gpd, gpf, gps, gps->next, GP_SPOINT_TAG, false, 0); } } CTX_DATA_END; @@ -519,7 +522,7 @@ static int gpencil_stroke_merge_exec(bContext *C, wmOperator *op) gpencil_dissolve_points(C); } - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); /* free memory */ MEM_SAFE_FREE(original_array); diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index 95133244dfb..588e3b7b902 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -1200,7 +1200,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) /* subdivide and smooth the stroke */ if ((brush->gpencil_settings->flag & GP_BRUSH_GROUP_SETTINGS) && (subdivide > 0)) { - gpencil_subdivide_stroke(gps, subdivide); + gpencil_subdivide_stroke(gpd, gps, subdivide); } /* Smooth stroke after subdiv - only if there's something to do for each iteration, @@ -1231,7 +1231,7 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) /* Simplify adaptive */ if ((brush->gpencil_settings->flag & GP_BRUSH_GROUP_SETTINGS) && (brush->gpencil_settings->simplify_f > 0.0f)) { - BKE_gpencil_stroke_simplify_adaptive(gps, brush->gpencil_settings->simplify_f); + BKE_gpencil_stroke_simplify_adaptive(gpd, gps, brush->gpencil_settings->simplify_f); } /* reproject to plane (only in 3d space) */ @@ -1284,11 +1284,11 @@ static void gpencil_stroke_newfrombuffer(tGPsdata *p) /* post process stroke */ if ((p->brush->gpencil_settings->flag & GP_BRUSH_GROUP_SETTINGS) && p->brush->gpencil_settings->flag & GP_BRUSH_TRIM_STROKE) { - BKE_gpencil_stroke_trim(gps); + BKE_gpencil_stroke_trim(gpd, gps); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gpencil_stroke_added_enable(p); } @@ -1642,7 +1642,7 @@ static void gpencil_stroke_eraser_dostroke(tGPsdata *p, gpencil_stroke_soft_refine(gps); } - gpencil_stroke_delete_tagged_points(gpf, gps, gps->next, GP_SPOINT_TAG, false, 0); + gpencil_stroke_delete_tagged_points(p->gpd, gpf, gps, gps->next, GP_SPOINT_TAG, false, 0); } gpencil_update_cache(p->gpd); } diff --git a/source/blender/editors/gpencil/gpencil_primitive.c b/source/blender/editors/gpencil/gpencil_primitive.c index 632c3a24638..32da1bc49cd 100644 --- a/source/blender/editors/gpencil/gpencil_primitive.c +++ b/source/blender/editors/gpencil/gpencil_primitive.c @@ -1067,7 +1067,7 @@ static void gpencil_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi) } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); /* Update evaluated data. */ ED_gpencil_sbuffer_update_eval(tgpi->gpd, tgpi->ob_eval); @@ -1329,7 +1329,7 @@ static void gpencil_primitive_interaction_end(bContext *C, copy_v2_v2(gps->aspect_ratio, brush_settings->aspect_ratio); /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(tgpi->gpd, gps); } /* transfer stroke from temporary buffer to the actual frame */ diff --git a/source/blender/editors/gpencil/gpencil_sculpt_paint.c b/source/blender/editors/gpencil/gpencil_sculpt_paint.c index d0adcea25c1..fe95ad4348b 100644 --- a/source/blender/editors/gpencil/gpencil_sculpt_paint.c +++ b/source/blender/editors/gpencil/gpencil_sculpt_paint.c @@ -303,7 +303,7 @@ static void gpencil_update_geometry(bGPdata *gpd) LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { if (gps->flag & GP_STROKE_TAG) { - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); gps->flag &= ~GP_STROKE_TAG; } } @@ -1575,6 +1575,7 @@ static bool gpencil_sculpt_brush_do_frame(bContext *C, bool changed = false; bool redo_geom = false; Object *ob = gso->object; + bGPdata *gpd = ob->data; char tool = gso->brush->gpencil_sculpt_tool; LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { @@ -1673,7 +1674,7 @@ static bool gpencil_sculpt_brush_do_frame(bContext *C, MaterialGPencilStyle *gp_style = BKE_gpencil_material_settings(ob, gps->mat_nr + 1); /* Update active frame now, only if material has fill. */ if (gp_style->flag & GP_MATERIAL_FILL_SHOW) { - BKE_gpencil_stroke_geometry_update(gps_active); + BKE_gpencil_stroke_geometry_update(gpd, gps_active); } else { gpencil_recalc_geometry_tag(gps_active); diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c index e207c3f293b..32793b04af3 100644 --- a/source/blender/editors/gpencil/gpencil_select.c +++ b/source/blender/editors/gpencil/gpencil_select.c @@ -1017,7 +1017,7 @@ void GPENCIL_OT_select_less(wmOperatorType *ot) * from gpencil_paint.c #gpencil_stroke_eraser_dostroke(). * It would be great to de-duplicate the logic here sometime, but that can wait. */ -static bool gpencil_stroke_do_circle_sel(bGPdata *UNUSED(gpd), +static bool gpencil_stroke_do_circle_sel(bGPdata *gpd, bGPDlayer *gpl, bGPDstroke *gps, GP_SpaceConversion *gsc, @@ -1071,7 +1071,7 @@ static bool gpencil_stroke_do_circle_sel(bGPdata *UNUSED(gpd), float r_hita[3], r_hitb[3]; bool hit_select = (bool)(pt_active->flag & GP_SPOINT_SELECT); ED_gpencil_select_stroke_segment( - gpl, gps_active, pt_active, hit_select, false, scale, r_hita, r_hitb); + gpd, gpl, gps_active, pt_active, hit_select, false, scale, r_hita, r_hitb); } } } @@ -1307,7 +1307,7 @@ static int gpencil_generic_select_exec( bool hit_select = (bool)(pt_active->flag & GP_SPOINT_SELECT); float r_hita[3], r_hitb[3]; ED_gpencil_select_stroke_segment( - gpl, gps_active, pt_active, hit_select, false, scale, r_hita, r_hitb); + gpd, gpl, gps_active, pt_active, hit_select, false, scale, r_hita, r_hitb); } } } @@ -1812,7 +1812,7 @@ static int gpencil_select_exec(bContext *C, wmOperator *op) float r_hita[3], r_hitb[3]; bool hit_select = (bool)(hit_point->flag & GP_SPOINT_SELECT); ED_gpencil_select_stroke_segment( - hit_layer, hit_stroke, hit_point, hit_select, false, scale, r_hita, r_hitb); + gpd, hit_layer, hit_stroke, hit_point, hit_select, false, scale, r_hita, r_hitb); } } } diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index 79e2f626339..fc359b697c1 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -1336,10 +1336,11 @@ void ED_gpencil_project_point_to_plane(const Scene *scene, /** * Subdivide a stroke once, by adding a point half way between each pair of existing points + * \param gpd: Datablock * \param gps: Stroke data * \param subdivide: Number of times to subdivide */ -void gpencil_subdivide_stroke(bGPDstroke *gps, const int subdivide) +void gpencil_subdivide_stroke(bGPdata *gpd, bGPDstroke *gps, const int subdivide) { bGPDspoint *temp_points; int totnewpoints, oldtotpoints; @@ -1429,7 +1430,7 @@ void gpencil_subdivide_stroke(bGPDstroke *gps, const int subdivide) MEM_SAFE_FREE(temp_points); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } /* Reset parent matrix for all layers. */ @@ -2262,8 +2263,12 @@ static void gpencil_copy_points( } } -static void gpencil_insert_point( - bGPDstroke *gps, bGPDspoint *a_pt, bGPDspoint *b_pt, const float co_a[3], float co_b[3]) +static void gpencil_insert_point(bGPdata *gpd, + bGPDstroke *gps, + bGPDspoint *a_pt, + bGPDspoint *b_pt, + const float co_a[3], + float co_b[3]) { bGPDspoint *temp_points; int totnewpoints, oldtotpoints; @@ -2322,8 +2327,8 @@ static void gpencil_insert_point( i2++; } - /* Calculate geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + /* Calc geometry data. */ + BKE_gpencil_stroke_geometry_update(gpd, gps); MEM_SAFE_FREE(temp_points); } @@ -2345,7 +2350,8 @@ static float gpencil_calc_factor(float p2d_a1[2], float p2d_a2[2], float r_hit2d } /* extend selection to stroke intersections */ -int ED_gpencil_select_stroke_segment(bGPDlayer *gpl, +int ED_gpencil_select_stroke_segment(bGPdata *gpd, + bGPDlayer *gpl, bGPDstroke *gps, bGPDspoint *pt, bool select, @@ -2500,7 +2506,7 @@ int ED_gpencil_select_stroke_segment(bGPDlayer *gpl, /* insert new point in the collision points */ if (insert) { - gpencil_insert_point(gps, hit_pointa, hit_pointb, r_hita, r_hitb); + gpencil_insert_point(gpd, gps, hit_pointa, hit_pointb, r_hita, r_hitb); } /* free memory */ @@ -2666,7 +2672,7 @@ void ED_gpencil_select_curve_toggle_all(bContext *C, int action, float error_thr BKE_gpencil_stroke_editcurve_update(gps, error_threshold); gps->editcurve->resolution = gpd->editcurve_resolution; gps->editcurve->flag |= GP_CURVE_RECALC_GEOMETRY; - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } bGPDcurve *gpc = gps->editcurve; diff --git a/source/blender/editors/gpencil/gpencil_uv.c b/source/blender/editors/gpencil/gpencil_uv.c index e21b2049028..96d78db94aa 100644 --- a/source/blender/editors/gpencil/gpencil_uv.c +++ b/source/blender/editors/gpencil/gpencil_uv.c @@ -273,7 +273,7 @@ static bool gpencil_uv_transform_calc(bContext *C, wmOperator *op) changed = true; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); i++; } } @@ -291,7 +291,7 @@ static bool gpencil_uv_transform_calc(bContext *C, wmOperator *op) gps->uv_rotation = opdata->array_rot[i] - uv_rotation; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); i++; } } @@ -316,7 +316,7 @@ static bool gpencil_uv_transform_calc(bContext *C, wmOperator *op) if (gps->flag & GP_STROKE_SELECT) { gps->uv_scale = opdata->array_scale[i] + scale; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); i++; } } @@ -512,7 +512,7 @@ static int gpencil_reset_transform_fill_exec(bContext *C, wmOperator *op) gps->uv_scale = 1.0f; } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); changed = true; } } diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h index aa729b1e271..8748c491804 100644 --- a/source/blender/editors/include/ED_gpencil.h +++ b/source/blender/editors/include/ED_gpencil.h @@ -309,7 +309,8 @@ void ED_gpencil_update_color_uv(struct Main *bmain, struct Material *mat); * 2 - Hit in point B * 3 - Hit in point A and B */ -int ED_gpencil_select_stroke_segment(struct bGPDlayer *gpl, +int ED_gpencil_select_stroke_segment(struct bGPdata *gpd, + struct bGPDlayer *gpl, struct bGPDstroke *gps, struct bGPDspoint *pt, bool select, diff --git a/source/blender/editors/transform/transform_convert_gpencil.c b/source/blender/editors/transform/transform_convert_gpencil.c index 758bb81f02e..4eea16e10cf 100644 --- a/source/blender/editors/transform/transform_convert_gpencil.c +++ b/source/blender/editors/transform/transform_convert_gpencil.c @@ -520,7 +520,7 @@ void recalcData_gpencil_strokes(TransInfo *t) gps->editcurve->flag |= GP_CURVE_RECALC_GEOMETRY; } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } BLI_ghash_free(strokes, NULL, NULL); diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c index 60c3877b89a..befdd7082dc 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c @@ -122,10 +122,11 @@ static void deformStroke(GpencilModifierData *md, if (!mmd->object) { return; } + bGPdata *gpd = ob->data; gpencil_deform_verts(mmd, ob, gps); /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } static void bakeModifier(Main *bmain, Depsgraph *depsgraph, GpencilModifierData *md, Object *ob) diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c index 54ed2ffafe1..4987ce5fa60 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c @@ -121,7 +121,8 @@ static void gpf_clear_all_strokes(bGPDframe *gpf) * Note: This won't be called if all points are present/removed * TODO: Allow blending of growing/shrinking tip (e.g. for more gradual transitions) */ -static void reduce_stroke_points(bGPDstroke *gps, +static void reduce_stroke_points(bGPdata *gpd, + bGPDstroke *gps, const int num_points, const eBuildGpencil_Transition transition) { @@ -187,7 +188,7 @@ static void reduce_stroke_points(bGPDstroke *gps, gps->totpoints = num_points; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } /* --------------------------------------------- */ @@ -204,7 +205,10 @@ typedef struct tStrokeBuildDetails { } tStrokeBuildDetails; /* Sequential - Show strokes one after the other */ -static void build_sequential(BuildGpencilModifierData *mmd, bGPDframe *gpf, float fac) +static void build_sequential(BuildGpencilModifierData *mmd, + bGPdata *gpd, + bGPDframe *gpf, + float fac) { const size_t tot_strokes = BLI_listbase_count(&gpf->strokes); bGPDstroke *gps; @@ -286,12 +290,12 @@ static void build_sequential(BuildGpencilModifierData *mmd, bGPDframe *gpf, floa else if (first_visible > cell->start_idx) { /* Starts partway through this stroke */ int num_points = cell->end_idx - first_visible; - reduce_stroke_points(cell->gps, num_points, mmd->transition); + reduce_stroke_points(gpd, cell->gps, num_points, mmd->transition); } else { /* Ends partway through this stroke */ int num_points = last_visible - cell->start_idx; - reduce_stroke_points(cell->gps, num_points, mmd->transition); + reduce_stroke_points(gpd, cell->gps, num_points, mmd->transition); } } } @@ -305,7 +309,10 @@ static void build_sequential(BuildGpencilModifierData *mmd, bGPDframe *gpf, floa /* Concurrent - Show multiple strokes at once */ // TODO: Allow random offsets to start times // TODO: Allow varying speeds? Scaling of progress? -static void build_concurrent(BuildGpencilModifierData *mmd, bGPDframe *gpf, float fac) +static void build_concurrent(BuildGpencilModifierData *mmd, + bGPdata *gpd, + bGPDframe *gpf, + float fac) { bGPDstroke *gps, *gps_next; int max_points = 0; @@ -404,16 +411,14 @@ static void build_concurrent(BuildGpencilModifierData *mmd, bGPDframe *gpf, floa } else if (num_points < gps->totpoints) { /* Remove some points */ - reduce_stroke_points(gps, num_points, mmd->transition); + reduce_stroke_points(gpd, gps, num_points, mmd->transition); } } } /* --------------------------------------------- */ -static void generate_geometry(GpencilModifierData *md, - Depsgraph *depsgraph, - bGPDlayer *gpl, - bGPDframe *gpf) +static void generate_geometry( + GpencilModifierData *md, Depsgraph *depsgraph, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf) { BuildGpencilModifierData *mmd = (BuildGpencilModifierData *)md; const bool reverse = (mmd->transition != GP_BUILD_TRANSITION_GROW); @@ -518,11 +523,11 @@ static void generate_geometry(GpencilModifierData *md, /* Time management mode */ switch (mmd->mode) { case GP_BUILD_MODE_SEQUENTIAL: - build_sequential(mmd, gpf, fac); + build_sequential(mmd, gpd, gpf, fac); break; case GP_BUILD_MODE_CONCURRENT: - build_concurrent(mmd, gpf, fac); + build_concurrent(mmd, gpd, gpf, fac); break; default: @@ -544,7 +549,7 @@ static void generateStrokes(GpencilModifierData *md, Depsgraph *depsgraph, Objec if (gpf == NULL) { continue; } - generate_geometry(md, depsgraph, gpl, gpf); + generate_geometry(md, depsgraph, gpd, gpl, gpf); } } diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c index a0987aafcd2..c02885c8b8f 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c @@ -229,6 +229,7 @@ static void deformStroke(GpencilModifierData *md, mmd->flag & GP_HOOK_INVERT_MATERIAL)) { return; } + bGPdata *gpd = ob->data; /* init struct */ tData.curfalloff = mmd->curfalloff; @@ -274,7 +275,7 @@ static void deformStroke(GpencilModifierData *md, gp_hook_co_apply(&tData, weight, pt); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } /* FIXME: Ideally we be doing this on a copy of the main depsgraph diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c index 0f5fc4d5cf6..c753238b3ec 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c @@ -84,6 +84,7 @@ static void deformStroke(GpencilModifierData *md, bGPDframe *UNUSED(gpf), bGPDstroke *gps) { + bGPdata *gpd = ob->data; LatticeGpencilModifierData *mmd = (LatticeGpencilModifierData *)md; const int def_nr = BKE_object_defgroup_name_index(ob, mmd->vgname); @@ -120,7 +121,7 @@ static void deformStroke(GpencilModifierData *md, (struct LatticeDeformData *)mmd->cache_data, &pt->x, mmd->strength * weight); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } /* FIXME: Ideally we be doing this on a copy of the main depsgraph diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c index 619c37015e4..9e8decae390 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmultiply.c @@ -131,6 +131,7 @@ static void duplicateStroke(Object *ob, float fading_thickness, float fading_opacity) { + bGPdata *gpd = ob->data; int i; bGPDstroke *new_gps = NULL; float stroke_normal[3]; @@ -201,7 +202,7 @@ static void duplicateStroke(Object *ob, } /* Calc geometry data. */ if (new_gps != NULL) { - BKE_gpencil_stroke_geometry_update(new_gps); + BKE_gpencil_stroke_geometry_update(gpd, new_gps); } MEM_freeN(t1_array); MEM_freeN(t2_array); diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c index 9cc3712e8f4..09131b7d673 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c @@ -100,6 +100,7 @@ static void deformStroke(GpencilModifierData *md, mmd->flag & GP_OFFSET_INVERT_MATERIAL)) { return; } + bGPdata *gpd = ob->data; for (int i = 0; i < gps->totpoints; i++) { bGPDspoint *pt = &gps->points[i]; @@ -121,7 +122,7 @@ static void deformStroke(GpencilModifierData *md, mul_m4_v3(mat, &pt->x); } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } static void bakeModifier(struct Main *UNUSED(bmain), diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c index 8d4556421eb..22dfc924f55 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c @@ -92,26 +92,26 @@ static void deformStroke(GpencilModifierData *md, mmd->flag & GP_SIMPLIFY_INVERT_MATERIAL)) { return; } - + bGPdata *gpd = ob->data; /* Select simplification mode. */ switch (mmd->mode) { case GP_SIMPLIFY_FIXED: { for (int i = 0; i < mmd->step; i++) { - BKE_gpencil_stroke_simplify_fixed(gps); + BKE_gpencil_stroke_simplify_fixed(gpd, gps); } break; } case GP_SIMPLIFY_ADAPTIVE: { /* simplify stroke using Ramer-Douglas-Peucker algorithm */ - BKE_gpencil_stroke_simplify_adaptive(gps, mmd->factor); + BKE_gpencil_stroke_simplify_adaptive(gpd, gps, mmd->factor); break; } case GP_SIMPLIFY_SAMPLE: { - BKE_gpencil_stroke_sample(gps, mmd->length, false); + BKE_gpencil_stroke_sample(gpd, gps, mmd->length, false); break; } case GP_SIMPLIFY_MERGE: { - BKE_gpencil_stroke_merge_distance(gpf, gps, mmd->distance, true); + BKE_gpencil_stroke_merge_distance(gpd, gpf, gps, mmd->distance, true); break; } default: diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c index 2797235c002..198a85405c4 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c @@ -77,6 +77,7 @@ static void deformStroke(GpencilModifierData *md, bGPDstroke *gps) { SubdivGpencilModifierData *mmd = (SubdivGpencilModifierData *)md; + bGPdata *gpd = ob->data; /* It makes sense when adding points to a straight line */ /* e.g. for creating thickness variation in later modifiers. */ @@ -97,7 +98,7 @@ static void deformStroke(GpencilModifierData *md, return; } - BKE_gpencil_stroke_subdivide(gps, mmd->level, mmd->type); + BKE_gpencil_stroke_subdivide(gpd, gps, mmd->level, mmd->type); } static void bakeModifier(struct Main *UNUSED(bmain), diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltexture.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltexture.c index 2d16b6ead5c..f2bf8c62228 100644 --- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltexture.c +++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltexture.c @@ -86,6 +86,7 @@ static void deformStroke(GpencilModifierData *md, { TextureGpencilModifierData *mmd = (TextureGpencilModifierData *)md; const int def_nr = BKE_object_defgroup_name_index(ob, mmd->vgname); + bGPdata *gpd = ob->data; if (!is_stroke_affected_by_modifier(ob, mmd->layername, @@ -106,7 +107,7 @@ static void deformStroke(GpencilModifierData *md, gps->uv_translation[0] += mmd->fill_offset[0]; gps->uv_translation[1] += mmd->fill_offset[1]; gps->uv_scale *= mmd->fill_scale; - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } if ((mmd->mode == STROKE) || (mmd->mode == STROKE_AND_FILL)) { diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c index 94602659c09..971fcb69f7b 100644 --- a/source/blender/makesrna/intern/rna_gpencil.c +++ b/source/blender/makesrna/intern/rna_gpencil.c @@ -230,7 +230,7 @@ static void rna_GPencil_stroke_curve_update(Main *bmain, Scene *scene, PointerRN LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) { if (gps->editcurve != NULL) { gps->editcurve->flag |= GP_CURVE_RECALC_GEOMETRY; - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } } @@ -252,7 +252,7 @@ static void rna_GPencil_curve_resolution_update(Main *bmain, Scene *scene, Point if (gps->editcurve != NULL) { gps->editcurve->resolution = gpd->editcurve_resolution; gps->editcurve->flag |= GP_CURVE_RECALC_GEOMETRY; - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); } } } @@ -273,11 +273,12 @@ static void rna_GPencil_dependency_update(Main *bmain, Scene *UNUSED(scene), Poi static void rna_GPencil_uv_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) { + bGPdata *gpd = (bGPdata *)ptr->owner_id; /* Force to recalc the UVs. */ bGPDstroke *gps = (bGPDstroke *)ptr->data; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(gps); + BKE_gpencil_stroke_geometry_update(gpd, gps); DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY); WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL); @@ -751,7 +752,7 @@ static void rna_GPencil_stroke_point_add( stroke->totpoints += count; /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(stroke); + BKE_gpencil_stroke_geometry_update(gpd, stroke); DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE); @@ -812,7 +813,7 @@ static void rna_GPencil_stroke_point_pop(ID *id, } /* Calc geometry data. */ - BKE_gpencil_stroke_geometry_update(stroke); + BKE_gpencil_stroke_geometry_update(gpd, stroke); DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE); |