[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45376] trunk/blender/source/blender/bmesh : Fix #30791: BMEdge. is_manifold also returned true for edges with only one face
Brecht Van Lommel
brechtvanlommel at pandora.be
Tue Apr 3 19:09:59 CEST 2012
Revision: 45376
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45376
Author: blendix
Date: 2012-04-03 17:09:47 +0000 (Tue, 03 Apr 2012)
Log Message:
-----------
Fix #30791: BMEdge.is_manifold also returned true for edges with only one face
attached to it. A manifold edge should have exactly 2 faces attached to it,
sticking to the standard definition for "manifold".
Modified Paths:
--------------
trunk/blender/source/blender/bmesh/intern/bmesh_queries.c
trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c
trunk/blender/source/blender/bmesh/tools/BME_bevel.c
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_queries.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_queries.c 2012-04-03 15:18:59 UTC (rev 45375)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_queries.c 2012-04-03 17:09:47 UTC (rev 45376)
@@ -537,21 +537,21 @@
/**
* Tests whether or not this edge is manifold.
- * A manifold edge either has 1 or 2 faces attached to it.
+ * A manifold edge has exactly 2 faces attached to it.
*/
#if 1 /* fast path for checking manifold */
int BM_edge_is_manifold(BMEdge *e)
{
const BMLoop *l = e->l;
- return (l && ((l->radial_next == l) || /* 1 face user */
- (l->radial_next->radial_next == l))); /* 2 face users */
+ return (l && (l->radial_next != l) && /* not 0 or 1 face users */
+ (l->radial_next->radial_next == l)); /* 2 face users */
}
#else
int BM_edge_is_manifold(BMEdge *e)
{
int count = BM_edge_face_count(e);
- if (count == 2 || count == 1) {
+ if (count == 2) {
return TRUE;
}
else {
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c 2012-04-03 15:18:59 UTC (rev 45375)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c 2012-04-03 17:09:47 UTC (rev 45376)
@@ -667,7 +667,7 @@
/* Don't start a loop from a boundary edge if it cannot
* be extended to cover any faces */
- if (BM_edge_face_count(e) == 1) {
+ if (BM_edge_is_boundary(e)) {
if (!bmw_FaceLoopWalker_include_face(walker, e->l)) {
return FALSE;
}
@@ -843,7 +843,7 @@
int i, len;
#endif
-#define EDGE_CHECK(e) (bmw_mask_check_edge(walker, e) && BM_edge_is_manifold(e))
+#define EDGE_CHECK(e) (bmw_mask_check_edge(walker, e) && (BM_edge_is_boundary(e) || BM_edge_is_manifold(e)))
BMW_state_remove(walker);
Modified: trunk/blender/source/blender/bmesh/tools/BME_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/BME_bevel.c 2012-04-03 15:18:59 UTC (rev 45375)
+++ trunk/blender/source/blender/bmesh/tools/BME_bevel.c 2012-04-03 17:09:47 UTC (rev 45376)
@@ -905,7 +905,7 @@
BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) {
BMO_elem_flag_enable(bm, e, BME_BEVEL_ORIG);
- if (!BM_edge_is_manifold(e)) {
+ if (!(BM_edge_is_boundary(e) || BM_edge_is_manifold(e))) {
BMO_elem_flag_enable(bm, e->v1, BME_BEVEL_NONMAN);
BMO_elem_flag_enable(bm, e->v2, BME_BEVEL_NONMAN);
BMO_elem_flag_enable(bm, e, BME_BEVEL_NONMAN);
More information about the Bf-blender-cvs
mailing list