BMesh: add BM_face_share_vert_check/count
authorCampbell Barton <ideasman42@gmail.com>
Thu, 17 Dec 2015 07:06:05 +0000 (18:06 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 17 Dec 2015 07:06:05 +0000 (18:06 +1100)
source/blender/bmesh/intern/bmesh_queries.c
source/blender/bmesh/intern/bmesh_queries.h

index e7a93c6aad55097e70e9138571bc401d42db0165..f8cc66fc0dfe8a98b4fdadef6b7fbfee35a1e9db 100644 (file)
@@ -1215,6 +1215,43 @@ bool BM_face_share_edge_check(BMFace *f1, BMFace *f2)
        return false;
 }
 
        return false;
 }
 
+/**
+ *  Counts the number of verts two faces share (if any).
+ */
+int BM_face_share_vert_count(BMFace *f_a, BMFace *f_b)
+{
+       BMLoop *l_iter;
+       BMLoop *l_first;
+       int count = 0;
+
+       l_iter = l_first = BM_FACE_FIRST_LOOP(f_a);
+       do {
+               if (BM_vert_in_face(l_iter->v, f_b)) {
+                       count++;
+               }
+       } while ((l_iter = l_iter->next) != l_first);
+
+       return count;
+}
+
+/**
+ *  Returns true if the faces share a vert.
+ */
+bool BM_face_share_vert_check(BMFace *f_a, BMFace *f_b)
+{
+       BMLoop *l_iter;
+       BMLoop *l_first;
+
+       l_iter = l_first = BM_FACE_FIRST_LOOP(f_a);
+       do {
+               if (BM_vert_in_face(l_iter->v, f_b)) {
+                       return true;
+               }
+       } while ((l_iter = l_iter->next) != l_first);
+
+       return false;
+}
+
 /**
  * Test if e1 shares any faces with e2
  */
 /**
  * Test if e1 shares any faces with e2
  */
index cfe291732de4809b07d197a10c43ddf625fecbe8..257743be3ddc3e37c461e33dafd75ddc589eebf9 100644 (file)
@@ -143,10 +143,14 @@ bool    BM_face_exists_overlap(BMVert **varr, const int len, BMFace **r_f_overla
 bool    BM_face_exists_overlap_subset(BMVert **varr, const int len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 
 int     BM_face_share_face_count(BMFace *f_a, BMFace *f_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    BM_face_exists_overlap_subset(BMVert **varr, const int len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 
 int     BM_face_share_face_count(BMFace *f_a, BMFace *f_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-int     BM_face_share_edge_count(BMFace *f1, BMFace *f2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+int     BM_face_share_edge_count(BMFace *f_a, BMFace *f_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+int     BM_face_share_vert_count(BMFace *f_a, BMFace *f_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+
+bool    BM_face_share_face_check(BMFace *f_a, BMFace *f_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+bool    BM_face_share_edge_check(BMFace *f_a, BMFace *f_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+bool    BM_face_share_vert_check(BMFace *f_a, BMFace *f_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
+
 
 
-bool    BM_face_share_face_check(BMFace *f1, BMFace *f2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
-bool    BM_face_share_edge_check(BMFace *f1, BMFace *f2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    BM_edge_share_face_check(BMEdge *e1, BMEdge *e2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    BM_edge_share_quad_check(BMEdge *e1, BMEdge *e2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    BM_edge_share_vert_check(BMEdge *e1, BMEdge *e2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    BM_edge_share_face_check(BMEdge *e1, BMEdge *e2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    BM_edge_share_quad_check(BMEdge *e1, BMEdge *e2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    BM_edge_share_vert_check(BMEdge *e1, BMEdge *e2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();