-> 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:
2006-02-28 02:28:45 +00:00
parent 4de6d54eec
commit 3662ce0045
3 changed files with 79 additions and 26 deletions

View File

@@ -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 */