[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