[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14799] trunk/blender/source/blender: transform manipulator didnt follow the active face in some cases, also rotate about active mixed with normal did not work as it did in 2.45, where the active edge could be used

Campbell Barton ideasman42 at gmail.com
Sun May 11 21:58:46 CEST 2008


Revision: 14799
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14799
Author:   campbellbarton
Date:     2008-05-11 21:58:46 +0200 (Sun, 11 May 2008)

Log Message:
-----------
transform manipulator didnt follow the active face in some cases, also rotate about active mixed with normal did not work as it did in 2.45, where the active edge could be used 
as a rotation 
axis (this is quite useful)

Modified Paths:
--------------
    trunk/blender/source/blender/include/BIF_editmesh.h
    trunk/blender/source/blender/src/edit.c
    trunk/blender/source/blender/src/editface.c
    trunk/blender/source/blender/src/editmesh_lib.c
    trunk/blender/source/blender/src/transform_generics.c
    trunk/blender/source/blender/src/transform_manipulator.c
    trunk/blender/source/blender/src/transform_orientations.c

Modified: trunk/blender/source/blender/include/BIF_editmesh.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editmesh.h	2008-05-11 18:45:30 UTC (rev 14798)
+++ trunk/blender/source/blender/include/BIF_editmesh.h	2008-05-11 19:58:46 UTC (rev 14799)
@@ -260,5 +260,6 @@
 
 void EM_set_actFace(struct EditFace *efa);
 struct EditFace * EM_get_actFace(int sloppy);
+int EM_get_actSelection(struct EditSelection *ese);
 
 #endif

Modified: trunk/blender/source/blender/src/edit.c
===================================================================
--- trunk/blender/source/blender/src/edit.c	2008-05-11 18:45:30 UTC (rev 14798)
+++ trunk/blender/source/blender/src/edit.c	2008-05-11 19:58:46 UTC (rev 14799)
@@ -1530,35 +1530,11 @@
 		if (G.obedit->type == OB_MESH)
 		{
 			/* check active */
-			if (G.editMesh->selected.last) {
-				EditSelection *ese = G.editMesh->selected.last;
-				if ( ese->type == EDITVERT ) {
-					EditVert *eve = (EditVert *)ese->data;
-					VECCOPY(curs, eve->co);
-				}
-				else if ( ese->type == EDITEDGE ) {
-					EditEdge *eed = (EditEdge *)ese->data;
-					VecAddf(curs, eed->v1->co, eed->v2->co);
-					VecMulf(curs, 0.5f);
-				}
-				else if ( ese->type == EDITFACE ) {
-					EditFace *efa = (EditFace *)ese->data;
-					
-					if (efa->v4)
-					{
-						VecAddf(curs, efa->v1->co, efa->v2->co);
-						VecAddf(curs, curs, efa->v3->co);
-						VecAddf(curs, curs, efa->v4->co);
-						VecMulf(curs, 0.25f);
-					}
-					else
-					{
-						VecAddf(curs, efa->v1->co, efa->v2->co);
-						VecAddf(curs, curs, efa->v3->co);
-						VecMulf(curs, 1/3.0f);
-					}
-				}
+			EditSelection ese;
+			if (EM_get_actSelection(&ese)) {
+				EM_editselection_center(curs, &ese);
 			}
+			
 			Mat4MulVecfl(G.obedit->obmat, curs);
 		}
 	}

Modified: trunk/blender/source/blender/src/editface.c
===================================================================
--- trunk/blender/source/blender/src/editface.c	2008-05-11 18:45:30 UTC (rev 14798)
+++ trunk/blender/source/blender/src/editface.c	2008-05-11 19:58:46 UTC (rev 14799)
@@ -151,33 +151,6 @@
 	return 1;
 }
 
-#if 0 // not used
-/* returns 0 if not found, otherwise 1 */
-static int facesel_edge_pick(Mesh *me, short *mval, unsigned int *index)
-{
-	int dist;
-	unsigned int min = me->totface + 1;
-	unsigned int max = me->totface + me->totedge + 1;
-
-	if (me->totedge == 0)
-		return 0;
-
-	if (G.vd->flag & V3D_NEEDBACKBUFDRAW) {
-		check_backbuf();
-		persp(PERSP_VIEW);
-	}
-
-	*index = sample_backbuf_rect(mval, 50, min, max, &dist,0,NULL);
-
-	if (*index == 0)
-		return 0;
-
-	(*index)--;
-	
-	return 1;
-}
-#endif
-
 /* only operates on the edit object - this is all thats needed at the moment */
 static void uv_calc_center_vector(float *result, Object *ob, EditMesh *em)
 {

Modified: trunk/blender/source/blender/src/editmesh_lib.c
===================================================================
--- trunk/blender/source/blender/src/editmesh_lib.c	2008-05-11 18:45:30 UTC (rev 14798)
+++ trunk/blender/source/blender/src/editmesh_lib.c	2008-05-11 19:58:46 UTC (rev 14799)
@@ -103,6 +103,35 @@
 	return NULL;
 }
 
