Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-03-19 05:57:42 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-03-19 05:57:42 +0400
commit753056d4e82094fe8993c0efade081600b14359b (patch)
tree16b811ffbc7d51c52afc9f027a36a8a273479258 /source/blender/bmesh
parentef2dc9b175813d7d2ffcdceed3b362ee66189077 (diff)
BMesh utility functions, not used yet,
- BM_edge_loop_pair incase you need the loops rather then the faces. - BM_edge_ordered_verts_ex() - accepts a loop argument. - BM_edge_length_calc() - simple length calc, useful if the edge is in some array, saves assigning a var and using len_v3v2().
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.c49
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.h4
2 files changed, 49 insertions, 4 deletions
diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c
index 341bb877f93..53b393b3140 100644
--- a/source/blender/bmesh/intern/bmesh_queries.c
+++ b/source/blender/bmesh/intern/bmesh_queries.c
@@ -259,6 +259,14 @@ BMVert *BM_edge_other_vert(BMEdge *e, BMVert *v)
}
/**
+ * Returms edge length
+ */
+float BM_edge_length_calc(BMEdge *e)
+{
+ return len_v3v3(e->v1->co, e->v2->co);
+}
+
+/**
* Utility function, since enough times we have an edge
* and want to access 2 connected faces.
*
@@ -284,6 +292,31 @@ int BM_edge_face_pair(BMEdge *e, BMFace **r_fa, BMFace **r_fb)
}
/**
+ * Utility function, since enough times we have an edge
+ * and want to access 2 connected loops.
+ *
+ * \return TRUE when only 2 faces are found.
+ */
+int BM_edge_loop_pair(BMEdge *e, BMLoop **r_la, BMLoop **r_lb)
+{
+ BMLoop *la, *lb;
+
+ if ((la = e->l) &&
+ (lb = la->radial_next) &&
+ (lb->radial_next == la))
+ {
+ *r_la = la;
+ *r_lb = lb;
+ return TRUE;
+ }
+ else {
+ *r_la = NULL;
+ *r_lb = NULL;
+ return FALSE;
+ }
+}
+
+/**
* Returns the number of edges around this vertex.
*/
int BM_vert_edge_count(BMVert *v)
@@ -599,11 +632,14 @@ BMLoop *BM_face_vert_share_loop(BMFace *f, BMVert *v)
* BM_face_create_ngon() on an arbitrary array of verts,
* though be sure to pick an edge which has a face.
*/
-void BM_edge_ordered_verts(BMEdge *edge, BMVert **r_v1, BMVert **r_v2)
+void BM_edge_ordered_verts_ex(BMEdge *edge, BMVert **r_v1, BMVert **r_v2,
+ BMLoop *edge_loop)
{
- if ((edge->l == NULL) ||
- (((edge->l->prev->v == edge->v1) && (edge->l->v == edge->v2)) ||
- ((edge->l->v == edge->v1) && (edge->l->next->v == edge->v2)))
+ BLI_assert(edge_loop->e == edge);
+
+ if ((edge_loop == NULL) ||
+ (((edge_loop->prev->v == edge->v1) && (edge_loop->v == edge->v2)) ||
+ ((edge_loop->v == edge->v1) && (edge_loop->next->v == edge->v2)))
)
{
*r_v1 = edge->v1;
@@ -615,6 +651,11 @@ void BM_edge_ordered_verts(BMEdge *edge, BMVert **r_v1, BMVert **r_v2)
}
}
+void BM_edge_ordered_verts(BMEdge *edge, BMVert **r_v1, BMVert **r_v2)
+{
+ BM_edge_ordered_verts_ex(edge, r_v1, r_v2, edge->l);
+}
+
/**
* Calculates the angle between the previous and next loops
* (angle at this loops face corner).
diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h
index 2524d090a4e..4bccd869dd4 100644
--- a/source/blender/bmesh/intern/bmesh_queries.h
+++ b/source/blender/bmesh/intern/bmesh_queries.h
@@ -37,7 +37,9 @@ int BM_edge_in_face(BMFace *f, BMEdge *e);
int BM_vert_in_edge(BMEdge *e, BMVert *v);
int BM_verts_in_edge(BMVert *v1, BMVert *v2, BMEdge *e);
+float BM_edge_length_calc(BMEdge *e);
int BM_edge_face_pair(BMEdge *e, BMFace **r_fa, BMFace **r_fb);
+int BM_edge_loop_pair(BMEdge *e, BMLoop **r_la, BMLoop **r_lb);
BMVert *BM_edge_other_vert(BMEdge *e, BMVert *v);
BMLoop *BM_face_other_edge_loop(BMFace *f, BMEdge *e, BMVert *v);
BMLoop *BM_face_other_vert_loop(BMFace *f, BMVert *v_prev, BMVert *v);
@@ -78,5 +80,7 @@ BMVert *BM_edge_share_vert(BMEdge *e1, BMEdge *e2);
BMLoop *BM_face_vert_share_loop(BMFace *f, BMVert *v);
void BM_edge_ordered_verts(BMEdge *edge, BMVert **r_v1, BMVert **r_v2);
+void BM_edge_ordered_verts_ex(BMEdge *edge, BMVert **r_v1, BMVert **r_v2,
+ BMLoop *edge_loop);
#endif /* __BMESH_QUERIES_H__ */