[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24952] trunk/blender: Add missing snap properties to transform operator.

Martin Poirier theeth at yahoo.com
Fri Nov 27 17:15:34 CET 2009


Revision: 24952
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24952
Author:   theeth
Date:     2009-11-27 17:15:34 +0100 (Fri, 27 Nov 2009)

Log Message:
-----------
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.

Modified Paths:
--------------
    trunk/blender/release/scripts/op/wm.py
    trunk/blender/source/blender/editors/include/ED_transform.h
    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/release/scripts/op/wm.py
===================================================================
--- trunk/blender/release/scripts/op/wm.py	2009-11-27 15:15:03 UTC (rev 24951)
+++ trunk/blender/release/scripts/op/wm.py	2009-11-27 16:15:34 UTC (rev 24952)
@@ -30,14 +30,10 @@
     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",

Modified: trunk/blender/source/blender/editors/include/ED_transform.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_transform.h	2009-11-27 15:15:03 UTC (rev 24951)
+++ trunk/blender/source/blender/editors/include/ED_transform.h	2009-11-27 16:15:34 UTC (rev 24952)
@@ -135,7 +135,7 @@
 /* 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 */

Modified: trunk/blender/source/blender/editors/transform/transform_generics.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_generics.c	2009-11-27 15:15:03 UTC (rev 24951)
+++ trunk/blender/source/blender/editors/transform/transform_generics.c	2009-11-27 16:15:34 UTC (rev 24952)
@@ -930,6 +930,11 @@
 	
 	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 @@
 		}
 		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 @@
 		t->options |= CTX_NO_PET;
 	}
 	
-	/* Snapping */
-	if (ts->snap_flag & SCE_SNAP) {
-		t->modifiers |= MOD_SNAP;
-	}
-	
 	setTransformViewMatrices(t);
 	initNumInput(&t->num);
 	initNDofInput(&t->ndof);

Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_ops.c	2009-11-27 15:15:03 UTC (rev 24951)
+++ trunk/blender/source/blender/editors/transform/transform_ops.c	2009-11-27 16:15:34 UTC (rev 24952)
@@ -354,13 +354,9 @@
 		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 @@
 	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 @@
 
 	Properties_Constraints(ot);
 
-	Properties_Snapping(ot, 1);
+	Properties_Snapping(ot, 1, 1);
 }
 
 void TFM_OT_resize(struct wmOperatorType *ot)
@@ -445,7 +443,7 @@
 
 	Properties_Constraints(ot);
 
-	Properties_Snapping(ot, 0);
+	Properties_Snapping(ot, 1, 0);
 }
 
 
@@ -469,6 +467,8 @@
 	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 @@
 
 	Properties_Constraints(ot);
 
-	Properties_Snapping(ot, 0);
+	Properties_Snapping(ot, 1, 0);
 }
 
 void TFM_OT_tilt(struct wmOperatorType *ot)
@@ -522,6 +522,8 @@
 	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 @@
 
 	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 @@
 
 	RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
 
+	Properties_Snapping(ot, 0, 0);
+
 	// XXX Shear axis?
 //	Properties_Constraints(ot);
 }
@@ -594,6 +600,8 @@
 	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 @@
 	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 @@
 	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)

Modified: trunk/blender/source/blender/editors/transform/transform_snap.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_snap.c	2009-11-27 15:15:03 UTC (rev 24951)
+++ trunk/blender/source/blender/editors/transform/transform_snap.c	2009-11-27 16:15:34 UTC (rev 24952)
@@ -347,20 +347,27 @@
 	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 @@
 			}
 		}
 	}
-	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 @@
 		}
 		/* 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;





More information about the Bf-blender-cvs mailing list