[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