From 8a6d70bcb149ef429a810b4acd2fe2073b30a40f Mon Sep 17 00:00:00 2001 From: Joseph Eagar Date: Thu, 18 Jun 2009 03:04:27 +0000 Subject: [PATCH] ctrl-click to make an isolated vert works again --- source/blender/bmesh/intern/bmesh_opdefines.c | 11 +++++++- .../bmesh/intern/bmesh_operators_private.h | 2 ++ source/blender/bmesh/operators/utils.c | 9 ++++++ source/blender/editors/mesh/bmesh_tools.c | 28 +++++++++---------- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index 5a445dec9ec..d9028da665f 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -3,7 +3,14 @@ #include -/*applies a transform to vertices*/ +BMOpDefine def_makevert = { + "makevert", + {{BMOP_OPSLOT_VEC, "co"}, + {BMOP_OPSLOT_ELEMENT_BUF, "newvertout"}, + {0, /*null-terminating sentinel*/}}, + bmesh_makevert_exec, + 0, +}; /*contextual_create is fkey, it creates new faces, makes stuff from edge nets, @@ -47,6 +54,7 @@ BMOpDefine def_translate= { }; +/*applies a transform to vertices*/ BMOpDefine def_transform = { "transform", {{BMOP_OPSLOT_MAT, "mat"}, @@ -248,6 +256,7 @@ BMOpDefine *opdefines[] = { &def_rotate, &def_edgenet_fill, &def_contextual_create, + &def_makevert, }; int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*)); diff --git a/source/blender/bmesh/intern/bmesh_operators_private.h b/source/blender/bmesh/intern/bmesh_operators_private.h index e580d70ffc3..da3e37d9c26 100644 --- a/source/blender/bmesh/intern/bmesh_operators_private.h +++ b/source/blender/bmesh/intern/bmesh_operators_private.h @@ -28,5 +28,7 @@ void bmesh_transform_exec(BMesh *bm, BMOperator *op); void bmesh_contextual_create_exec(BMesh *bm, BMOperator *op); void bmesh_edgenet_fill_exec(BMesh *bm, BMOperator *op); void bmesh_rotate_exec(BMesh *bm, BMOperator *op); +void bmesh_makevert_exec(BMesh *bm, BMOperator *op); + #endif diff --git a/source/blender/bmesh/operators/utils.c b/source/blender/bmesh/operators/utils.c index f4e9f2e2b1a..3e25272c144 100644 --- a/source/blender/bmesh/operators/utils.c +++ b/source/blender/bmesh/operators/utils.c @@ -32,6 +32,15 @@ * */ +void bmesh_makevert_exec(BMesh *bm, BMOperator *op) { + float vec[3]; + + BMO_Get_Vec(op, "co", vec); + + BMO_SetFlag(bm, BM_Make_Vert(bm, vec, NULL), 1); + BMO_Flag_To_Slot(bm, op, "newvertout", 1, BM_VERT); +} + void bmesh_transform_exec(BMesh *bm, BMOperator *op) { BMOIter iter; BMVert *v; diff --git a/source/blender/editors/mesh/bmesh_tools.c b/source/blender/editors/mesh/bmesh_tools.c index 01c3f0c8e21..711aac4f88d 100644 --- a/source/blender/editors/mesh/bmesh_tools.c +++ b/source/blender/editors/mesh/bmesh_tools.c @@ -450,7 +450,6 @@ short EDBM_Extrude_edges_indiv(BMEditMesh *em, short flag, float *nor) short EDBM_Extrude_verts_indiv(BMEditMesh *em, wmOperator *op, short flag, float *nor) { BMOperator bmop; - BMIter iter; BMOIter siter; BMVert *v; @@ -912,26 +911,27 @@ static int dupli_extrude_cursor(bContext *C, wmOperator *op, wmEvent *event) EDBM_CallOpf(vc.em, op, "translate verts=%hv vec=%v", BM_SELECT, min); } - /* else { - float mat[3][3],imat[3][3]; float *curs= give_cursor(vc.scene, vc.v3d); + BMOperator bmop; + BMOIter oiter; VECCOPY(min, curs); - view3d_get_view_aligned_coordinate(&vc, min, event->mval); - - eve= addvertlist(vc.em, 0, NULL); - Mat3CpyMat4(mat, vc.obedit->obmat); - Mat3Inv(imat, mat); + view3d_get_view_aligned_coordinate(&vc, min, event->mval); + Mat4Invert(vc.obedit->imat, vc.obedit->obmat); + Mat4MulVecfl(vc.obedit->imat, min); // back in object space - VECCOPY(eve->co, min); - Mat3MulVecfl(imat, eve->co); - VecSubf(eve->co, eve->co, vc.obedit->obmat[3]); - - eve->f= SELECT; + EDBM_InitOpf(vc.em, &bmop, op, "makevert co=%v", min); + BMO_Exec_Op(vc.em->bm, &bmop); + + BMO_ITER(v1, &oiter, vc.em->bm, &bmop, "newvertout") { + BM_Select(vc.em->bm, v1, 1); + } + + if (!EDBM_FinishOp(vc.em, &bmop, op, 1)) + return OPERATOR_CANCELLED; } - */ //retopo_do_all(); WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, vc.obedit);