forked from bartvdbraak/blender
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().
This commit is contained in:
parent
ef2dc9b175
commit
753056d4e8
@ -258,6 +258,14 @@ BMVert *BM_edge_other_vert(BMEdge *e, BMVert *v)
|
||||
return bmesh_edge_other_vert_get(e, 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.
|
||||
@ -283,6 +291,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.
|
||||
*/
|
||||
@ -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).
|
||||
|
@ -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__ */
|
||||
|
Loading…
Reference in New Issue
Block a user