diff options
Diffstat (limited to 'source/blender/editors/sculpt_paint/paint_utils.c')
-rw-r--r-- | source/blender/editors/sculpt_paint/paint_utils.c | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index e7d13bd080d..5e88c7b5730 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -47,6 +47,7 @@ #include "BKE_context.h" #include "BKE_DerivedMesh.h" #include "BKE_paint.h" +#include "BKE_report.h" #include "RNA_access.h" #include "RNA_define.h" @@ -160,12 +161,12 @@ float paint_calc_object_space_radius(ViewContext *vc, const float center[3], Object *ob = vc->obact; float delta[3], scale, loc[3]; const float mval_f[2] = {pixel_radius, 0.0f}; + float zfac; mul_v3_m4v3(loc, ob->obmat, center); - initgrabz(vc->rv3d, loc[0], loc[1], loc[2]); - - ED_view3d_win_to_delta(vc->ar, mval_f, delta); + zfac = ED_view3d_calc_zfac(vc->rv3d, loc, NULL); + ED_view3d_win_to_delta(vc->ar, mval_f, delta, zfac); scale = fabsf(mat4_to_scale(ob->obmat)); scale = (scale == 0.0f) ? 1.0f : scale; @@ -173,13 +174,13 @@ float paint_calc_object_space_radius(ViewContext *vc, const float center[3], return len_v3(delta) / scale; } -float paint_get_tex_pixel(Brush *br, float u, float v) +float paint_get_tex_pixel(Brush *br, float u, float v, struct ImagePool *pool) { TexResult texres = {0}; float co[3] = {u, v, 0.0f}; int hasrgb; - hasrgb = multitex_ext(br->mtex.tex, co, NULL, NULL, 0, &texres); + hasrgb = multitex_ext(br->mtex.tex, co, NULL, NULL, 0, &texres, pool); if (hasrgb & TEX_RGB) texres.tin = rgb_to_grayscale(&texres.tr) * texres.ta; @@ -414,7 +415,7 @@ void PAINT_OT_face_select_linked(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; } -static int paint_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int paint_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event) { int mode = RNA_boolean_get(op->ptr, "extend") ? 1 : 0; paintface_select_linked(C, CTX_data_active_object(C), event->mval, mode); @@ -448,7 +449,7 @@ static int face_select_all_exec(bContext *C, wmOperator *op) void PAINT_OT_face_select_all(wmOperatorType *ot) { - ot->name = "Face Selection"; + ot->name = "(De)select All"; ot->description = "Change selection for all faces"; ot->idname = "PAINT_OT_face_select_all"; @@ -472,7 +473,7 @@ static int vert_select_all_exec(bContext *C, wmOperator *op) void PAINT_OT_vert_select_all(wmOperatorType *ot) { - ot->name = "Vertex Selection"; + ot->name = "(De)select All"; ot->description = "Change selection for all vertices"; ot->idname = "PAINT_OT_vert_select_all"; @@ -484,44 +485,37 @@ void PAINT_OT_vert_select_all(wmOperatorType *ot) WM_operator_properties_select_all(ot); } -static int vert_select_inverse_exec(bContext *C, wmOperator *UNUSED(op)) -{ - Object *ob = CTX_data_active_object(C); - paintvert_deselect_all_visible(ob, SEL_INVERT, TRUE); - ED_region_tag_redraw(CTX_wm_region(C)); - return OPERATOR_FINISHED; -} -void PAINT_OT_vert_select_inverse(wmOperatorType *ot) +static int vert_select_ungrouped_exec(bContext *C, wmOperator *op) { - ot->name = "Vertex Select Invert"; - ot->description = "Invert selection of vertices"; - ot->idname = "PAINT_OT_vert_select_inverse"; + Object *ob = CTX_data_active_object(C); + Mesh *me = ob->data; - ot->exec = vert_select_inverse_exec; - ot->poll = vert_paint_poll; + if ((ob->defbase.first == NULL) || (me->dvert == NULL)) { + BKE_report(op->reports, RPT_ERROR, "No weights/vertex groups on object"); + return OPERATOR_CANCELLED; + } - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; -} -static int face_select_inverse_exec(bContext *C, wmOperator *UNUSED(op)) -{ - Object *ob = CTX_data_active_object(C); - paintface_deselect_all_visible(ob, SEL_INVERT, TRUE); + paintvert_select_ungrouped(ob, RNA_boolean_get(op->ptr, "extend"), TRUE); ED_region_tag_redraw(CTX_wm_region(C)); return OPERATOR_FINISHED; } - -void PAINT_OT_face_select_inverse(wmOperatorType *ot) +void PAINT_OT_vert_select_ungrouped(wmOperatorType *ot) { - ot->name = "Face Select Invert"; - ot->description = "Invert selection of faces"; - ot->idname = "PAINT_OT_face_select_inverse"; + /* identifiers */ + ot->name = "Select Ungrouped"; + ot->idname = "PAINT_OT_vert_select_ungrouped"; + ot->description = "Select vertices without a group"; - ot->exec = face_select_inverse_exec; - ot->poll = facemask_paint_poll; + /* api callbacks */ + ot->exec = vert_select_ungrouped_exec; + ot->poll = vert_paint_poll; + /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + + RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend the selection"); } static int face_select_hide_exec(bContext *C, wmOperator *op) |