[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45798] trunk/blender/source: rip tool wasnt working on a single edge selection in some cases ( own error in recent fix).

Campbell Barton ideasman42 at gmail.com
Fri Apr 20 01:16:58 CEST 2012


Revision: 45798
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45798
Author:   campbellbarton
Date:     2012-04-19 23:16:57 +0000 (Thu, 19 Apr 2012)
Log Message:
-----------
rip tool wasnt working on a single edge selection in some cases (own error in recent fix).

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/bmesh.h
    trunk/blender/source/blender/editors/mesh/editmesh_rip.c
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c
    trunk/blender/source/tools/uncrustify.cfg

Modified: trunk/blender/source/blender/bmesh/bmesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh.h	2012-04-19 22:40:09 UTC (rev 45797)
+++ trunk/blender/source/blender/bmesh/bmesh.h	2012-04-19 23:16:57 UTC (rev 45798)
@@ -202,7 +202,7 @@
 #include "DNA_customdata_types.h" /* BMesh struct in bmesh_class.h uses */
 
 #include <stdlib.h>
-// #include "BLI_utildefines.h"
+#include <stdio.h>
 
 #include "bmesh_class.h"
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_rip.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_rip.c	2012-04-19 22:40:09 UTC (rev 45797)
+++ trunk/blender/source/blender/editors/mesh/editmesh_rip.c	2012-04-19 23:16:57 UTC (rev 45798)
@@ -361,7 +361,7 @@
 	float d;
 	const int totedge_orig = bm->totedge;
 
-	EdgeLoopPair *eloop_pairs;
+	EdgeLoopPair *eloop_pairs = NULL;
 
 	/* running in face mode hardly makes sense, so convert to region loop and rip */
 	if (em->bm->totfacesel) {
@@ -388,7 +388,10 @@
 	/* handle case of one vert selected.  identify
 	 * closest edge around that vert to mouse cursor,
 	 * then rip two adjacent edges in the vert fan. */
+
 	if (bm->totvertsel == 1 && bm->totedgesel == 0 && bm->totfacesel == 0) {
+		/* --- Vert-Rip --- */
+
 		BMEditSelection ese;
 		int totboundary_edge = 0;
 		singlesel = TRUE;
@@ -540,8 +543,13 @@
 		dist = FLT_MAX;
 	}
 	else {
+		/* --- Edge-Rip --- */
 		int totedge;
 		int all_minifold;
+
+		/* important this runs on the original selection, before tempering with tagging */
+		eloop_pairs = edbm_ripsel_looptag_helper(bm);
+
 		/* expand edge selection */
 		BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
 			e2 = NULL;
@@ -598,11 +606,9 @@
 		}
 	}
 
-	eloop_pairs = edbm_ripsel_looptag_helper(bm);
-
 	if (!EDBM_op_init(em, &bmop, op, "edgesplit edges=%he verts=%hv use_verts=%b",
 	                  BM_ELEM_TAG, BM_ELEM_SELECT, TRUE)) {
-		MEM_freeN(eloop_pairs);
+		if (eloop_pairs) MEM_freeN(eloop_pairs);
 		return OPERATOR_CANCELLED;
 	}
 	
@@ -612,26 +618,10 @@
 		EDBM_op_finish(em, &bmop, op, TRUE);
 
 		BKE_report(op->reports, RPT_ERROR, "No edges could be ripped");
-		MEM_freeN(eloop_pairs);
+		if (eloop_pairs) MEM_freeN(eloop_pairs);
 		return OPERATOR_CANCELLED;
 	}
 
-#if 1
-	edbm_ripsel_deselect_helper(bm, eloop_pairs,
-	                            ar, projectMat, fmval);
-	MEM_freeN(eloop_pairs);
-#else
-	{
-		/* simple per edge selection check, saves a lot of code and is almost good enough */
-		BMOIter siter;
-		BMO_ITER (e, &siter, bm, &bmop, "edgeout", BM_EDGE) {
-			if (edbm_rip_edge_side_measure(e, ar, projectMat, fmval) > 0.0f) {
-				BM_elem_select_set(bm, e, FALSE);
-			}
-		}
-	}
-#endif
-
 	if (singlesel) {
 		BMVert *v_best = NULL;
 		float l_prev_co[3], l_next_co[3], l_corner_co[3];
@@ -676,6 +666,11 @@
 		}
 #endif
 	}
+	else {
+		edbm_ripsel_deselect_helper(bm, eloop_pairs,
+		                            ar, projectMat, fmval);
+		MEM_freeN(eloop_pairs);
+	}
 
 	EDBM_selectmode_flush(em);
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-04-19 22:40:09 UTC (rev 45797)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-04-19 23:16:57 UTC (rev 45798)
@@ -350,7 +350,7 @@
 	BMEdge *eed;
 		
 	/* ensure vert flags are consistent for edge selections */
-	BM_ITER_MESH(eed, &iter, em->bm, BM_EDGES_OF_MESH) {
+	BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) {
 		if (BM_elem_flag_test(eed, hflag)) {
 			if (hflag & BM_ELEM_SELECT) {
 				BM_elem_select_set(em->bm, eed->v1, TRUE);
@@ -2663,7 +2663,7 @@
 	}
 
 	/* get the cut curve */
-	RNA_BEGIN(op->ptr, itemptr, "path") {
+	RNA_BEGIN (op->ptr, itemptr, "path") {
 		RNA_float_get_array(&itemptr, "loc", (float *)&curve[len]);
 		len++;
 		if (len >= MAX_CUTS) {
@@ -3917,7 +3917,7 @@
 {
 	BMVert *ve;
 	BMIter iter;
-	char *block/* Just to mark protected vertices */, *t_blk;
+	char *block /* Just to mark protected vertices */, *t_blk;
 	int *randblock, *vmap, *t_idx, *r_idx;
 	int totvert, randomized = 0, /*protected = 0, */ i;
 
@@ -3945,7 +3945,7 @@
 	vmap = randblock;
 	randblock = MEM_mallocN(sizeof(int) * randomized, "randvert randblock");
 	memcpy(randblock, vmap, randomized * sizeof(int));
-	BLI_array_randomize	((void*)randblock, sizeof(int), randomized, seed);
+	BLI_array_randomize((void *)randblock, sizeof(int), randomized, seed);
 	t_blk = block + totvert - 1;
 	t_idx = vmap + totvert - 1;
 	r_idx = randblock + randomized - 1;

Modified: trunk/blender/source/tools/uncrustify.cfg
===================================================================
--- trunk/blender/source/tools/uncrustify.cfg	2012-04-19 22:40:09 UTC (rev 45797)
+++ trunk/blender/source/tools/uncrustify.cfg	2012-04-19 23:16:57 UTC (rev 45798)
@@ -1449,8 +1449,10 @@
 set FOR LOOP_SHOWN_PARTICLES
 set FOR LOOP_DYNAMIC_PARTICLES
 # bmesh_iterators.h
-set FOR BM_ITER
-set FOR BM_ITER_INDEX
+set FOR BM_ITER_MESH
+set FOR BM_ITER_MESH_INDEX
+set FOR BM_ITER_ELEM
+set FOR BM_ITER_ELEM_INDEX
 # bmesh_operator_api.h
 set FOR BMO_ITER
 




More information about the Bf-blender-cvs mailing list