[Bf-blender-cvs] [d5b64198782] greasepencil-object: Create new fields in material for moving palettecolor

Antonio Vazquez noreply at git.blender.org
Thu Apr 26 12:35:36 CEST 2018


Commit: d5b64198782db8bbf8a3e66626b7c4b0da2c0a93
Author: Antonio Vazquez
Date:   Mon Apr 23 19:55:48 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rBd5b64198782db8bbf8a3e66626b7c4b0da2c0a93

Create new fields in material for moving palettecolor

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

M	source/blender/makesdna/DNA_material_types.h
M	source/blender/makesrna/intern/rna_material.c
M	source/tools

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

diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 564e6aee3fc..0a54bd71838 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -64,6 +64,54 @@ typedef struct TexPaintSlot {
 #define CLAY_MATCAP_SIMPLE		1
 #define CLAY_MATCAP_COMPLETE	2
 
+typedef struct GpencilColorData {
+	struct Image *sima;      /* Texture image for strokes */
+	struct Image *ima;       /* Texture image for filling */
+	float rgb[4];            /* color for paint and strokes (alpha included) */
+	float fill[4];           /* color that should be used for drawing "fills" for strokes (alpha included) */
+	float scolor[4];         /* secondary color used for gradients and other stuff */
+	short flag;              /* settings for palette color */
+	short index;             /* custom index for passes */
+	short stroke_style;      /* style for drawing strokes (used to select shader type) */
+	short fill_style;        /* style for filling areas (used to select shader type) */
+	float mix_factor;        /* factor used to define shader behavior (several uses) */
+	float g_angle;           /* angle used for gradients orientation */
+	float g_radius;          /* radius for radial gradients */
+	float g_boxsize;         /* cheesboard size */
+	float g_scale[2];        /* uv coordinates scale */
+	float g_shift[2];        /* factor to shift filling in 2d space */
+	float t_angle;           /* angle used for texture orientation */
+	float t_scale[2];        /* texture scale (separated of uv scale) */
+	float t_offset[2];       /* factor to shift texture in 2d space */
+	float t_opacity;         /* texture opacity */
+	float t_pixsize;         /* pixel size for uv along the stroke */
+	int mode;                /* drawing mode (line or dots) */
+} GpencilColorData;
+
+/* GpencilColor->flag */
+typedef enum eGpencilColorData_Flag {
+	/* don't display color */
+	GPC_COLOR_HIDE = (1 << 1),
+	/* protected from further editing */
+	GPC_COLOR_LOCKED = (1 << 2),
+	/* do onion skinning */
+	GPC_COLOR_ONIONSKIN = (1 << 3),
+	/* clamp texture */
+	GPC_COLOR_TEX_CLAMP = (1 << 4),
+	/* mix texture */
+	GPC_COLOR_TEX_MIX = (1 << 5),
+	/* Flip fill colors */
+	GPC_COLOR_FLIP_FILL = (1 << 6),
+	/* Texture is a pattern */
+	GPC_COLOR_PATTERN = (1 << 7)
+} eGpencilColorData_Flag;
+
+typedef enum eGpencilColorData_Mode {
+	GPC_MODE_LINE = 0, /* line */
+	GPC_MODE_DOTS = 1, /* dots */
+	GPC_MODE_BOX = 2, /* rectangles */
+} eGpencilColorData_Mode;
+
 typedef struct Material {
 	ID id;
 	struct AnimData *adt;	/* animation data (must be immediately after id for utilities to use it) */ 
@@ -111,6 +159,9 @@ typedef struct Material {
 
 	/* Runtime cache for GLSL materials. */
 	ListBase gpumaterial;
+
+	/* grease pencil color */
+	struct GpencilColorData *gpcolor;
 } Material;
 
 /* **************** MATERIAL ********************* */
@@ -233,5 +284,21 @@ enum {
 	MA_BS_HASHED,
 };
 
+/* Grease Pencil Stroke styles */
+enum {
+	GPC_STROKE_STYLE_SOLID = 0,
+	GPC_STROKE_STYLE_TEXTURE
+};
+
+/* Grease Pencil Fill styles */
+enum {
+	GPC_FILL_STYLE_SOLID = 0,
+	GPC_FILL_STYLE_GRADIENT,
+	GPC_FILL_STYLE_RADIAL,
+	GPC_FILL_STYLE_CHESSBOARD,
+	GPC_FILL_STYLE_TEXTURE,
+	GPC_FILL_STYLE_PATTERN,
+};
+
 #endif
 
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 0621c1e1ad6..ed88fe0e619 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -72,6 +72,7 @@ const EnumPropertyItem rna_enum_ramp_blend_items[] = {
 #include "BKE_colorband.h"
 #include "BKE_context.h"
 #include "BKE_main.h"
+#include "BKE_gpencil.h"
 #include "BKE_material.h"
 #include "BKE_texture.h"
 #include "BKE_node.h"
@@ -248,6 +249,62 @@ void rna_mtex_texture_slots_clear(ID *self_id, struct bContext *C, ReportList *r
 	WM_event_add_notifier(C, NC_TEXTURE, CTX_data_scene(C));
 }
 
+static void rna_gpcolordata_uv_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+	/* update all uv strokes of this color */
+	GpencilColorData *gpcolor = (GpencilColorData *)ptr->data;
+	//ED_gpencil_update_color_uv(bmain, palette, gpcolor);
+
+	rna_Material_update(bmain, scene, ptr);
+}
+
+static char *rna_GpencilColorData_path(PointerRNA *ptr)
+{
+	Material *ma = ptr->id.data;
+	GpencilColorData *gpcolor = (GpencilColorData *)ptr->data;
+	char name_esc[sizeof(ma->id.name) * 2];
+
+	BLI_strescape(name_esc, ma->id.name, sizeof(name_esc));
+
+	return BLI_sprintfN("grease_pencil[\"%s\"]", name_esc);
+
+}
+static int rna_GpencilColorData_is_stroke_visible_get(PointerRNA *ptr)
+{
+	GpencilColorData *pcolor = (GpencilColorData *)ptr->data;
+	return (pcolor->rgb[3] > GPENCIL_ALPHA_OPACITY_THRESH);
+}
+
+static int rna_GpencilColorData_is_fill_visible_get(PointerRNA *ptr)
+{
+	GpencilColorData *pcolor = (GpencilColorData *)ptr->data;
+	return ((pcolor->fill[3] > GPENCIL_ALPHA_OPACITY_THRESH) || (pcolor->fill_style > 0));
+}
+
+static void rna_GpencilColorData_stroke_image_set(PointerRNA *ptr, PointerRNA value)
+{
+	GpencilColorData *pcolor = (GpencilColorData *)ptr->data;
+	ID *id = value.data;
+
+	if (id) {
+		/* enable fake user */
+		id_fake_user_set(id);
+	}
+	pcolor->sima = (struct Image *)id;
+}
+
+static void rna_GpencilColorData_fill_image_set(PointerRNA *ptr, PointerRNA value)
+{
+	GpencilColorData *pcolor = (GpencilColorData *)ptr->data;
+	ID *id = value.data;
+
+	if (id) {
+		/* enable fake user */
+		id_fake_user_set(id);
+	}
+	pcolor->ima = (struct Image *)id;
+}
+
 #else
 
 static void rna_def_material_colors(StructRNA *srna)
@@ -316,6 +373,263 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
 	RNA_def_property_update(prop, 0, "rna_Material_update");
 }
 
+static void rna_def_material_greasepencil(BlenderRNA *brna)
+{
+	StructRNA *srna;
+	PropertyRNA *prop;
+
+	/* mode type styles */
+	static EnumPropertyItem gpcolordata_mode_types_items[] = {
+		{ GPC_MODE_LINE, "LINE", 0, "Line", "Draw strokes using a continuous line" },
+		{ GPC_MODE_DOTS, "DOTS", 0, "Dots", "Draw strokes using separated dots" },
+		{ GPC_MODE_BOX, "BOX", 0, "Boxes", "Draw strokes using separated rectangle boxes" },
+		{ 0, NULL, 0, NULL, NULL }
+	};
+
+	/* stroke styles */
+	static EnumPropertyItem stroke_style_items[] = {
+		{ GPC_STROKE_STYLE_SOLID, "SOLID", 0, "Solid", "Draw strokes with solid color" },
+		{ GPC_STROKE_STYLE_TEXTURE, "TEXTURE", 0, "Texture", "Draw strokes using texture" },
+		{ 0, NULL, 0, NULL, NULL }
+	};
+
+	/* fill styles */
+	static EnumPropertyItem fill_style_items[] = {
+		{ GPC_FILL_STYLE_SOLID, "SOLID", 0, "Solid", "Fill area with solid color" },
+		{ GPC_FILL_STYLE_GRADIENT, "GRADIENT", 0, "Gradient", "Fill area with gradient color" },
+		{ GPC_FILL_STYLE_RADIAL, "RADIAL", 0, "Radial", "Fill area with radial gradient" },
+		{ GPC_FILL_STYLE_CHESSBOARD, "CHESSBOARD", 0, "Checker Board", "Fill area with chessboard pattern" },
+		{ GPC_FILL_STYLE_TEXTURE, "TEXTURE", 0, "Texture", "Fill area with image texture" },
+		{ GPC_FILL_STYLE_PATTERN, "PATTERN", 0, "Pattern", "Fill area with color but use image texture as pattern to distribute color" },
+		{ 0, NULL, 0, NULL, NULL }
+	};
+
+	srna = RNA_def_struct(brna, "GpencilColorData", NULL);
+	RNA_def_struct_sdna(srna, "GpencilColorData");
+	RNA_def_struct_ui_text(srna, "Grease Pencil Color", "");
+	/* TODO (antoniov): add animation path */
+	//RNA_def_struct_path_func(srna, "rna_GpencilColorData_path");
+
+	prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
+	RNA_def_property_range(prop, 0.0, 1.0);
+	RNA_def_property_float_sdna(prop, NULL, "rgb");
+	RNA_def_property_array(prop, 3);
+	RNA_def_property_ui_text(prop, "Color", "");
+	RNA_def_property_update(prop, NC_SCREEN | NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_Material_update");
+
+	prop = RNA_def_property(srna, "color_rgba", PROP_FLOAT, PROP_COLOR_GAMMA);
+	RNA_def_property_range(prop, 0.0, 1.0);
+	RNA_def_property_float_sdna(prop, NULL, "rgb");
+	RNA_def_property_array(prop, 4);
+	RNA_def_property_ui_text(prop, "Color", "");
+	RNA_def_property_update(prop, NC_SCREEN | NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_Material_update");
+
+	prop = RNA_def_property(srna, "alpha", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "rgb[3]");
+	RNA_def_property_range(prop, 0.0, 1.0f);
+	RNA_def_property_ui_text(prop, "Opacity", "Color Opacity");
+	RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_Material_update");
+
+	/* Fill Drawing Color */
+	prop = RNA_def_property(srna, "fill_color", PROP_FLOAT, PROP_COLOR_GAMMA);
+	RNA_def_property_float_sdna(prop, NULL, "fill");
+	RNA_def_property_array(prop, 3);
+	RNA_def_property_range(prop, 0.0f, 1.0f);
+	RNA_def_property_ui_text(prop, "Fill Color", "Color for filling region bounded by each stroke");
+	RNA_def_property_update(prop, NC_SCREEN | NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_Material_update");
+
+	prop = RNA_def_property(srna, "fill_rgba", PROP_FLOAT, PROP_COLOR_GAMMA);
+	RNA_def_property_float_sdna(prop, NULL, "fill");
+	RNA_def_property_array(prop, 4);
+	RNA_def_property_range(prop, 0.0f, 1.0f);
+	RNA_def_property_ui_text(prop, "Fill Color", "Color for filling region bounded by each stroke");
+	RNA_def_property_update(prop, NC_SCREEN | NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_Material_update");
+
+	/* Fill alpha */
+	prop = RNA_def_property(srna, "fill_alpha", PROP_FLOAT, PROP_NONE);
+	RNA_def_property_float_sdna(prop, NULL, "fill[3]");
+	RNA_def_property_range(prop, 0.0, 1.0f);
+	RNA_def_property_ui_text(prop, "Fill Opacity", "Opacity for filling region bounded by each stroke");
+	RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS | ND_DATA | NC_GPENCIL, "rna_Material_update");
+
+	/* Secondary Drawing Color */
+	prop = RNA_def_property(srna, "mix_color", PROP_FLOAT, PROP_COLOR_GAMMA);
+	RNA_def_property_float_sdna(prop, NULL, "scolor");
+	RNA_def_property_array(prop, 4);
+	RNA_def_property_range(prop, 0.0f, 1.0f);
+	RNA_def_property_ui_text(prop, "Mix Color", "Color for mixing with primary filling color");
+	RNA_def_property_update(prop, NC_SCENE | ND

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list