Two more wavk bugs (help he's pestering me!)

- 1702; edge selection should be evaluated properly before adding face
- 1704; crash in separate, two causes here:
        - separate didnt make selection flags consistant (needed badly
          there because of evil code)
        - after adding quad (Fkey) the face was not selected, but its
          vertices were... that can give bad bad crashes
This commit is contained in:
2004-10-29 14:30:20 +00:00
parent bd9ac7d6ec
commit f33f2abe39
3 changed files with 12 additions and 4 deletions

View File

@@ -3867,7 +3867,7 @@ static void drawSolidSelect(Object *ob, ListBase *lb)
} }
drawmeshwire(ob); drawmeshwire(ob);
if(dlm && flag) dlm->flag |= flag; if(dlm && flag) dlm->flag |= flag;
} }
else drawDispListwire(lb); else drawDispListwire(lb);

View File

@@ -1311,6 +1311,8 @@ void separate_mesh(void)
return; return;
} }
EM_selectmode_set(); // enforce full consistant selection flags
/* we are going to abuse the system as follows: /* we are going to abuse the system as follows:
* 1. add a duplicate object: this will be the new one, we remember old pointer * 1. add a duplicate object: this will be the new one, we remember old pointer
* 2: then do a split if needed. * 2: then do a split if needed.

View File

@@ -300,14 +300,18 @@ void addedgeface_mesh(void)
if( (G.vd->lay & G.obedit->lay)==0 ) return; if( (G.vd->lay & G.obedit->lay)==0 ) return;
/* how many selected ? */ /* how many selected ? */
eve= em->verts.first; if(G.scene->selectmode & SCE_SELECT_EDGE) {
while(eve) { /* in edge mode finding selected vertices means flushing down edge codes... */
/* can't make face with only edge selection info... */
EM_selectmode_set();
}
for(eve= em->verts.first; eve; eve= eve->next) {
if(eve->f & SELECT) { if(eve->f & SELECT) {
amount++; amount++;
if(amount>4) break; if(amount>4) break;
neweve[amount-1]= eve; neweve[amount-1]= eve;
} }
eve= eve->next;
} }
if(amount==2) { if(amount==2) {
eed= addedgelist(neweve[0], neweve[1], NULL); eed= addedgelist(neweve[0], neweve[1], NULL);
@@ -357,6 +361,8 @@ void addedgeface_mesh(void)
efa= addfacelist(neweve[0], neweve[2], neweve[3], neweve[1], NULL, NULL); efa= addfacelist(neweve[0], neweve[2], neweve[3], neweve[1], NULL, NULL);
else else
efa= addfacelist(neweve[0], neweve[2], neweve[1], neweve[3], NULL, NULL); efa= addfacelist(neweve[0], neweve[2], neweve[1], neweve[3], NULL, NULL);
EM_select_face(efa, 1);
} }
} }