[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56241] trunk/blender/source/blender/ editors/space_view3d/view3d_ruler.c: fix for issues with ruler

Campbell Barton ideasman42 at gmail.com
Tue Apr 23 16:58:32 CEST 2013


Revision: 56241
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56241
Author:   campbellbarton
Date:     2013-04-23 14:58:23 +0000 (Tue, 23 Apr 2013)
Log Message:
-----------
fix for issues with ruler
- disabling ruler snap wasn't setting the points depth back to its previous value before snapping. 
- adding a new ruler uses the depth of the previous active ruler (fallback to view center as before)
- deleting the ruler now sets the prev/next ruler active.

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-04-23 14:12:12 UTC (rev 56240)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_ruler.c	2013-04-23 14:58:23 UTC (rev 56241)
@@ -156,6 +156,7 @@
 	int flag;
 	int snap_flag;
 	int state;
+	float drag_start_co[3];
 
 	/* --- */
 	ARegion *ar;
@@ -675,6 +676,8 @@
 
 	if (ruler_item) {
 		float *co = ruler_item->co[ruler_item->co_index];
+		/* restore the initial depth */
+		copy_v3_v3(co, ruler_info->drag_start_co);
 		view3d_ruler_item_project(ruler_info, co, mval);
 		if (do_thickness && ruler_item->co_index != 1) {
 			const float mval_fl[2] = {UNPACK2(mval)};
@@ -793,6 +796,7 @@
 					    (ruler_info->items.first == NULL))
 					{
 						/* Create new line */
+						RulerItem *ruler_item_prev = ruler_item_active_get(ruler_info);
 						RulerItem *ruler_item;
 						/* check if we want to drag an existing point or add a new one */
 						ruler_info->state = RULER_STATE_DRAG;
@@ -800,7 +804,15 @@
 						ruler_item = ruler_item_add(ruler_info);
 						ruler_item_active_set(ruler_info, ruler_item);
 
-						negate_v3_v3(ruler_item->co[0], rv3d->ofs);
+						/* initial depth either previous ruler, view offset */
+						if (ruler_item_prev) {
+							copy_v3_v3(ruler_info->drag_start_co, ruler_item_prev->co[ruler_item_prev->co_index]);
+						}
+						else {
+							negate_v3_v3(ruler_info->drag_start_co, rv3d->ofs);
+						}
+
+						copy_v3_v3(ruler_item->co[0], ruler_info->drag_start_co);
 						view3d_ruler_item_project(ruler_info, ruler_item->co[0], event->mval);
 
 						copy_v3_v3(ruler_item->co[2], ruler_item->co[0]);
@@ -849,6 +861,10 @@
 								ruler_item_active_set(ruler_info, ruler_item_pick);
 								ruler_item_pick->co_index = co_index;
 								ruler_info->state = RULER_STATE_DRAG;
+
+								/* store the initial depth */
+								copy_v3_v3(ruler_info->drag_start_co, ruler_item_pick->co[ruler_item_pick->co_index]);
+
 								do_draw = true;
 							}
 						}
@@ -911,8 +927,9 @@
 				if (ruler_info->state == RULER_STATE_NORMAL) {
 					RulerItem *ruler_item = ruler_item_active_get(ruler_info);
 					if (ruler_item) {
+						RulerItem *ruler_item_other = ruler_item->prev ? ruler_item->prev : ruler_item->next;
 						ruler_item_remove(ruler_info, ruler_item);
-						ruler_info->item_active = -1;
+						ruler_item_active_set(ruler_info, ruler_item_other);
 						do_draw = true;
 					}
 				}




More information about the Bf-blender-cvs mailing list