[Bf-blender-cvs] [c44e8a016be] greasepencil-object: WIP: Fist step moving bGPDbrush to Brush datablock

Antonio Vazquez noreply at git.blender.org
Mon Mar 12 09:59:55 CET 2018


Commit: c44e8a016bef4cea72b68a09bbed54644aee655f
Author: Antonio Vazquez
Date:   Sun Mar 11 11:48:29 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBc44e8a016bef4cea72b68a09bbed54644aee655f

WIP: Fist step moving bGPDbrush to Brush datablock

Still a lot of work ahead, but this commit is to save the situation before remove bGPDbrush struct.

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

M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/blenkernel/BKE_brush.h
M	source/blender/blenkernel/BKE_paint.h
M	source/blender/blenkernel/intern/brush.c
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/library_query.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/gpencil/gpencil_primitive.c
M	source/blender/editors/gpencil/gpencil_utils.c
M	source/blender/editors/sculpt_paint/paint_ops.c
M	source/blender/makesdna/DNA_brush_types.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_brush.c
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/makesrna/intern/rna_sculpt_paint.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 73a6bc1e988..4cc5fda4bb3 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -2066,17 +2066,28 @@ class VIEW3D_PT_tools_grease_pencil_brush(Panel):
     @staticmethod
     def draw(self, context):
         layout = self.layout
+        ts = context.scene.tool_settings
+        settings = ts.gpencil_paint
+
         row = layout.row()
         col = row.column()
+        col.template_ID_preview(settings, "brush", new="brush.add_gpencil", rows=3, cols=8)
 
-        ts = context.scene.tool_settings
-        col.template_icon_view(ts, "gpencil_brushes_enum", show_labels=True)
+        col = row.column()
+        sub = col.column(align=True)
+        sub.operator("gpencil.brush_presets_create", icon='HELP', text="")
 
+        # Old code
+        row = layout.row()
+        col = row.column()
+        col.template_icon_view(ts, "gpencil_brushes_enum", show_labels=True)
         col = row.column()
         sub = col.column(align=True)
         sub.operator("gpencil.brush_add", icon='ZOOMIN', text="")
         sub.operator("gpencil.brush_remove", icon='ZOOMOUT', text="")
         sub.menu("GPENCIL_MT_brush_specials", icon='DOWNARROW_HLT', text="")
+        # end old code
+
         brush = context.active_gpencil_brush
         if brush:
             if len(ts.gpencil_brushes) > 1:
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index f2601f2ca32..104d0b28067 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -28,6 +28,7 @@
  */
 
 enum eCurveMappingPreset;
+struct bContext;
 struct Brush;
 struct ImBuf;
 struct ImagePool;
@@ -45,6 +46,7 @@ void BKE_brush_system_exit(void);
 /* datablock functions */
 void BKE_brush_init(struct Brush *brush);
 struct Brush *BKE_brush_add(struct Main *bmain, const char *name, const eObjectMode ob_mode);
+struct Brush *BKE_brush_add_gpencil(struct Main *bmain, struct ToolSettings *ts, const char *name);
 struct Brush *BKE_brush_first_search(struct Main *bmain, const eObjectMode ob_mode);
 void BKE_brush_copy_data(struct Main *bmain, struct Brush *brush_dst, const struct Brush *brush_src, const int flag);
 struct Brush *BKE_brush_copy(struct Main *bmain, const struct Brush *brush);
@@ -53,6 +55,7 @@ void BKE_brush_unlink(struct Main *bmain, struct Brush *brush);
 void BKE_brush_free(struct Brush *brush);
 
 void BKE_brush_sculpt_reset(struct Brush *brush);
+void BKE_brush_gpencil_presets(struct bContext *C);
 
 /* image icon function */
 struct ImBuf *get_brush_icon(struct Brush *brush);
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index 84a0823453f..d758e32b8db 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -76,7 +76,8 @@ typedef enum ePaintMode {
 	ePaintTextureProjective = 3,
 	ePaintTexture2D = 4,
 	ePaintSculptUV = 5,
-	ePaintInvalid = 6
+	ePaintInvalid = 6,
+	ePaintGpencil = 7
 } ePaintMode;
 
 /* overlay invalidation */
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index d82c1ca56fe..e5cb3d28f5e 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -29,6 +29,7 @@
 #include "DNA_brush_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_object_types.h"
+#include "DNA_gpencil_types.h"
 
 #include "BLI_math.h"
 #include "BLI_blenlib.h"
@@ -36,6 +37,7 @@
 
 #include "BKE_brush.h"
 #include "BKE_colortools.h"
+#include "BKE_context.h"
 #include "BKE_global.h"
 #include "BKE_library.h"
 #include "BKE_library_query.h"
@@ -164,6 +166,362 @@ Brush *BKE_brush_add(Main *bmain, const char *name, const eObjectMode ob_mode)
 	return brush;
 }
 
