Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/src/transform.c')
-rwxr-xr-xsource/blender/src/transform.c401
1 files changed, 258 insertions, 143 deletions
diff --git a/source/blender/src/transform.c b/source/blender/src/transform.c
index e6ee597db29..0d5868d9032 100755
--- a/source/blender/src/transform.c
+++ b/source/blender/src/transform.c
@@ -541,7 +541,6 @@ static void transformEvent(unsigned short event, short val) {
setLocalConstraint(&Trans, (CON_AXIS2), "along local Z");
else if (Trans.mode==TFM_ROTATION) {
restoreTransObjects(&Trans);
- initTransModeFlags(&Trans, TFM_TRACKBALL);
initTrackball(&Trans);
}
}
@@ -578,7 +577,6 @@ static void transformEvent(unsigned short event, short val) {
/* only switch when... */
if( ELEM3(Trans.mode, TFM_ROTATION, TFM_RESIZE, TFM_TRACKBALL) ) {
restoreTransObjects(&Trans);
- initTransModeFlags(&Trans, TFM_TRANSLATION);
initTranslation(&Trans);
Trans.redraw = 1;
}
@@ -587,7 +585,6 @@ static void transformEvent(unsigned short event, short val) {
/* only switch when... */
if( ELEM3(Trans.mode, TFM_ROTATION, TFM_TRANSLATION, TFM_TRACKBALL) ) {
restoreTransObjects(&Trans);
- initTransModeFlags(&Trans, TFM_RESIZE);
initResize(&Trans);
Trans.redraw = 1;
}
@@ -598,12 +595,10 @@ static void transformEvent(unsigned short event, short val) {
if (Trans.mode == TFM_ROTATION) {
restoreTransObjects(&Trans);
- initTransModeFlags(&Trans, TFM_TRACKBALL);
initTrackball(&Trans);
}
else {
restoreTransObjects(&Trans);
- initTransModeFlags(&Trans, TFM_ROTATION);
initRotation(&Trans);
}
Trans.redraw = 1;
@@ -730,8 +725,48 @@ static void transformEvent(unsigned short event, short val) {
// viewmoveNDOF(1);
// break;
}
+
+ // Numerical input events
Trans.redraw |= handleNumInput(&(Trans.num), event);
+
+ // NDof input events
+ switch(handleNDofInput(&(Trans.ndof), event, val))
+ {
+ case NDOF_CONFIRM:
+ if ((Trans.context & CTX_NDOF) == 0)
+ {
+ /* Confirm on normal transform only */
+ Trans.state = TRANS_CONFIRM;
+ }
+ break;
+ case NDOF_CANCEL:
+ if (Trans.context & CTX_NDOF)
+ {
+ /* Cancel on pure NDOF transform */
+ Trans.state = TRANS_CANCEL;
+ }
+ else
+ {
+ /* Otherwise, just redraw, NDof input was cancelled */
+ Trans.redraw = 1;
+ }
+ break;
+ case NDOF_NOMOVE:
+ if (Trans.context & CTX_NDOF)
+ {
+ /* Confirm on pure NDOF transform */
+ Trans.state = TRANS_CONFIRM;
+ }
+ break;
+ case NDOF_REFRESH:
+ Trans.redraw = 1;
+ break;
+
+ }
+
+ // Snapping events
Trans.redraw |= handleSnapping(&Trans, event);
+
arrows_move_cursor(event);
}
else {
@@ -757,6 +792,10 @@ static void transformEvent(unsigned short event, short val) {
break;
}
}
+
+ // Per transform event, if present
+ if (Trans.handleEvent)
+ Trans.redraw |= Trans.handleEvent(&Trans, event, val);
}
int calculateTransformCenter(int centerMode, float *vec)
@@ -767,13 +806,13 @@ int calculateTransformCenter(int centerMode, float *vec)
Trans.state = TRANS_RUNNING;
Trans.context = CTX_NONE;
+
+ Trans.mode = TFM_DUMMY;
initTrans(&Trans); // internal data, mouse, vectors
createTransData(&Trans); // make TransData structs from selection
- initTransModeFlags(&Trans, TFM_DUMMY); // modal settings in struct Trans
-
Trans.around = centerMode; // override userdefined mode
if (Trans.total == 0) {
@@ -803,6 +842,8 @@ void initTransform(int mode, int context) {
Trans.state = TRANS_RUNNING;
Trans.context = context;
+
+ Trans.mode = mode;
initTrans(&Trans); // internal data, mouse, vectors
@@ -813,8 +854,6 @@ void initTransform(int mode, int context) {
else
Mat3One(Trans.spacemtx);
- initTransModeFlags(&Trans, mode); // modal settings in struct Trans
-
createTransData(&Trans); // make TransData structs from selection
initSnapping(&Trans); // Initialize snapping data AFTER mode flags
@@ -826,7 +865,7 @@ void initTransform(int mode, int context) {
/* EVIL! posemode code can switch translation to rotate when 1 bone is selected. will be removed (ton) */
/* EVIL2: we gave as argument also texture space context bit... was cleared */
- mode= Trans.mode;
+ mode = Trans.mode;
calculatePropRatio(&Trans);
calculateCenter(&Trans);
@@ -963,6 +1002,8 @@ void initManipulator(int mode)
Trans.context = CTX_NONE;
+ Trans.mode = mode;
+
/* automatic switch to scaling bone envelopes */
if(mode==TFM_RESIZE && G.obedit && G.obedit->type==OB_ARMATURE) {
bArmature *arm= G.obedit->data;
@@ -972,8 +1013,6 @@ void initManipulator(int mode)
initTrans(&Trans); // internal data, mouse, vectors
- initTransModeFlags(&Trans, mode); // modal settings in struct Trans
-
G.moving |= G_TRANSFORM_MANIP; // signal to draw manipuls while transform
createTransData(&Trans); // make TransData structs from selection
@@ -984,7 +1023,7 @@ void initManipulator(int mode)
/* EVIL! posemode code can switch translation to rotate when 1 bone is selected. will be removed (ton) */
/* EVIL2: we gave as argument also texture space context bit... was cleared */
- mode= Trans.mode;
+ mode = Trans.mode;
calculatePropRatio(&Trans);
calculateCenter(&Trans);
@@ -1182,20 +1221,24 @@ static void protectedQuaternionBits(short protectflag, float *quat, float *oldqu
/* ************************** WARP *************************** */
-/* warp is done fully in view space */
void initWarp(TransInfo *t)
{
float max[3], min[3];
int i;
- calculateCenterCursor(t);
+ t->mode = TFM_WARP;
+ t->transform = Warp;
+
t->idx_max = 0;
t->num.idx_max = 0;
- t->transform = Warp;
t->snap[0] = 0.0f;
t->snap[1] = 5.0f;
t->snap[2] = 1.0f;
+ t->flag |= T_NO_CONSTRAINT;
+
+/* warp is done fully in view space */
+ calculateCenterCursor(t);
t->fac = (float)(t->center2d[0] - t->imval[0]);
/* we need min/max in view space */
@@ -1220,7 +1263,6 @@ void initWarp(TransInfo *t)
t->val= (max[0]-min[0])/2.0f; // t->val is free variable
}
-
int Warp(TransInfo *t, short mval[2])
{
TransData *td = t->data;
@@ -1318,14 +1360,38 @@ int Warp(TransInfo *t, short mval[2])
void initShear(TransInfo *t)
{
+ t->mode = TFM_SHEAR;
+ t->transform = Shear;
+ t->handleEvent = handleEventShear;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = 0.1f;
t->snap[2] = t->snap[1] * 0.1f;
- t->transform = Shear;
+
+ t->flag |= T_NO_CONSTRAINT;
}
+int handleEventShear(TransInfo *t, unsigned short event, short val)
+{
+ int status = 0;
+
+ if (event == MIDDLEMOUSE && val)
+ {
+ // Use customData pointer to signal Shear direction
+ if (t->customData == 0)
+ t->customData = (void*)1;
+ else
+ t->customData = 0;
+
+ status = 1;
+ }
+
+ return status;
+}
+
+
int Shear(TransInfo *t, short mval[2])
{
TransData *td = t->data;
@@ -1338,7 +1404,11 @@ int Shear(TransInfo *t, short mval[2])
Mat3CpyMat4(persmat, t->viewmat);
Mat3Inv(persinv, persmat);
- value = 0.05f * InputHorizontalAbsolute(t, mval);
+ // Custom data signals shear direction
+ if (t->customData == 0)
+ value = 0.05f * InputHorizontalAbsolute(t, mval);
+ else
+ value = 0.05f * InputVerticalAbsolute(t, mval);
snapGrid(t, &value);
@@ -1358,7 +1428,13 @@ int Shear(TransInfo *t, short mval[2])
}
Mat3One(smat);
- smat[1][0] = value;
+
+ // Custom data signals shear direction
+ if (t->customData == 0)
+ smat[1][0] = value;
+ else
+ smat[0][1] = value;
+
Mat3MulMat3(tmat, smat, persmat);
Mat3MulMat3(totmat, persinv, tmat);
@@ -1401,6 +1477,23 @@ int Shear(TransInfo *t, short mval[2])
void initResize(TransInfo *t)
{
+ t->mode = TFM_RESIZE;
+ t->transform = Resize;
+
+ t->flag |= T_NULL_ONE;
+ t->num.flag |= NUM_NULL_ONE;
+ t->num.flag |= NUM_AFFECT_ALL;
+ if (!G.obedit) {
+ t->flag |= T_NO_ZERO;
+ t->num.flag |= NUM_NO_ZERO;
+ }
+
+ t->idx_max = 2;
+ t->num.idx_max = 2;
+ t->snap[0] = 0.0f;
+ t->snap[1] = 0.1f;
+ t->snap[2] = t->snap[1] * 0.1f;
+
t->fac = (float)sqrt(
(
((float)(t->center2d[1] - t->imval[1]))*((float)(t->center2d[1] - t->imval[1]))
@@ -1409,13 +1502,6 @@ void initResize(TransInfo *t)
) );
if(t->fac==0.0f) t->fac= 1.0f; // prevent Inf
-
- t->idx_max = 2;
- t->num.idx_max = 2;
- t->snap[0] = 0.0f;
- t->snap[1] = 0.1f;
- t->snap[2] = t->snap[1] * 0.1f;
- t->transform = Resize;
}
static void headerResize(TransInfo *t, float vec[3], char *str) {
@@ -1667,22 +1753,25 @@ void initToSphere(TransInfo *t)
TransData *td = t->data;
int i;
- // Calculate average radius
- for(i = 0 ; i < t->total; i++, td++) {
- t->val += VecLenf(t->center, td->iloc);
- }
-
- t->val /= (float)t->total;
+ t->mode = TFM_TOSPHERE;
+ t->transform = ToSphere;
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = 0.1f;
t->snap[2] = t->snap[1] * 0.1f;
- t->transform = ToSphere;
-}
+
+ t->num.flag |= NUM_NULL_ONE | NUM_NO_NEGATIVE;
+ t->flag |= T_NO_CONSTRAINT;
+ // Calculate average radius
+ for(i = 0 ; i < t->total; i++, td++) {
+ t->val += VecLenf(t->center, td->iloc);
+ }
+ t->val /= (float)t->total;
+}
int ToSphere(TransInfo *t, short mval[2])
{
@@ -1747,13 +1836,19 @@ int ToSphere(TransInfo *t, short mval[2])
void initRotation(TransInfo *t)
{
+ t->mode = TFM_ROTATION;
+ t->transform = Rotation;
+
+ t->ndof.axis = 16;
+ /* Scale down and flip input for rotation */
+ t->ndof.factor[0] = -0.2f;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = (float)((5.0/180)*M_PI);
t->snap[2] = t->snap[1] * 0.2f;
t->fac = 0;
- t->transform = Rotation;
}
static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3]) {
@@ -2004,6 +2099,8 @@ int Rotation(TransInfo *t, short mval[2])
final = t->fac;
+ applyNDofInput(&t->ndof, &final);
+
snapGrid(t, &final);
t->imval[0] = mval[0];
@@ -2060,15 +2157,22 @@ int Rotation(TransInfo *t, short mval[2])
void initTrackball(TransInfo *t)
{
+ t->mode = TFM_TRACKBALL;
+ t->transform = Trackball;
+
+ t->ndof.axis = 40;
+ /* Scale down input for rotation */
+ t->ndof.factor[0] = 0.2f;
+ t->ndof.factor[1] = 0.2f;
+
t->idx_max = 1;
t->num.idx_max = 1;
t->snap[0] = 0.0f;
t->snap[1] = (float)((5.0/180)*M_PI);
t->snap[2] = t->snap[1] * 0.2f;
t->fac = 0;
- t->transform = Trackball;
- t->flag |= T_NO_CONSTRAINT; /* making sure the flag is always set */
+ t->flag |= T_NO_CONSTRAINT;
}
static void applyTrackball(TransInfo *t, float axis1[3], float axis2[3], float angles[2])
@@ -2121,6 +2225,8 @@ int Trackball(TransInfo *t, short mval[2])
//if(G.qual & LR_SHIFTKEY) t->fac += dphi/30.0f;
//else t->fac += dphi;
+ applyNDofInput(&t->ndof, phi);
+
snapGrid(t, phi);
if (hasNumInput(&t->num)) {
@@ -2163,10 +2269,15 @@ int Trackball(TransInfo *t, short mval[2])
void initTranslation(TransInfo *t)
{
+ t->mode = TFM_TRANSLATION;
+ t->transform = Translation;
+
t->idx_max = (t->flag & T_2D_EDIT)? 1: 2;
+ t->num.flag = 0;
t->num.idx_max = t->idx_max;
- t->transform = Translation;
+ t->ndof.axis = 7;
+
if(t->spacetype == SPACE_VIEW3D) {
/* initgrabz() defines a factor for perspective depth correction, used in window_to_3d() */
if(t->flag & (T_EDIT|T_POSE)) {
@@ -2177,7 +2288,9 @@ void initTranslation(TransInfo *t)
Mat4MulVecfl(ob->obmat, vec);
initgrabz(vec[0], vec[1], vec[2]);
}
- else initgrabz(t->center[0], t->center[1], t->center[2]);
+ else {
+ initgrabz(t->center[0], t->center[1], t->center[2]);
+ }
t->snap[0] = 0.0f;
t->snap[1] = G.vd->gridview * 1.0f;
@@ -2295,6 +2408,7 @@ int Translation(TransInfo *t, short mval[2])
headerTranslation(t, pvec, str);
}
else {
+ applyNDofInput(&t->ndof, t->vec);
snapGrid(t, t->vec);
applyNumInput(&t->num, t->vec);
applySnapping(t, t->vec);
@@ -2322,18 +2436,22 @@ int Translation(TransInfo *t, short mval[2])
void initShrinkFatten(TransInfo *t)
{
+ // If not in mesh edit mode, fallback to Resize
if (G.obedit==NULL || G.obedit->type != OB_MESH) {
- initTransModeFlags(t, TFM_RESIZE);
initResize(t);
- return;
}
-
- t->idx_max = 0;
- t->num.idx_max = 0;
- t->snap[0] = 0.0f;
- t->snap[1] = 1.0f;
- t->snap[2] = t->snap[1] * 0.1f;
- t->transform = ShrinkFatten;
+ else {
+ t->mode = TFM_SHRINKFATTEN;
+ t->transform = ShrinkFatten;
+
+ t->idx_max = 0;
+ t->num.idx_max = 0;
+ t->snap[0] = 0.0f;
+ t->snap[1] = 1.0f;
+ t->snap[2] = t->snap[1] * 0.1f;
+
+ t->flag |= T_NO_CONSTRAINT;
+ }
}
@@ -2390,13 +2508,21 @@ int ShrinkFatten(TransInfo *t, short mval[2])
void initTilt(TransInfo *t)
{
+ t->mode = TFM_TILT;
+ t->transform = Tilt;
+
+ t->ndof.axis = 16;
+ /* Scale down and flip input for rotation */
+ t->ndof.factor[0] = -0.2f;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = (float)((5.0/180)*M_PI);
t->snap[2] = t->snap[1] * 0.2f;
t->fac = 0;
- t->transform = Tilt;
+
+ t->flag |= T_NO_CONSTRAINT;
}
@@ -2432,6 +2558,8 @@ int Tilt(TransInfo *t, short mval[2])
else t->fac += dphi;
final = t->fac;
+
+ applyNDofInput(&t->ndof, &final);
snapGrid(t, &final);
@@ -2539,12 +2667,17 @@ int CurveShrinkFatten(TransInfo *t, short mval[2])
void initCurveShrinkFatten(TransInfo *t)
{
+ t->mode = TFM_CURVE_SHRINKFATTEN;
+ t->transform = CurveShrinkFatten;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = 0.1f;
t->snap[2] = t->snap[1] * 0.1f;
- t->transform = CurveShrinkFatten;
+
+ t->flag |= T_NO_CONSTRAINT;
+
t->fac = (float)sqrt( (
((float)(t->center2d[1] - t->imval[1]))*((float)(t->center2d[1] - t->imval[1]))
+
@@ -2556,16 +2689,21 @@ void initCurveShrinkFatten(TransInfo *t)
void initPushPull(TransInfo *t)
{
+ t->mode = TFM_PUSHPULL;
+ t->transform = PushPull;
+
+ t->ndof.axis = 4;
+ /* Flip direction */
+ t->ndof.factor[0] = -1.0f;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = 1.0f;
t->snap[2] = t->snap[1] * 0.1f;
- t->transform = PushPull;
}
-
int PushPull(TransInfo *t, short mval[2])
{
float vec[3], axis[3];
@@ -2575,6 +2713,8 @@ int PushPull(TransInfo *t, short mval[2])
TransData *td = t->data;
distance = InputVerticalAbsolute(t, mval);
+
+ applyNDofInput(&t->ndof, &distance);
snapGrid(t, &distance);
@@ -2633,12 +2773,17 @@ int PushPull(TransInfo *t, short mval[2])
void initCrease(TransInfo *t)
{
+ t->mode = TFM_CREASE;
+ t->transform = Crease;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = 0.1f;
t->snap[2] = t->snap[1] * 0.1f;
- t->transform = Crease;
+
+ t->flag |= T_NO_CONSTRAINT;
+
t->fac = (float)sqrt(
(
((float)(t->center2d[1] - t->imval[1]))*((float)(t->center2d[1] - t->imval[1]))
@@ -2726,12 +2871,17 @@ int Crease(TransInfo *t, short mval[2])
void initBoneSize(TransInfo *t)
{
+ t->mode = TFM_BONESIZE;
+ t->transform = BoneSize;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = 0.1f;
t->snap[2] = t->snap[1] * 0.1f;
- t->transform = BoneSize;
+
+ t->flag |= T_NO_CONSTRAINT;
+
t->fac = (float)sqrt( (
((float)(t->center2d[1] - t->imval[1]))*((float)(t->center2d[1] - t->imval[1]))
+
@@ -2840,12 +2990,17 @@ int BoneSize(TransInfo *t, short mval[2])
void initBoneEnvelope(TransInfo *t)
{
+ t->mode = TFM_BONE_ENVELOPE;
+ t->transform = BoneEnvelope;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
t->snap[1] = 0.1f;
t->snap[2] = t->snap[1] * 0.1f;
- t->transform = BoneEnvelope;
+
+ t->flag |= T_NO_CONSTRAINT;
+
t->fac = (float)sqrt( (
((float)(t->center2d[1] - t->imval[1]))*((float)(t->center2d[1] - t->imval[1]))
+
@@ -2917,6 +3072,9 @@ int BoneEnvelope(TransInfo *t, short mval[2])
void initBoneRoll(TransInfo *t)
{
+ t->mode = TFM_BONE_ROLL;
+ t->transform = BoneRoll;
+
t->idx_max = 0;
t->num.idx_max = 0;
t->snap[0] = 0.0f;
@@ -2925,7 +3083,7 @@ void initBoneRoll(TransInfo *t)
t->fac = 0.0f;
- t->transform = BoneRoll;
+ t->flag |= T_NO_CONSTRAINT;
}
int BoneRoll(TransInfo *t, short mval[2])
@@ -3017,8 +3175,6 @@ void Mirror(short mode)
Mat3CpyMat4(matview, Trans.viewinv); // t->viewinv was set in initTrans
Mat3Ortho(matview);
- initTransModeFlags(&Trans, TFM_MIRROR); // modal settings in struct Trans
-
createTransData(&Trans); // make TransData structs from selection
calculatePropRatio(&Trans);
@@ -3106,92 +3262,51 @@ void BIF_TransformSetUndo(char *str)
Trans.undostr= str;
}
-void ndof_do_transform(float *fval)
-{
- char str[200];
- float fvec[3] = {0.0,0.0,0.0};
- char change = 0;
-
-// fprintf(stderr,"passing here %f %f %f \n",fval[3],fval[4],fval[5]);
-
- if (fval[3] != 0.0 ) {
- fvec[0] = 1.0;
- initTransform(TFM_ROTATION, CTX_NONE);
- applyRotation(&Trans, fval[3], fvec);
- recalcData(&Trans);
- change =1;
- fvec[0] = 0.0;
- drawSnapping(&Trans);
- /* free data */
- postTrans(&Trans);
-
- /* aftertrans does insert ipos and action channels, and clears base flags, doesnt read transdata */
- special_aftertrans_update(&Trans);
-
- }
- if (fval[4] != 0.0 ) {
- fvec[1] = 1.0;
- initTransform(TFM_ROTATION, CTX_NONE);
- applyRotation(&Trans, fval[4], fvec);
- recalcData(&Trans);
- change =1;
- fvec[1] = 0.0;
- drawSnapping(&Trans);
- /* free data */
- postTrans(&Trans);
-
- /* aftertrans does insert ipos and action channels, and clears base flags, doesnt read transdata */
- special_aftertrans_update(&Trans);
-
- }
- if (fval[5] != 0.0 ) {
- fvec[2] = 1.0;
- initTransform(TFM_ROTATION, CTX_NONE);
- applyRotation(&Trans, fval[5], fvec);
- recalcData(&Trans);
- change =1;
- fvec[2] = 0.0;
- drawSnapping(&Trans);
- /* free data */
- postTrans(&Trans);
-
- /* aftertrans does insert ipos and action channels, and clears base flags, doesnt read transdata */
- special_aftertrans_update(&Trans);
-
+void NDofTransform()
+{
+ float fval[7];
+ float maxval = 50.0f; // also serves as threshold
+ int axis = -1;
+ int mode = 0;
+ int i;
+
+ getndof(fval);
+
+ for(i = 0; i < 7; i++)
+ {
+ float val = fabs(fval[i]);
+ if (val > maxval)
+ {
+ axis = i;
+ maxval = val;
+ }
}
+ switch(axis)
+ {
+ case -1:
+ /* No proper axis found */
+ break;
+ case 0:
+ case 1:
+ case 2:
+ mode = TFM_TRANSLATION;
+ break;
+ case 4:
+ mode = TFM_ROTATION;
+ break;
+ case 3:
+ case 5:
+ mode = TFM_TRACKBALL;
+ break;
+ default:
+ printf("ndof transform mode not impremented yet");
+ }
- if ((fval[0] != 0.0 )|( fval[1] != 0.0 )| (fval[2] != 0.0)) {
- initTransform(TFM_TRANSLATION, CTX_NONE);
- Trans.vec[0] = fval[0];
- Trans.vec[1] = fval[1];
- Trans.vec[2] = fval[2];
-
- applyTranslation(&Trans, Trans.vec);
-
- /* evil hack - redo translation if cliiping needeed */
- if (Trans.flag & T_CLIP_UV && clipUVTransform(&Trans, Trans.vec, 0))
- applyTranslation(&Trans, Trans.vec);
-
- recalcData(&Trans);
- change =1;
- drawSnapping(&Trans);
- /* free data */
- postTrans(&Trans);
-
- /* aftertrans does insert ipos and action channels, and clears base flags, doesnt read transdata */
- special_aftertrans_update(&Trans);
-
+ if (mode != 0)
+ {
+ initTransform(mode, CTX_NDOF);
+ Transform();
}
-
- /* send events out for redraws */
- viewRedrawPost(&Trans);
-
- if(Trans.undostr) BIF_undo_push(Trans.undostr);
- else BIF_undo_push(transform_to_undostr(&Trans));
-
- Trans.undostr= NULL;
-
-
-} \ No newline at end of file
+}