Revision: 36285
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36285
Author:   joeedh
Date:     2011-04-22 23:37:58 +0000 (Fri, 22 Apr 2011)
Log Message:
-----------
=bmesh= fixed edge split modifier, and a bug in knifetool reported by 
letterrip.  also brought back beautify-fill.

Modified Paths:
--------------
    
branches/bmesh/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
    branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
    branches/bmesh/blender/source/blender/blenlib/BLI_math_geom.h
    branches/bmesh/blender/source/blender/blenlib/intern/math_geom.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
    branches/bmesh/blender/source/blender/bmesh/operators/createops.c
    branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/knifetool.c
    branches/bmesh/blender/source/blender/modifiers/intern/MOD_edgesplit.c

Modified: 
branches/bmesh/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
===================================================================
--- 
branches/bmesh/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
    2011-04-22 16:47:17 UTC (rev 36284)
+++ 
branches/bmesh/blender/release/scripts/startup/bl_ui/properties_data_modifier.py
    2011-04-22 23:37:58 UTC (rev 36285)
@@ -45,7 +45,11 @@
     # the mt.type enum is (ab)used for a lookup on function names
     # ...to avoid lengthy if statements
     # so each type must have a function here.
-
+       
+    def NGONINTERP(self, layout, ob, md):
+        split = layout.split()
+        split.prop(md, "resolution")
+        
     def ARMATURE(self, layout, ob, md):
         split = layout.split()
 

Modified: 
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2011-04-22 16:47:17 UTC (rev 36284)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c     
2011-04-22 23:37:58 UTC (rev 36285)
@@ -2748,7 +2748,10 @@
 void CDDM_set_mvert(DerivedMesh *dm, MVert *mvert)
 {
        CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
-
+       
+       if (!CustomData_has_layer(&dm->vertData, CD_MVERT))
+               CustomData_add_layer(&dm->vertData, CD_MVERT, CD_ASSIGN, mvert, 
dm->numVertData);
+                               
        cddm->mvert = mvert;
 }
 
@@ -2756,6 +2759,9 @@
 {
        CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
 
+       if (!CustomData_has_layer(&dm->edgeData, CD_MEDGE))
+               CustomData_add_layer(&dm->edgeData, CD_MEDGE, CD_ASSIGN, medge, 
dm->numEdgeData);
+
        cddm->medge = medge;
 }
 
@@ -2763,5 +2769,8 @@
 {
        CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
 
+       if (!CustomData_has_layer(&dm->faceData, CD_MFACE))
+               CustomData_add_layer(&dm->faceData, CD_MFACE, CD_ASSIGN, mface, 
dm->numFaceData);
+
        cddm->mface = mface;
 }

Modified: branches/bmesh/blender/source/blender/blenlib/BLI_math_geom.h
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/BLI_math_geom.h       
2011-04-22 16:47:17 UTC (rev 36284)
+++ branches/bmesh/blender/source/blender/blenlib/BLI_math_geom.h       
2011-04-22 23:37:58 UTC (rev 36285)
@@ -70,6 +70,8 @@
 
 /* TODO int return value consistency */
 
+ int is_quad_convex_v3(float *v1, float *v2, float *v3, float *v4);
+ 
 /* line-line */
 #define ISECT_LINE_LINE_COLINEAR       -1
 #define ISECT_LINE_LINE_NONE            0

Modified: branches/bmesh/blender/source/blender/blenlib/intern/math_geom.c
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/intern/math_geom.c    
2011-04-22 16:47:17 UTC (rev 36284)
+++ branches/bmesh/blender/source/blender/blenlib/intern/math_geom.c    
2011-04-22 23:37:58 UTC (rev 36285)
@@ -2678,3 +2678,39 @@
 
        return contrib;
 }
