[Bf-blender-cvs] [21c75bc7c56] blender2.8: GP: replace custom API w/ BKE_deform API

Campbell Barton noreply at git.blender.org
Mon Aug 27 06:18:08 CEST 2018


Commit: 21c75bc7c560b65c1ed6fe2a7ba05d3fb59dadc6
Author: Campbell Barton
Date:   Mon Aug 27 14:20:40 2018 +1000
Branches: blender2.8
https://developer.blender.org/rB21c75bc7c560b65c1ed6fe2a7ba05d3fb59dadc6

GP: replace custom API w/ BKE_deform API

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

M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M	source/blender/editors/gpencil/gpencil_brush.c
M	source/blender/editors/gpencil/gpencil_data.c
M	source/blender/editors/gpencil/gpencil_utils.c
M	source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c

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

diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 9c352da15a0..0aa7a0de7e6 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -152,10 +152,7 @@ void BKE_gpencil_centroid_3D(struct bGPdata *gpd, float r_centroid[3]);
 
 /* vertex groups */
 void BKE_gpencil_dvert_ensure(struct bGPDstroke *gps);
-float BKE_gpencil_vgroup_use_index(struct MDeformVert *dvert, int index);
 void BKE_gpencil_vgroup_remove(struct Object *ob, struct bDeformGroup *defgroup);
-struct MDeformWeight *BKE_gpencil_vgroup_add_point_weight(struct MDeformVert *dvert, int index, float weight);
-bool BKE_gpencil_vgroup_remove_point_weight(struct MDeformVert *dvert, int index);
 void BKE_gpencil_stroke_weights_duplicate(struct bGPDstroke *gps_src, struct bGPDstroke *gps_dst);
 
 /* GPencil geometry evaluation */
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 51731cb3e8e..6d771148723 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -57,6 +57,7 @@
 #include "BKE_context.h"
 #include "BKE_action.h"
 #include "BKE_animsys.h"
+#include "BKE_deform.h"
 #include "BKE_global.h"
 #include "BKE_gpencil.h"
 #include "BKE_colortools.h"
@@ -545,21 +546,7 @@ void BKE_gpencil_stroke_weights_duplicate(bGPDstroke *gps_src, bGPDstroke *gps_d
 	}
 	BLI_assert(gps_src->totpoints == gps_dst->totpoints);
 
-	if ((gps_src->dvert == NULL) || (gps_dst->dvert == NULL)) {
-		return;
-	}
-
-	for (int i = 0; i < gps_src->totpoints; i++) {
-		MDeformVert *dvert_src = &gps_src->dvert[i];
-		MDeformVert *dvert_dst = &gps_dst->dvert[i];
-		if (dvert_src->totweight > 0) {
-			dvert_dst->dw = MEM_dupallocN(dvert_src->dw);
-		}
-		else {
-			dvert_dst->dw = NULL;
-		}
-
-	}
+	BKE_defvert_array_copy(gps_dst->dvert, gps_src->dvert, gps_src->totpoints);
 }
 
 /* make a copy of a given gpencil stroke */
@@ -1227,7 +1214,6 @@ void BKE_gpencil_vgroup_remove(Object *ob, bDeformGroup *defgroup)
 {
 	bGPdata *gpd = ob->data;
 	MDeformVert *dvert = NULL;
-	MDeformWeight *gpw = NULL;
 	const int def_nr = BLI_findindex(&ob->defbase, defgroup);
 
 	/* Remove points data */
@@ -1237,15 +1223,9 @@ void BKE_gpencil_vgroup_remove(Object *ob, bDeformGroup *defgroup)
 				for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
 					for (int i = 0; i < gps->totpoints; i++) {
 						dvert = &gps->dvert[i];
-						for (int i2 = 0; i2 < dvert->totweight; i2++) {
-							gpw = &dvert->dw[i2];
-							if (gpw->def_nr == def_nr) {
-								BKE_gpencil_vgroup_remove_point_weight(dvert, def_nr);
-							}
-							/* if index is greater, must be moved one back */
-							if (gpw->def_nr > def_nr) {
-								gpw->def_nr--;
-							}
+						MDeformWeight *dw = defvert_find_index(dvert, def_nr);
+						if (dw != NULL) {
+							defvert_remove_group(dvert, dw);
 						}
 					}
 				}
@@ -1264,84 +1244,6 @@ void BKE_gpencil_dvert_ensure(bGPDstroke *gps)
 		gps->dvert = MEM_callocN(sizeof(MDeformVert) * gps->totpoints, "gp_stroke_weights");
 	}
 }