+/* add a new gp-brush */
+Brush *BKE_brush_add_gpencil(Main *bmain, ToolSettings *ts, const char *name)
+{
+	Brush *brush;
+
+	/* alloc paint session */
+	if (ts->gp_paint == NULL) {
+		ts->gp_paint = MEM_callocN(sizeof(GpPaint), "GpPaint");
+	}
+
+	Paint *paint = &ts->gp_paint->paint;
+
+	brush = BKE_brush_add(bmain, name, OB_MODE_GPENCIL_PAINT);
+
+	/* set basic settings */
+	brush->thickness = 3;
+	brush->draw_smoothlvl = 1;
+	brush->gp_flag = 0;
+	brush->gp_flag |= GP_BRUSH_USE_PRESSURE;
+	brush->draw_sensitivity = 1.0f;
+	brush->draw_strength = 1.0f;
+	brush->draw_jitter = 0.0f;
+	brush->gp_flag |= GP_BRUSH_USE_JITTER_PRESSURE;
+	brush->gp_icon_id = GPBRUSH_CUSTOM;
+
+	/* curves */
+	brush->cur_sensitivity = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+	brush->cur_strength = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+	brush->cur_jitter = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+
+	BKE_paint_brush_set(paint, brush);
+
+	/* return brush */
+	return brush;
+}
+/* grease pencil cumapping->preset */
+typedef enum eGPCurveMappingPreset {
+	GPCURVE_PRESET_PENCIL = 0,
+	GPCURVE_PRESET_INK = 1,
+	GPCURVE_PRESET_INKNOISE = 2,
+} eGPCurveMappingPreset;
+
+static void brush_gpencil_curvemap_reset(CurveMap *cuma, int preset)
+{
+	if (cuma->curve)
+		MEM_freeN(cuma->curve);
+
+	cuma->totpoint = 3;
+	cuma->curve = MEM_callocN(cuma->totpoint * sizeof(CurveMapPoint), __func__);
+
+	switch (preset) {
+		case GPCURVE_PRESET_PENCIL:
+			cuma->curve[0].x = 0.0f;
+			cuma->curve[0].y = 0.0f;
+			cuma->curve[1].x = 0.75115f;
+			cuma->curve[1].y = 0.25f;
+			cuma->curve[2].x = 1.0f;
+			cuma->curve[2].y = 1.0f;
+			break;
+		case GPCURVE_PRESET_INK:
+			cuma->curve[0].x = 0.0f;
+			cuma->curve[0].y = 0.0f;
+			cuma->curve[1].x = 0.63448f;
+			cuma->curve[1].y = 0.375f;
+			cuma->curve[2].x = 1.0f;
+			cuma->curve[2].y = 1.0f;
+			break;
+		case GPCURVE_PRESET_INKNOISE:
+			cuma->curve[0].x = 0.0f;
+			cuma->curve[0].y = 0.0f;
+			cuma->curve[1].x = 0.63134f;
+			cuma->curve[1].y = 0.3625f;
+			cuma->curve[2].x = 1.0f;
+			cuma->curve[2].y = 1.0f;
+			break;
+	}
+
+	if (cuma->table) {
+		MEM_freeN(cuma->table);
+		cuma->table = NULL;
+	}
+}
+
+/* create a set of grease pencil presets */
+void BKE_brush_gpencil_presets(bContext *C)
+{
+#define LAZY_RADIUS 40
+#define LAZY_FACTOR 0.9f
+
+	ToolSettings *ts = CTX_data_tool_settings(C);
+	/* alloc paint session */
+	if (ts->gp_paint == NULL) {
+		ts->gp_paint = MEM_callocN(sizeof(GpPaint), "GpPaint");
+	}
+
+	Paint *paint = &ts->gp_paint->paint;
+	Main *bmain = CTX_data_main(C);
+
+	Brush *brush, *deft;
+	CurveMapping *custom_curve;
+	float curcolor[3] = { 1.0f, 1.0f, 1.0f };
+
+	/* Pencil brush */
+	brush = BKE_brush_add_gpencil(bmain, ts, "Pencil");
+	brush->thickness = 25.0f;
+	brush->gp_flag |= (GP_BRUSH_USE_RANDOM_PRESSURE | GP_BRUSH_USE_PRESSURE | GP_BRUSH_ENABLE_CURSOR);
+	brush->draw_sensitivity = 1.0f;
+
+	brush->gp_flag |= GP_BRUSH_USE_RANDOM_STRENGTH;
+	brush->draw_strength = 0.6f;
+	brush->gp_flag |= GP_BRUSH_USE_STENGTH_PRESSURE;
+
+	brush->draw_random_press = 0.0f;
+
+	brush->draw_jitter = 0.0f;
+	brush->gp_flag |= GP_BRUSH_USE_JITTER_PRESSURE;
+
+	brush->draw_angle = 0.0f;
+	brush->draw_angle_factor = 0.0f;
+
+	brush->gp_flag |= GP_BRUSH_GROUP_SETTINGS;
+	brush->draw_smoothfac = 0.5f;
+	brush->draw_smoothlvl = 1;
+	brush->gp_thick_smoothfac = 1.0f;
+	brush->gp_thick_smoothlvl = 3;
+	brush->draw_subdivide = 1;
+	brush->draw_random_sub = 0.0f;
+	copy_v3_v3(brush->curcolor, curcolor);
+	brush->gp_icon_id = GPBRUSH_PENCIL;
+	brush->id.icon_id = 846;
+	brush->gp_brush_type = GP_BRUSH_TYPE_DRAW;
+
+	brush->gp_lazy_radius = LAZY_RADIUS;
+	brush->gp_lazy_factor = LAZY_FACTOR;
+
+	/* Pen brush */
+	brush = BKE_brush_add_gpencil(bmain, ts, "Pen");
+	deft = brush; /* save default brush */
+	brush->thickness = 30.0f;
+	brush->gp_flag |= (GP_BRUSH_USE_RANDOM_PRESSURE | GP_BRUSH_USE_PRESSURE | GP_BRUSH_ENABLE_CURSOR);
+	brush->draw_sensitivity = 1.0f;
+
+	brush->gp_flag |= GP_BRUSH_USE_RANDOM_STRENGTH;
+	brush->draw_strength = 1.0f;
+	brush->gp_flag |= GP_BRUSH_USE_STENGTH_PRESSURE;
+
+	brush->draw_random_press = 0.0f;
+
+	brush->draw_jitter = 0.0f;
+	brush->gp_flag |= GP_BRUSH_USE_JITTER_PRESSURE;
+
+	brush->draw_angle = 0.0f;
+	brush->draw_angle_factor = 0.0f;
+
+	brush->gp_flag |= GP_BRUSH_GROUP_SETTINGS;
+	brush->draw_smoothfac = 0.5f;
+	brush->draw_smoothlvl = 1;
+	brush->draw_subdivide = 1;
+	brush->gp_thick_smoothfac = 1.0f;
+	brush->gp_thick_smoothlvl = 3;
+	brush->draw_random_sub = 0.0f;
+	copy_v3_v3(brush->curcolor, curcolor);
+	brush->gp_icon_id = GPBRUSH_PEN;
+	brush->gp_brush_type = GP_BRUSH_TYPE_DRAW;
+
+	brush->gp_lazy_radius = LAZY_RADIUS;
+	brush->gp_lazy_factor = LAZY_FACTOR;
+
+	/* Ink brush */
+	brush = brush = BKE_brush_add_gpencil(bmain, ts, "Ink");
+	brush->thickness = 60.0f;
+	brush->gp_flag |= (GP_BRUSH_USE_PRESSURE | GP_BRUSH_ENABLE_CURSOR);
+	brush->draw_sensitivity = 1.6f;
+
+	brush->draw_strength = 1.0f;
+
+	brush->draw_random_press = 0.0f;
+
+	brush->draw_jitter = 0.0f;
+	brush->gp_flag |= GP_BRUSH_USE_JITTER_PRESSURE;
+
+	brush->draw_angle = 0.0f;
+	brush->draw_angle_factor = 0.0f;
+
+	brush->gp_flag |= GP_BRUSH_GROUP_SETTINGS;
+	brush->draw_smoothfac = 0.5f;
+	brush->draw_smoothlvl = 1;
+	brush->gp_thick_smoothfac = 1.0f;
+	brush->gp_thick_smoothlvl = 3;
+	brush->draw_subdivide = 1;
+	brush->draw_random_sub = 0.0f;
+	copy_v3_v3(brush->curcolor, curcolor);
+	brush->gp_icon_id = GPBRUSH_INK;
+	brush->gp_brush_type = GP_BRUSH_TYPE_DRAW;
+
+	brush->gp_lazy_radius = LAZY_RADIUS;
+	brush->gp_lazy_factor = LAZY_FACTOR;
+
+	/* Curve */
+	custom_curve = brush->cur_sensitivity;
+	curvemapping_set_defaults(custom_curve, 0, 0.0f, 0.0f, 1.0f, 1.0f);
+	curvemapping_initialize(custom_curve);
+	brush_gpencil_curvemap_reset(custom_curve->cm, GPCURVE_PRESET_INK);
+
+	/* Ink Noise brush */
+	brush = brush = BKE_brush_add_gpencil(bmain, ts, "Ink noise");
+	brush->thickness = 60.0f;
+	brush->gp_flag |= (GP_BRUSH_USE_RANDOM_PRESSURE | GP_BRUSH_USE_PRESSURE | GP_BRUSH_ENABLE_CURSOR);
+	brush->draw_sensitivity = 1.0f;
+
+	brush->draw_strength = 1.0f;
+
+	brush->draw_random_press = 0.7f;
+
+	brush->draw_jitter = 0.0f;
+	brush->gp_flag |= GP_BRUSH_USE_JITTER_PRESSURE;
+
+	brush->draw_angle = 0.0f;
+	brush->draw_angle_factor = 0.0f;
+
+	brush->gp_flag |= GP_BR

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list