[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57684] trunk/blender/source/blender: add api calls for BM_mesh_active_vert/edge_get.

Campbell Barton ideasman42 at gmail.com
Mon Jun 24 06:51:56 CEST 2013


Revision: 57684
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57684
Author:   campbellbarton
Date:     2013-06-24 04:51:56 +0000 (Mon, 24 Jun 2013)
Log Message:
-----------
add api calls for BM_mesh_active_vert/edge_get.
inspecting the edit-selection inline was cumbersome.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
    trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
    trunk/blender/source/blender/editors/mesh/editmesh_path.c
    trunk/blender/source/blender/editors/mesh/editmesh_select.c
    trunk/blender/source/blender/editors/mesh/editmesh_utils.c
    trunk/blender/source/blender/editors/mesh/mesh_navmesh.c
    trunk/blender/source/blender/editors/mesh/meshtools.c
    trunk/blender/source/blender/editors/space_view3d/drawobject.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/uvedit/uvedit_draw.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
    trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2013-06-24 04:41:03 UTC (rev 57683)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.c	2013-06-24 04:51:56 UTC (rev 57684)
@@ -555,12 +555,12 @@
 }
 
 /* this replaces the active flag used in uv/face mode */
-void BM_active_face_set(BMesh *bm, BMFace *efa)
+void BM_mesh_active_face_set(BMesh *bm, BMFace *efa)
 {
 	bm->act_face = efa;
 }
 