-/* add a new weight */
-MDeformWeight *BKE_gpencil_vgroup_add_point_weight(MDeformVert *dvert, int index, float weight)
-{
-	MDeformWeight *new_gpw = NULL;
-	MDeformWeight *tmp_gpw;
-
-	/* need to verify if was used before to update */
-	for (int i = 0; i < dvert->totweight; i++) {
-		tmp_gpw = &dvert->dw[i];
-		if (tmp_gpw->def_nr == index) {
-			tmp_gpw->weight = weight;
-			return tmp_gpw;
-		}
-	}
-
-	dvert->totweight++;
-	if (dvert->totweight == 1) {
-		dvert->dw = MEM_callocN(sizeof(MDeformWeight), "gp_weight");
-	}
-	else {
-		dvert->dw = MEM_reallocN(dvert->dw, sizeof(MDeformWeight) * dvert->totweight);
-	}
-	new_gpw = &dvert->dw[dvert->totweight - 1];
-	new_gpw->def_nr = index;
-	new_gpw->weight = weight;
-
-	return new_gpw;
-}
-
-/* return the weight if use index  or -1*/
-float BKE_gpencil_vgroup_use_index(MDeformVert *dvert, int index)
-{
-	MDeformWeight *gpw;
-	for (int i = 0; i < dvert->totweight; i++) {
-		gpw = &dvert->dw[i];
-		if (gpw->def_nr == index) {
-			return gpw->weight;
-		}
-	}
-	return -1.0f;
-}
-
-/* add a new weight */
-bool BKE_gpencil_vgroup_remove_point_weight(MDeformVert *dvert, int index)
-{
-	int e = 0;
-
-	if (BKE_gpencil_vgroup_use_index(dvert, index) < 0.0f) {
-		return false;
-	}
-
-	/* if the array get empty, exit */
-	if (dvert->totweight == 1) {
-		dvert->totweight = 0;
-		MEM_SAFE_FREE(dvert->dw);
-		return true;
-	}
-
-	/* realloc weights */
-	MDeformWeight *tmp = MEM_dupallocN(dvert->dw);
-	MEM_SAFE_FREE(dvert->dw);
-	dvert->dw = MEM_callocN(sizeof(MDeformWeight) * dvert->totweight - 1, "gp_weights");
-
-	for (int x = 0; x < dvert->totweight; x++) {
-		MDeformWeight *gpw = &tmp[e];
-		MDeformWeight *final_gpw = &dvert->dw[e];
-		if (gpw->def_nr != index) {
-			final_gpw->def_nr = gpw->def_nr;
-			final_gpw->weight = gpw->weight;
-			e++;
-		}
-	}
-	MEM_SAFE_FREE(tmp);
-	dvert->totweight--;
-
-	return true;
-}
-
 
 /* ************************************************** */
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 3f185c4fbfc..edb8f4433c9 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -35,8 +35,9 @@
 #include "DNA_screen_types.h"
 #include "DNA_view3d_types.h"
 
-#include "BKE_gpencil.h"
 #include "BKE_action.h"
+#include "BKE_deform.h"
+#include "BKE_gpencil.h"
 
 #include "DRW_render.h"
 