+
+/* evaluate if entire quad is a proper convex quad */
+ int is_quad_convex_v3(float *v1, float *v2, float *v3, float *v4)
+ {
+       float nor[3], nor1[3], nor2[3], vec[4][2];
+       
+       /* define projection, do both trias apart, quad is undefined! */
+       normal_tri_v3( nor1,v1, v2, v3);
+       normal_tri_v3( nor2,v1, v3, v4);
+       nor[0]= ABS(nor1[0]) + ABS(nor2[0]);
+       nor[1]= ABS(nor1[1]) + ABS(nor2[1]);
+       nor[2]= ABS(nor1[2]) + ABS(nor2[2]);
+
+       if(nor[2] >= nor[0] && nor[2] >= nor[1]) {
+               vec[0][0]= v1[0]; vec[0][1]= v1[1];
+               vec[1][0]= v2[0]; vec[1][1]= v2[1];
+               vec[2][0]= v3[0]; vec[2][1]= v3[1];
+               vec[3][0]= v4[0]; vec[3][1]= v4[1];
+       }
+       else if(nor[1] >= nor[0] && nor[1]>= nor[2]) {
+               vec[0][0]= v1[0]; vec[0][1]= v1[2];
+               vec[1][0]= v2[0]; vec[1][1]= v2[2];
+               vec[2][0]= v3[0]; vec[2][1]= v3[2];
+               vec[3][0]= v4[0]; vec[3][1]= v4[2];
+       }
+       else {
+               vec[0][0]= v1[1]; vec[0][1]= v1[2];
+               vec[1][0]= v2[1]; vec[1][1]= v2[2];
+               vec[2][0]= v3[1]; vec[2][1]= v3[2];
+               vec[3][0]= v4[1]; vec[3][1]= v4[2];
+       }
+       
+       /* linetests, the 2 diagonals have to instersect to be convex */
+       if( isect_line_line_v2(vec[0], vec[2], vec[1], vec[3]) > 0 ) return 1;
+       return 0;
+}

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2011-04-22 16:47:17 UTC (rev 36284)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2011-04-22 23:37:58 UTC (rev 36285)
@@ -940,6 +940,21 @@
        BMOP_UNTAN_MULTIRES
 };
 
+/*
+  Beautify Fill
+
+  Makes triangle a bit nicer
+ */
+BMOpDefine def_beautify_fill = {
+       "beautify_fill",
+       {{BMOP_OPSLOT_ELEMENT_BUF, "faces"}, /* input faces */
+        {BMOP_OPSLOT_ELEMENT_BUF, "constrain_edges"}, /* edges that can't be 
flipped */
+        {BMOP_OPSLOT_ELEMENT_BUF, "geomout"}, /* new flipped faces and edges */
+        {0} /*null-terminating sentinel*/},
+       bmesh_beautify_fill_exec,
+       BMOP_UNTAN_MULTIRES
+};
+
 BMOpDefine *opdefines[] = {
        &def_splitop,
        &def_dupeop,
@@ -1000,6 +1015,7 @@
        &def_create_cube,
        &def_join_triangles,
        &def_bevel,
+       &def_beautify_fill,
 };
 
 int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));

Modified: 
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- 
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h    
    2011-04-22 16:47:17 UTC (rev 36284)
+++ 
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h    
    2011-04-22 23:37:58 UTC (rev 36285)
@@ -69,5 +69,6 @@
 void bmesh_create_cube_exec(BMesh *bm, BMOperator *op);
 void bmesh_jointriangles_exec(BMesh *bm, BMOperator *op);
 void bmesh_bevel_exec(BMesh *bm, BMOperator *op);
+void bmesh_beautify_fill_exec(BMesh *bm, BMOperator *op);
 
 #endif

Modified: branches/bmesh/blender/source/blender/bmesh/operators/createops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/createops.c   
2011-04-22 16:47:17 UTC (rev 36284)
+++ branches/bmesh/blender/source/blender/bmesh/operators/createops.c   
2011-04-22 23:37:58 UTC (rev 36285)
@@ -964,42 +964,6 @@
        MEM_freeN(vdata);
 }
 
