Made warp use TransData members instead of G.obedit. Made it work with PET and Objects at the same time.
This commit is contained in:
@@ -1614,7 +1614,7 @@ static void winqreadview3dspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
|
|||||||
case WKEY:
|
case WKEY:
|
||||||
if((G.qual==LR_SHIFTKEY)) {
|
if((G.qual==LR_SHIFTKEY)) {
|
||||||
#ifdef NEWTRANSFORM
|
#ifdef NEWTRANSFORM
|
||||||
if(G.obedit) Transform(TFM_WARP);
|
Transform(TFM_WARP);
|
||||||
#else
|
#else
|
||||||
transform('w');
|
transform('w');
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1500,9 +1500,12 @@ void initWarp(TransInfo *t)
|
|||||||
VECCOPY(min, t->data[i].center);
|
VECCOPY(min, t->data[i].center);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Mat4MulVecfl(G.obedit->obmat, min);
|
|
||||||
|
if (t->flag & T_EDIT) {
|
||||||
|
Mat3MulVecfl(G.obedit->obmat, min);
|
||||||
|
Mat3MulVecfl(G.obedit->obmat, max);
|
||||||
|
}
|
||||||
Mat4MulVecfl(G.vd->viewmat, min);
|
Mat4MulVecfl(G.vd->viewmat, min);
|
||||||
Mat4MulVecfl(G.obedit->obmat, max);
|
|
||||||
Mat4MulVecfl(G.vd->viewmat, max);
|
Mat4MulVecfl(G.vd->viewmat, max);
|
||||||
|
|
||||||
t->center[0]= (min[0]+max[0])/2.0f;
|
t->center[0]= (min[0]+max[0])/2.0f;
|
||||||
@@ -1511,7 +1514,6 @@ void initWarp(TransInfo *t)
|
|||||||
|
|
||||||
t->val= (max[0]-min[0])/2.0f; // t->val is free variable
|
t->val= (max[0]-min[0])/2.0f; // t->val is free variable
|
||||||
|
|
||||||
Mat4Invert(G.obedit->imat, G.obedit->obmat);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1549,13 +1551,14 @@ int Warp(TransInfo *t, short mval[2])
|
|||||||
circumfac*= (float)(-M_PI/360.0);
|
circumfac*= (float)(-M_PI/360.0);
|
||||||
|
|
||||||
for(i = 0 ; i < t->total; i++, td++) {
|
for(i = 0 ; i < t->total; i++, td++) {
|
||||||
|
float loc[3];
|
||||||
if (td->flag & TD_NOACTION)
|
if (td->flag & TD_NOACTION)
|
||||||
continue;
|
continue;
|
||||||
else {
|
|
||||||
/* translate point to centre, rotate in such a way that outline==distance */
|
/* translate point to centre, rotate in such a way that outline==distance */
|
||||||
|
|
||||||
VECCOPY(vec, td->iloc);
|
VECCOPY(vec, td->iloc);
|
||||||
Mat4MulVecfl(G.obedit->obmat, vec);
|
Mat3MulVecfl(td->smtx, vec);
|
||||||
Mat4MulVecfl(G.vd->viewmat, vec);
|
Mat4MulVecfl(G.vd->viewmat, vec);
|
||||||
|
|
||||||
dist= vec[0]-cursor[0];
|
dist= vec[0]-cursor[0];
|
||||||
@@ -1567,14 +1570,16 @@ int Warp(TransInfo *t, short mval[2])
|
|||||||
|
|
||||||
co= (float)cos(phi0);
|
co= (float)cos(phi0);
|
||||||
si= (float)sin(phi0);
|
si= (float)sin(phi0);
|
||||||
td->loc[0]= co*vec[0]-si*vec[1]+cursor[0];
|
loc[0]= co*vec[0]-si*vec[1]+cursor[0];
|
||||||
td->loc[1]= si*vec[0]+co*vec[1]+cursor[1];
|
loc[1]= si*vec[0]+co*vec[1]+cursor[1];
|
||||||
td->loc[2]= vec[2];
|
loc[2]= vec[2];
|
||||||
|
|
||||||
Mat4MulVecfl(G.vd->viewinv, td->loc);
|
Mat4MulVecfl(G.vd->viewinv, loc);
|
||||||
Mat4MulVecfl(G.obedit->imat, td->loc);
|
Mat3MulVecfl(td->mtx, loc);
|
||||||
|
|
||||||
}
|
VecSubf(loc, loc, td->iloc);
|
||||||
|
VecMulf(loc, td->factor);
|
||||||
|
VecAddf(td->loc, td->iloc, loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
recalcData(t);
|
recalcData(t);
|
||||||
|
|||||||
Reference in New Issue
Block a user