[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21660] branches/bmesh/blender/source/ blender/bmesh/operators/subdivideop.c: subdivide experimental stuff is now more stable.

Joseph Eagar joeedh at gmail.com
Fri Jul 17 13:15:07 CEST 2009


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]) {





More information about the Bf-blender-cvs mailing list