[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24935] trunk/blender/source/blender/ editors: First changes to implement the 2.5 snapping proposal ( discussed back in May and recently on IRC).

Martin Poirier theeth at yahoo.com
Thu Nov 26 20:47:56 CET 2009


Revision: 24935
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24935
Author:   theeth
Date:     2009-11-26 20:47:55 +0100 (Thu, 26 Nov 2009)

Log Message:
-----------
First changes to implement the 2.5 snapping proposal (discussed back in May and recently on IRC).

http://wiki.blender.org/index.php/User:Theeth/Snapping

The new widget isn't there yet, but the rest works, including:

Increment (gears) is now a snap mode

Ctrl click to toggle snap on or off (in transform and 3d view)
Shift+Ctrl click to select snap mode (3d view only)

Snap status (on/off) is persisted in tool settings, no need to always turn it back on when entering transform.

It's still possible to have something resembling the old system by editing the transform modal keymap to snap on on ctrl press and snap off on key release.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_ops.c
    trunk/blender/source/blender/editors/space_view3d/view3d_header.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform.h
    trunk/blender/source/blender/editors/transform/transform_constraints.c
    trunk/blender/source/blender/editors/transform/transform_generics.c
    trunk/blender/source/blender/editors/transform/transform_ops.c
    trunk/blender/source/blender/editors/transform/transform_snap.c

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2009-11-26 19:32:33 UTC (rev 24934)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2009-11-26 19:47:55 UTC (rev 24935)
@@ -340,10 +340,6 @@
 {
 	wmKeyMapItem *km;
 
-	/* snap */
-	km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, KM_SHIFT, 0);
-	RNA_string_set(km->ptr, "path", "scene.tool_settings.snap");
-
 	/* used by mesh, curve & lattice only */
 	if(do_pet) {
 		/* context ops */

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_header.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2009-11-26 19:32:33 UTC (rev 24934)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_header.c	2009-11-26 19:47:55 UTC (rev 24935)
@@ -1693,10 +1693,11 @@
 	char *str = string;
 	
 	str += sprintf(str, "%s", "Snap Element: %t"); 
-	str += sprintf(str, "%s", "|Vertex%x0");
-	str += sprintf(str, "%s", "|Edge%x1");
-	str += sprintf(str, "%s", "|Face%x2"); 
-	str += sprintf(str, "%s", "|Volume%x3"); 
+	str += sprintf(str, "%s", "|Increments%x0");
+	str += sprintf(str, "%s", "|Vertex%x1");
+	str += sprintf(str, "%s", "|Edge%x2");
+	str += sprintf(str, "%s", "|Face%x3");
+	str += sprintf(str, "%s", "|Volume%x4");
 	return string;
 }
 
@@ -2172,37 +2173,38 @@
 		}
 
 		/* Snap */
