[Bf-blender-cvs] [2b888f8d21b] greasepencil-object: GP: Line primitive, add support for thickness profile

Charlie Jolly noreply at git.blender.org
Tue Dec 11 12:02:18 CET 2018


Commit: 2b888f8d21be48b29d3722d272ececceafe7d553
Author: Charlie Jolly
Date:   Tue Dec 11 11:01:59 2018 +0000
Branches: greasepencil-object
https://developer.blender.org/rB2b888f8d21be48b29d3722d272ececceafe7d553

GP: Line primitive, add support for thickness profile

This means that by default lines are drawn with multiple points rather than two.

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

M	release/scripts/startup/bl_ui/space_topbar.py
M	source/blender/editors/gpencil/gpencil_primitive.c

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

diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py
index 55ce35b2f7c..7e21eff8dba 100644
--- a/release/scripts/startup/bl_ui/space_topbar.py
+++ b/release/scripts/startup/bl_ui/space_topbar.py
@@ -375,7 +375,7 @@ class _draw_left_context_mode:
 
                 draw_color_selector()
 
-                if tool.name in {"Arc", "Bezier"}:
+                if tool.name in {"Arc", "Bezier", "Line"}:
                     settings = context.tool_settings.gpencil_sculpt
                     row = layout.row(align=True)
                     row.prop(settings, "use_thickness_curve", text="", icon='CURVE_DATA')
