Commit: df3116b3269f428ffbbcc31a1f786da0d6510400
Author: Campbell Barton
Date:   Thu Mar 6 01:00:18 2014 +1100
https://developer.blender.org/rBdf3116b3269f428ffbbcc31a1f786da0d6510400

Fix for un-subdivide creating duplicate faces

===================================================================

M       source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c

===================================================================

diff --git a/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c 
b/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c
index 092a004..ffc6808 100644
--- a/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c
+++ b/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c
@@ -41,6 +41,8 @@ static bool bm_vert_dissolve_fan_test(BMVert *v)
        BMIter iter;
        BMEdge *e;
 
+       BMVert *varr[4];
+
        unsigned int tot_edge = 0;
        unsigned int tot_edge_boundary = 0;
        unsigned int tot_edge_manifold = 0;
@@ -56,17 +58,25 @@ static bool bm_vert_dissolve_fan_test(BMVert *v)
                else if (BM_edge_is_wire(e)) {
                        tot_edge_wire++;
                }
+
+               /* bail out early */
+               if (tot_edge == 4) {
+                       return false;
+               }
+
+               /* used to check overlapping faces */
+               varr[tot_edge] = BM_edge_other_vert(e, v);
+
                tot_edge++;
        }
 
-       if ((tot_edge == 4) && (tot_edge_boundary == 0) && (tot_edge_manifold 
== 4)) {
-               return true;
-       }
-       else if ((tot_edge == 3) && (tot_edge_boundary == 0) && 
(tot_edge_manifold == 3)) {
-               return true;
-       }
-       else if ((tot_edge == 3) && (tot_edge_boundary == 2) && 
(tot_edge_manifold == 1)) {
-               return true;
+       if (((tot_edge == 4) && (tot_edge_boundary == 0) && (tot_edge_manifold 
== 4)) ||
+           ((tot_edge == 3) && (tot_edge_boundary == 0) && (tot_edge_manifold 
== 3)) ||
+           ((tot_edge == 3) && (tot_edge_boundary == 2) && (tot_edge_manifold 
== 1)))
+       {
+               if (!BM_face_exists(varr, tot_edge, NULL)) {
+                       return true;
+               }
        }
        else if ((tot_edge == 2) && (tot_edge_wire == 2)) {
                return true;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to