[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55157] trunk/blender/source/blender/ editors/space_view3d/view3d_ruler.c: ruler:

Campbell Barton ideasman42 at gmail.com
Sun Mar 10 12:30:21 CET 2013


Revision: 55157
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55157
Author:   campbellbarton
Date:     2013-03-10 11:30:21 +0000 (Sun, 10 Mar 2013)
Log Message:
-----------
ruler:
- show header text for keyshortcuts.
- add Ctrl+C to copy the active ruler value.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c	2013-03-10 11:02:21 UTC (rev 55156)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c	2013-03-10 11:30:21 UTC (rev 55157)
@@ -176,6 +176,41 @@
 	ruler_info->item_active = BLI_findindex(&ruler_info->items, ruler_item);
 }
 
+static void ruler_item_as_string(RulerItem *ruler_item, UnitSettings *unit,
+                                 char *numstr, size_t numstr_size, int prec)
+{
+	const int do_split = unit->flag & USER_UNIT_OPT_SPLIT;
+
+	if (ruler_item->flag & RULERITEM_USE_ANGLE) {
+		const float ruler_angle = angle_v3v3v3(ruler_item->co[0],
+		                                       ruler_item->co[1],
+		                                       ruler_item->co[2]);
+
+		if (unit->system == USER_UNIT_NONE) {
+			BLI_snprintf(numstr, numstr_size, "%.*f°", prec, RAD2DEGF(ruler_angle));
+		}
+		else {
+			bUnit_AsString(numstr, numstr_size,
+			               (double)ruler_angle,
+			               prec, unit->system, B_UNIT_ROTATION, do_split, false);
+		}
+	}
+	else {
+		const float ruler_len = len_v3v3(ruler_item->co[0],
+		                                 ruler_item->co[2]);
+
+		if (unit->system == USER_UNIT_NONE) {
+			BLI_snprintf(numstr, numstr_size, "%.*f", prec, ruler_len);
+		}
+		else {
+			bUnit_AsString(numstr, numstr_size,
+			               (double)(ruler_len * unit->scale_length),
+			               prec, unit->system, B_UNIT_LENGTH, do_split, false);
+		}
+	}
+
+}
+
 static bool view3d_ruler_pick(RulerInfo *ruler_info, const float mval[2],
                               RulerItem **r_ruler_item, int *r_co_index)
 {
@@ -354,7 +389,6 @@
 {
 	Scene *scene = CTX_data_scene(C);
 	UnitSettings *unit = &scene->unit;
-	const int do_split = unit->flag & USER_UNIT_OPT_SPLIT;
 	RulerItem *ruler_item;
 	RulerInfo *ruler_info = arg;
 	RegionView3D *rv3d = ruler_info->ar->regiondata;
@@ -398,9 +432,6 @@
 		cpack(is_act ? color_act : color_base);
 
 		if (ruler_item->flag & RULERITEM_USE_ANGLE) {
-			const float ruler_angle = angle_v3v3v3(ruler_item->co[0],
-			                                       ruler_item->co[1],
-			                                       ruler_item->co[2]);
 			glBegin(GL_LINE_STRIP);
 			for (j = 0; j < 3; j++) {
 				glVertex2fv(co_ss[j]);
@@ -465,14 +496,8 @@
 				float pos[2];
 				const int prec = 2;  /* XXX, todo, make optional */
 
-				if (unit->system == USER_UNIT_NONE) {
-					BLI_snprintf(numstr, sizeof(numstr), "%.*f°", prec, RAD2DEGF(ruler_angle));
-				}
-				else {
-					bUnit_AsString(numstr, sizeof(numstr),
-					               (double)ruler_angle,
-					               prec, unit->system, B_UNIT_ROTATION, do_split, false);
-				}
+				ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
+
 				BLF_width_and_height(blf_mono_font, numstr, &numstr_size[0], &numstr_size[1]);
 
 				pos[0] = co_ss[1][0] + (cap_size * 2.0f);
@@ -534,7 +559,6 @@
 			}
 		}
 		else {
-			const float ruler_len = len_v3v3(ruler_item->co[0], ruler_item->co[2]);
 			glBegin(GL_LINE_STRIP);
 			for (j = 0; j < 3; j += 2) {
 				glVertex2fv(co_ss[j]);
@@ -578,14 +602,8 @@
 					flip_text = false;
 				}
 
-				if (unit->system == USER_UNIT_NONE) {
-					BLI_snprintf(numstr, sizeof(numstr), "%.*f", prec, ruler_len);
-				}
-				else {
-					bUnit_AsString(numstr, sizeof(numstr),
-					               (double)(ruler_len * unit->scale_length),
-					               prec, unit->system, B_UNIT_LENGTH, do_split, false);
-				}
+				ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
+
 				BLF_width_and_height(blf_mono_font, numstr, &numstr_size[0], &numstr_size[1]);
 
 				mid_v2_v2v2(pos, co_ss[0], co_ss[2]);
@@ -817,6 +835,21 @@
 				}
 			}
 			break;
+		case CKEY:
+		{
+			if (event->ctrl) {
+				RulerItem *ruler_item = ruler_item_active_get(ruler_info);
+				if (ruler_item) {
+					const int prec = 8;
+					char numstr[256];
+					Scene *scene = CTX_data_scene(C);
+					UnitSettings *unit = &scene->unit;
+
+					ruler_item_as_string(ruler_item, unit, numstr, sizeof(numstr), prec);
+					WM_clipboard_text_set((void *) numstr, false);
+				}
+			}
+		}
 		case RIGHTCTRLKEY:
 		case LEFTCTRLKEY:
 		{
@@ -866,16 +899,29 @@
 	}
 
 	if (do_draw) {
+		ScrArea *sa = CTX_wm_area(C);
+		const char *text = "Ctrl+LMB: Add, "
+		                   "Del: Remove, "
+		                   "Ctrl+Drag: Snap, "
+		                   "Ctrl+C: Copy Value, "
+		                   "Enter: Store,  "
+		                   "Esc: Cancel";
+
 		// ED_region_tag_redraw(ar);
+		ED_area_headerprint(sa, text);
 
 		/* all 3d views draw rulers */
 		WM_event_add_notifier(C, NC_SPACE | ND_SPACE_VIEW3D, NULL);
 	}
 
 	if (ELEM(exit_code, OPERATOR_FINISHED, OPERATOR_CANCELLED)) {
+		ScrArea *sa = CTX_wm_area(C);
+
 		view3d_ruler_end(C, ruler_info);
 		view3d_ruler_free(ruler_info);
 		op->customdata = NULL;
+
+		ED_area_headerprint(sa, NULL);
 	}
 
 	return exit_code;




More information about the Bf-blender-cvs mailing list