Revision: 18883
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18883
Author:   joeedh
Date:     2009-02-09 08:08:35 +0100 (Mon, 09 Feb 2009)

Log Message:
-----------
edge subdivide now spits out inner elements from fully-subdivided faces, and 
non-inner split edges/verts, so proper selection can be moved to the tools code.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/bmesh_operators.h
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
    branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_loop.c

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh_operators.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh_operators.h       
2009-02-09 06:36:59 UTC (rev 18882)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh_operators.h       
2009-02-09 07:08:35 UTC (rev 18883)
@@ -178,7 +178,6 @@
        BMOP_ESUBDIVIDE_NUMCUTS,
        BMOP_ESUBDIVIDE_FLAG, //beauty flag in esubdivide
        BMOP_ESUBDIVIDE_RADIUS,
-       BMOP_ESUBDIVIDE_SELACTION,
 
        BMOP_ESUBDIVIDE_CUSTOMFILL_FACEMAP,
        BMOP_ESUBDIVIDE_PERCENT_EDGEMAP,
@@ -189,11 +188,7 @@
 
        /*new edges and vertices from splitting original edges,
          doesn't include edges creating by connecting verts.*/
-       BMOP_ESUBDIVIDE_SPLIT_MULTOUT,
-       
-       /*edges created by connecting verts, except for those created
-         by fully-filled faces (e.g. fully selected faces).*/
-       BMOP_ESUBDIVIDE_CONNECT_MULTOUT,
+       BMOP_ESUBDIVIDE_SPLIT_MULTOUT,  
        BMOP_ESUBDIVIDE_TOTSLOT,
 };
 /*

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2009-02-09 06:36:59 UTC (rev 18882)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2009-02-09 07:08:35 UTC (rev 18883)
@@ -38,12 +38,10 @@
         BMOP_OPSLOT_INT,
         BMOP_OPSLOT_INT,
         BMOP_OPSLOT_FLT,
-        BMOP_OPSLOT_INT,
         BMOP_OPSLOT_MAPPING,
         BMOP_OPSLOT_MAPPING,
         BMOP_OPSLOT_PNT_BUF,
         BMOP_OPSLOT_PNT_BUF,
-        BMOP_OPSLOT_PNT_BUF,
         },
        esubdivide_exec,
        BMOP_ESUBDIVIDE_TOTSLOT,

Modified: branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c 
2009-02-09 06:36:59 UTC (rev 18882)
+++ branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c 
2009-02-09 07:08:35 UTC (rev 18883)
@@ -19,14 +19,18 @@
 #include <string.h>
 #include <math.h>
 
+/*flags for all elements share a common bitfield space*/
 #define SUBD_SPLIT     1
 
 #define EDGE_PERCENT   2
 
 /*I don't think new faces are flagged, currently, but
   better safe than sorry.*/
-#define FACE_NEW       2
-#define FACE_CUSTOMFILL        4
+#define FACE_NEW       4
+#define FACE_CUSTOMFILL        8
+#define ELE_INNER      16
+#define ELE_SPLIT      32
+#define ELE_CONNECT    64
 
 /*stuff for the flag paramter.  note that
   what used to live in "beauty" and
@@ -116,7 +120,7 @@
 //     float co[3];
        
        ev = BM_Split_Edge(bm, edge->v1, edge, out, percent, 1);
-       if (params->flag & SELTYPE_INNER) BM_Select_Vert(bm, ev, 1);
+       BMO_SetFlag(bm, ev, ELE_INNER);
 
        /* offset for smooth or sphere or fractal */
        alter_co(ev->co, edge, params, percent, vsta, vend);
@@ -170,6 +174,9 @@
                                     &newe, vsta, vend);
                BMO_SetFlag(bm, v, SUBD_SPLIT);
                BMO_SetFlag(bm, eed, SUBD_SPLIT);
+
+               BMO_SetFlag(bm, v, ELE_SPLIT);
+               BMO_SetFlag(bm, eed, ELE_SPLIT);
        }
 }
 
@@ -363,10 +370,9 @@
                b = numcuts + 1 + numcuts + 1 + (numcuts - i - 1);
                
                e = BM_Connect_Verts(bm, verts[a], verts[b], &nf);
-               if (params->flag & SELTYPE_INNER) {
-                       BM_Select_Edge(bm, e, 1);
-                       BM_Select_Face(bm, nf, 1);
-               }
+               BMO_SetFlag(bm, e, ELE_INNER);
+               BMO_SetFlag(bm, nf, ELE_INNER);
+
                
                v1 = lines[(i+1)*s] = verts[a];
                v2 = lines[(i+1)*s + s-1] = verts[b];
@@ -374,9 +380,7 @@
                for (a=0; a<numcuts; a++) {
                        v = subdivideedgenum(bm, e, a, numcuts, params, &ne,
                                             v1, v2);
-                       if (params->flag & SELTYPE_INNER) {
-                               BM_Select_Edge(bm, ne, 1);
-                       }
+                       BMO_SetFlag(bm, ne, ELE_INNER);
                        lines[(i+1)*s+a+1] = v;
                }
        }
@@ -386,10 +390,8 @@
                        a = i*s + j;
                        b = (i-1)*s + j;
                        e = BM_Connect_Verts(bm, lines[a], lines[b], &nf);
-                       if (params->flag & SELTYPE_INNER) {
-                               BM_Select_Edge(bm, e, 1);
-                               BM_Select_Face(bm, nf, 1);
-                       }
+                       BMO_SetFlag(bm, e, ELE_INNER);
+                       BMO_SetFlag(bm, nf, ELE_INNER);
                }
        }
 
