diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-03-25 19:16:11 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-03-25 19:16:11 +0300 |
commit | 1b94e21f9c97cd3d719a32a56336cc77b9e23826 (patch) | |
tree | 31baf7a980a1adc72feb5f11bf23a93a8439de88 /source/blender/src/editmesh_mods.c | |
parent | 74e835342e6559905f4cdebe6191799629e6fd32 (diff) |
selecting similar edges (Shift+G in edge mode) didnt flush selection from edges to faces, so you could have all edges of a face selected without the face being selected.
Diffstat (limited to 'source/blender/src/editmesh_mods.c')
-rw-r--r-- | source/blender/src/editmesh_mods.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/source/blender/src/editmesh_mods.c b/source/blender/src/editmesh_mods.c index a5589ccd9c5..9c8b6597ff1 100644 --- a/source/blender/src/editmesh_mods.c +++ b/source/blender/src/editmesh_mods.c @@ -960,7 +960,7 @@ EDGE GROUP -int edgegroup_select(short mode) +static int edgegroup_select__internal(short mode) { EditMesh *em = G.editMesh; EditEdge *eed, *base_eed=NULL; @@ -1155,11 +1155,35 @@ int edgegroup_select(short mode) } } } - } + } + return selcount; +} +/* wrap the above function but do selection flushing edge to face */ +int edgegroup_select(short mode) +{ + int selcount = edgegroup_select__internal(mode); + + if (selcount) { + /* Could run a generic flush function, + * but the problem is only that all edges of a face + * can be selected without the face becoming selected */ + EditMesh *em = G.editMesh; + EditFace *efa; + for(efa= em->faces.first; efa; efa= efa->next) { + if (efa->v4) { + if (efa->e1->f&SELECT && efa->e2->f&SELECT && efa->e3->f&SELECT && efa->e4->f&SELECT) + efa->f |= SELECT; + } else { + if (efa->e1->f&SELECT && efa->e2->f&SELECT && efa->e3->f&SELECT) + efa->f |= SELECT; + } + } + } return selcount; } + /* VERT GROUP mode 1: same normal |