coded little vert connect tool. connects selected verts within the same face. curre...
authorJoseph Eagar <joeedh@gmail.com>
Sun, 1 Mar 2009 08:02:28 +0000 (08:02 +0000)
committerJoseph Eagar <joeedh@gmail.com>
Sun, 1 Mar 2009 08:02:28 +0000 (08:02 +0000)
source/blender/bmesh/bmesh_operators.h
source/blender/bmesh/intern/bmesh_opdefines.c
source/blender/bmesh/intern/bmesh_operators_private.h
source/blender/bmesh/operators/dissolveops.c
source/blender/editors/mesh/editmesh_add.c
source/blender/editors/mesh/editmesh_tools.c

index 4af6e89a94ca6c0bb3410e13dcc00bafe604a036..aaa6e29d79e9ff068973560b22f19c99a544ecba 100644 (file)
@@ -151,11 +151,13 @@ int BMO_CatchOpError(BMesh *bm, BMOperator *catchop, int errorcode, char **msg);
 /*error messages*/
 #define BMERR_SELF_INTERSECTING                        1
 #define BMERR_DISSOLVEDISK_FAILED              2
+#define BMERR_CONNECTVERT_FAILED               3
 
 static char *bmop_error_messages[] = {
        0,
        "Self intersection error",
        "Could not dissolve vert",
+       "Could not connect verts",
 };
 
 /*------------begin operator defines (see bmesh_opdefines.c too)------------*/
@@ -286,9 +288,15 @@ enum {
        BMOP_EXFACE_TOTSLOT,
 };
 
+#define BMOP_CONNECT_VERTS             11
+enum {
+       BM_CONVERTS_VERTIN,
+       BM_CONVERTS_EDGEOUT,
+       BM_CONVERTS_TOTSLOT
+};
 
 /*keep this updated!*/
-#define BMOP_TOTAL_OPS                 11
+#define BMOP_TOTAL_OPS                 12
 /*-------------------------------end operator defines-------------------------------*/
 
 extern BMOpDefine *opdefines[];
@@ -307,6 +315,10 @@ void BMOP_DupeFromFlag(struct BMesh *bm, int etypeflag, int flag);
 void BM_esubdivideflag(struct Object *obedit, struct BMesh *bm, int selflag, float rad, 
               int flag, int numcuts, int seltype);
 void BM_extrudefaceflag(BMesh *bm, int flag);
+
+/*these next two return 1 if they did anything, or zero otherwise.*/
 int BM_DissolveFaces(struct EditMesh *em, int flag);
+/*this doesn't display errors to the user, btw*/
+int BM_ConnectVerts(struct EditMesh *em, int flag);
 
 #endif
index 47841c58ef7f7c76af3e7a6860d1a3e68f2a0e02..082de58d9535929bdcc741b0774b63c8315cae9f 100644 (file)
@@ -3,6 +3,14 @@
 
 #include <stdio.h>
 
+BMOpDefine def_connectverts = {
+       {BMOP_OPSLOT_PNT_BUF,
+        BMOP_OPSLOT_PNT_BUF},
+       connectverts_exec,
+       BM_CONVERTS_TOTSLOT,
+       0
+};
+
 BMOpDefine def_extrudefaceregion = {
        {BMOP_OPSLOT_PNT_BUF,
         BMOP_OPSLOT_MAPPING,
@@ -108,6 +116,7 @@ BMOpDefine *opdefines[] = {
        &def_dissolvevertsop,
        &def_makefgonsop,
        &def_extrudefaceregion,
+       &def_connectverts,
 };
 
 int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));
index 402b3c774ab4144416393beb204d41508a5d3ca2..372caa67a82888b393a71411dd099cc009cdec8a 100644 (file)
@@ -18,5 +18,6 @@ void dissolvefaces_exec(BMesh *bmesh, BMOperator *op);
 void dissolveverts_exec(BMesh *bmesh, BMOperator *op);
 void bmesh_make_fgons_exec(BMesh *bmesh, BMOperator *op);
 void extrude_edge_context_exec(BMesh *bm, BMOperator *op);
+void connectverts_exec(BMesh *bm, BMOperator *op);
 
 #endif
index c4a59116b00389c4891988d8f387577062771491..90d6721e8833098fb0a5869dd9a551d9de2b0028 100644 (file)
@@ -10,7 +10,6 @@
 #include <stdio.h>
 
 #define FACE_MARK      1
-
 #define VERT_MARK      1
 
 void dissolvefaces_exec(BMesh *bm, BMOperator *op)
index d4780927b700cd8273be28b256025384fbb43a9e..b2b6e855bbd8572b8d88ba7cd41e53fbea1475aa 100644 (file)
@@ -668,7 +668,12 @@ static void addedgeface_mesh(EditMesh *em, wmOperator *op)
        EditEdge *eed;
        EditFace *efa;
        short amount=0;
-               
+       
+       if (em->selectmode & SCE_SELECT_VERTEX) {
+               /*return if bmesh vert connect does anything.*/
+               if (BM_ConnectVerts(em, BM_SELECT)) return;
+       }
+
        if (em->selectmode & SCE_SELECT_FACE) {
                /*return if bmesh face dissolve finds stuff to
                  dissolve.*/
index 7a617e6d34017c4f82a663adbb0696a9b51e5368..e026bb8ea88172eb6ec12ad066cd65669808e90f 100644 (file)
@@ -2353,7 +2353,7 @@ static void fill_tri_triple(EditMesh *em, EditFace *efa, struct GHash *gh, int n
        MEM_freeN(innerverts);
 }
 
-//Next two fill types are for knife exact only and are provided to allow for knifing through vertices
+//Next two fill types are for   exact only and are provided to allow for knifing through vertices
 //This means there is no multicut!
 static void fill_quad_doublevert(EditMesh *em, EditFace *efa, int v1, int v2)
 {