diff options
-rw-r--r-- | source/blender/bmesh/bmesh_operator_api.h | 7 | ||||
-rw-r--r-- | source/blender/bmesh/bmesh_operators.h | 4 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_operators.c | 15 | ||||
-rw-r--r-- | source/blender/bmesh/operators/subdivideop.c | 5 | ||||
-rw-r--r-- | source/blender/editors/mesh/bmesh_tools.c | 12 | ||||
-rw-r--r-- | source/blender/editors/mesh/loopcut.c | 1 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_buttons.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 10 | ||||
-rw-r--r-- | source/blender/editors/transform/transform.c | 6 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 2 | ||||
-rw-r--r-- | source/blender/editors/uvedit/uvedit_ops.c | 14 | ||||
-rw-r--r-- | source/blender/editors/uvedit/uvedit_unwrap_ops.c | 12 |
12 files changed, 56 insertions, 34 deletions
diff --git a/source/blender/bmesh/bmesh_operator_api.h b/source/blender/bmesh/bmesh_operator_api.h index b29c65d108e..770bca7e886 100644 --- a/source/blender/bmesh/bmesh_operator_api.h +++ b/source/blender/bmesh/bmesh_operator_api.h @@ -97,6 +97,7 @@ typedef struct BMOperator { int type; int slottype; int needflag; + int flag; struct BMOpSlot slots[BMOP_MAX_SLOTS]; void (*exec)(struct BMesh *bm, struct BMOperator *op); MemArena *arena; @@ -117,7 +118,8 @@ typedef struct BMOpDefine { } BMOpDefine; /*BMOpDefine->flag*/ -#define BMOP_UNTAN_MULTIRES 1 /*switch from multires tangent space to absolute coordinates*/ +#define BMOP_UNTAN_MULTIRES 1 /*switch from multires tangent space to absolute coordinates*/ + /*ensures consistent normals before operator execution, restoring the original ones windings/normals afterwards. @@ -228,6 +230,9 @@ void BM_remove_tagged_faces(struct BMesh *bm, int flag); void BM_remove_tagged_edges(struct BMesh *bm, int flag); void BM_remove_tagged_verts(struct BMesh *bm, int flag); +void BMO_Set_OpFlag(struct BMesh *bm, struct BMOperator *op, int flag); +void BMO_Clear_OpFlag(struct BMesh *bm, struct BMOperator *op, int flag); + void BMO_Set_Float(struct BMOperator *op, const char *slotname, float f); float BMO_Get_Float(BMOperator *op, const char *slotname); void BMO_Set_Int(struct BMOperator *op, const char *slotname, int i); diff --git a/source/blender/bmesh/bmesh_operators.h b/source/blender/bmesh/bmesh_operators.h index 490e9c849d3..31fef57dc62 100644 --- a/source/blender/bmesh/bmesh_operators.h +++ b/source/blender/bmesh/bmesh_operators.h @@ -80,8 +80,8 @@ struct EditMesh; void BMOP_DupeFromFlag(struct BMesh *bm, int etypeflag, int flag); void BM_esubdivideflag(struct Object *obedit, BMesh *bm, int flag, float smooth, - float fractal, int beauty, int numcuts, int seltype, - int cornertype, int singleedge, int gridfill, int seed); + float fractal, int beauty, int numcuts, int seltype, + int cornertype, int singleedge, int gridfill, int seed); void BM_extrudefaceflag(BMesh *bm, int flag); /*this next one return 1 if they did anything, or zero otherwise. diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c index 5e79221ab58..27c545b4f79 100644 --- a/source/blender/bmesh/intern/bmesh_operators.c +++ b/source/blender/bmesh/intern/bmesh_operators.c @@ -48,6 +48,16 @@ const int BMOP_OPSLOT_TYPEINFO[] = { sizeof(element_mapping) }; +void BMO_Set_OpFlag(BMesh *bm, BMOperator *op, int flag) +{ + op->flag |= flag; +} + +void BMO_Clear_OpFlag(BMesh *UNUSED(bm), BMOperator *op, int flag) +{ + op->flag &= ~flag; +} + /* * BMESH OPSTACK PUSH * @@ -99,6 +109,7 @@ void BMO_Init_Op(BMOperator *op, const char *opname) memset(op, 0, sizeof(BMOperator)); op->type = opcode; + op->flag = opdefines[opcode]->flag; /*initialize the operator slot types*/ for(i = 0; opdefines[opcode]->slottypes[i].type; i++) { @@ -131,11 +142,11 @@ void BMO_Exec_Op(BMesh *bm, BMOperator *op) BMO_push(bm, op); if(bm->stackdepth == 2) - bmesh_begin_edit(bm, opdefines[op->type]->flag); + bmesh_begin_edit(bm, op->flag); op->exec(bm, op); if(bm->stackdepth == 2) - bmesh_end_edit(bm, opdefines[op->type]->flag); + bmesh_end_edit(bm, op->flag); BMO_pop(bm); } diff --git a/source/blender/bmesh/operators/subdivideop.c b/source/blender/bmesh/operators/subdivideop.c index ca649b86c30..7cd15be177c 100644 --- a/source/blender/bmesh/operators/subdivideop.c +++ b/source/blender/bmesh/operators/subdivideop.c @@ -1103,8 +1103,9 @@ void esubdivide_exec(BMesh *bmesh, BMOperator *op) /*editmesh-emulating function*/ void BM_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float smooth, - float fractal, int beauty, int numcuts, - int seltype, int cornertype, int singleedge, int gridfill, int seed) + float fractal, int beauty, int numcuts, + int seltype, int cornertype, int singleedge, + int gridfill, int seed) { BMOperator op; diff --git a/source/blender/editors/mesh/bmesh_tools.c b/source/blender/editors/mesh/bmesh_tools.c index d6e5dc5949d..024e33281cb 100644 --- a/source/blender/editors/mesh/bmesh_tools.c +++ b/source/blender/editors/mesh/bmesh_tools.c @@ -1334,7 +1334,7 @@ static int mesh_duplicate_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -static int mesh_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event) +static int mesh_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event)) { WM_cursor_wait(1); mesh_duplicate_exec(C, op); @@ -1900,7 +1900,7 @@ void mesh_set_smooth_faces(BMEditMesh *em, short smooth) } } -static int mesh_faces_shade_smooth_exec(bContext *C, wmOperator *op) +static int mesh_faces_shade_smooth_exec(bContext *C, wmOperator *UNUSED(op)) { Object *obedit= CTX_data_edit_object(C); BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh; @@ -1928,7 +1928,7 @@ void MESH_OT_faces_shade_smooth(wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; } -static int mesh_faces_shade_flat_exec(bContext *C, wmOperator *op) +static int mesh_faces_shade_flat_exec(bContext *C, wmOperator *UNUSED(op)) { Object *obedit= CTX_data_edit_object(C); BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh; @@ -2317,7 +2317,7 @@ static EnumPropertyItem merge_type_items[]= { {5, "COLLAPSE", 0, "Collapse", ""}, {0, NULL, 0, NULL, NULL}}; -static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *free) +static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *UNUSED(ptr), int *free) { Object *obedit; EnumPropertyItem *item= NULL; @@ -3234,7 +3234,7 @@ static int blend_from_shape_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -static EnumPropertyItem *shape_itemf(bContext *C, PointerRNA *ptr, int *free) +static EnumPropertyItem *shape_itemf(bContext *C, PointerRNA *UNUSED(ptr), int *free) { Object *obedit= CTX_data_edit_object(C); Mesh *me= (obedit) ? obedit->data : NULL; @@ -3361,7 +3361,7 @@ void MESH_OT_select_axis(wmOperatorType *ot) RNA_def_int(ot->srna, "axis", 0, 0, 2, "Axis", "Select the axis to compare each vertex on", 0, 2); } -static int solidify_exec(bContext *C, wmOperator *op) +static int solidify_exec(bContext *UNUSED(C), wmOperator *UNUSED(op)) { #if 0 Object *obedit= CTX_data_edit_object(C); diff --git a/source/blender/editors/mesh/loopcut.c b/source/blender/editors/mesh/loopcut.c index 6cb79039a88..3304fdd87a0 100644 --- a/source/blender/editors/mesh/loopcut.c +++ b/source/blender/editors/mesh/loopcut.c @@ -296,6 +296,7 @@ static void ringsel_finish(bContext *C, wmOperator *op) BM_esubdivideflag(lcd->ob, em->bm, BM_SELECT, 0.0f, 0.0f, 0, cuts, SUBDIV_SELECT_LOOPCUT, SUBD_PATH, 0, 0, 0); + /* force edge slide to edge select mode in in face select mode */ if (em->selectmode & SCE_SELECT_FACE) { if (em->selectmode == SCE_SELECT_FACE) diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index dfaeccd7993..6334fbc0008 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -208,7 +208,7 @@ static void image_editvertex_buts(const bContext *C, uiBlock *block) MTexPoly *tf; BMLoop *l; MLoopUV *luv; - BMIter iter, liter; + BMIter iter; static float ocent[2]; float cent[2]= {0.0, 0.0}; int imx= 256, imy= 256; diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index a87cbd0530d..11a1658b30d 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1737,7 +1737,6 @@ static void draw_dm_face_normals(BMEditMesh *em, Scene *scene, DerivedMesh *dm) static void draw_dm_face_centers__mapFunc(void *userData, int index, float *cent, float *UNUSED(no)) { BMFace *efa = EDBM_get_face_for_index(((void **)userData)[0], index); - BMEditMesh *em = ((void **)userData)[0]; int sel = *(((int **)userData)[1]); if (!BM_TestHFlag(efa, BM_HIDDEN) && BM_TestHFlag(efa, BM_SELECT)==sel) { @@ -1798,7 +1797,8 @@ static int check_pinned_face(BMesh *bm, BMFace *efa) return 0; } -static void draw_dm_vert_pins__mapFunc(void *userData, int index, float *co) +static void draw_dm_vert_pins__mapFunc(void *userData, int index, + float *co, float *no_f, short *no_s) { struct {BMEditMesh *em; Mesh *me;} *data = userData; BMVert *eve = EDBM_get_vert_for_index(data->em, index); @@ -1955,7 +1955,7 @@ static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int i static void draw_dm_edges_sel_interp(BMEditMesh *em, DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol) { - unsigned char *cols[3] = {em, baseCol, selCol}; + void *cols[3] = {em, baseCol, selCol}; dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols); } @@ -2044,9 +2044,7 @@ static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNU struct { unsigned char *cols[3]; BMEditMesh *em; BMFace *efa_act; Mesh *me;} *data = userData; BMFace *efa = EDBM_get_face_for_index(data->em, index); unsigned char *col; - BMIter vfiter; - BMVert *v; - int vcount, pin=0; + int pin=0; int opac = UI_GetThemeValue(TH_PIN_OPAC); if (!efa) diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 32ab2ffeb4b..4a920e15e34 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -4662,10 +4662,10 @@ void projectSVData(TransInfo *t, int final) BMFace *f; BM_ITER(f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) { - BMIter liter2, fiter2; - BMFace *f2, *copyf, *copyf2; + BMIter liter2; + BMFace *copyf, *copyf2; BMLoop *l2; - int sel, ok, do_vdata; + int sel, do_vdata; if (BLI_smallhash_haskey(&visit, (uintptr_t)f)) continue; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index ca486d60be3..3b3a5a6877e 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -2339,7 +2339,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t) /* CrazySpace */ if(defmats) { // || (quats && eve->tmp.p)) { - float mat[3][3], imat[3][3], qmat[3][3]; + float mat[3][3], imat[3][3]; /* use both or either quat and defmat correction */ //BMESH_TODO, need to restore this quats thing diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index a882e8f7d92..30b3fde7b80 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -361,7 +361,7 @@ int uvedit_uv_selected(BMEditMesh *em, Scene *scene, BMLoop *l) if(ts->selectmode & SCE_SELECT_FACE) return BM_TestHFlag(l->f, BM_SELECT); else - return BM_TestHFlag(l, BM_SELECT); + return BM_TestHFlag(l->v, BM_SELECT); } else { MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV); @@ -715,7 +715,7 @@ static void find_nearest_uv_vert(Scene *scene, Image *ima, BMEditMesh *em, MTexPoly *tf; MLoopUV *luv; float mindist, dist; - int i, nverts; + int i; /*this will fill in hit.vert1 and hit.vert2*/ find_nearest_uv_edge(scene, ima, em, co, hit); @@ -1549,7 +1549,6 @@ static int select_all_exec(bContext *C, wmOperator *op) MTexPoly *tf; MLoopUV *luv; int action = RNA_enum_get(op->ptr, "action"); - int sel = 1; scene= CTX_data_scene(C); ts= CTX_data_tool_settings(C); @@ -1925,16 +1924,15 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop) } } } -#if 0 //bmesh does flushing through the BM_Select functions, so not sure - //what to do about this bit. + if(sync) { /* flush for mesh selection */ if(ts->selectmode != SCE_SELECT_FACE) { - if(flush==1) EM_select_flush(em); - else if(flush==-1) EM_deselect_flush(em); + if(flush==1) EDBM_select_flush(em, ts->selectmode); + //else if(flush==-1) EDBM_deselect_flush(em); <-- I think this takes care of itself. . . } } -#endif + DAG_id_tag_update(obedit->data, 0); WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data); diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 57264e2cd5c..b9959afa0f9 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -43,6 +43,7 @@ #include "BLI_editVert.h" #include "BLI_uvproject.h" #include "BLI_utildefines.h" +#include "BLI_rand.h" #include "BKE_context.h" #include "BKE_customdata.h" @@ -203,8 +204,15 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, /*scanfill time!*/ firstv = lastv = NULL; BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) { + int i; + v = BLI_addfillvert(l->v->co); + /*add small random offset*/ + for (i=0; i<3; i++) { + v->co[i] += (BLI_drand()-0.5f)*FLT_EPSILON*50; + } + v->tmp.p = l; if (lastv) { @@ -218,8 +226,8 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em, BLI_addfilledge(firstv, v); - /*mode 2 enables shortest-diagonal for quads*/ - BLI_edgefill(0); + /*mode 2 enables faster handling of tri/quads*/ + BLI_edgefill(2); for (sefa = fillfacebase.first; sefa; sefa=sefa->next) { ls[0] = sefa->v1->tmp.p; ls[1] = sefa->v2->tmp.p; |