Bug #2019
Separate in Mesh editmode, selectmode 'face', and with a selection that used to be in vertex mode a full select (like selecting the 2 opposing faces in a cube) caused crash. There was still no good face-select awareness there... tsk! :)
This commit is contained in:
@@ -2502,15 +2502,15 @@ void inner_play_anim_loop(int init, int mode)
|
||||
|
||||
set_timecursor(CFRA);
|
||||
|
||||
clear_all_constraints();
|
||||
do_all_ipos();
|
||||
BPY_do_all_scripts(SCRIPT_FRAMECHANGED);
|
||||
do_all_keys();
|
||||
do_all_actions();
|
||||
do_all_ikas();
|
||||
//clear_all_constraints();
|
||||
//do_all_ipos();
|
||||
//BPY_do_all_scripts(SCRIPT_FRAMECHANGED);
|
||||
//do_all_keys();
|
||||
//do_all_actions();
|
||||
//do_all_ikas();
|
||||
update_for_newframe_muted();
|
||||
|
||||
|
||||
test_all_displists();
|
||||
//test_all_displists();
|
||||
#ifdef NAN_LINEAR_PHYSICS
|
||||
update_anim_sumo();
|
||||
|
||||
|
||||
@@ -1300,7 +1300,6 @@ void separate_mesh(void)
|
||||
Base *base, *oldbase;
|
||||
ListBase edve, eded, edvl;
|
||||
float trans[9];
|
||||
int ok, flag;
|
||||
|
||||
TEST_EDITMESH
|
||||
|
||||
@@ -1332,23 +1331,14 @@ void separate_mesh(void)
|
||||
base= base->next;
|
||||
}
|
||||
|
||||
/* test for split */
|
||||
ok= 0;
|
||||
eed= em->edges.first;
|
||||
while(eed) {
|
||||
flag= (eed->v1->f & SELECT)+(eed->v2->f & SELECT);
|
||||
if(flag==SELECT) {
|
||||
ok= 1;
|
||||
break;
|
||||
}
|
||||
eed= eed->next;
|
||||
}
|
||||
if(ok) {
|
||||
/* no test for split, split doesn't split when a loose part is selected */
|
||||
/* SPLIT: first make duplicate */
|
||||
adduplicateflag(SELECT);
|
||||
/* SPLIT: old faces have 3x flag 128 set, delete these ones */
|
||||
delfaceflag(128);
|
||||
}
|
||||
|
||||
/* since we do tricky things with verts/edges/faces, this makes sure all is selected coherent */
|
||||
EM_selectmode_set();
|
||||
|
||||
/* set apart: everything that is not selected */
|
||||
edve.first= edve.last= eded.first= eded.last= edvl.first= edvl.last= 0;
|
||||
@@ -1438,7 +1428,7 @@ void separate_mesh_loose(void)
|
||||
Base *base, *oldbase;
|
||||
ListBase edve, eded, edvl;
|
||||
float trans[9];
|
||||
int ok, vertsep=0, flag;
|
||||
int vertsep=0;
|
||||
short done=0, check=1;
|
||||
|
||||
TEST_EDITMESH
|
||||
@@ -1514,23 +1504,7 @@ void separate_mesh_loose(void)
|
||||
*/
|
||||
if(G.totvert==vertsep) done=1;
|
||||
else{
|
||||
/* Test for splitting: Separate selected */
|
||||
ok= 0;
|
||||
eed= em->edges.first;
|
||||
while(eed) {
|
||||
flag= (eed->v1->f & SELECT)+(eed->v2->f & SELECT);
|
||||
if(flag==SELECT) {
|
||||
ok= 1;
|
||||
break;
|
||||
}
|
||||
eed= eed->next;
|
||||
}
|
||||
if(ok) {
|
||||
/* SPLIT: first make duplicate */
|
||||
adduplicateflag(SELECT);
|
||||
/* SPLIT: old faces have 3x flag 128 set, delete these ones */
|
||||
delfaceflag(128);
|
||||
}
|
||||
/* No splitting: select connected goes fine */
|
||||
|
||||
EM_select_flush(); // from verts->edges->faces
|
||||
|
||||
|
||||
@@ -578,7 +578,7 @@ void split_mesh(void)
|
||||
countall();
|
||||
allqueue(REDRAWVIEW3D, 0);
|
||||
makeDispList(G.obedit);
|
||||
BIF_undo_push("Hash");
|
||||
BIF_undo_push("Split");
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user