Revision: 21660
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21660
Author:   joeedh
Date:     2009-07-17 13:15:06 +0200 (Fri, 17 Jul 2009)

Log Message:
-----------
subdivide experimental stuff is now more stable.  basically, it no longer 
creates new edges in all the situations it used too, plus you can connect two 
edges in an ngon.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c

Modified: branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c 
2009-07-17 10:54:00 UTC (rev 21659)
+++ branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c 
2009-07-17 11:15:06 UTC (rev 21660)
@@ -658,6 +658,9 @@
 
        for (face=BMIter_New(&fiter, bmesh, BM_FACES_OF_MESH, NULL);
             face; face=BMIter_Step(&fiter)) {
+               BMEdge *e1 = NULL, *e2 = NULL;
+               float vec1[3], vec2[3];
+
                /*figure out which pattern to use*/
 
                V_RESET(edges);
@@ -673,12 +676,31 @@
                        edges[i] = nl->e;
                        verts[i] = nl->v;
 
-                       if (BMO_TestFlag(bmesh, edges[i], SUBD_SPLIT))
+                       if (BMO_TestFlag(bmesh, edges[i], SUBD_SPLIT)) {
+                               if (!e1) e1 = edges[i];
+                               else e2 = edges[i];
+
                                totesel++;
+                       }
 
                        i++;
                }
 
+               /*make sure the two edges have a valid angle to each other*/
+               if (totesel == 2) {
+                       float angle;
+
+                       VecSubf(vec1, e1->v2->co, e1->v1->co);
+                       VecSubf(vec2, e2->v2->co, e2->v1->co);
+                       Normalize(vec1);
+                       Normalize(vec2);
+
+                       angle = INPR(vec1, vec2);
+                       angle = ABS(angle);
+                       if (ABS(angle-1.0) < 0.01)
+                               totesel = 0;
+               }
+
                if (BMO_TestFlag(bmesh, face, FACE_CUSTOMFILL)) {
                        pat = BMO_Get_MapData(bmesh, op, 
                                    "custompatterns", face);
@@ -816,7 +838,7 @@
                                a = (a+1) % vlen;
                        }
                        
-                       BM_LegalSplits(bmesh, face, splits, V_COUNT(splits)/2);
+                       //BM_LegalSplits(bmesh, face, splits, 
V_COUNT(splits)/2);
 
                        for (j=0; j<V_COUNT(splits)/2; j++) {
                                if (splits[j*2]) {


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

Reply via email to