Add missing snap properties to transform operator.

This is used to force snap on and off when needed.

Also, when transform is not run modal, it will use default values for PET and snap properties (False) instead of scene settings. No need to force them off when calling transform with Exec.
This commit is contained in:
Martin Poirier 2009-11-27 16:15:34 +00:00
parent 994776811f
commit 20a2100a36
5 changed files with 61 additions and 39 deletions

@ -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",

@ -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 */

@ -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);

@ -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)

@ -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;