[Bf-blender-cvs] [0375720e288] blender-v3.2-release: Fix T95165: Custom Normals tools dont update immediately.
Jeroen Bakker
noreply at git.blender.org
Wed May 4 09:23:42 CEST 2022
Commit: 0375720e28892f2a6a34b849940b41ed2b407faa
Author: Jeroen Bakker
Date: Wed May 4 09:22:17 2022 +0200
Branches: blender-v3.2-release
https://developer.blender.org/rB0375720e28892f2a6a34b849940b41ed2b407faa
Fix T95165: Custom Normals tools dont update immediately.
Recalc selection count at the end of the circle selection.
This was removed from circle selection as it became a performance
bottleneck, helas some operators rely on it.
===================================================================
M source/blender/editors/space_view3d/view3d_select.c
===================================================================
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 03862c6bdff..ffd33006cc2 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -4602,6 +4602,48 @@ static bool object_circle_select(ViewContext *vc,
}
/* not a real operator, only for circle test */
+static void view3d_circle_select_recalc(void *user_data)
+{
+ bContext *C = user_data;
+ Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
+ ViewContext vc;
+ ED_view3d_viewcontext_init(C, &vc, depsgraph);
+ em_setup_viewcontext(C, &vc);
+
+ if (vc.obedit) {
+ switch (vc.obedit->type) {
+ case OB_MESH: {
+ FOREACH_OBJECT_IN_MODE_BEGIN (
+ vc.view_layer, vc.v3d, vc.obact->type, vc.obact->mode, ob_iter) {
+ ED_view3d_viewcontext_init_object(&vc, ob_iter);
+ BM_mesh_select_mode_flush_ex(
+ vc.em->bm, vc.em->selectmode, BM_SELECT_LEN_FLUSH_RECALC_ALL);
+ }
+ FOREACH_OBJECT_IN_MODE_END;
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+}
+
+static int view3d_circle_select_modal(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ int result = WM_gesture_circle_modal(C, op, event);
+ if (result & OPERATOR_FINISHED) {
+ view3d_circle_select_recalc(C);
+ }
+ return result;
+}
+
+static void view3d_circle_select_cancel(bContext *C, wmOperator *op)
+{
+ WM_gesture_circle_cancel(C, op);
+ view3d_circle_select_recalc(C);
+}
+
static int view3d_circle_select_exec(bContext *C, wmOperator *op)
{
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
@@ -4693,10 +4735,10 @@ void VIEW3D_OT_select_circle(wmOperatorType *ot)
ot->idname = "VIEW3D_OT_select_circle";
ot->invoke = WM_gesture_circle_invoke;
- ot->modal = WM_gesture_circle_modal;
+ ot->modal = view3d_circle_select_modal;
ot->exec = view3d_circle_select_exec;
ot->poll = view3d_selectable_data;
- ot->cancel = WM_gesture_circle_cancel;
+ ot->cancel = view3d_circle_select_cancel;
/* flags */
ot->flag = OPTYPE_UNDO;
More information about the Bf-blender-cvs
mailing list