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--release/scripts/op/wm.py4
-rw-r--r--source/blender/editors/include/ED_transform.h2
-rw-r--r--source/blender/editors/transform/transform_generics.c24
-rw-r--r--source/blender/editors/transform/transform_ops.c44
-rw-r--r--source/blender/editors/transform/transform_snap.c26
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;