[Bf-blender-cvs] [5517049481c] greasepencil-object: Add grid option to grease pencil paper

Antonio Vazquez noreply at git.blender.org
Thu Nov 23 22:37:37 CET 2017


Commit: 5517049481c5b5525561e43c34c1ae08dbb620a9
Author: Antonio Vazquez
Date:   Thu Nov 23 22:37:13 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rB5517049481c5b5525561e43c34c1ae08dbb620a9

Add grid option to grease pencil paper

Default values added too.

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

M	release/scripts/startup/bl_ui/properties_scene.py
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/draw/engines/gpencil/gpencil_engine.c
M	source/blender/draw/engines/gpencil/gpencil_engine.h
M	source/blender/draw/engines/gpencil/shaders/gpencil_paper_frag.glsl
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index f76da8062fd..eb583d37a50 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -123,14 +123,22 @@ class SCENE_PT_gp_paper(SceneButtonsPanel, Panel):
         layout = self.layout
 
         ts = context.tool_settings
-        row = layout.row(align=True)
+        row = layout.row(align=False)
         row.prop(ts, "use_gpencil_paper", text="Use Paper")
 
-        row = layout.row(align=True)
+        row = layout.row()
         row.prop(ts, "gp_paper_color", text="Color")
-        row = layout.row(align=True)
+        row = layout.row()
         row.prop(ts, "gp_paper_opacity", text="Opacity")
 
+        row = layout.row(align=False)
+        row.prop(ts, "use_gpencil_grid", text="Display Grid")
+
+        row = layout.row(align=False)
+        col = row.column(align=True)
+        col.enabled = ts.use_gpencil_grid
+        col.prop(ts, "gpencil_grid_size", text="")
+
 class SceneKeyingSetsPanel:
 
     @staticmethod
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 531b9a5be08..42bab23f084 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -846,6 +846,10 @@ void BKE_scene_init(Scene *sce)
 	sce->toolsettings->imapaint.normal_angle = 80;
 	sce->toolsettings->imapaint.seam_bleed = 2;
 
+	sce->toolsettings->gpencil_grid_size[0] = 50;
+	sce->toolsettings->gpencil_grid_size[1] = 50;
+	ARRAY_SET_ITEMS(sce->toolsettings->gpencil_paper_color, 1.0f, 1.0f, 1.0f, 0.7f);
+
 	sce->physics_settings.gravity[0] = 0.0f;
 	sce->physics_settings.gravity[1] = 0.0f;
 	sce->physics_settings.gravity[2] = -9.81f;
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 62b55903e02..86bc43e7995 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -567,6 +567,12 @@ void do_versions_after_linking_280(Main *main)
 				BKE_gpencil_batch_cache_dirty(ob->data);
 			}
 		}
+		/* init grease pencil grids and paper */
+		for (Scene *scene = main->scene.first; scene; scene = scene->id.next) {
+			scene->toolsettings->gpencil_grid_size[0] = 50;
+			scene->toolsettings->gpencil_grid_size[1] = 50;
+			ARRAY_SET_ITEMS(scene->toolsettings->gpencil_paper_color, 1.0f, 1.0f, 1.0f, 0.7f);
+		}
 	}
 
 	/* XXX: Merge back into previous case... leaving like this so the Hero animatic/production files so far don't break */
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 52a4c976119..eb391ef8732 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -389,6 +389,16 @@ static void GPENCIL_cache_init(void *vedata)
 		DRWShadingGroup *paper_shgrp = DRW_shgroup_create(e_data.gpencil_paper_sh, psl->paper_pass);
 		DRW_shgroup_call_add(paper_shgrp, paperquad, NULL);
 		DRW_shgroup_uniform_vec4(paper_shgrp, "color", ts->gpencil_paper_color, 1);
