[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13541] trunk/blender/source/blender/src/ transform.c: === Custom Transform Orientation ===

Martin Poirier theeth at yahoo.com
Sun Feb 3 19:24:13 CET 2008


Revision: 13541
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13541
Author:   theeth
Date:     2008-02-03 19:24:13 +0100 (Sun, 03 Feb 2008)

Log Message:
-----------
=== Custom Transform Orientation ===

Switch away from using selected list in editmesh, since it isn't always up to date.

This fixes the bug where CTO where not created correctly with box/lasso selecting elements and many others.

Modified Paths:
--------------
    trunk/blender/source/blender/src/transform.c

Modified: trunk/blender/source/blender/src/transform.c
===================================================================
--- trunk/blender/source/blender/src/transform.c	2008-02-03 17:08:54 UTC (rev 13540)
+++ trunk/blender/source/blender/src/transform.c	2008-02-03 18:24:13 UTC (rev 13541)
@@ -234,10 +234,11 @@
 	/* Vertice Selected */
 	if (G.scene->selectmode & SCE_SELECT_VERTEX && (G.totvertsel == 1 || G.totvertsel == 2 || G.totvertsel == 3)) {
 		if (G.totvertsel == 1) {
-			EditSelection *ese;
+			/* EditSelection *ese; */
 			EditVert *eve = NULL;
 			float normal[3];
 	
+			/*
 			for (ese = em->selected.first; ese; ese = ese->next)
 			{
 				if ( ese->type == EDITVERT ) {
@@ -245,7 +246,16 @@
 					break;
 				}
 			}
+			*/
 			
+			for (eve = em->verts.first; eve; eve = eve->next)
+			{
+				if (eve->f & SELECT)
+				{
+					break;
+				}
+			}
+			
 			if (eve == NULL)
 				return -1;
 	
@@ -264,10 +274,12 @@
 			strcpy(name, "Vertex");
 		}
 		else if (G.totvertsel == 2) {
-			EditSelection *ese;
+			/* EditSelection *ese; */
+			EditVert *eve;
 			EditVert *v1 = NULL, *v2 = NULL;
 			float normal[3];
-	
+
+			/*	
 			for (ese = em->selected.first; ese; ese = ese->next)
 			{
 				if ( ese->type == EDITVERT ) {
@@ -280,7 +292,21 @@
 					}
 				}
 			}
+			*/
 			
+			for (eve = em->verts.first; eve; eve = eve->next)
+			{
+				if ( eve->f & SELECT ) {
+					if (v1 == NULL) {
+						v1 = eve; 
+					}
+					else {
+						v2 = eve;
+						break; 
+					}
+				}
+			}
+
 			if (v2 == NULL)
 				return -1;
 	
@@ -299,10 +325,12 @@
 			strcpy(name, "Edge");
 		}
 		else if (G.totvertsel == 3) {
-			EditSelection *ese;
+			/* EditSelection *ese; */
+			EditVert *eve;
 			EditVert *v1 = NULL, *v2 = NULL, *v3 = NULL;
 			float normal[3], tangent[3], cotangent[3];
 	
+			/*
 			for (ese = em->selected.first; ese; ese = ese->next)
 			{
 				if ( ese->type == EDITVERT ) {
@@ -318,7 +346,24 @@
 					}
 				}
 			}
+			*/
 			
+			for (eve = em->verts.first; eve; eve = eve->next)
+			{
+				if ( eve->f & SELECT ) {
+					if (v1 == NULL) {
+						v1 = eve; 
+					}
+					else if (v2 == NULL) {
+						v2 = eve;
+					}
+					else {
+						v3 = eve;
+						break; 
+					}
+				}
+			}
+
 			if (v3 == NULL)
 				return -1;
 	
@@ -345,10 +390,11 @@
 	/* Edge Selected */
 	else if(G.scene->selectmode & SCE_SELECT_EDGE && (G.totedgesel == 1 || G.totedgesel == 2)) {
 		if (G.totedgesel == 1) {
-			EditSelection *ese;
+			/* EditSelection *ese; */
 			EditEdge *eed = NULL;
 			float normal[3];
 	
+			/*
 			for (ese = em->selected.first; ese; ese = ese->next)
 			{
 				if ( ese->type == EDITEDGE ) {
@@ -356,7 +402,15 @@
 					break; 
 				}
 			}
+			*/
 			
+			for (eed = em->edges.first; eed; eed = eed->next)
+			{
+				if ( eed->f & SELECT ) {
+					break; 
+				}
+			}
+			
 			if (eed == NULL)
 				return -1;
 	
@@ -376,11 +430,13 @@
 		}
 		/* If selected edges form a triangle */
 		else if (G.totedgesel == 2 && G.totvertsel == 3) {
-			EditSelection *ese;
+			/* EditSelection *ese; */
+			EditEdge *eed;
 			EditEdge *e1 = NULL, *e2 = NULL;
 			EditVert *v1 = NULL, *v2 = NULL, *v3 = NULL;
 			float normal[3], tangent[3], cotangent[3];
 
+			/*
 			for (ese = em->selected.first; ese; ese = ese->next)
 			{
 				if ( ese->type == EDITEDGE ) {
@@ -393,7 +449,21 @@
 					}
 				}
 			}
+			*/
 			
+			for (eed = em->edges.first; eed; eed = eed->next)
+			{
+				if ( eed->f & SELECT ) {
+					if (e1 == NULL) {
+						e1 = eed; 
+					}
+					else {
+						e2 = eed;
+						break; 
+					}
+				}
+			}
+
 			if (e1->v1 == e2->v1) {
 				v1 = e1->v2;
 				v2 = e1->v1;
@@ -440,14 +510,11 @@
 	}
 	/* Face Selected */
 	else if(G.scene->selectmode & SCE_SELECT_FACE && G.totfacesel == 1) {
-		EditSelection *ese;
+		/* EditSelection *ese; */
 		EditFace *efa = NULL;
 		float normal[3], tangent[3];
 
-		if (confirm == 0 && confirmSpace(set, "Face") == 0) {
-			return -1;
-		}
-
+		/*
 		for (ese = em->selected.first; ese; ese = ese->next)
 		{
 			if ( ese->type == EDITFACE ) {
@@ -455,10 +522,23 @@
 				break; 
 			}
 		}
+		*/
+		
+		for (efa = em->faces.first; efa; efa = efa->next)
+		{
+			if (efa->f & SELECT)
+			{
+				break;
+			}
+		}
 
 		if (efa == NULL)
 			return -1;
 
+		if (confirm == 0 && confirmSpace(set, "Face") == 0) {
+			return -1;
+		}
+
 		VECCOPY(normal, efa->n);
 		VecSubf(tangent, efa->v2->co, efa->v1->co);
 





More information about the Bf-blender-cvs mailing list