[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18292] branches/blender2.5/blender/source /blender/editors/transform: 2.5

Martin Poirier theeth at yahoo.com
Sat Jan 3 18:21:32 CET 2009


Revision: 18292
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18292
Author:   theeth
Date:     2009-01-03 18:21:32 +0100 (Sat, 03 Jan 2009)

Log Message:
-----------
2.5

Snapping for editmesh remove a silly bug and make it work with PET. In that case, you can only snap to other object, not to the edit mesh.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/transform/transform.h
    branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform.h	2009-01-03 14:02:14 UTC (rev 18291)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform.h	2009-01-03 17:21:32 UTC (rev 18292)
@@ -77,6 +77,7 @@
 typedef struct TransSnap {
 	short	modePoint;
 	short	modeTarget;
+	int		mode;
 	int  	status;
 	float	snapPoint[3];
 	float	snapTarget[3];

Modified: branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c	2009-01-03 14:02:14 UTC (rev 18291)
+++ branches/blender2.5/blender/source/blender/editors/transform/transform_snap.c	2009-01-03 17:21:32 UTC (rev 18292)
@@ -100,8 +100,9 @@
 float ResizeBetween(TransInfo *t, float p1[3], float p2[3]);
 
 /* Modes */
-#define NOT_SELECTED 0
-#define NOT_ACTIVE 1
+#define SNAP_ALL			0
+#define SNAP_NOT_SELECTED	1
+#define SNAP_NOT_OBEDIT		2
 int snapObjects(TransInfo *t, int *dist, float *loc, float *no, int mode);
 
 
@@ -283,7 +284,7 @@
 void initSnapping(TransInfo *t)
 {
 	Scene *scene = t->scene;
-	Object *obedit = NULL;
+	Object *obedit = t->obedit;
 	resetSnapping(t);
 	
 	if ((t->spacetype == SPACE_VIEW3D || t->spacetype == SPACE_IMAGE) && // Only 3D view or UV
@@ -293,11 +294,19 @@
 		/* Edit mode */
 		if (t->tsnap.applySnap != NULL && // A snapping function actually exist
 			(scene->snap_flag & SCE_SNAP) && // Only if the snap flag is on
-			(obedit != NULL && obedit->type==OB_MESH) && // Temporary limited to edit mode meshes
-			((t->flag & T_PROP_EDIT) == 0) ) // No PET, obviously
+			(obedit != NULL && obedit->type==OB_MESH) ) // Temporary limited to edit mode meshes
 		{
 			t->tsnap.status |= SNAP_ON;
 			t->tsnap.modePoint = SNAP_GEO;
+			
+			if (t->flag & T_PROP_EDIT)
+			{
+				t->tsnap.mode = SNAP_NOT_OBEDIT;
+			}
+			else
+			{
+				t->tsnap.mode = SNAP_ALL;
+			}
 		}
 		/* Object mode */
 		else if (t->tsnap.applySnap != NULL && // A snapping function actually exist
@@ -306,6 +315,7 @@
 		{
 			t->tsnap.status |= SNAP_ON;
 			t->tsnap.modePoint = SNAP_GEO;
+			t->tsnap.mode = SNAP_NOT_SELECTED;
 		}
 		else
 		{	
@@ -508,7 +518,7 @@
 			int found = 0;
 			int dist = 40; // Use a user defined value here
 			
-			found = snapObjects(t, &dist, vec, no, NOT_SELECTED);
+			found = snapObjects(t, &dist, vec, no, t->mode);
 			if (found == 1)
 			{
 				float tangent[3];
@@ -542,7 +552,7 @@
 			int found = 0;
 			int dist = 40; // Use a user defined value here
 
-			found = snapObjects(t, &dist, vec, no, NOT_ACTIVE);
+			found = snapObjects(t, &dist, vec, no, t->mode);
 			if (found == 1)
 			{
 				VECCOPY(t->tsnap.snapPoint, vec);
@@ -658,7 +668,7 @@
 			VecAddf(t->tsnap.snapTarget, t->tsnap.snapTarget, td->center);
 		}
 		
-		VecMulf(t->tsnap.snapTarget, 1.0 / t->total);
+		VecMulf(t->tsnap.snapTarget, 1.0 / i);
 		
 		if(t->flag & (T_EDIT|T_POSE)) {
 			Object *ob= t->obedit?t->obedit:t->poseobj;
@@ -1178,7 +1188,7 @@
 	
 	viewray(t->ar, v3d, t->mval, ray_start, ray_normal);
 
-	if (mode == NOT_ACTIVE)
+	if (mode == SNAP_ALL && t->obedit)
 	{
 		DerivedMesh *dm;
 		Object *ob = t->obedit;
@@ -1192,7 +1202,11 @@
 	}
 	
 	for ( base = scene->base.first; base != NULL; base = base->next ) {
-		if ( BASE_SELECTABLE(v3d, base) && (base->flag & (BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA)) == 0 && ((mode == NOT_SELECTED && (base->flag & (SELECT|BA_WAS_SEL)) == 0) || (mode == NOT_ACTIVE && base != BASACT)) ) {
+		if ( BASE_SELECTABLE(v3d, base) && /* SELECTABLE */
+			(base->flag & (BA_HAS_RECALC_OB|BA_HAS_RECALC_DATA)) == 0 && /* IS NOT AFFECTED BY TRANSFORM */
+			(	(mode == SNAP_NOT_SELECTED && (base->flag & (SELECT|BA_WAS_SEL)) == 0) || /* NOT_SELECTED */
+				((mode == SNAP_NOT_OBEDIT || mode == SNAP_ALL) && base->object != t->obedit)) /* OR NOT OBEDIT */
+			) {
 			Object *ob = base->object;
 			
 			if (ob->transflag & OB_DUPLI)





More information about the Bf-blender-cvs mailing list