Revision: 19310
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19310
Author:   joeedh
Date:     2009-03-16 12:38:42 +0100 (Mon, 16 Mar 2009)

Log Message:
-----------
extrude region op now does wire vert extrudes too

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
    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/intern/bmesh_polygon.c
    branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
    branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c
    branches/bmesh/blender/source/blender/editors/mesh/editmesh_lib.c

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h    
2009-03-16 11:11:44 UTC (rev 19309)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h    
2009-03-16 11:38:42 UTC (rev 19310)
@@ -259,6 +259,12 @@
          for (; key; key=BMO_IterStep(&oiter)) {
                val = BMO_IterMapVal(&oiter);
                //do something with the key/val pair
+               //note that val is a pointer to the val data,
+               //whether it's a float, pointer, whatever.
+               //
+               // so to get a pointer, for example, use:
+               //  *((void**)BMO_IterMapVal(&oiter));
+               //or something like that.
          }
 
   */

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh_operators.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh_operators.h       
2009-03-16 11:11:44 UTC (rev 19309)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh_operators.h       
2009-03-16 11:38:42 UTC (rev 19310)
@@ -16,6 +16,7 @@
 
        //bounding edges of split faces
        BMOP_SPLIT_BOUNDS_EDGEMAP, /*boundarymap*/
+       BMOP_SPLIT_ISOLATED_VERTS_MAP, /*isovertmap*/
        BMOP_SPLIT_TOTSLOT,
 };
 
@@ -31,6 +32,7 @@
        /*we need a map for verts duplicated not connected
          to any faces, too.*/  
        BMOP_DUPE_BOUNDS_EDGEMAP, /*boundarymap*/
+       BMOP_DUPE_ISOLATED_VERTS_MAP, /*isovertmap*/
        BMOP_DUPE_TOTSLOT
 };
 

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2009-03-16 11:11:44 UTC (rev 19309)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c        
2009-03-16 11:38:42 UTC (rev 19310)
@@ -103,7 +103,8 @@
        {{BMOP_OPSLOT_ELEMENT_BUF, "geom"},
        {BMOP_OPSLOT_ELEMENT_BUF, "origout"},
        {BMOP_OPSLOT_ELEMENT_BUF, "newout"},
-       {BMOP_OPSLOT_MAPPING, "boundarymap"}},
+       {BMOP_OPSLOT_MAPPING, "boundarymap"},
+       {BMOP_OPSLOT_MAPPING, "isovertmap"}},
        dupeop_exec,
        BMOP_DUPE_TOTSLOT,
        0
@@ -113,7 +114,8 @@
        "split",
        {{BMOP_OPSLOT_ELEMENT_BUF, "geom"},
        {BMOP_OPSLOT_ELEMENT_BUF, "geomout"},
-       {BMOP_OPSLOT_MAPPING, "boundarymap"}},
+       {BMOP_OPSLOT_MAPPING, "boundarymap"},
+       {BMOP_OPSLOT_MAPPING, "isovertmap"}},
        splitop_exec,
        BMOP_SPLIT_TOTSLOT,
        0

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c  
2009-03-16 11:11:44 UTC (rev 19309)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c  
2009-03-16 11:38:42 UTC (rev 19310)
@@ -637,7 +637,6 @@
        }
 }
 
-#if 1
 /*each pair of loops defines a new edge, a split.  this function goes
   through and sets pairs that are geometrically invalid to null.  a
   split is invalid, if it forms a concave angle or it intersects other
@@ -718,9 +717,6 @@
                        shrink_edgef(v1, v2, 1.00001f);
 
                        if (linecrossesf(p1, p2, mid, out)) clen++;
-                       //else if (linecrossesf(p2, p1, out, mid)) clen++;
-                       //else if (linecrossesf(p1, p2, out, mid)) clen++;
-
                }
                
                if (clen%2 == 0) {
@@ -764,4 +760,3 @@
        if (projverts != projectverts) MEM_freeN(projverts);
        if (edgeverts != edgevertsstack) MEM_freeN(edgeverts);
 }
-#endif

Modified: branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c       
2009-03-16 11:11:44 UTC (rev 19309)
+++ branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c       
2009-03-16 11:38:42 UTC (rev 19310)
@@ -147,7 +147,7 @@
 static void copy_mesh(BMOperator *op, BMesh *source, BMesh *target)
 {
 
-       BMVert *v = NULL;
+       BMVert *v = NULL, *v2;
        BMEdge *e = NULL, **edar = NULL;
        BMLoop *l = NULL;
        BMFace *f = NULL;
@@ -215,7 +215,9 @@
        /*finally dupe all loose vertices*/
        for(v = BMIter_New(&verts, source, BM_VERTS, source); v; v = 
BMIter_Step(&verts)){
                if(BMO_TestFlag(source, (BMHeader*)v, DUPE_INPUT) && 
(!BMO_TestFlag(source, (BMHeader*)v, DUPE_DONE))){
-                       copy_vertex(source, v, target, vhash);
+                       v2 = copy_vertex(source, v, target, vhash);
+                       BMO_Insert_MapPointer(source, op, 
+                                        BMOP_DUPE_ISOLATED_VERTS_MAP, v, v2);
                        BMO_SetFlag(source, (BMHeader*)v, DUPE_DONE);
                }
        }
