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); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs