[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27383] branches/bmesh/blender/source/ blender: fixed edge slide to an extent, though it still needs work ( finding correct transform direction vector, uvs/vcols, etc).

Joseph Eagar joeedh at gmail.com
Wed Mar 10 12:16:26 CET 2010


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

Log Message:
-----------
fixed edge slide to an extent, though it still needs work (finding correct transform direction vector, uvs/vcols, etc).  also got delete and vert connect (ykey) to work again.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
    branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
    branches/bmesh/blender/source/blender/editors/mesh/loopcut.c
    branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c
    branches/bmesh/blender/source/blender/editors/transform/transform.c

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c	2010-03-10 11:01:26 UTC (rev 27382)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c	2010-03-10 11:16:26 UTC (rev 27383)
@@ -118,6 +118,9 @@
 
 void BM_Select_Vert(BMesh *bm, BMVert *v, int select)
 {
+	BMIter iter;
+	BMEdge *e;
+
 	if(select) {
 		if (!BM_TestHFlag(v, BM_SELECT)) bm->totvertsel += 1;
 		BM_SetHFlag(v, BM_SELECT);
@@ -125,6 +128,23 @@
 		if (BM_TestHFlag(v, BM_SELECT)) bm->totvertsel -= 1;
 		BM_ClearHFlag(v, BM_SELECT);
 	}
+
+	/*BMESH_TODO hrm, not sure if flushing here is such a good idea. . .
+	  but probably easier then calling a EDBM_Normalize_Selection after
+	  each tool?*/
+#if 0
+	BM_ITER(e, &iter, bm, BM_EDGES_OF_VERT, v) {
+		if (!BM_TestHFlag(e, BM_SELECT) && BM_TestHFlag(e->v1, BM_SELECT) 
+		                                && BM_TestHFlag(e->v2, BM_SELECT)) {
+			BM_SetHFlag(e, BM_SELECT);
+			bm->totedgesel += 1;
+		} else if (BM_TestHFlag(e, BM_SELECT) && (!BM_TestHFlag(e->v1, BM_SELECT) 
+		                                      || !BM_TestHFlag(e->v2, BM_SELECT))) {
+			BM_ClearHFlag(e, BM_SELECT);
+			bm->totedgesel -= 1;		
+		}
+	}
+#endif
 }
 
 /*

Modified: branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c	2010-03-10 11:01:26 UTC (rev 27382)
+++ branches/bmesh/blender/source/blender/bmesh/operators/subdivideop.c	2010-03-10 11:16:26 UTC (rev 27383)
@@ -1006,6 +1006,23 @@
 		ele = BMO_IterNew(&iter, bm, &op, "outinner", BM_EDGE|BM_VERT);
 		for (; ele; ele=BMO_IterStep(&iter)) {
 			BM_Select(bm, ele, 1);
+
+			if (ele->type == BM_VERT) {
+				BMEdge *e;
+				BMIter eiter;
+
+				BM_ITER(e, &eiter, bm, BM_EDGES_OF_VERT, ele) {
+					if (!BM_TestHFlag(e, BM_SELECT) && BM_TestHFlag(e->v1, BM_SELECT) 
+													&& BM_TestHFlag(e->v2, BM_SELECT)) {
+						BM_SetHFlag(e, BM_SELECT);
+						bm->totedgesel += 1;
+					} else if (BM_TestHFlag(e, BM_SELECT) && (!BM_TestHFlag(e->v1, BM_SELECT) 
+														  || !BM_TestHFlag(e->v2, BM_SELECT))) {
+						BM_ClearHFlag(e, BM_SELECT);
+						bm->totedgesel -= 1;		
+					}
+				}
+			}
 		}
 	}
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2010-03-10 11:01:26 UTC (rev 27382)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c	2010-03-10 11:16:26 UTC (rev 27383)
@@ -1158,7 +1158,7 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
 	/*props */
-	RNA_def_enum(ot->srna, "type", prop_mesh_delete_types, 10, "Type", "Method used for deleting mesh data");
+	ot->prop = RNA_def_enum(ot->srna, "type", prop_mesh_delete_types, 10, "Type", "Method used for deleting mesh data");
 }
 
 

