Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/mesh/editmesh_tools.c
| Context not available. | |||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| View3D *v3d = CTX_wm_view3d(C); | View3D *v3d = CTX_wm_view3d(C); | ||||
| Object *obedit = CTX_data_edit_object(C); | |||||
| BMEditMesh *em = BKE_editmesh_from_object(obedit); | |||||
| const int type = RNA_enum_get(op->ptr, "type"); | const int type = RNA_enum_get(op->ptr, "type"); | ||||
| const bool uvs = RNA_boolean_get(op->ptr, "uvs"); | const bool uvs = RNA_boolean_get(op->ptr, "uvs"); | ||||
| bool ok = false; | |||||
| ViewLayer *view_layer = CTX_data_view_layer(C); | |||||
| uint objects_len = 0; | |||||
| Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, &objects_len); | |||||
| switch (type) { | for (uint ob_index = 0; ob_index < objects_len; ob_index++) | ||||
| case MESH_MERGE_CENTER: | { | ||||
| ok = merge_target(em, scene, v3d, obedit, false, uvs, op); | Object *obedit = objects[ob_index]; | ||||
| break; | BMEditMesh *em = BKE_editmesh_from_object(obedit); | ||||
| case MESH_MERGE_CURSOR: | bool ok = false; | ||||
| ok = merge_target(em, scene, v3d, obedit, true, uvs, op); | |||||
| break; | |||||
| case MESH_MERGE_LAST: | |||||
| ok = merge_firstlast(em, false, uvs, op); | |||||
| break; | |||||
| case MESH_MERGE_FIRST: | |||||
| ok = merge_firstlast(em, true, uvs, op); | |||||
| break; | |||||
| case MESH_MERGE_COLLAPSE: | |||||
| ok = EDBM_op_callf(em, op, "collapse edges=%he uvs=%b", BM_ELEM_SELECT, uvs); | |||||
| break; | |||||
| default: | |||||
| BLI_assert(0); | |||||
| break; | |||||
| } | |||||
| if (!ok) { | switch (type) { | ||||
| return OPERATOR_CANCELLED; | case MESH_MERGE_CENTER: | ||||
| } | ok = merge_target(em, scene, v3d, obedit, false, uvs, op); | ||||
| break; | |||||
| case MESH_MERGE_CURSOR: | |||||
| ok = merge_target(em, scene, v3d, obedit, true, uvs, op); | |||||
| break; | |||||
| case MESH_MERGE_LAST: | |||||
| ok = merge_firstlast(em, false, uvs, op); | |||||
| break; | |||||
| case MESH_MERGE_FIRST: | |||||
| ok = merge_firstlast(em, true, uvs, op); | |||||
| break; | |||||
| case MESH_MERGE_COLLAPSE: | |||||
| ok = EDBM_op_callf(em, op, "collapse edges=%he uvs=%b", BM_ELEM_SELECT, uvs); | |||||
| break; | |||||
| default: | |||||
| BLI_assert(0); | |||||
| break; | |||||
| } | |||||
| EDBM_update_generic(em, true, true); | if (!ok) { | ||||
| continue; | |||||
| } | |||||
| /* once collapsed, we can't have edge/face selection */ | EDBM_update_generic(em, true, true); | ||||
| if ((em->selectmode & SCE_SELECT_VERTEX) == 0) { | |||||
| EDBM_flag_disable_all(em, BM_ELEM_SELECT); | /* once collapsed, we can't have edge/face selection */ | ||||
| if ((em->selectmode & SCE_SELECT_VERTEX) == 0) { | |||||
| EDBM_flag_disable_all(em, BM_ELEM_SELECT); | |||||
| } | |||||
| } | } | ||||
| MEM_freeN(objects); | |||||
| return OPERATOR_FINISHED; | return OPERATOR_FINISHED; | ||||
| } | } | ||||
| Context not available. | |||||