Commit: 72533b087acc69ae1f4fa6ec750ca50979ae278f
Author: Darshan Kadu
Date: Tue Jun 13 14:04:55 2017 +0530
Branches: soc-2017-vertex_paint
https://developer.blender.org/rB72533b087acc69ae1f4fa6ec750ca50979ae278f
added vertex mask feature
===================================================================
M release/scripts/startup/bl_ui/space_view3d.py
M source/blender/blenkernel/intern/paint.c
M source/blender/editors/sculpt_paint/paint_vertex.c
M source/blender/editors/space_view3d/view3d_header.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_view3d.py
b/release/scripts/startup/bl_ui/space_view3d.py
index 9245def7473..643a4b8cc00 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -170,7 +170,7 @@ class VIEW3D_MT_editor_menus(Menu):
mesh = obj.data
if mesh.use_paint_mask:
layout.menu("VIEW3D_MT_select_paint_mask")
- elif mesh.use_paint_mask_vertex and mode_string == 'PAINT_WEIGHT':
+ elif mesh.use_paint_mask_vertex and (mode_string == 'PAINT_WEIGHT'
or mode_string == 'PAINT_VERTEX'):
layout.menu("VIEW3D_MT_select_paint_mask_vertex")
elif mode_string != 'SCULPT':
layout.menu("VIEW3D_MT_select_%s" % mode_string.lower())
diff --git a/source/blender/blenkernel/intern/paint.c
b/source/blender/blenkernel/intern/paint.c
index b8dbfc6f71b..e56db89097d 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -452,7 +452,7 @@ bool BKE_paint_select_vert_test(Object *ob)
(ob->type == OB_MESH) &&
(ob->data != NULL) &&
(((Mesh *)ob->data)->editflag & ME_EDIT_PAINT_VERT_SEL) &&
- (ob->mode & OB_MODE_WEIGHT_PAINT)
+ (ob->mode & OB_MODE_WEIGHT_PAINT || ob->mode &
OB_MODE_VERTEX_PAINT)
);
}
@@ -670,6 +670,7 @@ void BKE_sculptsession_free_vwpaint_data(struct
SculptSession *ss)
MEM_SAFE_FREE(ss->modes.vwpaint.total_weight);
MEM_SAFE_FREE(ss->modes.vwpaint.max_weight);
MEM_SAFE_FREE(ss->modes.vwpaint.previous_color);
+ MEM_SAFE_FREE(ss->modes.vwpaint.previous_accum);
}
/* Write out the sculpt dynamic-topology BMesh to the Mesh */
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c
b/source/blender/editors/sculpt_paint/paint_vertex.c
index 53d67dd1c0c..7fe05644a46 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -3362,6 +3362,9 @@ static int vpaint_mode_toggle_exec(bContext *C,
wmOperator *op)
if (me->editflag & ME_EDIT_PAINT_FACE_SEL) {
BKE_mesh_flush_select_from_polys(me);
}
+ else if (me->editflag & ME_EDIT_PAINT_VERT_SEL) {
+ BKE_mesh_flush_select_from_verts(me);
+ }
/* If the cache is not released by a cancel or a done, free it
now. */
if (ob->sculpt->cache) {
@@ -3556,6 +3559,7 @@ static void do_vpaint_brush_calc_ave_color_cb_ex(
char *col;
data->ob->sculpt->modes.vwpaint.tot_loops_hit[n] = 0;
const bool use_face_sel = (data->me->editflag & ME_EDIT_PAINT_FACE_SEL)
!= 0;
+ const bool use_vert_sel = (data->me->editflag & ME_EDIT_PAINT_VERT_SEL)
!= 0;
SculptBrushTest test;
sculpt_brush_test_init(ss, &test);
@@ -3570,7 +3574,9 @@ static void do_vpaint_brush_calc_ave_color_cb_ex(
if (BKE_brush_curve_strength(data->brush, test.dist,
cache->radius) > 0.0) {
/* If the vertex is selected for painting. */
const MVert *mv = &data->me->mvert[v_index];
- if (!use_face_sel || mv->flag & SELECT) {
+ const bool v_flag =
data->me->mvert[v_index].flag;
+
+ if (!(use_face_sel || use_vert_sel) || v_flag &
SELECT) {
ss->modes.vwpaint.tot_loops_hit[n] +=
ss->modes.vwpaint.vert_to_loop[v_index].count;
/* if a vertex is within the brush
region, then add it's color to the blend. */
for (int j = 0; j <
ss->modes.vwpaint.vert_to_loop[v_index].count; j++) {
@@ -3626,6 +3632,7 @@ static void do_vpaint_brush_draw_task_cb_ex(
float brush_size_pressure, brush_alpha_value, brush_alpha_pressure;
get_brush_alpha_data(scene, ss, brush, &brush_size_pressure,
&brush_alpha_value, &brush_alpha_pressure);
const bool use_face_sel = (data->me->editflag & ME_EDIT_PAINT_FACE_SEL)
!= 0;
+ const bool use_vert_sel = (data->me->editflag & ME_EDIT_PAINT_VERT_SEL)
!= 0;
SculptBrushTest test;
sculpt_brush_test_init(ss, &test);
@@ -3642,9 +3649,10 @@ static void do_vpaint_brush_draw_task_cb_ex(
const int v_index = ccgdm ?
data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize :
1.0f;
const MVert *mv = &data->me->mvert[v_index];
+ const bool v_flag = data->me->mvert[v_index].flag;
/* If the vertex is selected for painting. */
- if (!use_face_sel || mv->flag & SELECT) {
+ if (!(use_face_sel || use_vert_sel) || v_flag & SELECT)
{
/* Calc the dot prod. between ray norm on surf
and current vert
* (ie splash prevention factor), and only
paint front facing verts. */
const float view_dot = (vd.no) ?
dot_vf3vs3(cache->sculpt_normal_symm, vd.no) : 1.0;
@@ -3711,6 +3719,7 @@ static void do_vpaint_brush_blur_task_cb_ex(
float brush_size_pressure, brush_alpha_value, brush_alpha_pressure;
get_brush_alpha_data(scene, ss, brush, &brush_size_pressure,
&brush_alpha_value, &brush_alpha_pressure);
const bool use_face_sel = (data->me->editflag & ME_EDIT_PAINT_FACE_SEL)
!= 0;
+ const bool use_vert_sel = (data->me->editflag & ME_EDIT_PAINT_VERT_SEL)
!= 0;
SculptBrushTest test;
sculpt_brush_test_init(ss, &test);
@@ -3726,13 +3735,14 @@ static void do_vpaint_brush_blur_task_cb_ex(
const int v_index = ccgdm ?
data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
const float grid_alpha = ccgdm ? 1.0f / vd.gridsize :
1.0f;
const MVert *mv = &data->me->mvert[v_index];
+ const bool v_flag = data->me->mvert[v_index].flag;
const float view_dot = (vd.no) ?
dot_vf3vs3(cache->sculpt_normal_symm, vd.no) : 1.0;
if (view_dot > 0.0f) {
const float brush_fade =
BKE_brush_curve_strength(brush, test.dist, cache->radius);
/* If the vertex is selected for painting. */
- if (!use_face_sel || mv->flag & SELECT) {
+ if (!(use_face_sel || use_vert_sel) || v_flag &
SELECT) {
/* Get the average poly color */
unsigned int color_final = 0;
int total_hit_loops = 0;
@@ -3807,6 +3817,7 @@ static void do_vpaint_brush_smear_task_cb_ex(
get_brush_alpha_data(scene, ss, brush, &brush_size_pressure,
&brush_alpha_value, &brush_alpha_pressure);
float brush_dir[3];
const bool use_face_sel = (data->me->editflag & ME_EDIT_PAINT_FACE_SEL)
!= 0;
+ const bool use_vert_sel = (data->me->editflag & ME_EDIT_PAINT_VERT_SEL)
!= 0;
sub_v3_v3v3(brush_dir, cache->location, cache->last_location);
if (normalize_v3(brush_dir) != 0.0f) {
@@ -3825,9 +3836,10 @@ static void do_vpaint_brush_smear_task_cb_ex(
const int v_index = ccgdm ?
data->me->mloop[vd.grid_indices[vd.g]].v : vd.vert_indices[vd.i];
const float grid_alpha = ccgdm ? 1.0f /
vd.gridsize : 1.0f;
const MVert *mv_curr =
&data->me->mvert[v_index];
+ const bool v_flag =
data->me->mvert[v_index].flag;
/* if the vertex is selected for painting. */
- if (!use_face_sel || mv_curr->flag & SELECT) {
+ if (!(use_face_sel || use_vert_sel) || v_flag &
SELECT) {
/* Calc the dot prod. between ray norm
on surf and current vert
(ie splash prevention factor), and only
paint front facing verts. */
const float view_dot = (vd.no) ?
dot_vf3vs3(cache->sculpt_normal_symm, vd.no) : 1.0;
diff --git a/source/blender/editors/space_view3d/view3d_header.c
b/source/blender/editors/space_view3d/view3d_header.c
index bf1bdf68619..70caee66b29 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -350,7 +350,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext
*C)
PointerRNA meshptr;
RNA_pointer_create(ob->data, &RNA_Mesh, ob->data,
&meshptr);
- if (ob->mode & (OB_MODE_TEXTURE_PAINT |
OB_MODE_VERTEX_PAINT)) {
+ if (ob->mode & (OB_MODE_TEXTURE_PAINT)) {
uiItemR(layout, &meshptr, "use_paint_mask",
UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
}
else {
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs