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-09 00:00:37 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-03-09 00:00:37 +0400
commitc82c4562477a3f8b2b051299b523131a5a6bb271 (patch)
treeda80cd62ce42d5148b048c2e472118efc6894d52 /source/blender/bmesh/intern
parent284fcd2df22ff7539cc9affbc819293fd3acd5e1 (diff)
bmesh py api, new functions:
* bmesh.utils.face_vert_rip(f, v) * bmesh.utils.loop_rip(l)
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r--source/blender/bmesh/intern/bmesh_core.c20
-rw-r--r--source/blender/bmesh/intern/bmesh_core.h1
-rw-r--r--source/blender/bmesh/intern/bmesh_mods.c12
-rw-r--r--source/blender/bmesh/intern/bmesh_mods.h3
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.c23
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.h1
-rw-r--r--source/blender/bmesh/intern/bmesh_structure.c21
7 files changed, 41 insertions, 40 deletions
diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index 16bc163ba34..31c8e1f8119 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -1930,7 +1930,7 @@ static int bm_edge_cut(BMesh *bm, BMEdge *e, BMLoop *cutl)
*
* \return The newly created BMVert
*/
-static BMVert *bm_urmv_loop(BMesh *bm, BMLoop *sl)
+BMVert *bmesh_urmv_loop(BMesh *bm, BMLoop *sl)
{
BMVert **vtar;
int len, i;
@@ -2007,20 +2007,6 @@ static BMVert *bm_urmv_loop(BMesh *bm, BMLoop *sl)
*/
BMVert *bmesh_urmv(BMesh *bm, BMFace *sf, BMVert *sv)
{
- BMLoop *l_first;
- BMLoop *l_iter;
-
- l_iter = l_first = BM_FACE_FIRST_LOOP(sf);
- do {
- if (l_iter->v == sv) {
- break;
- }
- } while ((l_iter = l_iter->next) != l_first);
-
- if (l_iter->v != sv) {
- /* sv is not part of sf */
- return NULL;
- }
-
- return bm_urmv_loop(bm, l_iter);
+ BMLoop *l = BM_face_vert_share_loop(sf, sv);
+ return bmesh_urmv_loop(bm, l);
}
diff --git a/source/blender/bmesh/intern/bmesh_core.h b/source/blender/bmesh/intern/bmesh_core.h
index f1ff506e590..fe05c69bcae 100644
--- a/source/blender/bmesh/intern/bmesh_core.h
+++ b/source/blender/bmesh/intern/bmesh_core.h
@@ -60,5 +60,6 @@ BMVert *bmesh_semv(BMesh *bm, BMVert *tv, BMEdge *e, BMEdge **r_e);
BMEdge *bmesh_jekv(BMesh *bm, BMEdge *ke, BMVert *kv, const short check_edge_splice);
BMFace *bmesh_jfke(BMesh *bm, BMFace *f1, BMFace *f2, BMEdge *e);
BMVert *bmesh_urmv(BMesh *bm, BMFace *sf, BMVert *sv);
+BMVert *bmesh_urmv_loop(BMesh *bm, BMLoop *sl);
#endif /* __BMESH_CORE_H__ */
diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c
index b686a4b88e0..deed825aa0a 100644
--- a/source/blender/bmesh/intern/bmesh_mods.c
+++ b/source/blender/bmesh/intern/bmesh_mods.c
@@ -1073,7 +1073,17 @@ BMEdge *BM_edge_rotate(BMesh *bm, BMEdge *e, const short ccw, const short check_
/**
* \brief Rip a single face from a vertex fan
*/
-BMVert *BM_vert_rip(BMesh *bm, BMFace *sf, BMVert *sv)
+BMVert *BM_face_vert_rip(BMesh *bm, BMFace *sf, BMVert *sv)
{
return bmesh_urmv(bm, sf, sv);
}
+
+/**
+ * \brief Rip a single face from a vertex fan
+ *
+ * \note same as #BM_face_vert_rip but faster (avoids a loop lookup)
+ */
+BMVert *BM_face_loop_rip(BMesh *bm, BMLoop *sl)
+{
+ return bmesh_urmv_loop(bm, sl);
+}
diff --git a/source/blender/bmesh/intern/bmesh_mods.h b/source/blender/bmesh/intern/bmesh_mods.h
index db418a26341..994456f5917 100644
--- a/source/blender/bmesh/intern/bmesh_mods.h
+++ b/source/blender/bmesh/intern/bmesh_mods.h
@@ -77,6 +77,7 @@ enum {
};
-BMVert *BM_vert_rip(BMesh *bm, BMFace *sf, BMVert *sv);
+BMVert *BM_face_vert_rip(BMesh *bm, BMFace *sf, BMVert *sv);
+BMVert *BM_face_loop_rip(BMesh *bm, BMLoop *sl);
#endif /* __BMESH_MODS_H__ */
diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c
index b80d6fe6e47..e6dc1e1dd80 100644
--- a/source/blender/bmesh/intern/bmesh_queries.c
+++ b/source/blender/bmesh/intern/bmesh_queries.c
@@ -557,6 +557,29 @@ BMVert *BM_edge_share_vert(BMEdge *e1, BMEdge *e2)
}
/**
+ * \brief Radial Find a Vertex Loop in Face
+ *
+ * Finds the loop used which uses \a v in face loop \a l
+ *
+ * \note currenly this just uses simple loop in future may be speeded up
+ * using radial vars
+ */
+BMLoop *BM_face_vert_share_loop(BMFace *f, BMVert *v)
+{
+ BMLoop *l_first;
+ BMLoop *l_iter;
+
+ l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+ do {
+ if (l_iter->v == v) {
+ return l_iter;
+ }
+ } while ((l_iter = l_iter->next) != l_first);
+
+ return NULL;
+}
+
+/**
* Returns the verts of an edge as used in a face
* if used in a face at all, otherwise just assign as used in the edge.
*
diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h
index 6cad93d2658..a394999d439 100644
--- a/source/blender/bmesh/intern/bmesh_queries.h
+++ b/source/blender/bmesh/intern/bmesh_queries.h
@@ -72,6 +72,7 @@ int BM_edge_share_face_count(BMEdge *e1, BMEdge *e2);
int BM_edge_share_vert_count(BMEdge *e1, BMEdge *e2);
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);
diff --git a/source/blender/bmesh/intern/bmesh_structure.c b/source/blender/bmesh/intern/bmesh_structure.c
index fa6d9315fab..eca90e8e7f2 100644
--- a/source/blender/bmesh/intern/bmesh_structure.c
+++ b/source/blender/bmesh/intern/bmesh_structure.c
@@ -450,27 +450,6 @@ BMLoop *bmesh_radial_faceloop_find_next(BMLoop *l, BMVert *v)
return l;
}
-/* NOTE: this function has not been used or tested - so take care but it should work ok,
- * I wrote it for some tool that ended up not using it, however this seems like a reasonable
- * thing to be able to find the loop between a vertex and a face so keeping - campbell */
-/**
- * \brief Radial Find a Vertex Loop in Face
- *
- * Finds the loop used which uses \a v in face loop \a l
- */
-BMLoop *bmesh_radial_faceloop_find_vert(BMFace *f, BMVert *v) /* name is a bit awkward */
-{
- BMLoop *l_iter, *l_first;
- if (v->e && (l_iter = l_first = v->e->l)) {
- do {
- if (l_iter->v == v && l_iter->f == f) {
- return l_iter;
- }
- } while ((l_iter = l_iter->radial_next) != l_first);
- }
- return NULL;
-}
-
int bmesh_radial_length(BMLoop *l)
{
BMLoop *l_iter = l;