@@ -488,10 +490,8 @@
                b = numcuts + numcuts - i;
                e = BM_Connect_Verts(bm, verts[a], verts[b], &nf);
                
-               if (params->flag & SELTYPE_INNER) {
-                       BM_Select_Edge(bm, e, 1);
-                       BM_Select_Face(bm, nf, 1);
-               }
+               BMO_SetFlag(bm, e, ELE_INNER);
+               BMO_SetFlag(bm, nf, ELE_INNER);
 
                lines[i+1][0] = verts[a];
                lines[i+1][1+i] = verts[b];
@@ -501,9 +501,7 @@
                                             verts[a], verts[b]);
                        lines[i+1][j+1] = v;
 
-                       if (params->flag & SELTYPE_INNER) {
-                               BM_Select_Edge(bm, ne, 1);
-                       }
+                       BMO_SetFlag(bm, ne, ELE_INNER);
                }
        }
        
@@ -521,17 +519,15 @@
                for (j=0; j<i; j++) {
                        e= BM_Connect_Verts(bm, lines[i][j], lines[i+1][j+1],
                                           &nf);
-                       if (params->flag & SELTYPE_INNER) {
-                               BM_Select_Edge(bm, e, 1);
-                               BM_Select_Face(bm, nf, 1);
-                       }
 
+                       BMO_SetFlag(bm, e, ELE_INNER);
+                       BMO_SetFlag(bm, nf, ELE_INNER);
+
                        e= BM_Connect_Verts(bm,lines[i][j+1],lines[i+1][j+1],
                                           &nf);
-                       if (params->flag & SELTYPE_INNER) {
-                               BM_Select_Edge(bm, e, 1);
-                               BM_Select_Face(bm, nf, 1);
-                       }
+
+                       BMO_SetFlag(bm, e, ELE_INNER);
+                       BMO_SetFlag(bm, nf, ELE_INNER);
                }
        }
 
@@ -587,7 +583,7 @@
        subd_facedata *facedata = NULL;
        V_DECLARE(facedata);
        float rad;
-       int i, j, matched, a, b, numcuts, flag, selaction;
+       int i, j, matched, a, b, numcuts, flag;
        
        BMO_Flag_Buffer(bmesh, op, BMOP_ESUBDIVIDE_EDGES, SUBD_SPLIT);
        
@@ -595,9 +591,6 @@
        flag = BMO_GetSlot(op, BMOP_ESUBDIVIDE_FLAG)->data.i;
        rad = BMO_GetSlot(op, BMOP_ESUBDIVIDE_RADIUS)->data.f;
 
-       selaction = BMO_GetSlot(op, BMOP_ESUBDIVIDE_SELACTION)->data.i;
-       if (selaction == SUBDIV_SELECT_INNER) flag |= SELTYPE_INNER;
-
        einput = BMO_GetSlot(op, BMOP_ESUBDIVIDE_EDGES);
        /*first go through and tag edges*/
        for (i=0; i<einput->len; i++) {
@@ -740,6 +733,11 @@
        if (facedata) V_FREE(facedata);
        if (edges) V_FREE(edges);
        if (verts) V_FREE(verts);
+
+       BMO_Flag_To_Slot(bmesh, op, BMOP_ESUBDIVIDE_INNER_MULTOUT,
+                        ELE_INNER, BM_ALL);
+       BMO_Flag_To_Slot(bmesh, op, BMOP_ESUBDIVIDE_SPLIT_MULTOUT,
+                        ELE_SPLIT, BM_ALL);
 }
 
 /*editmesh-emulating function*/
@@ -752,10 +750,21 @@
        BMO_Set_Int(&op, BMOP_ESUBDIVIDE_NUMCUTS, numcuts);
        BMO_Set_Int(&op, BMOP_ESUBDIVIDE_FLAG, flag);
        BMO_Set_Float(&op, BMOP_ESUBDIVIDE_RADIUS, rad);
-       BMO_Set_Int(&op, BMOP_ESUBDIVIDE_SELACTION, seltype);
        BMO_HeaderFlag_To_Slot(bm, &op, BMOP_ESUBDIVIDE_EDGES, selflag, 
BM_EDGE);
        
        BMO_Exec_Op(bm, &op);
+
+       if (seltype == SUBDIV_SELECT_INNER) {
+               BMOpSlot *einput;
+               BMHeader *ele;
+               int i;
+               
+               einput = BMO_GetSlot(&op, BMOP_ESUBDIVIDE_INNER_MULTOUT);
+               for (i=0; i<einput->len; i++) {
+                       ele = ((BMHeader**)einput->data.p)[i];
+                       BM_Select(bm, ele, 1);
+               }
+       }
        BMO_Finish_Op(bm, &op);
 }
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/editmesh_loop.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/editmesh_loop.c  
2009-02-09 06:36:59 UTC (rev 18882)
+++ branches/bmesh/blender/source/blender/editors/mesh/editmesh_loop.c  
2009-02-09 07:08:35 UTC (rev 18883)
@@ -851,7 +851,6 @@
        if (mode == KNIFE_MIDPOINT) numcuts = 1;
        BMO_Set_Int(&bmop, BMOP_ESUBDIVIDE_FLAG, flag);
        BMO_Set_Float(&bmop, BMOP_ESUBDIVIDE_RADIUS, 0);
-       BMO_Set_Int(&bmop, BMOP_ESUBDIVIDE_SELACTION, SUBDIV_SELECT_ORIG);
        
        BMO_Exec_Op(bm, &bmop);
        BMO_Finish_Op(bm, &bmop);


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to