[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37817] branches/bmesh/blender/source/ blender/editors/mesh/bmesh_select.c: Brought back loop multiselect:

Geoffrey Bantle hairbat at yahoo.com
Sun Jun 26 03:11:06 CEST 2011


Revision: 37817
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37817
Author:   briggs
Date:     2011-06-26 01:11:03 +0000 (Sun, 26 Jun 2011)
Log Message:
-----------
Brought back loop multiselect:
----------------------------------------------
Loop multiselect operator brought back. It can
be accessed via the select->edge loop and
select->edge ring menu entries or through the 
ctrl-e edge specials menu.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c	2011-06-25 23:50:50 UTC (rev 37816)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c	2011-06-26 01:11:03 UTC (rev 37817)
@@ -895,51 +895,58 @@
 	BMW_End(&walker);
 }
 
-static int loop_multiselect(bContext *UNUSED(C), wmOperator *UNUSED(op))
+static int loop_multiselect(bContext *C, wmOperator *op)
 {
-#if 0 //BMESH_TODO
 	Object *obedit= CTX_data_edit_object(C);
-	BMEditMesh *em= EM_GetBMEditMesh(((Mesh *)obedit->data));
+	BMEditMesh *em = ((Mesh*)obedit->data)->edit_btmesh;
 	BMEdge *eed;
 	BMEdge **edarray;
-	int edindex, edfirstcount;
+	int edindex;
 	int looptype= RNA_boolean_get(op->ptr, "ring");
 	
-	/* sets em->totedgesel */
-	EM_nedges_selected(em);
+	BMIter iter;
+	int totedgesel = 0;
+
+	for(eed = BMIter_New(&iter, em->bm, BM_EDGES_OF_MESH, NULL);
+	    eed; eed = BMIter_Step(&iter)){
+
+		if(BM_TestHFlag(eed, BM_SELECT)){
+			totedgesel++;
+		}
+	}
+
 	
-	edarray = MEM_mallocN(sizeof(BMEdge*)*em->totedgesel,"edge array");
+	edarray = MEM_mallocN(sizeof(BMEdge*)*totedgesel,"edge array");
 	edindex = 0;
-	edfirstcount = em->totedgesel;
 	
-	for(eed=em->edges.first; eed; eed=eed->next){
-		if(eed->f&SELECT){
+	for(eed = BMIter_New(&iter, em->bm, BM_EDGES_OF_MESH, NULL);
+	    eed; eed = BMIter_Step(&iter)){
+
+		if(BM_TestHFlag(eed, BM_SELECT)){
 			edarray[edindex] = eed;
-			edindex += 1;
+			edindex++;
 		}
 	}
 	
 	if(looptype){
-		for(edindex = 0; edindex < edfirstcount; edindex +=1){
+		for(edindex = 0; edindex < totedgesel; edindex +=1){
 			eed = edarray[edindex];
-			edgering_select(em, eed,SELECT);
+			walker_select(em, BMW_EDGERING, eed, 1);
 		}
-		EM_selectmode_flush(em);
+		EDBM_selectmode_flush(em);
 	}
 	else{
-		for(edindex = 0; edindex < edfirstcount; edindex +=1){
+		for(edindex = 0; edindex < totedgesel; edindex +=1){
 			eed = edarray[edindex];
-			edgeloop_select(em, eed,SELECT);
+			walker_select(em, BMW_LOOP, eed, 1);
 		}
-		EM_selectmode_flush(em);
+		EDBM_selectmode_flush(em);
 	}
 	MEM_freeN(edarray);
 //	if (EM_texFaceCheck())
 	
 	WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit);
 
-	EM_EndBMEditMesh(obedit->data, em);
-#endif
 	return OPERATOR_FINISHED;	
 }
 




More information about the Bf-blender-cvs mailing list