diff options
author | Ton Roosendaal <ton@blender.org> | 2004-09-26 21:15:52 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-09-26 21:15:52 +0400 |
commit | ab68f715cd79e82bec46166aacb82d8c4cc59ae1 (patch) | |
tree | 77d4d86ce3cbccb84abada5df6b4ff67106fa487 /source/blender/src/editmesh_lib.c | |
parent | 300939e1ba270f5e0615946373d1213eb4996bef (diff) |
New strict 'hide' rules for editmesh & new selectmodes
- vertex hidden, always means edge is hidden too
- edge hidden, always means face is hidden too
- face hidden, only means face hides
This means, that in face mode you can hide a face, whilst in edge mode
the edges will still display.
Please note, that when you have no edges saved in a Mesh, it also doesnt
store the hide flags for it, causing in/out editmode too reset hidden
edges.
Diffstat (limited to 'source/blender/src/editmesh_lib.c')
-rw-r--r-- | source/blender/src/editmesh_lib.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/source/blender/src/editmesh_lib.c b/source/blender/src/editmesh_lib.c index d3e6314d154..7b718109085 100644 --- a/source/blender/src/editmesh_lib.c +++ b/source/blender/src/editmesh_lib.c @@ -302,15 +302,37 @@ void EM_selectmode_set(void) if(eed->f & SELECT) EM_select_edge(eed, 1); /* selects faces based on edge status */ EM_selectmode_flush(); + } else if(G.scene->selectmode == SCE_SELECT_FACE) { /* deselect eges, and select again based on face select */ for(eed= em->edges.first; eed; eed= eed->next) EM_select_edge(eed, 0); + for(efa= em->faces.first; efa; efa= efa->next) if(efa->f & SELECT) EM_select_face(efa, 1); } } +/* paranoia check, actually only for entering editmode. rule: +- vertex hidden, always means edge is hidden too +- edge hidden, always means face is hidden too +- face hidden, dont change anything +*/ +void EM_hide_reset(void) +{ + EditMesh *em = G.editMesh; + EditEdge *eed; + EditFace *efa; + + for(eed= em->edges.first; eed; eed= eed->next) + if(eed->v1->h || eed->v2->h) eed->h |= 1; + + for(efa= em->faces.first; efa; efa= efa->next) + if((efa->e1->h & 1) || (efa->e2->h & 1) || (efa->e3->h & 1) || (efa->e4 && (efa->e4->h & 1))) + efa->h= 1; + +} + /* ******** EXTRUDE ********* */ |