[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19189] branches/bmesh/blender/source/ blender/bmesh/operators/connectops.c: missing file

Joseph Eagar joeedh at gmail.com
Wed Mar 4 10:38:26 CET 2009


Revision: 19189
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19189
Author:   joeedh
Date:     2009-03-04 10:38:26 +0100 (Wed, 04 Mar 2009)

Log Message:
-----------
missing file

Added Paths:
-----------
    branches/bmesh/blender/source/blender/bmesh/operators/connectops.c

Added: branches/bmesh/blender/source/blender/bmesh/operators/connectops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/connectops.c	                        (rev 0)
+++ branches/bmesh/blender/source/blender/bmesh/operators/connectops.c	2009-03-04 09:38:26 UTC (rev 19189)
@@ -0,0 +1,79 @@
+#include "MEM_guardedalloc.h"
+
+#include "BKE_utildefines.h"
+
+#include "bmesh.h"
+#include "mesh_intern.h"
+#include "bmesh_private.h"
+#include "BLI_arithb.h"
+
+#include <stdio.h>
+
+#define VERT_INPUT	1
+#define EDGE_OUT	1
+
+void connectverts_exec(BMesh *bm, BMOperator *op)
+{
+	BMIter iter, liter;
+	BMFace *f, *nf;
+	BMEdge *e;
+	BMLoop *l;
+	BMVert *v1, *v2;
+	int ok;
+	
+	BMO_Flag_Buffer(bm, op, BM_CONVERTS_VERTIN, VERT_INPUT);
+
+	for (f=BMIter_New(&iter, bm, BM_FACES, NULL); f; f=BMIter_Step(&iter)){
+		l = BMIter_New(&liter, bm, BM_LOOPS_OF_FACE, f);
+		v1 = v2 = NULL;
+		ok = 0;
+		for (; l; l=BMIter_Step(&liter)) {
+			if (BMO_TestFlag(bm, l->v, VERT_INPUT)) {
+				if (v1==NULL) v1 = l->v;
+				else if (v2==NULL) {
+					if (((BMLoop*)l->head.prev)->v != v1
+					   && ((BMLoop*)l->head.next)->v!=v1) {
+						v2 = l->v;
+						ok = 1;
+					}
+				} else ok = 0;
+			}
+		}
+
+		if (ok) {
+			e = BM_Connect_Verts(bm, v1, v2, &nf);
+			if (!e) {
+				BMO_RaiseError(bm, op,
+					BMERR_CONNECTVERT_FAILED, NULL);
+				return;
+			}
+			BMO_SetFlag(bm, e, EDGE_OUT);
+		}
+	}
+
+	BMO_Flag_To_Slot(bm, op, BM_CONVERTS_EDGEOUT, EDGE_OUT, BM_EDGE);
+}
+
+int BM_ConnectVerts(EditMesh *em, int flag) 
+{
+	EditMesh *em2;
+	BMesh *bm = editmesh_to_bmesh(em);
+	BMOperator op;
+	
+	BMO_Init_Op(&op, BMOP_CONNECT_VERTS);
+	BMO_HeaderFlag_To_Slot(bm, &op, BM_CONVERTS_VERTIN, flag, BM_VERT);
+	BMO_Exec_Op(bm, &op);
+	BMO_Finish_Op(bm, &op);
+	
+	if (BMO_GetSlot(&op, BM_CONVERTS_EDGEOUT)->len > 0 && 
+	    BMO_GetError(bm, NULL, NULL)==0)
+	{
+		em2 = bmesh_to_editmesh(bm);
+		set_editMesh(em, em2);
+		MEM_freeN(em2);
+
+		return 1;
+	}
+
+	return 0;
+}
\ No newline at end of file





More information about the Bf-blender-cvs mailing list