Modified: branches/bmesh/blender/source/blender/editors/mesh/loopcut.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/loopcut.c	2010-03-10 11:01:26 UTC (rev 27382)
+++ branches/bmesh/blender/source/blender/editors/mesh/loopcut.c	2010-03-10 11:16:26 UTC (rev 27383)
@@ -281,16 +281,17 @@
 static void ringsel_finish(bContext *C, wmOperator *op)
 {
 	tringselOpData *lcd= op->customdata;
-	int cuts= RNA_int_get(op->ptr,"number_cuts");
+	int cuts= RNA_int_get(op->ptr, "number_cuts");
 
 	if (lcd->eed) {
 		edgering_sel(lcd, cuts, 1);
 		if (lcd->do_cut) {
 			BMEditMesh *em = lcd->em;
+
 			BM_esubdivideflag(lcd->ob, em->bm, BM_SELECT, 0.0f, 
 			                  0.0f, 0, cuts, SUBDIV_SELECT_LOOPCUT, 
 			                  SUBD_PATH, 0, 0);
-
+			
 			WM_event_add_notifier(C, NC_GEOM|ND_SELECT|ND_DATA, lcd->ob->data);
 			DAG_id_flush_update(lcd->ob->data, OB_RECALC_DATA);
 		}

Modified: branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c	2010-03-10 11:01:26 UTC (rev 27382)
+++ branches/bmesh/blender/source/blender/editors/mesh/mesh_ops.c	2010-03-10 11:16:26 UTC (rev 27383)
@@ -154,6 +154,7 @@
 
 	WM_operatortype_append(MESH_OT_solidify);
 	WM_operatortype_append(MESH_OT_select_nth);
+	WM_operatortype_append(MESH_OT_vert_connect);
 }
 
 int ED_operator_editmesh_face_select(bContext *C)
@@ -290,7 +291,7 @@
 	WM_keymap_add_menu(keymap, "INFO_MT_mesh_add", AKEY, KM_PRESS, KM_SHIFT, 0);
 	
 	WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, 0, 0);
-	WM_keymap_add_item(keymap, "MESH_OT_split", YKEY, KM_PRESS, 0, 0);
+	WM_keymap_add_item(keymap, "MESH_OT_vert_connect", YKEY, KM_PRESS, 0, 0);
 
 	/* use KM_CLICK because same key is used for tweaks */
 	WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", ACTIONMOUSE, KM_CLICK, KM_CTRL, 0);

Modified: branches/bmesh/blender/source/blender/editors/transform/transform.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/transform/transform.c	2010-03-10 11:01:26 UTC (rev 27382)
+++ branches/bmesh/blender/source/blender/editors/transform/transform.c	2010-03-10 11:16:26 UTC (rev 27383)
@@ -4139,7 +4139,7 @@
 			VECCOPY(vec, a);
 			return l;
 		} else {
-			sub_v3_v3v3(n, BM_OtherEdgeVert(l->e, l->v)->co, l->v->co);
+			sub_v3_v3v3(n, BM_OtherEdgeVert(l->e, v)->co, v->co);
 			add_v3_v3v3(a, a, n);
 			i += 1;
 		}
@@ -4243,8 +4243,6 @@
 		if (!v)
 			break;
 
-		BMINDEX_SET(v, 0);
-
 		if (!v->edge)
 			continue;
 		
@@ -4256,8 +4254,6 @@
 		/*first, rewind*/
 		numsel = 0;
 		do {
-			BMINDEX_SET(v, 0);
-
 			e = get_other_edge(bm, v, e);
 			if (!e) {
 				e = v->edge;
@@ -4272,6 +4268,8 @@
 			v = BM_OtherEdgeVert(e, v);
 		} while (e != first->edge);
 
+		BMINDEX_SET(v, 0);
+
 		l1 = l2 = l = NULL;
 		l1 = e->loop;
 		l2 = e->loop->radial.next->data;
@@ -4311,21 +4309,25 @@
 			e1 = e;
 			e = get_other_edge(bm, v, e);
 			if (!e) {
+				//v2=v, v = BM_OtherEdgeVert(l1->e, v);
+
 				sv = tempsv + j + 1;
 				sv->v = v;
 				sv->origvert = *v;
 				
 				l = BM_OtherFaceLoop(l1->e, l1->f, v);
 				sv->up = BM_OtherEdgeVert(l->e, v);
+				sub_v3_v3v3(sv->upvec, BM_OtherEdgeVert(l->e, v)->co, v->co);
 
 				if (l2) {
 					l = BM_OtherFaceLoop(l2->e, l2->f, v);
 					sv->down = BM_OtherEdgeVert(l->e, v);
+					sub_v3_v3v3(sv->downvec, BM_OtherEdgeVert(l->e, v)->co, v->co);
 				}
 
 				BMINDEX_SET(v, 0);
 				BMINDEX_SET(v2, 0);
-
+				
 				j += 2;
 				break;
 			}
@@ -4902,7 +4904,7 @@
 			add_v3_v3v3(sv->v->co, sv->origvert.co, vec);
 		} else {
 			VECCOPY(vec, sv->downvec);
-			mul_v3_fl(vec, perc);
+			mul_v3_fl(vec, -perc);
 			add_v3_v3v3(sv->v->co, sv->origvert.co, vec);
 		}
 	}





More information about the Bf-blender-cvs mailing list