fix for a bug with Ctrl+Click extrude in curve editmode, it would use the wrong handle type in some cases.

also make it re-calculate the handle locations which is much more useful.
This commit is contained in:
Campbell Barton 2012-04-02 10:20:10 +00:00
parent 48059cc329
commit 7b9d9ecab2

@ -4378,6 +4378,7 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
BPoint *bp, *newbp = NULL; BPoint *bp, *newbp = NULL;
float imat[4][4], temp[3]; float imat[4][4], temp[3];
int ok= 0; int ok= 0;
BezTriple *bezt_recalc[3] = {NULL};
invert_m4_m4(imat, obedit->obmat); invert_m4_m4(imat, obedit->obmat);
@ -4471,9 +4472,14 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
newbezt+= nu->pntsu; newbezt+= nu->pntsu;
BEZ_SEL(newbezt); BEZ_SEL(newbezt);
cu->lastsel= newbezt; cu->lastsel= newbezt;
newbezt->h2= newbezt->h1; newbezt->h1 = newbezt->h2;
bezt= nu->bezt+nu->pntsu-1; bezt= nu->bezt+nu->pntsu-1;
ok= 1; ok= 1;
if (nu->pntsu > 1) {
bezt_recalc[1] = newbezt;
bezt_recalc[0] = newbezt - 1;
}
} }
else if (bezt== nu->bezt) { /* first */ else if (bezt== nu->bezt) { /* first */
BEZ_DESEL(bezt); BEZ_DESEL(bezt);
@ -4489,6 +4495,11 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
nu->bezt= newbezt; nu->bezt= newbezt;
bezt= newbezt+1; bezt= newbezt+1;
ok= 1; ok= 1;
if (nu->pntsu > 1) {
bezt_recalc[1] = newbezt;
bezt_recalc[2] = newbezt + 1;
}
} }
else if (mode!='e') { else if (mode!='e') {
BEZ_DESEL(bezt); BEZ_DESEL(bezt);
@ -4523,8 +4534,19 @@ static int addvert_Nurb(bContext *C, short mode, float location[3])
else { else {
mul_v3_m4v3(newbezt->vec[1], imat, location); mul_v3_m4v3(newbezt->vec[1], imat, location);
sub_v3_v3v3(temp, newbezt->vec[1],temp); sub_v3_v3v3(temp, newbezt->vec[1],temp);
add_v3_v3v3(newbezt->vec[0], bezt->vec[0],temp);
add_v3_v3v3(newbezt->vec[2], bezt->vec[2],temp); if (bezt_recalc[1]) {
const char h1 = bezt_recalc[1]->h1, h2 = bezt_recalc[1]->h2;
bezt_recalc[1]->h1 = bezt_recalc[1]->h2 = HD_AUTO;
calchandleNurb(bezt_recalc[1], bezt_recalc[0], bezt_recalc[2], 0);
bezt_recalc[1]->h1 = h1;
bezt_recalc[1]->h2 = h2;
}
else {
add_v3_v3v3(newbezt->vec[0], bezt->vec[0],temp);
add_v3_v3v3(newbezt->vec[2], bezt->vec[2],temp);
}
if (newnu) calchandlesNurb(newnu); if (newnu) calchandlesNurb(newnu);
else calchandlesNurb(nu); else calchandlesNurb(nu);