-		if (BIF_snappingSupported(obedit)) {
-			uiBlockBeginAlign(block);
+		uiBlockBeginAlign(block);
 
-			if (ts->snap_flag & SCE_SNAP) {
-				uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEO,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap with Ctrl during transform (Shift Tab)");
-				xco+= XIC;
-				if(v3d->modeselect == OB_MODE_OBJECT) {
-					uiDefIconButBitS(block, TOG, SCE_SNAP_ROTATE, B_REDR, ICON_SNAP_NORMAL,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Align rotation with the snapping target");	
-					xco+= XIC;
-				}
-				if (ts->snap_mode == SCE_SNAP_MODE_VOLUME) {
-					uiDefIconButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_REDR, ICON_SNAP_PEEL_OBJECT,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Consider objects as whole when finding volume center");	
-					xco+= XIC;
-				}
-				if (ts->snap_mode == SCE_SNAP_MODE_FACE) {
-					uiDefIconButBitS(block, TOG, SCE_SNAP_PROJECT, B_REDR, ICON_RETOPO,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Project elements instead of snapping them");
-					xco+= XIC;
-				}
-				uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SNAP_VERTEX, snapmode_pup(), xco,yco,XIC+10,YIC, &(ts->snap_mode), 0.0, 0.0, 0, 0, "Snapping mode");
-				xco+= XIC + 10;
-				uiDefButS(block, MENU, B_NOP, "Snap Mode%t|Closest%x0|Center%x1|Median%x2|Active%x3",xco,yco,70,YIC, &ts->snap_target, 0, 0, 0, 0, "Snap Target Mode");
-				xco+= 70;
-			} else {
-				uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_GEAR,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap while Ctrl is held during transform (Shift Tab)");	
-				xco+= XIC;
-			}
+		if (ts->snap_flag & SCE_SNAP) {
+			uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_ON,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap during transform (Ctrl)");
+		} else {
+			uiDefIconButBitS(block, TOG, SCE_SNAP, B_REDR, ICON_SNAP_OFF,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Snap during transform (Ctrl)");
+		}
+		xco+= XIC;
 
-			uiBlockEndAlign(block);
-			header_xco_step(ar, &xco, &yco, &maxco, 10);
+		if(v3d->modeselect == OB_MODE_OBJECT && ts->snap_mode != SCE_SNAP_MODE_INCREMENT) {
+			uiDefIconButBitS(block, TOG, SCE_SNAP_ROTATE, B_REDR, ICON_SNAP_NORMAL,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Align rotation with the snapping target");
+			xco+= XIC;
 		}
+		if (ts->snap_mode == SCE_SNAP_MODE_VOLUME) {
+			uiDefIconButBitS(block, TOG, SCE_SNAP_PEEL_OBJECT, B_REDR, ICON_SNAP_PEEL_OBJECT,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Consider objects as whole when finding volume center");
+			xco+= XIC;
+		}
+		if (ts->snap_mode == SCE_SNAP_MODE_FACE) {
+			uiDefIconButBitS(block, TOG, SCE_SNAP_PROJECT, B_REDR, ICON_RETOPO,xco,yco,XIC,YIC, &ts->snap_flag, 0, 0, 0, 0, "Project elements instead of snapping them");
+			xco+= XIC;
+		}
+		uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SNAP_INCREMENT, snapmode_pup(), xco,yco,XIC+10,YIC, &(ts->snap_mode), 0.0, 0.0, 0, 0, "Snapping mode");
+		xco+= XIC + 10;
+		if(ts->snap_mode != SCE_SNAP_MODE_INCREMENT) {
+			uiDefButS(block, MENU, B_NOP, "Snap Mode%t|Closest%x0|Center%x1|Median%x2|Active%x3",xco,yco,70,YIC, &ts->snap_target, 0, 0, 0, 0, "Snap Target Mode");
+			xco+= 70;
+		}
 
+		uiBlockEndAlign(block);
+		header_xco_step(ar, &xco, &yco, &maxco, 10);
+
+
 		/* selection modus */
 		if(obedit && (obedit->type == OB_MESH)) {
 			EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2009-11-26 19:32:33 UTC (rev 24934)
+++ trunk/blender/source/blender/editors/transform/transform.c	2009-11-26 19:47:55 UTC (rev 24935)
@@ -507,9 +507,9 @@
 #define TFM_MODAL_TRANSLATE			3
 #define TFM_MODAL_ROTATE			4
 #define TFM_MODAL_RESIZE			5
-#define TFM_MODAL_SNAP_GEARS		6
-#define TFM_MODAL_SNAP_GEARS_OFF	7
-#define TFM_MODAL_SNAP_GEARS_TOGGLE	8
+#define TFM_MODAL_SNAP_ON		6
+#define TFM_MODAL_SNAP_OFF	7
+#define TFM_MODAL_SNAP_TOGGLE	8
 
 /* called in transform_ops.c, on each regeneration of keymaps */
 void transform_modal_keymap(wmKeyConfig *keyconf)
@@ -520,9 +520,9 @@
 	{TFM_MODAL_TRANSLATE, "TRANSLATE", 0, "Translate", ""},
 	{TFM_MODAL_ROTATE, "ROTATE", 0, "Rotate", ""},
 	{TFM_MODAL_RESIZE, "RESIZE", 0, "Resize", ""},
-	{TFM_MODAL_SNAP_GEARS, "SNAP_GEARS", 0, "Snap On", ""},
-	{TFM_MODAL_SNAP_GEARS_OFF, "SNAP_GEARS_OFF", 0, "Snap Off", ""},
-	{TFM_MODAL_SNAP_GEARS_TOGGLE, "SNAP_GEARS_TOGGLE", 0, "Snap Toggle", ""},
+	{TFM_MODAL_SNAP_ON, "SNAP_ON", 0, "Snap On", ""},
+	{TFM_MODAL_SNAP_OFF, "SNAP_OFF", 0, "Snap Off", ""},
+	{TFM_MODAL_SNAP_TOGGLE, "SNAP_TOGGLE", 0, "Snap Toggle", ""},
 	{0, NULL, 0, NULL, NULL}};
 	
 	wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "Transform Modal Map");
@@ -542,7 +542,7 @@
 	WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, TFM_MODAL_ROTATE);
 	WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, TFM_MODAL_RESIZE);
 	
-	WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_GEARS_TOGGLE);
+	WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_CLICK, KM_ANY, 0, TFM_MODAL_SNAP_TOGGLE);
 	
 	/* assign map to operators */
 	WM_modalkeymap_assign(keymap, "TFM_OT_transform");
@@ -629,16 +629,16 @@
 				}
 				break;
 				
