[Bf-blender-cvs] [5553037be7c] master: Cleanup: split out tools & utils from vertex paint

Campbell Barton noreply at git.blender.org
Fri Sep 29 14:13:51 CEST 2017


Commit: 5553037be7c5c590b1e21741dc3c0f6fad49f480
Author: Campbell Barton
Date:   Fri Sep 29 20:03:58 2017 +1000
Branches: master
https://developer.blender.org/rB5553037be7c5c590b1e21741dc3c0f6fad49f480

Cleanup: split out tools & utils from vertex paint

paint_vertex.c was getting too big, move all code unrelated to
mode switching and modal painting into their own files.

Also replace vertex-color operators region redraw tag /w notifiers.

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

M	source/blender/editors/sculpt_paint/CMakeLists.txt
M	source/blender/editors/sculpt_paint/paint_intern.h
M	source/blender/editors/sculpt_paint/paint_ops.c
M	source/blender/editors/sculpt_paint/paint_vertex.c
M	source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
A	source/blender/editors/sculpt_paint/paint_vertex_color_utils.c
A	source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
A	source/blender/editors/sculpt_paint/paint_vertex_weight_utils.c
M	source/blender/editors/sculpt_paint/sculpt_intern.h

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

diff --git a/source/blender/editors/sculpt_paint/CMakeLists.txt b/source/blender/editors/sculpt_paint/CMakeLists.txt
index fa669d236b9..69f14c950bb 100644
--- a/source/blender/editors/sculpt_paint/CMakeLists.txt
+++ b/source/blender/editors/sculpt_paint/CMakeLists.txt
@@ -53,6 +53,9 @@ set(SRC
 	paint_utils.c
 	paint_vertex.c
 	paint_vertex_color_ops.c
+	paint_vertex_color_utils.c
+	paint_vertex_weight_ops.c
+	paint_vertex_weight_utils.c
 	paint_vertex_proj.c
 	sculpt.c
 	sculpt_undo.c
diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h
index 16570b0fdde..bd35218bb64 100644
--- a/source/blender/editors/sculpt_paint/paint_intern.h
+++ b/source/blender/editors/sculpt_paint/paint_intern.h
@@ -96,21 +96,11 @@ int weight_paint_mode_poll(struct bContext *C);
 int vertex_paint_poll(struct bContext *C);
 int vertex_paint_mode_poll(struct bContext *C);
 
-bool ED_vpaint_fill(struct Object *ob, unsigned int paintcol);
-bool ED_wpaint_fill(struct Object *ob, float paintweight);
-
-bool ED_vpaint_smooth(struct Object *ob);
-
 typedef void (*VPaintTransform_Callback)(const float col[3], const void *user_data, float r_col[3]);
 
-bool ED_vpaint_color_transform(struct Object *ob, VPaintTransform_Callback vpaint_tx_fn, const void *user_data);
-
 void PAINT_OT_weight_paint_toggle(struct wmOperatorType *ot);
 void PAINT_OT_weight_paint(struct wmOperatorType *ot);
 void PAINT_OT_weight_set(struct wmOperatorType *ot);
-void PAINT_OT_weight_from_bones(struct wmOperatorType *ot);
-void PAINT_OT_weight_sample(struct wmOperatorType *ot);
-void PAINT_OT_weight_sample_group(struct wmOperatorType *ot);
 
 enum {
 	WPAINT_GRADIENT_TYPE_LINEAR,
@@ -123,8 +113,44 @@ void PAINT_OT_vertex_paint(struct wmOperatorType *ot);
 
 unsigned int vpaint_get_current_col(struct Scene *scene, struct VPaint *vp);
 
+/* paint_vertex_color_utils.c */
+unsigned int ED_vpaint_blend_tool(
+        const int tool, const uint col,
+        const uint paintcol, const int alpha_i);
+bool ED_vpaint_color_transform(
+        struct Object *ob, VPaintTransform_Callback vpaint_tx_fn, const void *user_data);
+
+/* paint_vertex_weight_utils.c */
+float ED_wpaint_blend_tool(
+        const int tool,
+        const float weight,
+        const float paintval, const float alpha);
+/* Utility for tools to ensure vertex groups exist before they begin. */
+enum eWPaintFlag {
+	WPAINT_ENSURE_MIRROR = (1 << 0),
+};
+struct WPaintVGroupIndex {
+	int active;
+	int mirror;
+};
+bool ED_wpaint_ensure_data(
+        struct bContext *C, struct ReportList *reports,
+        enum eWPaintFlag flag, struct WPaintVGroupIndex *vgroup_index);
+int ED_wpaint_mirror_vgroup_ensure(struct Object *ob, const int vgroup_active);
+
 /* paint_vertex_color_ops.c */
+void PAINT_OT_vertex_color_set(struct wmOperatorType *ot);
 void PAINT_OT_vertex_color_from_weight(struct wmOperatorType *ot);
+void PAINT_OT_vertex_color_smooth(struct wmOperatorType *ot);
+void PAINT_OT_vertex_color_brightness_contrast(struct wmOperatorType *ot);
+void PAINT_OT_vertex_color_hsv(struct wmOperatorType *ot);
+void PAINT_OT_vertex_color_invert(struct wmOperatorType *ot);
+void PAINT_OT_vertex_color_levels(struct wmOperatorType *ot);
+
+/* paint_vertex_weight_ops.c */
+void PAINT_OT_weight_from_bones(struct wmOperatorType *ot);
+void PAINT_OT_weight_sample(struct wmOperatorType *ot);
+void PAINT_OT_weight_sample_group(struct wmOperatorType *ot);
 
 /* paint_vertex_proj.c */
 struct VertProjHandle;
@@ -162,7 +188,7 @@ void set_imapaintpartial(struct ImagePaintPartialRedraw *ippr);
 void imapaint_region_tiles(struct ImBuf *ibuf, int x, int y, int w, int h, int *tx, int *ty, int *tw, int *th);
 int get_imapaint_zoom(struct bContext *C, float *zoomx, float *zoomy);
 void *paint_2d_new_stroke(struct bContext *, struct wmOperator *, int mode);
-void paint_2d_redraw(const bContext *C, void *ps, bool final);
+void paint_2d_redraw(const struct bContext *C, void *ps, bool final);
 void paint_2d_stroke_done(void *ps);
 void paint_2d_stroke(void *ps, const float prev_mval[2], const float mval[2], const bool eraser, float pressure, float distance, float size);
 void paint_2d_bucket_fill(const struct bContext *C, const float color[3], struct Brush *br, const float mouse_init[2], void *ps);
@@ -219,7 +245,7 @@ float paint_calc_object_space_radius(struct ViewContext *vc, const float center[
 float paint_get_tex_pixel(struct MTex *mtex, float u, float v, struct ImagePool *pool, int thread);
 void paint_get_tex_pixel_col(struct MTex *mtex, float u, float v, float rgba[4], struct ImagePool *pool, int thread, bool convert, struct ColorSpace *colorspace);
 
-void paint_sample_color(bContext *C, struct ARegion *ar, int x, int y, bool texpaint_proj, bool palette);
+void paint_sample_color(struct bContext *C, struct ARegion *ar, int x, int y, bool texpaint_proj, bool palette);
 
 void paint_stroke_operator_properties(struct wmOperatorType *ot);
 
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c b/source/blender/editors/sculpt_paint/paint_ops.c
index 23231b7ccc7..4f6b3d100c5 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -256,300 +256,6 @@ static void PALETTE_OT_color_delete(wmOperatorType *ot)
 	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
-
-
-static int vertex_color_set_exec(bContext *C, wmOperator *UNUSED(op))
-{
-	Scene *scene = CTX_data_scene(C);
-	Object *obact = CTX_data_active_object(C);
-	unsigned int paintcol = vpaint_get_current_col(scene, scene->toolsettings->vpaint);
-
-	if (ED_vpaint_fill(obact, paintcol)) {
-		ED_region_tag_redraw(CTX_wm_region(C)); // XXX - should redraw all 3D views
-		return OPERATOR_FINISHED;
-	}
-	else {
-		return OPERATOR_CANCELLED;
-	}
-}
-
-static void PAINT_OT_vertex_color_set(wmOperatorType *ot)
-{
-	/* identifiers */
-	ot->name = "Set Vertex Colors";
-	ot->idname = "PAINT_OT_vertex_color_set";
-	ot->description = "Fill the active vertex color layer with the current paint color";
-	
-	/* api callbacks */
-	ot->exec = vertex_color_set_exec;
-	ot->poll = vertex_paint_mode_poll;
-	
-	/* flags */
-	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-}
-
-static int vertex_color_smooth_exec(bContext *C, wmOperator *UNUSED(op))
-{
-	Object *obact = CTX_data_active_object(C);
-	if (ED_vpaint_smooth(obact)) {
-		ED_region_tag_redraw(CTX_wm_region(C)); // XXX - should redraw all 3D views
-		return OPERATOR_FINISHED;
-	}
-	else {
-		return OPERATOR_CANCELLED;
-	}
-}
-
-static void PAINT_OT_vertex_color_smooth(wmOperatorType *ot)
-{
-	/* identifiers */
-	ot->name = "Smooth Vertex Colors";
-	ot->idname = "PAINT_OT_vertex_color_smooth";
-	ot->description = "Smooth colors across vertices";
-
-	/* api callbacks */
-	ot->exec = vertex_color_smooth_exec;
-	ot->poll = vertex_paint_mode_poll;
-
-	/* flags */
-	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-}
-
-
-/** \name Vertex Color Transformations
- * \{ */
-
-struct VPaintTx_BrightContrastData {
-	/* pre-calculated */
-	float gain;
-	float offset;
-};
-
-static void vpaint_tx_brightness_contrast(const float col[3], const void *user_data, float r_col[3])
-{
-	const struct VPaintTx_BrightContrastData *data = user_data;
-
-	for (int i = 0; i < 3; i++) {
-		r_col[i] = data->gain * col[i] + data->offset;
-	}
-}
-
-static int vertex_color_brightness_contrast_exec(bContext *C, wmOperator *op)
-{
-	Object *obact = CTX_data_active_object(C);
-
-	float gain, offset;
-	{
-		float brightness = RNA_float_get(op->ptr, "brightness");
-		float contrast = RNA_float_get(op->ptr, "contrast");
-		brightness /= 100.0f;
-		float delta = contrast / 200.0f;
-		gain = 1.0f - delta * 2.0f;
-		/*
-		 * The algorithm is by Werner D. Streidt
-		 * (http://visca.com/ffactory/archives/5-99/msg00021.html)
-		 * Extracted of OpenCV demhist.c
-		 */
-		if (contrast > 0) {
-			gain = 1.0f / ((gain != 0.0f) ? gain : FLT_EPSILON);
-			offset = gain * (brightness - delta);
-		}
-		else {
-			delta *= -1;
-			offset = gain * (brightness + delta);
-		}
-	}
-
-	const struct VPaintTx_BrightContrastData user_data = {
-		.gain = gain,
-		.offset = offset,
-	};
-
-	if (ED_vpaint_color_transform(obact, vpaint_tx_brightness_contrast, &user_data)) {
-		ED_region_tag_redraw(CTX_wm_region(C));
-		return OPERATOR_FINISHED;
-	}
-	else {
-		return OPERATOR_CANCELLED;
-	}
-}
-
-static void PAINT_OT_vertex_color_brightness_contrast(wmOperatorType *ot)
-{
-	PropertyRNA *prop;
-
-	/* identifiers */
-	ot->name = "Vertex Paint Bright/Contrast";
-	ot->idname = "PAINT_OT_vertex_color_brightness_contrast";
-	ot->description = "Adjust vertex color brightness/contrast";
-
-	/* api callbacks */
-	ot->exec = vertex_color_brightness_contrast_exec;
-	ot->poll = vertex_paint_mode_poll;
-
-	/* flags */
-	ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
-	/* params */
-	const float min = -100, max = +100;
-	prop = RNA_def_float(ot->srna, "brightness", 0.0f, min, max, "Brightness", "", min, max);
-	prop = RNA_def_float(ot->srna, "contrast", 0.0f, min, max, "Contrast", "", min, max);
-	RNA_def_property_ui_range(prop, min, max, 1, 1);
-}
-
-struct VPaintTx_HueSatData {
-	float hue;
-	float sat;
-	float val;
-};
-
-static void vpaint_tx_hsv(const float col[3], const void *user_data, float r_col[3])
-{
-	const struct VPaintTx_HueSatData *data = user_data;
-	float hsv[3];
-	rgb_to_hsv_v(col, hsv);
-
-	hsv[0] += (data->hue - 0.5f);
-	if (hsv[0] > 1.0f) {
-		hsv[0] -= 1.0f;
-	}
-	else if (hsv[0] < 0.0f) {
-		hsv[0] += 1.0f;
-	}
-	hsv[1] *= data->sat;
-	hsv[2] *= data->val;
-
-	hsv_to_rgb_v(hsv, r_col);
-}
-
-static int vertex_color_hsv_exec(bContext *C, wmOperator *op)
-{
-	Object *obact = CTX_data_active_object(C);
-
-	const struct VPaintTx_HueSatData user_data = {
-		.hue = RNA_float_get(op->ptr, "h"),
-		.sat = RNA_float_get(op->ptr, "s"),
-		.val = RNA_float_get(op->ptr, "v"),
-	};
-
-	if (ED_vpaint_color_transform(obact, vpaint_tx_hsv, &user_data)) {
-		ED_region_tag_redraw(CTX_wm_region(C));
-		return OPERATOR_FINISHED;
-	}
-	else {
-		return OPERATOR_CANCELLED;
-	}
-}
-
-static void PAINT_OT_vertex_color_hsv(wmOperatorType *ot)
-{
-	/* identifiers */
-	ot->name = "Vertex Paint Hue Saturation Value";
-	ot->idname = "PAINT_OT_vertex_color_hsv";
-	

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list