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-10-22 21:33:11 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-10-22 21:33:11 +0400
commitc6b4494727144154511cdacb0e9e832a4b6fefc1 (patch)
tree4be3ee581e4b3a525018aa8a430e1be888238bc1
parent23baf8c9c366a6f4e029de0119e72de45722d1f0 (diff)
decimator - small optimization on check for degenerate edges.
-rw-r--r--source/blender/bmesh/intern/bmesh_decimate.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/bmesh/intern/bmesh_decimate.c b/source/blender/bmesh/intern/bmesh_decimate.c
index ed68d47c6b0..a4be3933a8d 100644
--- a/source/blender/bmesh/intern/bmesh_decimate.c
+++ b/source/blender/bmesh/intern/bmesh_decimate.c
@@ -496,6 +496,18 @@ static int bm_edge_tag_test(BMEdge *e)
);
}
+/* takes the edges loop */
+BLI_INLINE int bm_edge_is_manifold_or_boundary(BMLoop *l)
+{
+#if 0
+ /* less optimized version of check below */
+ return (BM_edge_is_manifold(l->e) || BM_edge_is_boundary(l->e);
+#else
+ /* if the edge is a boundary it points to its self, else this must be a manifold */
+ return LIKELY(l) && LIKELY(l->radial_next->radial_next == l);
+#endif
+}
+
static int bm_edge_collapse_is_degenerate(BMEdge *e_first)
{
/* simply check that there is no overlap between faces and edges of each vert,
@@ -506,7 +518,7 @@ static int bm_edge_collapse_is_degenerate(BMEdge *e_first)
/* clear flags on both disks */
e_iter = e_first;
do {
- if (!(BM_edge_is_manifold(e_iter) || BM_edge_is_boundary(e_iter))) {
+ if (!bm_edge_is_manifold_or_boundary(e_iter->l)) {
return TRUE;
}
bm_edge_tag_disable(e_iter);
@@ -514,7 +526,7 @@ static int bm_edge_collapse_is_degenerate(BMEdge *e_first)
e_iter = e_first;
do {
- if (!(BM_edge_is_manifold(e_iter) || BM_edge_is_boundary(e_iter))) {
+ if (!bm_edge_is_manifold_or_boundary(e_iter->l)) {
return TRUE;
}
bm_edge_tag_disable(e_iter);