diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-03-03 19:07:49 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2013-03-03 19:07:49 +0400 |
commit | 66a2b848972d47a033f617a40f9a9044756d1d32 (patch) | |
tree | bf30f5bc13e9c0b4f52aacead676a2c07cbb331a /source/blender/editors/mesh | |
parent | 0c5dfc8a639b04e1767852121b9dee7cd5bb050f (diff) | |
parent | 4774357b594c5cd5a38b21df131b539a197c101b (diff) |
Merged changes in the trunk up to revision 54992.
Resolved conflicts:
release/scripts/startup/bl_ui/space_view3d.py
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r-- | source/blender/editors/mesh/editface.c | 14 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_select.c | 46 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 3 | ||||
-rw-r--r-- | source/blender/editors/mesh/meshtools.c | 6 |
4 files changed, 46 insertions, 23 deletions
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c index 7ac27e038a4..7ddf2b54a88 100644 --- a/source/blender/editors/mesh/editface.c +++ b/source/blender/editors/mesh/editface.c @@ -181,11 +181,17 @@ void paintface_reveal(Object *ob) static void hash_add_face(EdgeHash *ehash, MPoly *mp, MLoop *mloop) { - MLoop *ml; - int i; + MLoop *ml, *ml_next; + int i = mp->totloop; + + ml_next = mloop; /* first loop */ + ml = &ml_next[i - 1]; /* last loop */ + + while (i-- != 0) { + BLI_edgehash_insert(ehash, ml->v, ml_next->v, NULL); - for (i = 0, ml = mloop; i < mp->totloop; i++, ml++) { - BLI_edgehash_insert(ehash, ml->v, ME_POLY_LOOP_NEXT(mloop, mp, i)->v, NULL); + ml = ml_next; + ml_next++; } } diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index 57f116693f8..51161970c0b 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -933,9 +933,13 @@ static int edbm_select_mode_exec(bContext *C, wmOperator *op) static int edbm_select_mode_invoke(bContext *C, wmOperator *op, wmEvent *event) { - // RNA_enum_set(op->ptr, "type"); /* type must be set already */ - RNA_boolean_set(op->ptr, "use_extend", event->shift); - RNA_boolean_set(op->ptr, "use_expand", event->ctrl); + /* detecting these options based on shift/ctrl here is weak, but it's done + * to make this work when clicking buttons or menus */ + if (!RNA_struct_property_is_set(op->ptr, "use_extend")) + RNA_boolean_set(op->ptr, "use_extend", event->shift); + if (!RNA_struct_property_is_set(op->ptr, "use_expand")) + RNA_boolean_set(op->ptr, "use_expand", event->ctrl); + return edbm_select_mode_exec(C, op); } @@ -1358,6 +1362,22 @@ static int edgetag_context_check(Scene *scene, BMesh *bm, BMEdge *e) return 0; } +static void edgetag_ensure_cd_flag(Scene *scene, Mesh *me) +{ + BMesh *bm = me->edit_btmesh->bm; + + switch (scene->toolsettings->edge_mode) { + case EDGE_MODE_TAG_CREASE: + BM_mesh_cd_flag_ensure(bm, me, ME_CDFLAG_EDGE_CREASE); + break; + case EDGE_MODE_TAG_BEVEL: + BM_mesh_cd_flag_ensure(bm, me, ME_CDFLAG_EDGE_BWEIGHT); + break; + default: + break; + } +} + static int edgetag_shortest_path(Scene *scene, BMesh *bm, BMEdge *e_src, BMEdge *e_dst) { /* BM_ELEM_TAG flag is used to store visited edges */ @@ -1371,16 +1391,7 @@ static int edgetag_shortest_path(Scene *scene, BMesh *bm, BMEdge *e_src, BMEdge /* note, would pass BM_EDGE except we are looping over all edges anyway */ BM_mesh_elem_index_ensure(bm, BM_VERT /* | BM_EDGE */); - switch (scene->toolsettings->edge_mode) { - case EDGE_MODE_TAG_CREASE: - BM_mesh_cd_flag_ensure(bm, BKE_mesh_from_object(OBACT), ME_CDFLAG_EDGE_CREASE); - break; - case EDGE_MODE_TAG_BEVEL: - BM_mesh_cd_flag_ensure(bm, BKE_mesh_from_object(OBACT), ME_CDFLAG_EDGE_BWEIGHT); - break; - default: - break; - } + edgetag_ensure_cd_flag(scene, OBACT->data); BM_ITER_MESH_INDEX (e, &eiter, bm, BM_EDGES_OF_MESH, i) { if (BM_elem_flag_test(e, BM_ELEM_HIDDEN) == FALSE) { @@ -1470,7 +1481,7 @@ static int mouse_mesh_shortest_path_edge(ViewContext *vc) e_dst = EDBM_edge_find_nearest(vc, &dist); if (e_dst) { Mesh *me = vc->obedit->data; - int path = 0; + bool is_path = false; if (em->bm->selected.last) { BMEditSelection *ese = em->bm->selected.last; @@ -1481,13 +1492,14 @@ static int mouse_mesh_shortest_path_edge(ViewContext *vc) if (e_act != e_dst) { if (edgetag_shortest_path(vc->scene, em->bm, e_act, e_dst)) { BM_select_history_remove(em->bm, e_act); - path = 1; + is_path = true; } } } } - if (path == 0) { + if (is_path == false) { int act = (edgetag_context_check(vc->scene, em->bm, e_dst) == 0); + edgetag_ensure_cd_flag(vc->scene, vc->obedit->data); edgetag_context_set(em->bm, vc->scene, e_dst, act); /* switch the edge option */ } @@ -2963,7 +2975,7 @@ void MESH_OT_select_random(wmOperatorType *ot) /* props */ RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, "Percent", "Percentage of elements to select randomly", 0.f, 100.0f); - RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend the selection"); + RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend the selection"); } static int edbm_select_next_loop_exec(bContext *C, wmOperator *UNUSED(op)) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index dcb25423b80..92e1dbf433f 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -3321,7 +3321,8 @@ static int edbm_fill_exec(bContext *C, wmOperator *op) if (!EDBM_op_init(em, &bmop, op, "triangle_fill edges=%he use_beauty=%b", - BM_ELEM_SELECT, use_beauty)) { + BM_ELEM_SELECT, use_beauty)) + { return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c index f983a43f573..378f6374336 100644 --- a/source/blender/editors/mesh/meshtools.c +++ b/source/blender/editors/mesh/meshtools.c @@ -149,7 +149,7 @@ int join_mesh_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } - /* remove tessface to ensure we don't old references to invalid faces */ + /* remove tessface to ensure we don't hold references to invalid faces */ BKE_mesh_tessface_clear(me); /* new material indices and material array */ @@ -309,6 +309,10 @@ int join_mesh_exec(bContext *C, wmOperator *op) me = base->object->data; if (me->totvert) { + + /* merge customdata flag */ + ((Mesh *)ob->data)->cd_flag |= me->cd_flag; + /* standard data */ CustomData_merge(&me->vdata, &vdata, CD_MASK_MESH, CD_DEFAULT, totvert); CustomData_copy_data(&me->vdata, &vdata, 0, vertofs, me->totvert); |