@@ -502,8 +503,7 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag)
 	for (int i = 0; i < gps->totpoints; i++, pt++) {
 		/* weight paint */
 		if (is_weight_paint) {
-			float weight = gps->dvert!= NULL ? BKE_gpencil_vgroup_use_index(dvert, vgindex) : 0;
-			CLAMP(weight, 0.0f, 1.0f);
+			float weight = gps->dvert ? defvert_find_weight(dvert, vgindex) : 0.0f;
 			float hue = 2.0f * (1.0f - weight) / 3.0f;
 			hsv_to_rgb(hue, 1.0f, 1.0f, &selectColor[0], &selectColor[1], &selectColor[2]);
 			selectColor[3] = 1.0f;
@@ -581,8 +581,7 @@ GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED(
 	for (int i = 0; i < gps->totpoints; i++, pt++) {
 		/* weight paint */
 		if (is_weight_paint) {
-			float weight = gps->dvert != NULL ? BKE_gpencil_vgroup_use_index(dvert, vgindex) : 0;
-			CLAMP(weight, 0.0f, 1.0f);
+			float weight = gps->dvert ? defvert_find_weight(dvert, vgindex) : 0.0f;
 			float hue = 2.0f * (1.0f - weight) / 3.0f;
 			hsv_to_rgb(hue, 1.0f, 1.0f, &selectColor[0], &selectColor[1], &selectColor[2]);
 			selectColor[3] = 1.0f;
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index 4ab344c7861..6eff4d3687f 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -57,6 +57,7 @@
 #include "DNA_object_types.h"
 
 #include "BKE_context.h"
+#include "BKE_deform.h"
 #include "BKE_gpencil.h"
 #include "BKE_library.h"
 #include "BKE_report.h"
@@ -897,14 +898,8 @@ static bool gp_brush_weight_apply(
 		}
 	}
 	/* get current weight */
-	float curweight = 0.0f;
-	for (int i = 0; i < dvert->totweight; i++) {
-		MDeformWeight *gpw = &dvert->dw[i];
-		if (gpw->def_nr == gso->vrgroup) {
-			curweight = gpw->weight;
-			break;
-		}
-	}
+	MDeformWeight *dw = defvert_verify_index(dvert, gso->vrgroup);
+	float curweight = dw ? dw->weight : 0.0f;
 
 	if (gp_brush_invert_check(gso)) {
 		/* reduce weight */
@@ -916,7 +911,9 @@ static bool gp_brush_weight_apply(
 	}
 
 	CLAMP(curweight, 0.0f, 1.0f);
-	BKE_gpencil_vgroup_add_point_weight(dvert, gso->vrgroup, curweight);
+	if (dw) {
+		dw->weight = curweight;
+	}
 
 	/* weight should stay within [0.0, 1.0]	*/
 	if (pt->pressure < 0.0f)
diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index 006e2679c8c..d7e58609d2d 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -1764,10 +1764,8 @@ static int gpencil_vertex_group_smooth_exec(bContext *C, wmOperator *op)
 					ptc = &gps->points[i];
 				}
 
-				float wa = BKE_gpencil_vgroup_use_index(dverta, def_nr);
-				float wb = BKE_gpencil_vgroup_use_index(dvertb, def_nr);
-				CLAMP_MIN(wa, 0.0f);
-				CLAMP_MIN(wb, 0.0f);
+				float wa = defvert_find_weight(dverta, def_nr);
+				float wb = defvert_find_weight(dvertb, def_nr);
 
 				/* the optimal value is the corresponding to the interpolation of the weight
 				*  at the distance of point b
@@ -1775,8 +1773,10 @@ static int gpencil_vertex_group_smooth_exec(bContext *C, wmOperator *op)
 				const float opfac = line_point_factor_v3(&ptb->x, &pta->x, &ptc->x);
 				const float optimal = interpf(wa, wb, opfac);
 				/* Based on influence factor, blend between original and optimal */
-				wb = interpf(wb, optimal, fac);
-				BKE_gpencil_vgroup_add_point_weight(dvertb, def_nr, wb);
+				MDeformWeight *dw = defvert_verify_index(dvertb, def_nr);
+				if (dw) {
+					dw->weight = interpf(wb, optimal, fac);
+				}
 			}
 		}
 	}
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 3e05dcc3004..06747798ec7 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -50,6 +50,7 @@
 #include "DNA_view3d_types.h"
 
 #include "BKE_action.h"
+#include "BKE_deform.h"
 #include "BKE_main.h"
 #include "BKE_brush.h"
 #include "BKE_context.h"
@@ -1225,7 +1226,10 @@ void ED_gpencil_vgroup_assign(bContext *C, Object *ob, float weight)
 				bGPDspoint *pt = &gps->points[i];
 				MDeformVert *dvert = &gps->dvert[i];
 				if (pt->flag & GP_SPOINT_SELECT) {
-					BKE_gpencil_vgroup_add_point_weight(dvert, def_nr, weight);
+					MDeformWeight *dw = defvert_verify_index(dvert, def_nr);
+					if (dw) {
+						dw->weight = weight;
+					}
 				}
 			}
 		}
@@ -1250,7 +1254,10 @@ void ED_gpencil_vgroup_remove(bContext *C, Object *ob)
 			MDeformVert *dvert = &gps->dvert[i];
 
 			if ((pt->flag & GP_SPOINT_SELECT) && (dvert->totweight > 0)) {
-			

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list