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--source/blender/editors/object/object_ops.c4
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c64
-rw-r--r--source/blender/editors/transform/transform.c52
-rw-r--r--source/blender/editors/transform/transform.h17
-rw-r--r--source/blender/editors/transform/transform_constraints.c4
-rw-r--r--source/blender/editors/transform/transform_generics.c4
-rw-r--r--source/blender/editors/transform/transform_ops.c44
-rw-r--r--source/blender/editors/transform/transform_snap.c62
8 files changed, 145 insertions, 106 deletions
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index 522ca45dc3d..c9a0b3f0614 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -340,10 +340,6 @@ void ED_object_generic_keymap(struct wmKeyConfig *keyconf, struct wmKeyMap *keym
{
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 */
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 0ec151046d6..84e54abc20c 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -1693,10 +1693,11 @@ static char *snapmode_pup(void)
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,36 +2173,37 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
}
/* 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)) {
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 775e33e542c..cd267f51601 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -507,9 +507,9 @@ static char *transform_to_undostr(TransInfo *t)
#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 @@ void transform_modal_keymap(wmKeyConfig *keyconf)
{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 @@ void transform_modal_keymap(wmKeyConfig *keyconf)
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 @@ void transformEvent(TransInfo *t, wmEvent *event)
}
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 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
}
// 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;
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index b8ef50507d3..1d284d2cc5b 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -83,11 +83,13 @@ typedef struct NumInput {
*/
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 @@ typedef struct TransInfo {
/* 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,14 +414,9 @@ typedef struct TransInfo {
#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
-
-/* transsnap->modePoint */
-#define SNAP_GRID 0
-#define SNAP_GEO 1
+#define SNAP_FORCED 1
+#define TARGET_INIT 2
+#define POINT_INIT 4
/* transsnap->modeTarget */
#define SNAP_CLOSEST 0
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index da8f0c4d0e9..f59803924d5 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -290,7 +290,7 @@ static void applyAxisConstraintVec(TransInfo *t, TransData *td, float in[3], flo
mul_m3_v3(t->con.pmtx, out);
// With snap, a projection is alright, no need to correct for view alignment
- if ((t->tsnap.status & SNAP_ON) == 0) {
+ if (!(t->tsnap.mode != SCE_SNAP_MODE_INCREMENT && t->modifiers & MOD_SNAP)) {
if (getConstraintSpaceDimension(t) == 2) {
if (out[0] != 0.0f || out[1] != 0.0f || out[2] != 0.0f) {
planeProjection(t, in, out);
@@ -316,7 +316,7 @@ static void applyAxisConstraintVec(TransInfo *t, TransData *td, float in[3], flo
}
/*
- * Generic callback for object based spacial constraints applied to linear motion
+ * Generic callback for object based spatial constraints applied to linear motion
*
* At first, the following is applied to the first data in the array
* The IN vector in projected into the constrained space and then further
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index d3c0e91e57c..7fa4f8b0ffc 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1048,6 +1048,10 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
t->options |= CTX_NO_PET;
}
+ /* Snapping */
+ if (ts->snap_flag & SCE_SNAP) {
+ t->modifiers |= MOD_SNAP;
+ }
setTransformViewMatrices(t);
initNumInput(&t->num);
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 67b7f60e728..e01f4373516 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -84,6 +84,38 @@ TransformModeItem transform_modes[] =
{NULL, 0}
};
+static int snap_type_exec(bContext *C, wmOperator *op)
+{
+ ToolSettings *ts= CTX_data_tool_settings(C);
+
+ ts->snap_mode = RNA_enum_get(op->ptr,"type");
+
+ WM_event_add_notifier(C, NC_SCENE|ND_MODE, NULL); /* header redraw */
+
+ return OPERATOR_FINISHED;
+}
+
+void TFM_OT_snap_type(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Snap Type";
+ ot->description= "Set the snap element type.";
+ ot->idname= "TFM_OT_snap_type";
+
+ /* api callbacks */
+ ot->invoke= WM_menu_invoke;
+ ot->exec= snap_type_exec;
+
+ ot->poll= ED_operator_areaactive;
+
+ /* flags */
+ ot->flag= OPTYPE_UNDO;
+
+ /* props */
+ RNA_def_enum(ot->srna, "type", snap_element_items, 0, "Type", "Set the snap element type");
+
+}
+
static int select_orientation_exec(bContext *C, wmOperator *op)
{
int orientation = RNA_enum_get(op->ptr, "orientation");
@@ -344,7 +376,7 @@ void Properties_Proportional(struct wmOperatorType *ot)
void Properties_Snapping(struct wmOperatorType *ot, short align)
{
RNA_def_boolean(ot->srna, "snap", 0, "Snap to Point", "");
- RNA_def_enum(ot->srna, "snap_mode", snap_mode_items, 0, "Mode", "");
+ RNA_def_enum(ot->srna, "snap_target", snap_target_items, 0, "Target", "");
RNA_def_float_vector(ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX);
if (align)
@@ -700,6 +732,8 @@ void transform_operatortypes(void)
WM_operatortype_append(TFM_OT_select_orientation);
WM_operatortype_append(TFM_OT_create_orientation);
WM_operatortype_append(TFM_OT_delete_orientation);
+
+ WM_operatortype_append(TFM_OT_snap_type);
}
void transform_keymap_for_space(struct wmKeyConfig *keyconf, struct wmKeyMap *keymap, int spaceid)
@@ -737,6 +771,11 @@ void transform_keymap_for_space(struct wmKeyConfig *keyconf, struct wmKeyMap *ke
km = WM_keymap_add_item(keymap, "TFM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0);
+ km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", LEFTCTRLKEY, KM_CLICK, 0, 0);
+ RNA_string_set(km->ptr, "path", "scene.tool_settings.snap");
+
+ km = WM_keymap_add_item(keymap, "TFM_OT_snap_type", LEFTCTRLKEY, KM_CLICK, KM_SHIFT, 0);
+
break;
case SPACE_ACTION:
km= WM_keymap_add_item(keymap, "TFM_OT_transform", GKEY, KM_PRESS, 0, 0);
@@ -808,6 +847,9 @@ void transform_keymap_for_space(struct wmKeyConfig *keyconf, struct wmKeyMap *ke
km = WM_keymap_add_item(keymap, "TFM_OT_resize", SKEY, KM_PRESS, 0, 0);
km = WM_keymap_add_item(keymap, "TFM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0);
+
+ km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", LEFTCTRLKEY, KM_CLICK, 0, 0);
+ RNA_string_set(km->ptr, "path", "scene.tool_settings.snap");
break;
default:
break;
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index be3d3579344..bbea9d4ba25 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -125,8 +125,8 @@ int BIF_snappingSupported(Object *obedit)
void drawSnapping(const struct bContext *C, TransInfo *t)
{
- if ((t->tsnap.status & (SNAP_ON|POINT_INIT|TARGET_INIT)) == (SNAP_ON|POINT_INIT|TARGET_INIT) &&
- (t->modifiers & MOD_SNAP_GEARS))
+ if ((t->tsnap.status & (POINT_INIT|TARGET_INIT)) == (POINT_INIT|TARGET_INIT) &&
+ (t->modifiers & MOD_SNAP))
{
char col[4] = {1, 0, 1};
@@ -205,7 +205,8 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
int handleSnapping(TransInfo *t, wmEvent *event)
{
int status = 0;
-
+
+#if 0 // XXX need a proper selector for all snap mode
if (BIF_snappingSupported(t->obedit) && event->type == TABKEY && event->shift)
{
/* toggle snap and reinit */
@@ -213,6 +214,7 @@ int handleSnapping(TransInfo *t, wmEvent *event)
initSnapping(t, NULL);
status = 1;
}
+#endif
return status;
}
@@ -220,7 +222,7 @@ int handleSnapping(TransInfo *t, wmEvent *event)
void applyProject(TransInfo *t)
{
/* XXX FLICKER IN OBJECT MODE */
- if ((t->tsnap.project) && (t->tsnap.status & SNAP_ON) && (t->modifiers & MOD_SNAP_GEARS))
+ if ((t->tsnap.project) && (t->modifiers & MOD_SNAP) && (t->modifiers & MOD_SNAP))
{
TransData *td = t->data;
float tvec[3];
@@ -256,7 +258,7 @@ void applyProject(TransInfo *t)
project_float(t->ar, iloc, mval);
- if (snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.mode))
+ if (snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.modeTarget))
{
// if(t->flag & (T_EDIT|T_POSE)) {
// mul_m4_v3(imat, loc);
@@ -286,8 +288,8 @@ void applySnapping(TransInfo *t, float *vec)
t->tsnap.applySnap(t, vec);
}
- else if ((t->tsnap.status & SNAP_ON) &&
- (t->modifiers & MOD_SNAP_GEARS))
+ else if ((t->tsnap.mode != SCE_SNAP_MODE_INCREMENT) &&
+ (t->modifiers & MOD_SNAP))
{
double current = PIL_check_seconds_timer();
@@ -310,9 +312,9 @@ void applySnapping(TransInfo *t, float *vec)
void resetSnapping(TransInfo *t)
{
t->tsnap.status = 0;
- t->tsnap.mode = 0;
t->tsnap.align = 0;
- t->tsnap.modePoint = 0;
+ t->tsnap.mode = 0;
+ t->tsnap.modeSelect = 0;
t->tsnap.modeTarget = 0;
t->tsnap.last = 0;
t->tsnap.applySnap = NULL;
@@ -346,7 +348,7 @@ void initSnapping(TransInfo *t, wmOperator *op)
Object *obedit = t->obedit;
Scene *scene = t->scene;
int snapping = 0;
- short snap_mode = t->settings->snap_target;
+ short snap_target = t->settings->snap_target;
resetSnapping(t);
@@ -355,7 +357,7 @@ void initSnapping(TransInfo *t, wmOperator *op)
if (RNA_boolean_get(op->ptr, "snap"))
{
snapping = 1;
- snap_mode = RNA_enum_get(op->ptr, "snap_mode");
+ snap_target = RNA_enum_get(op->ptr, "snap_target");
t->tsnap.status |= SNAP_FORCED|POINT_INIT;
RNA_float_get_array(op->ptr, "snap_point", t->tsnap.snapPoint);
@@ -379,6 +381,7 @@ void initSnapping(TransInfo *t, wmOperator *op)
snapping = ((ts->snap_flag & SCE_SNAP) == SCE_SNAP);
t->tsnap.align = ((t->settings->snap_flag & SCE_SNAP_ROTATE) == SCE_SNAP_ROTATE);
t->tsnap.project = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
+ t->tsnap.peel = ((t->settings->snap_flag & SCE_SNAP_PROJECT) == SCE_SNAP_PROJECT);
}
/* force project off when not supported */
@@ -387,25 +390,23 @@ void initSnapping(TransInfo *t, wmOperator *op)
t->tsnap.project = 0;
}
+ t->tsnap.mode = ts->snap_mode;
+
if ((t->spacetype == SPACE_VIEW3D || t->spacetype == SPACE_IMAGE) && // Only 3D view or UV
- (t->flag & T_CAMERA) == 0) { // Not with camera selected
- setSnappingCallback(t, snap_mode);
+ (t->flag & T_CAMERA) == 0) { // Not with camera selected in camera view
+ setSnappingCallback(t, snap_target);
/* Edit mode */
if (t->tsnap.applySnap != NULL && // A snapping function actually exist
- (snapping) && // Only if the snap flag is on
(obedit != NULL && ELEM3(obedit->type, OB_MESH, OB_ARMATURE, OB_CURVE)) ) // Temporary limited to edit mode meshes, armature, curves
{
- t->tsnap.status |= SNAP_ON;
- t->tsnap.modePoint = SNAP_GEO;
-
if (t->flag & T_PROP_EDIT)
{
- t->tsnap.mode = SNAP_NOT_OBEDIT;
+ t->tsnap.modeSelect = SNAP_NOT_OBEDIT;
}
else
{
- t->tsnap.mode = SNAP_ALL;
+ t->tsnap.modeSelect = SNAP_ALL;
}
}
/* Particles edit mode*/
@@ -413,29 +414,24 @@ void initSnapping(TransInfo *t, wmOperator *op)
(snapping) && // Only if the snap flag is on
(obedit == NULL && BASACT->object && BASACT->object->mode & OB_MODE_PARTICLE_EDIT ))
{
- t->tsnap.status |= SNAP_ON;
- t->tsnap.modePoint = SNAP_GEO;
- t->tsnap.mode = SNAP_ALL;
+ t->tsnap.modeSelect = SNAP_ALL;
}
/* Object mode */
else if (t->tsnap.applySnap != NULL && // A snapping function actually exist
- (snapping) && // Only if the snap flag is on
(obedit == NULL) ) // Object Mode
{
- t->tsnap.status |= SNAP_ON;
- t->tsnap.modePoint = SNAP_GEO;
- t->tsnap.mode = SNAP_NOT_SELECTED;
+ t->tsnap.modeSelect = SNAP_NOT_SELECTED;
}
else
{
/* Grid if snap is not possible */
- t->tsnap.modePoint = SNAP_GRID;
+ t->tsnap.mode = SCE_SNAP_MODE_INCREMENT;
}
}
else
{
/* Always grid outside of 3D view */
- t->tsnap.modePoint = SNAP_GRID;
+ t->tsnap.mode = SCE_SNAP_MODE_INCREMENT;
}
}
@@ -627,7 +623,7 @@ void CalcSnapGeometry(TransInfo *t, float *vec)
mval[0] = t->mval[0];
mval[1] = t->mval[1];
- if (t->settings->snap_mode == SCE_SNAP_MODE_VOLUME)
+ if (t->tsnap.mode == SCE_SNAP_MODE_VOLUME)
{
ListBase depth_peels;
DepthPeel *p1, *p2;
@@ -720,7 +716,7 @@ void CalcSnapGeometry(TransInfo *t, float *vec)
}
else
{
- found = snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.mode);
+ found = snapObjectsTransform(t, mval, &dist, loc, no, t->tsnap.modeSelect);
}
if (found == 1)
@@ -1828,7 +1824,7 @@ void snapGrid(TransInfo *t, float *val) {
GearsType action;
// Only do something if using Snap to Grid
- if (t->tsnap.modePoint != SNAP_GRID)
+ if (t->tsnap.mode != SCE_SNAP_MODE_INCREMENT)
return;
if(t->mode==TFM_ROTATION || t->mode==TFM_WARP || t->mode==TFM_TILT || t->mode==TFM_TRACKBALL || t->mode==TFM_BONE_ROLL)
@@ -1839,10 +1835,10 @@ void snapGrid(TransInfo *t, float *val) {
invert = U.flag & USER_AUTOGRABGRID;
if(invert) {
- action = (t->modifiers & MOD_SNAP_GEARS) ? NO_GEARS: BIG_GEARS;
+ action = (t->modifiers & MOD_SNAP) ? NO_GEARS: BIG_GEARS;
}
else {
- action = (t->modifiers & MOD_SNAP_GEARS) ? BIG_GEARS : NO_GEARS;
+ action = (t->modifiers & MOD_SNAP) ? BIG_GEARS : NO_GEARS;
}
if (action == BIG_GEARS && (t->modifiers & MOD_PRECISION)) {