Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/mesh/editmesh_loopcut.c
| Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| if (is_single) { | if (is_single) { | ||||
| /* de-select endpoints */ | /* de-select endpoints */ | ||||
| BM_vert_select_set(em->bm, v_eed_orig[0], false); | BM_vert_select_set(em->bm, v_eed_orig[0], false); | ||||
| BM_vert_select_set(em->bm, v_eed_orig[1], false); | BM_vert_select_set(em->bm, v_eed_orig[1], false); | ||||
| EDBM_selectmode_flush_ex(lcd->em, SCE_SELECT_VERTEX); | EDBM_selectmode_flush_ex(lcd->em, SCE_SELECT_VERTEX); | ||||
| } | } | ||||
| /* we can't slide multiple edges in vertex select mode */ | /* We can't slide multiple edges in vertex select mode, force edge select mode. Do this for | ||||
| * all meshes in multi-object editmode so their selectmode is in sync for following | |||||
| * operators. */ | |||||
| else if (is_macro && (cuts > 1) && (em->selectmode & SCE_SELECT_VERTEX)) { | else if (is_macro && (cuts > 1) && (em->selectmode & SCE_SELECT_VERTEX)) { | ||||
| EDBM_selectmode_disable(lcd->vc.scene, em, SCE_SELECT_VERTEX, SCE_SELECT_EDGE); | uint bases_len; | ||||
| } | Base **bases = BKE_view_layer_array_from_bases_in_edit_mode( | ||||
| /* Force edge slide to edge select mode in face select mode. */ | lcd->vc.view_layer, lcd->vc.v3d, &bases_len); | ||||
| else if (EDBM_selectmode_disable(lcd->vc.scene, em, SCE_SELECT_FACE, SCE_SELECT_EDGE)) { | for (uint base_index = 0; base_index < bases_len; base_index++) { | ||||
| /* pass, the change will flush selection */ | Object *ob_iter = bases[base_index]->object; | ||||
| EDBM_selectmode_disable(lcd->vc.scene, | |||||
| BKE_editmesh_from_object(ob_iter), | |||||
| SCE_SELECT_VERTEX, | |||||
| SCE_SELECT_EDGE); | |||||
| } | |||||
| MEM_freeN(bases); | |||||
| } | } | ||||
| else { | else { | ||||
| /* else flush explicitly */ | /* Force edge slide to edge select mode in face select mode. Do this for all meshes in | ||||
| EDBM_selectmode_flush(lcd->em); | * multi-object editmode so their selectmode is in sync for following operators. */ | ||||
| bool changed = false; | |||||
| uint bases_len; | |||||
| Base **bases = BKE_view_layer_array_from_bases_in_edit_mode( | |||||
| lcd->vc.view_layer, lcd->vc.v3d, &bases_len); | |||||
| for (uint base_index = 0; base_index < bases_len; base_index++) { | |||||
| Object *ob_iter = bases[base_index]->object; | |||||
| changed |= EDBM_selectmode_disable( | |||||
| lcd->vc.scene, BKE_editmesh_from_object(ob_iter), SCE_SELECT_FACE, SCE_SELECT_EDGE); | |||||
| } | |||||
| MEM_freeN(bases); | |||||
| if (changed) { | |||||
| /* pass, the change will flush selection */ | |||||
| } | |||||
| else { | |||||
| /* else flush explicitly */ | |||||
| EDBM_selectmode_flush(lcd->em); | |||||
campbellbarton: Couldn't roughly the same logic as before be kept using `EDBM_selectmode_disable_multi` ? | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| /* XXX Is this piece of code ever used now? Simple loop select is now | /* XXX Is this piece of code ever used now? Simple loop select is now | ||||
| * in editmesh_select.c (around line 1000)... */ | * in editmesh_select.c (around line 1000)... */ | ||||
| /* sets as active, useful for other tools */ | /* sets as active, useful for other tools */ | ||||
| if (em->selectmode & SCE_SELECT_VERTEX) { | if (em->selectmode & SCE_SELECT_VERTEX) { | ||||
| /* low priority TODO: get vertrex close to mouse. */ | /* low priority TODO: get vertrex close to mouse. */ | ||||
| ▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines | |||||
Couldn't roughly the same logic as before be kept using EDBM_selectmode_disable_multi ?