[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