-> Loop MultiSelect
Added new function in editmesh_mods.c, "loop multiselect" and can be accessed via the CTRL-E popup menu in editmode. It is used to select multiple edge loops/rings based upon the current selection set. It does this simply by looping through a list of currently selected edges and calls 'edge_loop_select' or 'edge_ring_select' for each one. This can be used to build large selection sets quickly, as can be seen in the following example images... step 1 - http://www.umsl.edu/~gcbq44/multiselectA.jpg step 2 - http://www.umsl.edu/~gcbq44/multiselectB.jpg step 3 - http://www.umsl.edu/~gcbq44/multiselectC.jpg -> Misc While I was in there I fixed a couple of existing issues as well... - "Select Less" now gets a proper undo push. - countall() wasn't being called after inclusive selection mode conversion - some strange formatting in EM_convertsel() in editmesh_lib.c fixed.
This commit is contained in:
@@ -410,52 +410,49 @@ void EM_convertsel(short oldmode, short selectmode)
|
||||
if(selectmode == SCE_SELECT_EDGE){
|
||||
/*select all edges associated with every selected vertex*/
|
||||
for(eed= em->edges.first; eed; eed= eed->next){
|
||||
if(eed->v1->f&SELECT) eed->f1 = 1;
|
||||
else if(eed->v2->f&SELECT) eed->f1 = 1;
|
||||
if(eed->v1->f&SELECT) eed->f1 = 1;
|
||||
else if(eed->v2->f&SELECT) eed->f1 = 1;
|
||||
}
|
||||
|
||||
for(eed= em->edges.first; eed; eed= eed->next){
|
||||
if(eed->f1 == 1) EM_select_edge(eed,1);
|
||||
if(eed->f1 == 1) EM_select_edge(eed,1);
|
||||
}
|
||||
}
|
||||
else if(selectmode == SCE_SELECT_FACE){
|
||||
/*select all faces associated with every selected vertex*/
|
||||
for(efa= em->faces.first; efa; efa= efa->next){
|
||||
if(efa->v1->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->v2->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->v3->f&SELECT) efa->f1 = 1;
|
||||
else{
|
||||
if(efa->v4){
|
||||
if(efa->v4->f&SELECT) efa->f1 =1;
|
||||
}
|
||||
if(efa->v1->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->v2->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->v3->f&SELECT) efa->f1 = 1;
|
||||
else{
|
||||
if(efa->v4){
|
||||
if(efa->v4->f&SELECT) efa->f1 =1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
for(efa= em->faces.first; efa; efa= efa->next){
|
||||
if(efa->f1 == 1) EM_select_face(efa,1);
|
||||
}
|
||||
check_fgons_selection();
|
||||
countall();
|
||||
}
|
||||
}
|
||||
|
||||
if(oldmode == SCE_SELECT_EDGE){
|
||||
if(selectmode == SCE_SELECT_FACE){
|
||||
for(efa= em->faces.first; efa; efa= efa->next){
|
||||
if(efa->e1->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->e2->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->e3->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->e4){
|
||||
if(efa->e4->f&SELECT) efa->f1 = 1;
|
||||
}
|
||||
if(efa->e1->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->e2->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->e3->f&SELECT) efa->f1 = 1;
|
||||
else if(efa->e4){
|
||||
if(efa->e4->f&SELECT) efa->f1 = 1;
|
||||
}
|
||||
}
|
||||
for(efa= em->faces.first; efa; efa= efa->next){
|
||||
if(efa->f1 == 1) EM_select_face(efa,1);
|
||||
if(efa->f1 == 1) EM_select_face(efa,1);
|
||||
}
|
||||
check_fgons_selection();
|
||||
countall();
|
||||
}
|
||||
}
|
||||
|
||||
check_fgons_selection();
|
||||
}
|
||||
|
||||
/* when switching select mode, makes sure selection is consistant for editing */
|
||||
|
||||
Reference in New Issue
Block a user