Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py2
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py11
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_ruler.c60
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h1
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c1
5 files changed, 68 insertions, 7 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index e3fff42cc5b..335076309bc 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5276,6 +5276,8 @@ def km_3d_view_tool_measure(params):
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": [
("view3d.ruler_add", {"type": params.tool_tweak, "value": 'ANY'}, None),
+ ("view3d.ruler_remove", {"type": 'X', "value": 'PRESS'}, None),
+ ("view3d.ruler_remove", {"type": 'DEL', "value": 'PRESS'}, None),
]},
)
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 62530daa420..f99b2ebb009 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -106,18 +106,21 @@ class _defs_view3d_generic:
def ruler():
def description(context, item, km):
if km is not None:
- kmi = km.keymap_items.find_from_operator("view3d.ruler_add")
+ kmi_add = km.keymap_items.find_from_operator("view3d.ruler_add")
+ kmi_remove = km.keymap_items.find_from_operator("view3d.ruler_remove")
else:
- kmi = None
+ kmi_add = None
+ kmi_remove = None
return (
"Measure distance and angles.\n"
"\u2022 {} anywhere for new measurement.\n"
"\u2022 Drag ruler segment to measure an angle.\n"
- "\u2022 Drag ruler outside the view to remove.\n"
+ "\u2022 {} to remove the active ruler.\n"
"\u2022 Ctrl while dragging to snap.\n"
"\u2022 Shift while dragging to measure surface thickness."
).format(
- kmi_to_string_or_none(kmi)
+ kmi_to_string_or_none(kmi_add),
+ kmi_to_string_or_none(kmi_remove),
)
return dict(
text="Measure",
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
index f04f4bd0e32..2dbc2746fee 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
@@ -102,9 +102,10 @@ enum {
RULER_SNAP_OK = (1 << 0),
};
+struct RulerItem;
+
typedef struct RulerInfo {
- // ListBase items;
- int item_active;
+ struct RulerItem *item_active;
int flag;
int snap_flag;
int state;
@@ -152,6 +153,10 @@ static RulerItem *ruler_item_add(wmGizmoGroup *gzgroup)
static void ruler_item_remove(bContext *C, wmGizmoGroup *gzgroup, RulerItem *ruler_item)
{
+ RulerInfo *ruler_info = gzgroup->customdata;
+ if (ruler_info->item_active == ruler_item) {
+ ruler_info->item_active = NULL;
+ }
WM_gizmo_unlink(&gzgroup->gizmos, gzgroup->parent_gzmap, &ruler_item->gz, C);
}
@@ -526,7 +531,7 @@ static void gizmo_ruler_draw(const bContext *C, wmGizmo *gz)
copy_v3_fl(color_back, 0.0f);
}
- const bool is_act = (gz->flag & WM_GIZMO_DRAW_HOVER);
+ const bool is_act = (ruler_info->item_active == ruler_item);
float dir_ruler[2];
float co_ss[3][2];
int j;
@@ -909,6 +914,8 @@ static int gizmo_ruler_invoke(
/* Should always be true. */
inter->inside_region = BLI_rcti_isect_pt_v(&ar->winrct, &event->x);
+ ruler_info->item_active = ruler_item_pick;
+
return OPERATOR_RUNNING_MODAL;
}
@@ -926,6 +933,7 @@ static void gizmo_ruler_exit(bContext *C, wmGizmo *gz, const bool cancel)
if ((inter->co_index == 1) && (ruler_item->flag & RULERITEM_USE_ANGLE)) {
ruler_item->flag &= ~RULERITEM_USE_ANGLE;
}
+#if 0
else {
/* Not ideal, since the ruler isn't a mode and we don't want to override delete key
* use dragging out of the view for removal. */
@@ -934,6 +942,7 @@ static void gizmo_ruler_exit(bContext *C, wmGizmo *gz, const bool cancel)
gz = NULL;
inter = NULL;
}
+#endif
}
if (ruler_info->snap_flag & RULER_SNAP_OK) {
ruler_info->snap_flag &= ~RULER_SNAP_OK;
@@ -1092,3 +1101,48 @@ void VIEW3D_OT_ruler_add(wmOperatorType *ot)
}
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Remove Ruler Operator
+ * \{ */
+
+static int view3d_ruler_remove_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ ARegion *ar = CTX_wm_region(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ RegionView3D *rv3d = ar->regiondata;
+
+ if ((v3d->flag2 & V3D_RENDER_OVERRIDE) ||
+ (v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_TOOL)))
+ {
+ BKE_report(op->reports, RPT_WARNING, "Gizmos hidden in this view");
+ return OPERATOR_CANCELLED;
+ }
+
+ wmGizmoMap *gzmap = ar->gizmo_map;
+ wmGizmoGroup *gzgroup = WM_gizmomap_group_find(gzmap, view3d_gzgt_ruler_id);
+ if (gzgroup) {
+ RulerInfo *ruler_info = gzgroup->customdata;
+ if (ruler_info->item_active) {
+ ruler_item_remove(C, gzgroup, ruler_info->item_active);
+ ED_region_tag_redraw(ar);
+ return OPERATOR_FINISHED;
+ }
+ }
+ return OPERATOR_PASS_THROUGH;
+}
+
+void VIEW3D_OT_ruler_remove(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Ruler Remove";
+ ot->idname = "VIEW3D_OT_ruler_remove";
+
+ ot->invoke = view3d_ruler_remove_invoke;
+ ot->poll = view3d_ruler_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_UNDO | OPTYPE_INTERNAL;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 1aa494b06d4..1d38b006e14 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -260,6 +260,7 @@ void VIEW3D_GGT_mesh_preselect_edgering(struct wmGizmoGroupType *gzgt);
void VIEW3D_GGT_ruler(struct wmGizmoGroupType *gzgt);
void VIEW3D_GT_ruler_item(struct wmGizmoType *gzt);
void VIEW3D_OT_ruler_add(struct wmOperatorType *ot);
+void VIEW3D_OT_ruler_remove(struct wmOperatorType *ot);
void VIEW3D_GT_navigate_rotate(struct wmGizmoType *gzt);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index 60f3fe6a665..d712a9582d5 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -222,6 +222,7 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_toggle_matcap_flip);
WM_operatortype_append(VIEW3D_OT_ruler_add);
+ WM_operatortype_append(VIEW3D_OT_ruler_remove);
transform_operatortypes();
}