+		stl->storage->gridsize[0] = (float)ts->gpencil_grid_size[0];
+		stl->storage->gridsize[1] = (float)ts->gpencil_grid_size[1];
+		DRW_shgroup_uniform_vec2(paper_shgrp, "size", &stl->storage->gridsize[0], 1);
+		if (ts->gpencil_flags & GP_TOOL_FLAG_ENABLE_GRID) {
+			stl->storage->uselines = 1;
+		}
+		else {
+			stl->storage->uselines = 0;
+		}
+		DRW_shgroup_uniform_int(paper_shgrp, "uselines", &stl->storage->uselines, 1);
 	}
 }
 
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 2320506ab2f..0c69d32d283 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -153,6 +153,8 @@ typedef struct GPENCIL_Storage {
 	float obj_scale;
 	int pixfactor;
 	int playing;
+	int uselines;
+	float gridsize[2];
 } GPENCIL_Storage;
 
 typedef struct GPENCIL_StorageList {
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_paper_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_paper_frag.glsl
index ae5cd00b810..4aa5a574145 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_paper_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_paper_frag.glsl
@@ -1,8 +1,34 @@
+uniform vec2 size;
 uniform vec4 color;
+uniform int uselines;
 
 out vec4 FragColor;
 
 void main()
 {
-	FragColor = color;
+	vec2 uv = vec2(gl_FragCoord.xy);
+	float dx = size[0];
+	float dy = size[1];
+	/* avoid too small grid */
+	if (dx < 15.0) {
+		dx = 15.0;
+	}
+	if (dy < 15.0) {
+		dy = 15.0;
+	}
+
+	vec2 coord = vec2(dx * floor(uv.x / dx), dy * floor(uv.y / dy));
+	vec4 outcolor = vec4(color);
+	if (uselines == 1) {
+		float difx = uv.x - (floor(uv.x / dx) * dx);
+		if (difx == 0.5) {
+			outcolor = vec4(0, 0, 0, 1);
+		}
+		float dify = uv.y - (floor(uv.y / dy) * dy);
+		if (dify == 0.5) {
+			outcolor = vec4(0, 0, 0, 1);
+		}
+	}
+	
+	FragColor = outcolor;
 }
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 777ee5b144c..5193ebad1eb 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1474,6 +1474,7 @@ typedef struct ToolSettings {
 
 	short gpencil_simplify; /* simplify flags for grease pencil */
 	char pad6[6];
+	int gpencil_grid_size[2];
 	float gpencil_paper_color[4];
 
 	/* Grease Pencil Sculpt */
@@ -2196,6 +2197,8 @@ typedef enum eGPencil_Flags {
 	GP_TOOL_FLAG_PAINT_ONBACK = (1 << 2),
 	/* Activate paper to cover all viewport (this is done to facilitate drawing over geometry) */
 	GP_TOOL_FLAG_ENABLE_PAPER = (1 << 3),
+	/* Activate paper grid */
+	GP_TOOL_FLAG_ENABLE_GRID = (1 << 4),
 } eGPencil_Flags;
 
 /* toolsettings->gpencil_simplify */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 0d7d5048c29..e50f1fbd501 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2666,12 +2666,27 @@ static void rna_def_tool_settings(BlenderRNA  *brna)
 	RNA_def_property_ui_text(prop, "Use Paper",
 		"Cover all viewport with a full color layer to improve visibility while drawing over complex scenes");
 	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
-	
+
+	prop = RNA_def_property(srna, "use_gpencil_grid", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "gpencil_flags", GP_TOOL_FLAG_ENABLE_GRID);
+	RNA_def_property_ui_text(prop, "Use Grid",
+		"Draw a grid over grease pencil paper");
+	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
+
+	prop = RNA_def_property(srna, "gpencil_grid_size", PROP_INT, PROP_PIXEL);
+	RNA_def_property_int_sdna(prop, NULL, "gpencil_grid_size");
+	RNA_def_property_range(prop, 15, INT_MAX);
+	RNA_def_property_int_default(prop, 50);
+	RNA_def_property_ui_text(prop, "Size", "Grid size");
+	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
+
 	/* Paper Color */
+	static float default_paper1[3] = { 1.0f, 1.0f, 1.0f };
 	prop = RNA_def_property(srna, "gp_paper_color", PROP_FLOAT, PROP_COLOR_GAMMA);
 	RNA_def_property_float_sdna(prop, NULL, "gpencil_paper_color");
 	RNA_def_property_array(prop, 3);
 	RNA_def_property_range(prop, 0.0f, 1.0f);
+	RNA_def_property_float_array_default(prop, default_paper1);
 	RNA_def_property_ui_text(prop, "Paper Color", "Color for paper");
 	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
 
@@ -2679,6 +2694,7 @@ static void rna_def_tool_settings(BlenderRNA  *brna)
 	prop = RNA_def_property(srna, "gp_paper_opacity", PROP_FLOAT, PROP_NONE);
 	RNA_def_property_float_sdna(prop, NULL, "gpencil_paper_color[3]");
 	RNA_def_property_range(prop, 0.0, 1.0f);
+	RNA_def_property_float_default(prop, 0.7f);
 	RNA_def_property_ui_text(prop, "Opacity", "Paper opacity");
 	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");



More information about the Bf-blender-cvs mailing list