[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12228] branches/bmesh/source/blender/ blenkernel/intern/BME_tools.c: -> small extrude fix

Geoffrey Bantle hairbat at yahoo.com
Mon Oct 8 05:34:31 CEST 2007


Revision: 12228
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12228
Author:   briggs
Date:     2007-10-08 05:34:30 +0200 (Mon, 08 Oct 2007)

Log Message:
-----------
-> small extrude fix
	
Small problem in the extrude face code meant that old faces were getting deleted all the time, when
in fact they should stay sometimes. This isn't perfect solution, but should be equivalent to the
old editmesh feature wise at least...

Modified Paths:
--------------
    branches/bmesh/source/blender/blenkernel/intern/BME_tools.c

Modified: branches/bmesh/source/blender/blenkernel/intern/BME_tools.c
===================================================================
--- branches/bmesh/source/blender/blenkernel/intern/BME_tools.c	2007-10-08 00:58:46 UTC (rev 12227)
+++ branches/bmesh/source/blender/blenkernel/intern/BME_tools.c	2007-10-08 03:34:30 UTC (rev 12228)
@@ -576,7 +576,7 @@
 	BME_Poly *f, *nf;
 	MemArena *edgearena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE);
 	float vec[3];
-	int i;
+	int i, j, del_old =0;
 	
 
 	//loop through faces, then loop through their verts. If the verts havnt been visited yet, duplicate these.
@@ -598,6 +598,25 @@
 		}
 	}
 	
+	//find out if we delete old faces or not. This needs to be improved a lot.....
+	for(e=BME_first(bm,BME_EDGE);e;e=BME_next(bm,BME_EDGE,e)){
+		i = 0;
+		j = 0;
+		if(e->loop){
+			l = e->loop;
+			do{
+				if(BME_SELECTED(l->f)) i++;
+				else j++;
+				l=BME_radial_nextloop(l);
+			}while(l!=e->loop);
+		}
+		if(i && (j < i)){
+			del_old = 1;
+			break;
+		}
+	}
+	
+	
 	//build a new edge net, insert the new edges into the edge hash
 	for(f=BME_first(bm,BME_POLY);f;f=BME_next(bm,BME_POLY,f)){
 		if(BME_SELECTED(f)){
@@ -628,7 +647,7 @@
 			}
 			nf=BME_MF(bm,v1,v2,edar,f->len);
 			nf->tflag2 = 1; // mark for select
-			f->tflag1 = 1; //mark for delete
+			if(del_old) f->tflag1 = 1; //mark for delete
 			MEM_freeN(edar);
 		}
 	}





More information about the Bf-blender-cvs mailing list