@@ -390,7 +392,9 @@
        BMO_CopySlot(&dupeop, splitop, BMOP_DUPE_NEW, BMOP_SPLIT_MULTOUT);
        BMO_CopySlot(&dupeop, splitop, BMOP_DUPE_BOUNDS_EDGEMAP,
                     BMOP_SPLIT_BOUNDS_EDGEMAP);
-
+       BMO_CopySlot(&dupeop, splitop, BMOP_DUPE_ISOLATED_VERTS_MAP,
+                    BMOP_SPLIT_ISOLATED_VERTS_MAP);
+       
        /*cleanup*/
        BMO_Finish_Op(bm, &delop);
        BMO_Finish_Op(bm, &dupeop);

Modified: branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c  
2009-03-16 11:11:44 UTC (rev 19309)
+++ branches/bmesh/blender/source/blender/bmesh/operators/extrudeops.c  
2009-03-16 11:38:42 UTC (rev 19310)
@@ -19,9 +19,9 @@
        BMOperator dupeop, delop;
        BMOIter siter;
        BMIter iter, fiter, viter;
-       BMEdge *e, *newedge, *e2;
+       BMEdge *e, *newedge, *e2, *ce;
        BMLoop *l, *l2;
-       BMVert *verts[4], *v;
+       BMVert *verts[4], *v, *v2;
        BMFace *f;
        int rlen, found, delorig=0, i, reverse;
 
@@ -100,8 +100,10 @@
                newedge = BMO_IterMapVal(&siter);
                newedge = *(BMEdge**)newedge;
                if (!newedge) continue;
+               if (!newedge->loop) ce = e;
+               else ce = newedge;
                
-               if (newedge->loop->v == newedge->v1) {
+               if (ce->loop && (ce->loop->v == ce->v1)) {
                        verts[0] = e->v1;
                        verts[1] = e->v2;
                        verts[2] = newedge->v2;
@@ -150,7 +152,13 @@
                }
        }
 
-       
+       /*link isolated verts*/
+       v = BMO_IterNew(&siter, bm, &dupeop, BMOP_DUPE_ISOLATED_VERTS_MAP);
+       for (; v; v=BMO_IterStep(&siter)) {
+               v2 = *((void**)BMO_IterMapVal(&siter));
+               BM_Make_Edge(bm, v, v2, v->edge, 1);
+       }
+
        /*cleanup*/
        if (delorig) BMO_Finish_Op(bm, &delop);
        BMO_Finish_Op(bm, &dupeop);

Modified: branches/bmesh/blender/source/blender/editors/mesh/editmesh_lib.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/editmesh_lib.c   
2009-03-16 11:11:44 UTC (rev 19309)
+++ branches/bmesh/blender/source/blender/editors/mesh/editmesh_lib.c   
2009-03-16 11:38:42 UTC (rev 19310)
@@ -1165,7 +1165,7 @@
 
        BMO_Init_Op(&extop, BMOP_EXTRUDE_EDGECONTEXT);
        BMO_HeaderFlag_To_Slot(bm, &extop, BMOP_EXFACE_EDGEFACEIN,
-                              flag, BM_EDGE|BM_FACE);
+                              flag, BM_VERT|BM_EDGE|BM_FACE);
 
        for (edge=BMIter_New(&iter, bm, BM_EDGES, NULL); edge; 
edge=BMIter_Step(&iter)) {
                BM_Select_Edge(bm, edge, 0);
@@ -1802,10 +1802,23 @@
 /* generic extrude */
 short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor)
 {
-       if(em->selectmode & SCE_SELECT_VERTEX)
-               return extrudeflag_vert(obedit, em, flag, nor);
-       else 
+       if(em->selectmode & SCE_SELECT_VERTEX) {
+               EditEdge *eed;
+               
+               /*ensure vert flags are consistent for edge selections*/
+               for (eed=em->edges.first; eed; eed=eed->next) {
+                       if (eed->f & flag) {
+                               eed->v1->f |= flag;
+                               eed->v2->f |= flag;
+                       } else {
+                               if ((eed->v1->f & flag) && (eed->v2->f & flag))
+                                       eed->f |= flag;
+                       }
+               }
+
                return extrudeflag_edge(obedit, em, flag, nor);
+       } else 
+               return extrudeflag_edge(obedit, em, flag, nor);
                
 }
 


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

Reply via email to