[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59096] trunk/blender/source/blender: fix for bug in rip tool, isolated verts would remain selected after ripping.

Campbell Barton ideasman42 at gmail.com
Tue Aug 13 03:52:40 CEST 2013


Revision: 59096
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59096
Author:   campbellbarton
Date:     2013-08-13 01:52:36 +0000 (Tue, 13 Aug 2013)
Log Message:
-----------
fix for bug in rip tool, isolated verts would remain selected after ripping.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/bmesh.h
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
    trunk/blender/source/blender/bmesh/operators/bmo_split_edges.c
    trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c
    trunk/blender/source/blender/editors/mesh/editmesh_rip.c
    trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c

Modified: trunk/blender/source/blender/bmesh/bmesh.h
===================================================================
--- trunk/blender/source/blender/bmesh/bmesh.h	2013-08-13 01:00:07 UTC (rev 59095)
+++ trunk/blender/source/blender/bmesh/bmesh.h	2013-08-13 01:52:36 UTC (rev 59096)
@@ -271,6 +271,7 @@
 
 #include "tools/bmesh_bevel.h"
 #include "tools/bmesh_decimate.h"
+#include "tools/bmesh_edgesplit.h"
 #include "tools/bmesh_path.h"
 #include "tools/bmesh_triangulate.h"
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2013-08-13 01:00:07 UTC (rev 59095)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2013-08-13 01:52:36 UTC (rev 59096)
@@ -70,6 +70,79 @@
 }
 
 /**
+ * \brief Select Mode Clean
+ *
+ * Remove isolated selected elements when in a mode doesn't support them.
+ * eg: in edge-mode a selected vertex must be connected to a selected edge.
+ *
+ * \note this could be made apart of #BM_mesh_select_mode_flush_ex
+ */
+void BM_mesh_select_mode_clean_ex(BMesh *bm, const short selectmode)
+{
+	if (selectmode & SCE_SELECT_VERTEX) {
+		/* pass */
+	}
+	else if (selectmode & SCE_SELECT_EDGE) {
+		BMIter iter;
+
+		if (bm->totvertsel) {
+			BMVert *v;
+			BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+				BM_elem_flag_disable(v, BM_ELEM_SELECT);
+			}
+			bm->totvertsel = 0;
+		}
+
+		if (bm->totedgesel) {
+			BMEdge *e;
+			BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
+				if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
+					BM_vert_select_set(bm, e->v1, true);
+					BM_vert_select_set(bm, e->v2, true);
+				}
+			}
+		}
+	}
+	else if (selectmode & SCE_SELECT_FACE) {
+		BMIter iter;
+
+		if (bm->totvertsel) {
+			BMVert *v;
+			BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+				BM_elem_flag_disable(v, BM_ELEM_SELECT);
+			}
+			bm->totvertsel = 0;
+		}
+
+		if (bm->totedgesel) {
+			BMEdge *e;
+			BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
+				BM_elem_flag_disable(e, BM_ELEM_SELECT);
+			}
+			bm->totedgesel = 0;
+		}
+
+		if (bm->totfacesel) {
+			BMFace *f;
+			BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
+				if (BM_elem_flag_test(f, BM_ELEM_SELECT)) {
+					BMLoop *l_iter, *l_first;
+					l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+					do {
+						BM_edge_select_set(bm, l_iter->e, true);
+					} while ((l_iter = l_iter->next) != l_first);
+				}
+			}
+		}
+	}
+}
+
+void BM_mesh_select_mode_clean(BMesh *bm)
+{
+	BM_mesh_select_mode_clean_ex(bm, bm->selectmode);
+}
+
+/**
  * \brief Select Mode Flush
  *
  * Makes sure to flush selections 'upwards'

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2013-08-13 01:00:07 UTC (rev 59095)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2013-08-13 01:52:36 UTC (rev 59096)
@@ -59,6 +59,9 @@
 void BM_edge_select_set(BMesh *bm, BMEdge *e, const bool select);
 void BM_face_select_set(BMesh *bm, BMFace *f, const bool select);
 
+void BM_mesh_select_mode_clean_ex(BMesh *bm, const short selectmode);
+void BM_mesh_select_mode_clean(BMesh *bm);
+
 void BM_mesh_select_mode_set(BMesh *bm, int selectmode);
 void BM_mesh_select_mode_flush_ex(BMesh *bm, const short selectmode);
 void BM_mesh_select_mode_flush(BMesh *bm);

Modified: trunk/blender/source/blender/bmesh/operators/bmo_split_edges.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_split_edges.c	2013-08-13 01:00:07 UTC (rev 59095)
+++ trunk/blender/source/blender/bmesh/operators/bmo_split_edges.c	2013-08-13 01:52:36 UTC (rev 59096)
@@ -29,7 +29,6 @@
 #include "BLI_utildefines.h"
 
 #include "bmesh.h"
-#include "tools/bmesh_edgesplit.h"
 
 #include "intern/bmesh_operators_private.h" /* own include */
 

Modified: trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c	2013-08-13 01:00:07 UTC (rev 59095)
+++ trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c	2013-08-13 01:52:36 UTC (rev 59096)
@@ -47,7 +47,6 @@
 #include "BKE_curve.h"
 
 #include "bmesh.h"
-#include "tools/bmesh_edgesplit.h"
 
 #include "intern/bmesh_operators_private.h" /* own include */
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_rip.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_rip.c	2013-08-13 01:00:07 UTC (rev 59095)
+++ trunk/blender/source/blender/editors/mesh/editmesh_rip.c	2013-08-13 01:52:36 UTC (rev 59096)
@@ -50,8 +50,6 @@
 #include "ED_transform.h"
 #include "ED_view3d.h"
 
-#include "tools/bmesh_edgesplit.h"
-
 #include "mesh_intern.h"  /* own include */
 
 /**
@@ -941,6 +939,9 @@
 	                            ar, projectMat, fmval);
 	MEM_freeN(eloop_pairs);
 
+	/* deselect loose verts */
+	BM_mesh_select_mode_clean_ex(bm, SCE_SELECT_EDGE);
+
 	if (do_fill && fill_uloop_pairs) {
 		edbm_tagged_loop_pairs_do_fill_faces(bm, fill_uloop_pairs);
 		MEM_freeN(fill_uloop_pairs);
@@ -951,8 +952,6 @@
 		return OPERATOR_CANCELLED;
 	}
 
-	EDBM_selectmode_flush(em);
-
 	return OPERATOR_FINISHED;
 }
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c	2013-08-13 01:00:07 UTC (rev 59095)
+++ trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c	2013-08-13 01:52:36 UTC (rev 59096)
@@ -44,7 +44,6 @@
 #include "BKE_modifier.h"
 
 #include "bmesh.h"
-#include "tools/bmesh_edgesplit.h"
 
 #include "DNA_object_types.h"
 




More information about the Bf-blender-cvs mailing list