+int EM_get_actSelection(EditSelection *ese)
+{
+	EditSelection *ese_last = G.editMesh->selected.last;
+	EditFace *efa = EM_get_actFace(0);
+
+	ese->next = ese->prev = NULL;
+	
+	if (ese_last) {
+		if (ese_last->type == EDITFACE) { /* if there is an active face, use it over the last selected face */
+			if (efa) {
+				ese->data = (void *)efa;
+			} else {
+				ese->data = ese_last->data;
+			}
+			ese->type = EDITFACE;
+		} else {
+			ese->data = ese_last->data;
+			ese->type = ese_last->type;
+		}
+	} else if (efa) { /* no */
+		ese->data = (void *)efa;
+		ese->type = EDITFACE;
+	} else {
+		ese->data = NULL;
+		return 0;
+	}
+	return 1;
+}
+
 /* ********* Selection History ************ */
 static int EM_check_selection(void *data)
 {

Modified: trunk/blender/source/blender/src/transform_generics.c
===================================================================
--- trunk/blender/source/blender/src/transform_generics.c	2008-05-11 18:45:30 UTC (rev 14798)
+++ trunk/blender/source/blender/src/transform_generics.c	2008-05-11 19:58:46 UTC (rev 14799)
@@ -972,11 +972,12 @@
 		calculateCenterMedian(t);
 		break;
 	case V3D_ACTIVE:
+		{
 		/* set median, and if if if... do object center */
-		
+		EditSelection ese;
 		/* EDIT MODE ACTIVE EDITMODE ELEMENT */
-		if (G.obedit && G.obedit->type == OB_MESH && G.editMesh->selected.last) {
-			EM_editselection_center(t->center, G.editMesh->selected.last);
+		if (G.obedit && G.obedit->type == OB_MESH && EM_get_actSelection(&ese)) {
+			EM_editselection_center(t->center, &ese);
 			calculateCenter2D(t);
 			break;
 		} /* END EDIT MODE ACTIVE ELEMENT */
@@ -989,6 +990,8 @@
 				projectIntView(t, t->center, t->center2d);
 			}
 		}
+		
+		}
 	}
 
 	/* setting constraint center */

Modified: trunk/blender/source/blender/src/transform_manipulator.c
===================================================================
--- trunk/blender/source/blender/src/transform_manipulator.c	2008-05-11 18:45:30 UTC (rev 14798)
+++ trunk/blender/source/blender/src/transform_manipulator.c	2008-05-11 19:58:46 UTC (rev 14799)
@@ -230,11 +230,12 @@
 		if(G.obedit->type==OB_MESH) {
 			EditMesh *em = G.editMesh;
 			EditVert *eve;
+			EditSelection ese;
 			float vec[3]= {0,0,0};
 			
 			/* USE LAST SELECTE WITH ACTIVE */
-			if (G.vd->around==V3D_ACTIVE && em->selected.last) {
-				EM_editselection_center(vec, em->selected.last);
+			if (G.vd->around==V3D_ACTIVE && EM_get_actSelection(&ese)) {
+				EM_editselection_center(vec, &ese);
 				calc_tw_center(vec);
 				totsel= 1;
 			} else {
@@ -435,11 +436,11 @@
 			if(G.obedit) {
 				float mat[3][3];
 				int type;
-
+				
 				strcpy(t->spacename, "normal");
-			
-				type = getTransformOrientation(normal, plane, 0);
 				
+				type = getTransformOrientation(normal, plane, (G.vd->around == V3D_ACTIVE));
+				
 				switch (type)
 				{
 					case ORIENTATION_NORMAL:

Modified: trunk/blender/source/blender/src/transform_orientations.c
===================================================================
--- trunk/blender/source/blender/src/transform_orientations.c	2008-05-11 18:45:30 UTC (rev 14798)
+++ trunk/blender/source/blender/src/transform_orientations.c	2008-05-11 19:58:46 UTC (rev 14799)
@@ -379,16 +379,16 @@
 		{
 			EditMesh *em = G.editMesh;
 			EditVert *eve;
+			EditSelection ese;
 			float vec[3]= {0,0,0};
 			
 			/* USE LAST SELECTED WITH ACTIVE */
-			if (activeOnly && em->selected.last)
+			if (activeOnly && EM_get_actSelection(&ese))
 			{
-				EditSelection *ese = em->selected.last;
-				EM_editselection_normal(normal, ese);
-				EM_editselection_plane(plane, ese);
+				EM_editselection_normal(normal, &ese);
+				EM_editselection_plane(plane, &ese);
 				
-				switch (ese->type)
+				switch (ese.type)
 				{
 					case EDITVERT:
 						result = ORIENTATION_VERT;





More information about the Bf-blender-cvs mailing list