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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to