[Bf-blender-cvs] [236353e3854] greasepencil-object: GPencil: Add support to color names for selected strokes

Antonioya noreply at git.blender.org
Sun Mar 10 16:53:36 CET 2019


Commit: 236353e3854de622ba9221a716e3969acdc95cc4
Author: Antonioya
Date:   Sun Mar 10 16:52:43 2019 +0100
Branches: greasepencil-object
https://developer.blender.org/rB236353e3854de622ba9221a716e3969acdc95cc4

GPencil: Add support to color names for selected strokes

When enable names display in object panel, the color of each selected stroke is displayed in the viewport near to the first selected stroke.

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

M	source/blender/draw/modes/object_mode.c

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

diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index f68be196f0e..07ec8f0a11a 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -28,6 +28,7 @@
 #include "DNA_constraint_types.h"
 #include "DNA_camera_types.h"
 #include "DNA_curve_types.h"
+#include "DNA_gpencil_types.h"
 #include "DNA_mesh_types.h"
 #include "DNA_meta_types.h"
 #include "DNA_modifier_types.h"
@@ -2873,6 +2874,56 @@ static void OBJECT_cache_populate_particles(
 	}
 }
 
+static void OBJECT_gpencil_color_names(Object *ob, struct DRWTextStore *dt, uchar color[4])
+{
+	bGPdata *gpd = (bGPdata *)ob->data;
+	if (gpd == NULL) {
+		return;
+	}
+
+	for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+		if (gpl->flag & GP_LAYER_HIDE) {
+			continue;
+		}
+		bGPDframe *gpf = gpl->actframe;
+		if (gpf == NULL) {
+			continue;
+		}
+		for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+			Material *ma = give_current_material(ob, gps->mat_nr + 1);
+			if (ma == NULL) {
+				continue;
+			}
+
+			MaterialGPencilStyle *gp_style = ma->gp_style;
+			/* skip stroke if it doesn't have any valid data */
+			if ((gps->points == NULL) || (gps->totpoints < 1) || (gp_style == NULL)) {
+				continue;
+			}
+			/* check if the color is visible */
+			if (gp_style->flag & GP_STYLE_COLOR_HIDE) {
+				continue;
+			}
+
+			/* only if selected */
+			if (gps->flag & GP_STROKE_SELECT) {
+				float fpt[3];
+				for (int i = 0; i < gps->totpoints; i++) {
+					bGPDspoint *pt = &gps->points[i];
+					if (pt->flag & GP_SPOINT_SELECT) {
+						mul_v3_m4v3(fpt, ob->obmat, &pt->x);
+						DRW_text_cache_add(
+							dt, fpt,
+							ma->id.name + 2, strlen(ma->id.name + 2),
+							10, 0, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
+						break;
+					}
+				}
+			}
+		}
+	}
+}
+
 static void OBJECT_cache_populate(void *vedata, Object *ob)
 {
 	OBJECT_PassList *psl = ((OBJECT_Data *)vedata)->psl;
@@ -3141,6 +3192,11 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
 			        dt, ob->obmat[3],
 			        ob->id.name + 2, strlen(ob->id.name + 2),
 			        10, 0, DRW_TEXT_CACHE_GLOBALSPACE | DRW_TEXT_CACHE_STRING_PTR, color);
+
+			/* draw grease pencil stroke names */
+			if (ob->type == OB_GPENCIL) {
+				OBJECT_gpencil_color_names(ob, dt, color);
+			}
 		}
 
 		if ((ob->dtx & OB_TEXSPACE) && ELEM(ob->type, OB_MESH, OB_CURVE, OB_MBALL)) {



More information about the Bf-blender-cvs mailing list