diff options
-rw-r--r-- | release/scripts/op/wm.py | 4 | ||||
-rw-r--r-- | source/blender/editors/include/ED_transform.h | 2 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 24 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_ops.c | 44 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_snap.c | 26 |
5 files changed, 61 insertions, 39 deletions
diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py index f4cb136693f..f93c0d47e28 100644 --- a/release/scripts/op/wm.py +++ b/release/scripts/op/wm.py @@ -30,14 +30,10 @@ class MESH_OT_delete_edgeloop(bpy.types.Operator): bl_label = "Delete Edge Loop" def execute(self, context): - snap = bpy.context.scene.tool_settings.snap - bpy.context.scene.tool_settings.snap = False - bpy.ops.tfm.edge_slide(value=1.0) bpy.ops.mesh.select_more() bpy.ops.mesh.remove_doubles() - bpy.context.scene.tool_settings.snap = snap return ('FINISHED',) rna_path_prop = StringProperty(name="Context Attributes", diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h index 0f17599daae..065867a3bb3 100644 --- a/source/blender/editors/include/ED_transform.h +++ b/source/blender/editors/include/ED_transform.h @@ -135,7 +135,7 @@ void BIF_selectOrientation(void); /* to be able to add operator properties to other operators */ void Properties_Proportional(struct wmOperatorType *ot); -void Properties_Snapping(struct wmOperatorType *ot, short align); +void Properties_Snapping(struct wmOperatorType *ot, short fullsnap, short align); void Properties_Constraints(struct wmOperatorType *ot); /* view3d manipulators */ diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 7fa4f8b0ffc..8b7c4b7503b 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -930,6 +930,11 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) unit_m3(t->mat); + /* if there's an event, we're modal */ + if (event) { + t->flag |= T_MODAL; + } + t->spacetype = sa->spacetype; if(t->spacetype == SPACE_VIEW3D) { @@ -1010,11 +1015,15 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) } else { - if ((t->options & CTX_NO_PET) == 0 && (ts->proportional != PROP_EDIT_OFF)) { - t->flag |= T_PROP_EDIT; - - if(ts->proportional == PROP_EDIT_CONNECTED) - t->flag |= T_PROP_CONNECTED; + /* use settings from scene only if modal */ + if (t->flag & T_MODAL) + { + if ((t->options & CTX_NO_PET) == 0 && (ts->proportional != PROP_EDIT_OFF)) { + t->flag |= T_PROP_EDIT; + + if(ts->proportional == PROP_EDIT_CONNECTED) + t->flag |= T_PROP_CONNECTED; + } } } @@ -1048,11 +1057,6 @@ 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); initNDofInput(&t->ndof); diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index e01f4373516..0c54b5273e3 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -354,13 +354,9 @@ static int transform_invoke(bContext *C, wmOperator *op, wmEvent *event) return transform_exec(C, op); } else { - TransInfo *t = op->customdata; - /* add temp handler */ WM_event_add_modal_handler(C, op); - t->flag |= T_MODAL; // XXX meh maybe somewhere else - op->flag |= OP_GRAB_POINTER; // XXX maybe we want this with the manipulator only? return OPERATOR_RUNNING_MODAL; } @@ -373,16 +369,18 @@ void Properties_Proportional(struct wmOperatorType *ot) RNA_def_float(ot->srna, "proportional_size", 1, 0, FLT_MAX, "Proportional Size", "", 0, 100); } -void Properties_Snapping(struct wmOperatorType *ot, short align) +void Properties_Snapping(struct wmOperatorType *ot, short fullsnap, short align) { - RNA_def_boolean(ot->srna, "snap", 0, "Snap to Point", ""); - 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); + RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", ""); - if (align) - { - RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", ""); - RNA_def_float_vector(ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX); + if (fullsnap) { + 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) { + RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", ""); + RNA_def_float_vector(ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX); + } } } @@ -419,7 +417,7 @@ void TFM_OT_translate(struct wmOperatorType *ot) Properties_Constraints(ot); - Properties_Snapping(ot, 1); + Properties_Snapping(ot, 1, 1); } void TFM_OT_resize(struct wmOperatorType *ot) @@ -445,7 +443,7 @@ void TFM_OT_resize(struct wmOperatorType *ot) Properties_Constraints(ot); - Properties_Snapping(ot, 0); + Properties_Snapping(ot, 1, 0); } @@ -469,6 +467,8 @@ void TFM_OT_trackball(struct wmOperatorType *ot) Properties_Proportional(ot); RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); + + Properties_Snapping(ot, 0, 0); } void TFM_OT_rotate(struct wmOperatorType *ot) @@ -494,7 +494,7 @@ void TFM_OT_rotate(struct wmOperatorType *ot) Properties_Constraints(ot); - Properties_Snapping(ot, 0); + Properties_Snapping(ot, 1, 0); } void TFM_OT_tilt(struct wmOperatorType *ot) @@ -522,6 +522,8 @@ void TFM_OT_tilt(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); Properties_Constraints(ot); + + Properties_Snapping(ot, 0, 0); } void TFM_OT_warp(struct wmOperatorType *ot) @@ -545,7 +547,9 @@ void TFM_OT_warp(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); - // XXX Shear axis? + Properties_Snapping(ot, 0, 0); + + // XXX Warp axis? // Properties_Constraints(ot); } @@ -570,6 +574,8 @@ void TFM_OT_shear(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); + Properties_Snapping(ot, 0, 0); + // XXX Shear axis? // Properties_Constraints(ot); } @@ -594,6 +600,8 @@ void TFM_OT_shrink_fatten(struct wmOperatorType *ot) Properties_Proportional(ot); RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); + + Properties_Snapping(ot, 0, 0); } void TFM_OT_tosphere(struct wmOperatorType *ot) @@ -617,6 +625,8 @@ void TFM_OT_tosphere(struct wmOperatorType *ot) Properties_Proportional(ot); RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); + + Properties_Snapping(ot, 0, 0); } void TFM_OT_mirror(struct wmOperatorType *ot) @@ -656,6 +666,8 @@ void TFM_OT_edge_slide(struct wmOperatorType *ot) RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f); RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", ""); + + Properties_Snapping(ot, 0, 0); } void TFM_OT_transform(struct wmOperatorType *ot) diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c index bbea9d4ba25..d36b7c9b903 100644 --- a/source/blender/editors/transform/transform_snap.c +++ b/source/blender/editors/transform/transform_snap.c @@ -347,20 +347,27 @@ void initSnapping(TransInfo *t, wmOperator *op) ToolSettings *ts = t->settings; Object *obedit = t->obedit; Scene *scene = t->scene; - int snapping = 0; short snap_target = t->settings->snap_target; resetSnapping(t); + /* if snap property exists */ if (op && RNA_struct_find_property(op->ptr, "snap") && RNA_property_is_set(op->ptr, "snap")) { if (RNA_boolean_get(op->ptr, "snap")) { - snapping = 1; - snap_target = RNA_enum_get(op->ptr, "snap_target"); + t->modifiers |= MOD_SNAP; + + if (RNA_property_is_set(op->ptr, "snap_target")) + { + 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); + if (RNA_property_is_set(op->ptr, "snap_point")) + { + RNA_float_get_array(op->ptr, "snap_point", t->tsnap.snapPoint); + t->tsnap.status |= SNAP_FORCED|POINT_INIT; + } /* snap align only defined in specific cases */ if (RNA_struct_find_property(op->ptr, "snap_align")) @@ -376,9 +383,13 @@ void initSnapping(TransInfo *t, wmOperator *op) } } } - else + /* use scene defaults only when transform is modal */ + else if (t->flag & T_MODAL) { - snapping = ((ts->snap_flag & SCE_SNAP) == SCE_SNAP); + if (ts->snap_flag & SCE_SNAP) { + t->modifiers |= MOD_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); @@ -411,7 +422,6 @@ void initSnapping(TransInfo *t, wmOperator *op) } /* Particles edit mode*/ else if (t->tsnap.applySnap != NULL && // A snapping function actually exist - (snapping) && // Only if the snap flag is on (obedit == NULL && BASACT->object && BASACT->object->mode & OB_MODE_PARTICLE_EDIT )) { t->tsnap.modeSelect = SNAP_ALL; |