-/* evaluate if entire quad is a proper convex quad */
-static int convex(float *v1, float *v2, float *v3, float *v4)
-{
-       float nor[3], nor1[3], nor2[3], vec[4][2];
-       
-       /* define projection, do both trias apart, quad is undefined! */
-       normal_tri_v3( nor1,v1, v2, v3);
-       normal_tri_v3( nor2,v1, v3, v4);
-       nor[0]= ABS(nor1[0]) + ABS(nor2[0]);
-       nor[1]= ABS(nor1[1]) + ABS(nor2[1]);
-       nor[2]= ABS(nor1[2]) + ABS(nor2[2]);
-
-       if(nor[2] >= nor[0] && nor[2] >= nor[1]) {
-               vec[0][0]= v1[0]; vec[0][1]= v1[1];
-               vec[1][0]= v2[0]; vec[1][1]= v2[1];
-               vec[2][0]= v3[0]; vec[2][1]= v3[1];
-               vec[3][0]= v4[0]; vec[3][1]= v4[1];
-       }
-       else if(nor[1] >= nor[0] && nor[1]>= nor[2]) {
-               vec[0][0]= v1[0]; vec[0][1]= v1[2];
-               vec[1][0]= v2[0]; vec[1][1]= v2[2];
-               vec[2][0]= v3[0]; vec[2][1]= v3[2];
-               vec[3][0]= v4[0]; vec[3][1]= v4[2];
-       }
-       else {
-               vec[0][0]= v1[1]; vec[0][1]= v1[2];
-               vec[1][0]= v2[1]; vec[1][1]= v2[2];
-               vec[2][0]= v3[1]; vec[2][1]= v3[2];
-               vec[3][0]= v4[1]; vec[3][1]= v4[2];
-       }
-       
-       /* linetests, the 2 diagonals have to instersect to be convex */
-       if( isect_line_line_v2(vec[0], vec[2], vec[1], vec[3]) > 0 ) return 1;
-       return 0;
-}
-
 BMEdge *edge_next(BMesh *bm, BMEdge *e)
 {
        BMIter iter;
@@ -1257,22 +1221,22 @@
                f = NULL;
 
                /* the order of vertices can be anything, 6 cases to check */
-               if( convex(verts[0]->co, verts[1]->co, verts[2]->co, 
verts[3]->co) ) {
+               if( is_quad_convex_v3(verts[0]->co, verts[1]->co, verts[2]->co, 
verts[3]->co) ) {
                        f= BM_Make_QuadTri(bm, verts[0], verts[1], verts[2], 
verts[3], NULL, 1);
                }
-               else if( convex(verts[0]->co, verts[2]->co, verts[3]->co, 
verts[1]->co) ) {
+               else if( is_quad_convex_v3(verts[0]->co, verts[2]->co, 
verts[3]->co, verts[1]->co) ) {
                        f= BM_Make_QuadTri(bm, verts[0], verts[2], verts[3], 
verts[1], NULL, 1);
                }
-               else if( convex(verts[0]->co, verts[2]->co, verts[1]->co, 
verts[3]->co) ) {
+               else if( is_quad_convex_v3(verts[0]->co, verts[2]->co, 
verts[1]->co, verts[3]->co) ) {
                        f= BM_Make_QuadTri(bm, verts[0], verts[2], verts[1], 
verts[3], NULL, 1);
                }
-               else if( convex(verts[0]->co, verts[1]->co, verts[3]->co, 
verts[2]->co) ) {
+               else if( is_quad_convex_v3(verts[0]->co, verts[1]->co, 
verts[3]->co, verts[2]->co) ) {
                        f= BM_Make_QuadTri(bm, verts[0], verts[1], verts[3], 
verts[2], NULL, 1);
                }
-               else if( convex(verts[0]->co, verts[3]->co, verts[2]->co, 
verts[1]->co) ) {
+               else if( is_quad_convex_v3(verts[0]->co, verts[3]->co, 
verts[2]->co, verts[1]->co) ) {
                        f= BM_Make_QuadTri(bm, verts[0], verts[3], verts[2], 
verts[1], NULL, 1);
                }
-               else if( convex(verts[0]->co, verts[3]->co, verts[1]->co, 
verts[2]->co) ) {
+               else if( is_quad_convex_v3(verts[0]->co, verts[3]->co, 
verts[1]->co, verts[2]->co) ) {
                        f= BM_Make_QuadTri(bm, verts[0], verts[3], verts[1], 
verts[2], NULL, 1);
                }
                else {

Modified: branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c       
2011-04-22 16:47:17 UTC (rev 36284)
+++ branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c       
2011-04-22 23:37:58 UTC (rev 36285)
@@ -14,6 +14,10 @@
 #define EDGE_NEW       1
 #define FACE_NEW       1
 
+#define ELE_NEW                1
+#define FACE_MARK      2
+#define EDGE_MARK      4
+
 void triangulate_exec(BMesh *bm, BMOperator *op)
 {
        BMOIter siter;
@@ -54,3 +58,73 @@
        BLI_array_free(projectverts);
        BLI_array_free(newfaces);
 }
+
+void bmesh_beautify_fill_exec(BMesh *bm, BMOperator *op)
+{
+       BMOIter siter;
+       BMIter iter;
+       BMFace *f;
+       BMEdge *e;
+       int stop=0;
+       
+       BMO_Flag_Buffer(bm, op, "constrain_edges", EDGE_MARK, BM_EDGE);
+       
+       BMO_ITER(f, &siter, bm, op, "faces", BM_FACE) {
+               if (f->len == 3)
+                       BMO_SetFlag(bm, f, FACE_MARK);
+       }
+
+       while (!stop) {
+               stop = 1;
+               
+               BM_ITER(e, &iter, bm, BM_EDGES_OF_MESH, NULL) {
+                       BMVert *v1, *v2, *v3, *v4, *d1, *d2;
+                       float len1, len2, len3, len4, len5, len6, opp1, opp2, 
fac1, fac2;
+                       int ok;
+                       
+                       if (BM_Edge_FaceCount(e) != 2 || BMO_TestFlag(bm, e, 
EDGE_MARK))
+                               continue;
+                       if (!BMO_TestFlag(bm, e->l->f, FACE_MARK) || 
!BMO_TestFlag(bm, e->l->radial_next->f, FACE_MARK))
+                               continue;
+                       
+                       v1 = e->l->prev->v;
+                       v2 = e->l->v;
+                       v3 = e->l->radial_next->prev->v;
+                       v4 = e->l->next->v;
+                       

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to