-			case TFM_MODAL_SNAP_GEARS:
-				t->modifiers |= MOD_SNAP_GEARS;
+			case TFM_MODAL_SNAP_ON:
+				t->modifiers |= MOD_SNAP;
 				t->redraw = 1;
 				break;
-			case TFM_MODAL_SNAP_GEARS_OFF:
-				t->modifiers &= ~MOD_SNAP_GEARS;
+			case TFM_MODAL_SNAP_OFF:
+				t->modifiers &= ~MOD_SNAP;
 				t->redraw = 1;
 				break;
-			case TFM_MODAL_SNAP_GEARS_TOGGLE:
-				t->modifiers ^= MOD_SNAP_GEARS;
+			case TFM_MODAL_SNAP_TOGGLE:
+				t->modifiers ^= MOD_SNAP;
 				t->redraw = 1;
 				break;
 		}
@@ -1280,28 +1280,30 @@
 	}
 
 	// If modal, save settings back in scene if not set as operator argument
-	if (t->flag & T_MODAL)
-	{
+	if (t->flag & T_MODAL) {
+
 		/* save settings if not set in operator */
-		if (RNA_struct_find_property(op->ptr, "proportional") && !RNA_property_is_set(op->ptr, "proportional"))
-		{
+		if (RNA_struct_find_property(op->ptr, "proportional") && !RNA_property_is_set(op->ptr, "proportional")) {
 			ts->proportional = proportional;
 		}
 
-		if (RNA_struct_find_property(op->ptr, "proportional_size") && !RNA_property_is_set(op->ptr, "proportional_size"))
-		{
+		if (RNA_struct_find_property(op->ptr, "proportional_size") && !RNA_property_is_set(op->ptr, "proportional_size")) {
 			ts->proportional_size = t->prop_size;
 		}
 			
-		if (RNA_struct_find_property(op->ptr, "proportional_editing_falloff") && !RNA_property_is_set(op->ptr, "proportional_editing_falloff"))
-		{
+		if (RNA_struct_find_property(op->ptr, "proportional_editing_falloff") && !RNA_property_is_set(op->ptr, "proportional_editing_falloff")) {
 			ts->prop_mode = t->prop_mode;
 		}
 		
-		if(t->spacetype == SPACE_VIEW3D)
-		{
-			if (RNA_struct_find_property(op->ptr, "constraint_orientation") && !RNA_property_is_set(op->ptr, "constraint_orientation"))
-			{
+		/* do we check for parameter? */
+		if (t->modifiers & MOD_SNAP) {
+			ts->snap_flag |= SCE_SNAP;
+		} else {
+			ts->snap_flag &= ~SCE_SNAP;
+		}
+
+		if(t->spacetype == SPACE_VIEW3D) {
+			if (RNA_struct_find_property(op->ptr, "constraint_orientation") && !RNA_property_is_set(op->ptr, "constraint_orientation")) {
 				View3D *v3d = t->view;
 	
 				v3d->twmode = t->current_orientation;

Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h	2009-11-26 19:32:33 UTC (rev 24934)
+++ trunk/blender/source/blender/editors/transform/transform.h	2009-11-26 19:47:55 UTC (rev 24935)
@@ -83,11 +83,13 @@
 */
 
 typedef struct TransSnap {
+	short	mode;
 	short	modePoint;
 	short	modeTarget;
-	short	mode;
+	short	modeSelect;
 	short	align;
 	short	project;
+	short	peel;
 	short  	status;
 	float	snapPoint[3]; /* snapping from this point */
 	float	snapTarget[3]; /* to this point */
@@ -371,7 +373,7 @@
 /* TransInfo->modifiers */
 #define	MOD_CONSTRAINT_SELECT	0x01
 #define	MOD_PRECISION			0x02
-#define	MOD_SNAP_GEARS			0x04
+#define	MOD_SNAP				0x04
 #define	MOD_CONSTRAINT_PLANE	0x08
 
 
@@ -412,15 +414,10 @@
 #define TD_MIRROR_EDGE	 	(1 << 16) 	/* For editmode mirror, clamp to x = 0 */
 
 /* transsnap->status */
-#define SNAP_ON			1
-#define SNAP_FORCED		2
-#define TARGET_INIT		4
-#define POINT_INIT		8
+#define SNAP_FORCED		1
+#define TARGET_INIT		2
+#define POINT_INIT		4
 
-/* transsnap->modePoint */
-#define SNAP_GRID			0
-#define SNAP_GEO			1
-
 /* transsnap->modeTarget */
 #define SNAP_CLOSEST		0
 #define SNAP_CENTER			1

Modified: trunk/blender/source/blender/editors/transform/transform_constraints.c
===================================================================

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list