diff --git a/source/blender/editors/gpencil/gpencil_primitive.c b/source/blender/editors/gpencil/gpencil_primitive.c
index 229a5eaa0e6..6b7c0b02592 100644
--- a/source/blender/editors/gpencil/gpencil_primitive.c
+++ b/source/blender/editors/gpencil/gpencil_primitive.c
@@ -325,7 +325,7 @@ static void gpencil_primitive_status_indicators(bContext *C, tGPDprimitive *tgpi
 		BLI_strncpy(msg_str, IFACE_("Rectangle: ESC/RMB to cancel, LMB set origin, Enter/LMB to confirm, Shift to square, Alt to center"), UI_MAX_DRAW_STR);
 	}
 	else if (tgpi->type == GP_STROKE_LINE) {
-		BLI_strncpy(msg_str, IFACE_("Line: ESC/RMB to cancel, LMB set origin, Enter/LMB to confirm, Alt to center"), UI_MAX_DRAW_STR);
+		BLI_strncpy(msg_str, IFACE_("Line: ESC/RMB to cancel, LMB set origin, Enter/LMB to confirm, WHEEL/+- to adjust edge number, Shift to align, Alt to center"), UI_MAX_DRAW_STR);
 	}
 	else if (tgpi->type == GP_STROKE_ARC) {
 		BLI_strncpy(msg_str, IFACE_("Arc: ESC/RMB to cancel, Enter/LMB to confirm, WHEEL/+- to adjust edge number, Shift to square, Alt to center, F to flip, C to Close"), UI_MAX_DRAW_STR);
@@ -337,7 +337,7 @@ static void gpencil_primitive_status_indicators(bContext *C, tGPDprimitive *tgpi
 		BLI_strncpy(msg_str, IFACE_("Circle: ESC/RMB to cancel, Enter/LMB to confirm, WHEEL/+- to adjust edge number, Shift to square, Alt to center"), UI_MAX_DRAW_STR);
 	}
 
-	if (tgpi->type == GP_STROKE_CIRCLE || tgpi->type == GP_STROKE_ARC) {
+	if (ELEM(tgpi->type, GP_STROKE_CIRCLE, GP_STROKE_ARC, GP_STROKE_LINE)) {
 		if (hasNumInput(&tgpi->num)) {
 			char str_offs[NUM_STR_REP_LEN];
 
@@ -397,15 +397,31 @@ static void gp_primitive_rectangle(tGPDprimitive *tgpi, tGPspoint *points2D)
 /* create a line */
 static void gp_primitive_line(tGPDprimitive *tgpi, tGPspoint *points2D)
 {
-	BLI_assert(tgpi->tot_edges == 2);
+	if (tgpi->tot_edges == 2) {
+		int i = tgpi->tot_stored_edges;
 
-	int i = tgpi->tot_stored_edges;
+		points2D[i].x = tgpi->start[0];
+		points2D[i].y = tgpi->start[1];
 
-	points2D[i].x = tgpi->start[0];
-	points2D[i].y = tgpi->start[1];
+		points2D[i + 1].x = tgpi->end[0];
+		points2D[i + 1].y = tgpi->end[1];
+	}
+	else {
+		const int totpoints = (tgpi->tot_edges + tgpi->tot_stored_edges);
+		const float step = 1.0f / (float)(tgpi->tot_edges - 1);
+		float a = 0.0f;
+
+		for (int i = tgpi->tot_stored_edges; i < totpoints; i++) {
+			tGPspoint *p2d = &points2D[i];
+			interp_v2_v2v2(&p2d->x, tgpi->start, tgpi->end, a);
+			a += step;
+		}
+
+		float color[4];
+		UI_GetThemeColor4fv(TH_REDALERT, color);
+		gp_primitive_set_cp(tgpi, tgpi->origin, color, 10);
+	}
 
-	points2D[i + 1].x = tgpi->end[0];
-	points2D[i + 1].y = tgpi->end[1];
 }
 
 /* unused at the moment */
@@ -661,7 +677,7 @@ static void gp_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi)
 
 		/* calc pressure */
 		float pressure = 1.0;
-		if (ELEM(tgpi->type, GP_STROKE_ARC, GP_STROKE_BEZIER)) {
+		if (ELEM(tgpi->type, GP_STROKE_ARC, GP_STROKE_BEZIER, GP_STROKE_LINE)) {
 			if (gset->flag & GP_SCULPT_SETT_FLAG_PRIMITIVE_CURVE) {
 				/* normalize value to evaluate curve */
 				float value = (float)i / (gps->totpoints - 1);
@@ -876,7 +892,7 @@ static void gpencil_primitive_init(bContext *C, wmOperator *op)
 		RNA_int_set(op->ptr, "edges", 4);
 	}
 	else { /* LINE */
-		RNA_int_set(op->ptr, "edges", 2);
+		RNA_int_set(op->ptr, "edges", 24);
 	}
 
 	tgpi->tot_stored_edges = 0;
@@ -1272,7 +1288,7 @@ static int gpencil_primitive_modal(bContext *C, wmOperator *op, const wmEvent *e
 		case PADPLUSKEY:
 		case WHEELUPMOUSE:
 		{
-			if ((event->val != KM_RELEASE) && (tgpi->type == GP_STROKE_CIRCLE || tgpi->type == GP_STROKE_ARC)) {
+			if ((event->val != KM_RELEASE) && ELEM(tgpi->type, GP_STROKE_CIRCLE, GP_STROKE_ARC, GP_STROKE_LINE)) {
 				tgpi->tot_edges = tgpi->tot_edges + 1;
 				CLAMP(tgpi->tot_edges, MIN_EDGES, MAX_EDGES);
 				RNA_int_set(op->ptr, "edges", tgpi->tot_edges);
@@ -1285,7 +1301,7 @@ static int gpencil_primitive_modal(bContext *C, wmOperator *op, const wmEvent *e
 		case PADMINUS:
 		case WHEELDOWNMOUSE:
 		{
-			if ((event->val != KM_RELEASE) && (tgpi->type == GP_STROKE_CIRCLE || tgpi->type == GP_STROKE_ARC)) {
+			if ((event->val != KM_RELEASE) && ELEM(tgpi->type, GP_STROKE_CIRCLE, GP_STROKE_ARC, GP_STROKE_LINE)) {
 				tgpi->tot_edges = tgpi->tot_edges - 1;
 				CLAMP(tgpi->tot_edges, MIN_EDGES, MAX_EDGES);
 				RNA_int_set(op->ptr, "edges", tgpi->tot_edges);



More information about the Bf-blender-cvs mailing list