-BMFace *BM_active_face_get(BMesh *bm, const bool is_sloppy, const bool is_selected)
+BMFace *BM_mesh_active_face_get(BMesh *bm, const bool is_sloppy, const bool is_selected)
 {
 	if (bm->act_face && (!is_selected || BM_elem_flag_test(bm->act_face, BM_ELEM_SELECT))) {
 		return bm->act_face;
@@ -600,6 +600,45 @@
 	return NULL;
 }
 
+BMEdge *BM_mesh_active_edge_get(BMesh *bm)
+{
+	if (bm->selected.last) {
+		BMEditSelection *ese = bm->selected.last;
+
+		if (ese && ese->htype == BM_EDGE) {
+			return (BMEdge *)ese->ele;
+		}
+	}
+
+	return NULL;
+}
+
+BMVert *BM_mesh_active_vert_get(BMesh *bm)
+{
+	if (bm->selected.last) {
+		BMEditSelection *ese = bm->selected.last;
+
+		if (ese && ese->htype == BM_VERT) {
+			return (BMVert *)ese->ele;
+		}
+	}
+
+	return NULL;
+}
+
+BMElem *BM_mesh_active_elem_get(BMesh *bm)
+{
+	if (bm->selected.last) {
+		BMEditSelection *ese = bm->selected.last;
+
+		if (ese) {
+			return ese->ele;
+		}
+	}
+
+	return NULL;
+}
+
 /**
  * Generic way to get data from an EditSelection type
  * These functions were written to be used by the Modifier widget
@@ -763,7 +802,7 @@
 bool BM_select_history_active_get(BMesh *bm, BMEditSelection *ese)
 {
 	BMEditSelection *ese_last = bm->selected.last;
-	BMFace *efa = BM_active_face_get(bm, false, false);
+	BMFace *efa = BM_mesh_active_face_get(bm, false, false);
 
 	ese->next = ese->prev = NULL;
 

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_marking.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2013-06-24 04:41:03 UTC (rev 57683)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_marking.h	2013-06-24 04:51:56 UTC (rev 57684)
@@ -70,8 +70,11 @@
 int BM_mesh_elem_hflag_count_disabled(BMesh *bm, const char htype, const char hflag, const bool respecthide);
 
 /* edit selection stuff */
-void    BM_active_face_set(BMesh *bm, BMFace *f);
-BMFace *BM_active_face_get(BMesh *bm, const bool is_sloppy, const bool is_selected);
+void    BM_mesh_active_face_set(BMesh *bm, BMFace *f);
+BMFace *BM_mesh_active_face_get(BMesh *bm, const bool is_sloppy, const bool is_selected);
+BMEdge *BM_mesh_active_edge_get(BMesh *bm);
+BMVert *BM_mesh_active_vert_get(BMesh *bm);
+BMElem *BM_mesh_active_elem_get(BMesh *bm);
 
 void    BM_editselection_center(BMEditSelection *ese, float r_center[3]);
 void    BM_editselection_normal(BMEditSelection *ese, float r_normal[3]);

Modified: trunk/blender/source/blender/editors/mesh/editmesh_path.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_path.c	2013-06-24 04:41:03 UTC (rev 57683)
+++ trunk/blender/source/blender/editors/mesh/editmesh_path.c	2013-06-24 04:51:56 UTC (rev 57684)
@@ -83,28 +83,22 @@
 	/* unlike edge/face versions, this uses a bmesh operator */
 
 	BMEditMesh *em = vc->em;
+	BMesh *bm = em->bm;
 	BMVert *v_dst;
 	float dist = 75.0f;
 	const bool use_length = true;
 
 	v_dst = EDBM_vert_find_nearest(vc, &dist, false, false);
 	if (v_dst) {
-		struct UserData user_data = {vc->em->bm, vc->obedit->data, vc->scene};
+		struct UserData user_data = {bm, vc->obedit->data, vc->scene};
 		LinkNode *path = NULL;
+		BMVert *v_act = BM_mesh_active_vert_get(bm);
 
-		if (em->bm->selected.last) {
-			BMEditSelection *ese = em->bm->selected.last;
-
-			if (ese && ese->htype == BM_VERT) {
-				BMVert *v_act;
-				v_act = (BMVert *)ese->ele;
-				if (v_act != v_dst) {
-					if ((path = BM_mesh_calc_path_vert(em->bm, v_act, v_dst, use_length,
-					                                   &user_data, verttag_filter_cb)))
-					{
-						BM_select_history_remove(em->bm, v_act);
-					}
-				}
+		if (v_act && (v_act != v_dst)) {
+			if ((path = BM_mesh_calc_path_vert(bm, v_act, v_dst, use_length,
+			                                   &user_data, verttag_filter_cb)))
+			{
+				BM_select_history_remove(bm, v_act);
 			}
 		}
 
@@ -137,9 +131,9 @@
 
 		/* even if this is selected it may not be in the selection list */
 		if (BM_elem_flag_test(v_dst, BM_ELEM_SELECT) == 0)
-			BM_select_history_remove(em->bm, v_dst);
+			BM_select_history_remove(bm, v_dst);
 		else
-			BM_select_history_store(em->bm, v_dst);
+			BM_select_history_store(bm, v_dst);
 
 		EDBM_update_generic(em, false, false);
 
@@ -254,31 +248,25 @@
 static bool mouse_mesh_shortest_path_edge(ViewContext *vc)
 {
 	BMEditMesh *em = vc->em;
+	BMesh *bm = em->bm;
 	BMEdge *e_dst;
 	float dist = 75.0f;
 	const bool use_length = true;
 
 	e_dst = EDBM_edge_find_nearest(vc, &dist);
 	if (e_dst) {
-		struct UserData user_data = {vc->em->bm, vc->obedit->data, vc->scene};
+		struct UserData user_data = {bm, vc->obedit->data, vc->scene};
 		LinkNode *path = NULL;
 		Mesh *me = vc->obedit->data;
+		BMEdge *e_act = BM_mesh_active_edge_get(bm);
 
 		edgetag_ensure_cd_flag(vc->scene, em->ob->data);
 
-		if (em->bm->selected.last) {
-			BMEditSelection *ese = em->bm->selected.last;
-
-			if (ese && ese->htype == BM_EDGE) {
-				BMEdge *e_act;
-				e_act = (BMEdge *)ese->ele;
-				if (e_act != e_dst) {
-					if ((path = BM_mesh_calc_path_edge(em->bm, e_act, e_dst, use_length,
-					                                   &user_data, edgetag_filter_cb)))
-					{
-						BM_select_history_remove(em->bm, e_act);
-					}
-				}
+		if (e_act && (e_act != e_dst)) {
+			if ((path = BM_mesh_calc_path_edge(bm, e_act, e_dst, use_length,
+			                                   &user_data, edgetag_filter_cb)))
+			{
+				BM_select_history_remove(bm, e_act);
 			}
 		}
 
@@ -312,9 +300,9 @@
 
 		/* even if this is selected it may not be in the selection list */
 		if (edgetag_test_cb(e_dst, &user_data) == 0)
-			BM_select_history_remove(em->bm, e_dst);
+			BM_select_history_remove(bm, e_dst);
 		else
-			BM_select_history_store(em->bm, e_dst);
+			BM_select_history_store(bm, e_dst);
 
 		/* force drawmode for mesh */
 		switch (vc->scene->toolsettings->edge_mode) {
@@ -373,22 +361,23 @@
 static bool mouse_mesh_shortest_path_face(ViewContext *vc)
 {
 	BMEditMesh *em = vc->em;
+	BMesh *bm = em->bm;
 	BMFace *f_dst;
 	float dist = 75.0f;
 	const bool use_length = true;
 
 	f_dst = EDBM_face_find_nearest(vc, &dist);
 	if (f_dst) {
-		struct UserData user_data = {vc->em->bm, vc->obedit->data, vc->scene};
+		struct UserData user_data = {bm, vc->obedit->data, vc->scene};
 		LinkNode *path = NULL;
-		BMFace *f_act = BM_active_face_get(em->bm, false, true);
+		BMFace *f_act = BM_mesh_active_face_get(bm, false, true);
 
 		if (f_act) {
 			if (f_act != f_dst) {
-				if ((path = BM_mesh_calc_path_face(em->bm, f_act, f_dst, use_length,
+				if ((path = BM_mesh_calc_path_face(bm, f_act, f_dst, use_length,
 				                                   &user_data, facetag_filter_cb)))
 				{
-					BM_select_history_remove(em->bm, f_act);
+					BM_select_history_remove(bm, f_act);
 				}
 			}
 		}
@@ -422,11 +411,11 @@
 
 		/* even if this is selected it may not be in the selection list */
 		if (facetag_test_cb(f_dst, &user_data) == 0)
-			BM_select_history_remove(em->bm, f_dst);
+			BM_select_history_remove(bm, f_dst);
 		else
-			BM_select_history_store(em->bm, f_dst);
+			BM_select_history_store(bm, f_dst);
 
-		BM_active_face_set(em->bm, f_dst);
+		BM_mesh_active_face_set(bm, f_dst);
 
 		EDBM_update_generic(em, false, false);
 
@@ -513,6 +502,7 @@
 {
 	Object *ob = CTX_data_edit_object(C);
 	BMEditMesh *em = BKE_editmesh_from_object(ob);
+	BMesh *bm = em->bm;
 	BMIter iter;
 	BMEditSelection *ese_src, *ese_dst;
 	BMElem *ele_src = NULL, *ele_dst = NULL, *ele;
@@ -520,7 +510,7 @@
 	const bool use_length = RNA_boolean_get(op->ptr, "use_length");
 
 	/* first try to find vertices in edit selection */
-	ese_src = em->bm->selected.last;
+	ese_src = bm->selected.last;
 	if (ese_src && (ese_dst = ese_src->prev) && (ese_src->htype  == ese_dst->htype)) {
 		ele_src = ese_src->ele;
 		ele_dst = ese_dst->ele;
@@ -528,8 +518,8 @@
 	else {
 		/* if selection history isn't available, find two selected elements */
 		ele_src = ele_dst = NULL;
-		if ((em->selectmode & SCE_SELECT_VERTEX) && (em->bm->totvertsel >= 2)) {
-			BM_ITER_MESH (ele, &iter, em->bm, BM_VERTS_OF_MESH) {
+		if ((em->selectmode & SCE_SELECT_VERTEX) && (bm->totvertsel >= 2)) {
+			BM_ITER_MESH (ele, &iter, bm, BM_VERTS_OF_MESH) {
 				if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) {
 					if      (ele_src == NULL) ele_src = ele;
 					else if (ele_dst == NULL) ele_dst = ele;
@@ -538,9 +528,9 @@
 			}
 		}
 
-		if ((ele_dst == NULL) && (em->selectmode & SCE_SELECT_EDGE) && (em->bm->totedgesel >= 2)) {
+		if ((ele_dst == NULL) && (em->selectmode & SCE_SELECT_EDGE) && (bm->totedgesel >= 2)) {
 			ele_src = NULL;
-			BM_ITER_MESH (ele, &iter, em->bm, BM_EDGES_OF_MESH) {
+			BM_ITER_MESH (ele, &iter, bm, BM_EDGES_OF_MESH) {
 				if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) {
 					if      (ele_src == NULL) ele_src = ele;
 					else if (ele_dst == NULL) ele_dst = ele;
@@ -549,9 +539,9 @@
 			}
 		}
 
-		if ((ele_dst == NULL) && (em->selectmode & SCE_SELECT_FACE) && (em->bm->totfacesel >= 2)) {
+		if ((ele_dst == NULL) && (em->selectmode & SCE_SELECT_FACE) && (bm->totfacesel >= 2)) {
 			ele_src = NULL;
-			BM_ITER_MESH (ele, &iter, em->bm, BM_FACES_OF_MESH) {
+			BM_ITER_MESH (ele, &iter, bm, BM_FACES_OF_MESH) {
 				if (BM_elem_flag_test(ele, BM_ELEM_SELECT)) {
 					if      (ele_src == NULL) ele_src = ele;
 					else if (ele_dst == NULL) ele_dst = ele;
@@ -566,17 +556,17 @@
 		switch (ele_src->head.htype) {
 			case BM_VERT:
 				path = BM_mesh_calc_path_vert(
-				           em->bm, (BMVert *)ele_src, (BMVert *)ele_dst, use_length,
+				           bm, (BMVert *)ele_src, (BMVert *)ele_dst, use_length,
 				           NULL, (bool (*)(BMVert *, void *))ele_filter_visible_cb);
 				break;
 			case BM_EDGE:
 				path = BM_mesh_calc_path_edge(
-				           em->bm, (BMEdge *)ele_src, (BMEdge *)ele_dst, use_length,
+				           bm, (BMEdge *)ele_src, (BMEdge *)ele_dst, use_length,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list