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/blenkernel/intern/subsurf.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/blenkernel/intern/subsurf.c')
-rw-r--r-- | source/blender/blenkernel/intern/subsurf.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/source/blender/blenkernel/intern/subsurf.c b/source/blender/blenkernel/intern/subsurf.c index 0b490ff645f..280af7c4a53 100644 --- a/source/blender/blenkernel/intern/subsurf.c +++ b/source/blender/blenkernel/intern/subsurf.c @@ -430,6 +430,12 @@ static HyperMesh *hypermesh_from_editmesh(EditMesh *em, int subdivLevels) { float creasefac= (float)subdivLevels; int flag; + /* hide flags rule: + - face hidden, not do. is easy + - edge hidden, always means face is hidden too + - vertex hidden, always means edge is hidden too + */ + /* we only add vertices with edges, 'f1' is a free flag */ /* added: check for hide flag in vertices */ for (ev= em->verts.first; ev; ev= ev->next) { @@ -462,22 +468,18 @@ static HyperMesh *hypermesh_from_editmesh(EditMesh *em, int subdivLevels) { } for (ef= em->faces.first; ef; ef= ef->next) { if(ef->h==0) { - // this extra check needed, hide flags can be inconsistant - if((ef->e1->h & 1) || (ef->e2->h & 1) || (ef->e3->h & 1) || (ef->e4 && (ef->e4->h & 1))); - else { - int nverts= ef->v4?4:3; - HyperVert *verts[4]; - HyperFace *f; - - verts[0]= (HyperVert*) ef->v1->prev; - verts[1]= (HyperVert*) ef->v2->prev; - verts[2]= (HyperVert*) ef->v3->prev; - if (nverts>3) - verts[3]= (HyperVert*) ef->v4->prev; - - f= hypermesh_add_face(hme, verts, nverts, DR_OPTIM); - f->orig.ef= ef; - } + int nverts= ef->v4?4:3; + HyperVert *verts[4]; + HyperFace *f; + + verts[0]= (HyperVert*) ef->v1->prev; + verts[1]= (HyperVert*) ef->v2->prev; + verts[2]= (HyperVert*) ef->v3->prev; + if (nverts>3) + verts[3]= (HyperVert*) ef->v4->prev; + + f= hypermesh_add_face(hme, verts, nverts, DR_OPTIM); + f->orig.ef= ef; } } |