[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59132] trunk/blender/source/blender/bmesh /intern: bmesh utility functions for storing an editselection after another in the list .

Campbell Barton ideasman42 at gmail.com
Wed Aug 14 11:13:11 CEST 2013


Revision: 59132
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59132
Author:   campbellbarton
Date:     2013-08-14 09:13:11 +0000 (Wed, 14 Aug 2013)
Log Message:
-----------
bmesh utility functions for storing an editselection after another in the list.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.h

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2013-08-14 08:14:50 UTC (rev 59131)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2013-08-14 09:13:11 UTC (rev 59132)
@@ -816,6 +816,13 @@
 	}
 }
 
+static BMEditSelection *bm_select_history_create(BMHeader *ele)
+{
+	BMEditSelection *ese = (BMEditSelection *) MEM_callocN(sizeof(BMEditSelection), "BMEdit Selection");
+	ese->htype = ele->htype;
+	ese->ele = (BMElem *)ele;
+	return ese;
+}
 
 /* --- macro wrapped funcs --- */
 bool _bm_select_history_check(BMesh *bm, const BMHeader *ele)
@@ -837,9 +844,7 @@
 
 void _bm_select_history_store_notest(BMesh *bm, BMHeader *ele)
 {
-	BMEditSelection *ese = (BMEditSelection *) MEM_callocN(sizeof(BMEditSelection), "BMEdit Selection");
-	ese->htype = ele->htype;
-	ese->ele = (BMElem *)ele;
+	BMEditSelection *ese = bm_select_history_create(ele);
 	BLI_addtail(&(bm->selected), ese);
 }
 
@@ -849,6 +854,20 @@
 		BM_select_history_store_notest(bm, (BMElem *)ele);
 	}
 }
+
+
+void _bm_select_history_store_after_notest(BMesh *bm, BMEditSelection *ese_ref, BMHeader *ele)
+{
+	BMEditSelection *ese = bm_select_history_create(ele);
+	BLI_insertlinkafter(&(bm->selected), ese_ref, ese);
+}
+
+void _bm_select_history_store_after(BMesh *bm, BMEditSelection *ese_ref, BMHeader *ele)
+{
+	if (!BM_select_history_check(bm, (BMElem *)ele)) {
+		BM_select_history_store_after_notest(bm, ese_ref, (BMElem *)ele);
+	}
+}
 /* --- end macro wrapped funcs --- */
 
 
@@ -861,16 +880,13 @@
 
 void BM_select_history_validate(BMesh *bm)
 {
-	BMEditSelection *ese, *nextese;
+	BMEditSelection *ese, *ese_next;
 
-	ese = bm->selected.first;
-
-	while (ese) {
-		nextese = ese->next;
+	for (ese = bm->selected.first; ese; ese = ese_next) {
+		ese_next = ese->next;
 		if (!BM_elem_flag_test(ese->ele, BM_ELEM_SELECT)) {
 			BLI_freelinkN(&(bm->selected), ese);
 		}
-		ese = nextese;
 	}
 }
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2013-08-14 08:14:50 UTC (rev 59131)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2013-08-14 09:13:11 UTC (rev 59132)
@@ -87,11 +87,15 @@
 #define BM_select_history_remove(bm, ele)       _bm_select_history_remove(bm,       &(ele)->head)
 #define BM_select_history_store_notest(bm, ele) _bm_select_history_store_notest(bm, &(ele)->head)
 #define BM_select_history_store(bm, ele)        _bm_select_history_store(bm,        &(ele)->head)
+#define BM_select_history_store_after_notest(bm, ese_ref, ele) _bm_select_history_store_after_notest(bm, ese_ref, &(ele)->head)
+#define BM_select_history_store_after(bm, ese, ese_ref)        _bm_select_history_store_after(bm,        ese_ref, &(ele)->head)
 
 bool _bm_select_history_check(BMesh *bm,  const BMHeader *ele);
 bool _bm_select_history_remove(BMesh *bm,       BMHeader *ele);
 void _bm_select_history_store_notest(BMesh *bm, BMHeader *ele);
 void _bm_select_history_store(BMesh *bm,        BMHeader *ele);
+void _bm_select_history_store_after(BMesh *bm,  BMEditSelection *ese_ref, BMHeader *ele);
+void _bm_select_history_store_after_notest(BMesh *bm,  BMEditSelection *ese_ref, BMHeader *ele);
 
 void BM_select_history_validate(BMesh *bm);
 void BM_select_history_clear(BMesh *em);




More information about the Bf-blender-cvs mailing list