diff options
author | Ton Roosendaal <ton@blender.org> | 2005-02-23 17:19:41 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-02-23 17:19:41 +0300 |
commit | 386f390ab8ae9a13b1b31fa4cd5a0f01546415eb (patch) | |
tree | 2f14078b3ff4b80135b2050e621de8dd6f4736b4 /source | |
parent | 9f678340b5a9f838c7e0f389d1e0b5957bcd175d (diff) |
- Transform works for Posemode again (after split of TransData in 2 parts)
- error in scaling objects fixed (it accumulated scaling)
Diffstat (limited to 'source')
-rwxr-xr-x | source/blender/src/transform.c | 39 | ||||
-rwxr-xr-x | source/blender/src/transform.h | 12 | ||||
-rwxr-xr-x | source/blender/src/transform_generics.c | 14 |
3 files changed, 28 insertions, 37 deletions
diff --git a/source/blender/src/transform.c b/source/blender/src/transform.c index 0280fa2528e..4276b11842b 100755 --- a/source/blender/src/transform.c +++ b/source/blender/src/transform.c @@ -186,18 +186,18 @@ static void add_pose_transdata(ListBase *lb, Object *ob, TransData **tdp) VECCOPY(td->center, vec); td->ob = ob; - td->bone= bone; // FIXME: Dangerous - - td->loc = bone->loc; - td->rot= NULL; - td->quat= bone->quat; - td->size= bone->size; td->dist= 0.0f; td->flag= TD_SELECTED|TD_USEQUAT; + td->loc = bone->loc; + VECCOPY(td->iloc, bone->loc); + + td->ext->rot= NULL; + td->ext->quat= bone->quat; + td->ext->size= bone->size; + td->ext->bone= bone; // FIXME: Dangerous - memcpy (td->iquat, bone->quat, sizeof (bone->quat)); - memcpy (td->isize, bone->size, sizeof (bone->size)); - memcpy (td->iloc, bone->loc, sizeof (bone->loc)); + QUATCOPY(td->ext->iquat, bone->quat); + VECCOPY(td->ext->isize, bone->size); /* Get the matrix of this bone minus the usertransform */ Mat4CpyMat4 (tempobmat, bone->obmat); @@ -222,7 +222,8 @@ static void createTransPose(void) { bArmature *arm; TransData *td; - float mtx[3][3], smtx[3][3]; + TransDataExtension *tdx; + int i; Trans.total= 0; // to be able to return @@ -260,14 +261,12 @@ static void createTransPose(void) if(Trans.total==0) return; /* init trans data */ - Mat3CpyMat4(mtx, G.obpose->obmat); - Mat3Inv(smtx, mtx); - td = Trans.data = MEM_mallocN(Trans.total*sizeof(TransData), "TransPoseBone"); - - Mat3CpyMat4(mtx, G.obpose->obmat); - Mat3Inv(smtx, mtx); + tdx = MEM_mallocN(Trans.total*sizeof(TransDataExtension), "TransPoseBoneExt"); + for(i=0; i<Trans.total; i++, td++, tdx++) td->ext= tdx; + /* recursive fill trans data */ + td= Trans.data; add_pose_transdata(&arm->bonebase, G.obpose, &td); } @@ -653,7 +652,7 @@ static void createTransEditVerts(void) static void ObjectToTransData(TransData *tob, Object *ob) { - float totmat[3][3], obinv[3][3], obmtx[3][3]; + float obmtx[3][3]; Object *tr; void *cfirst, *clast; @@ -1206,7 +1205,7 @@ void initShear(TransInfo *t) int Shear(TransInfo *t, short mval[2]) { float vec[3]; - float smat[3][3], tmat[3][3], totmat[3][3], omat[3][3], persmat[3][3], persinv[3][3]; + float smat[3][3], tmat[3][3], totmat[3][3], persmat[3][3], persinv[3][3]; float value; int i; char str[50]; @@ -1347,7 +1346,7 @@ int Resize(TransInfo *t, short mval[2]) if (td->flag & TD_OBJECT) { float obsizemat[3][3]; - Mat3IsMat3MulMat4(obsizemat, tmat, td->ob->obmat); + Mat3MulMat3(obsizemat, tmat, td->smtx); Mat3ToSize(obsizemat, fsize); } else { @@ -1594,7 +1593,7 @@ int Rotation(TransInfo *t, short mval[2]) Mat3ToQuat(fmat, quat); // Actual transform //printf("Quat %f %f %f %f\n", quat[0], quat[1], quat[2], quat[3]); - QuatMul(td->quat, quat, td->iquat); + QuatMul(td->ext->quat, quat, td->ext->iquat); } else { float obmat[3][3]; diff --git a/source/blender/src/transform.h b/source/blender/src/transform.h index 7c893b2c605..fabe20b3786 100755 --- a/source/blender/src/transform.h +++ b/source/blender/src/transform.h @@ -63,6 +63,8 @@ typedef struct TransDataExtension { float *size; /* Size of the data to transform (Faculative) */ float isize[3]; /* Initial size */ float obmat[3][3]; /* Object matrix */ + + void *bone; /* BWARGH! old transform demanded it, added for now (ton) */ } TransDataExtension; typedef struct TransData { @@ -76,16 +78,6 @@ typedef struct TransData { struct Object *ob; struct TransDataExtension *ext; int flag; /* Various flags */ - -/* NOTE TO TON: THESE MOVES TO TransDataExtension. NEED TO CHANGE POSEMODE */ - float *rot; /* Rotation of the data to transform (Faculative) */ - float irot[3]; /* Initial rotation */ - float *quat; /* Rotation quaternion of the data to transform (Faculative) */ - float iquat[4]; /* Initial rotation quaternion */ - float *size; /* Size of the data to transform (Faculative) */ - float isize[3]; /* Initial size */ - - void *bone; /* BWARGH! old transform demanded it, added for now (ton) */ } TransData; typedef struct TransInfo { diff --git a/source/blender/src/transform_generics.c b/source/blender/src/transform_generics.c index 0195ddc66e9..be89dfba240 100755 --- a/source/blender/src/transform_generics.c +++ b/source/blender/src/transform_generics.c @@ -134,7 +134,7 @@ void recalcData(TransInfo *t) if (t->mode == TFM_ROTATION) { chan->flag |= POSE_ROT; - memcpy (chan->quat, td->quat, sizeof (chan->quat)); + memcpy (chan->quat, td->ext->quat, sizeof (chan->quat)); } if (t->mode == TFM_TRANSLATION) { chan->flag |= POSE_LOC; @@ -142,10 +142,10 @@ void recalcData(TransInfo *t) } if (t->mode == TFM_RESIZE) { chan->flag |= POSE_SIZE; - memcpy (chan->size, td->size, sizeof (chan->size)); + memcpy (chan->size, td->ext->size, sizeof (chan->size)); } - strcpy (chan->name, ((Bone*) td->bone)->name); + strcpy (chan->name, ((Bone*) td->ext->bone)->name); set_pose_channel (G.obpose->pose, chan); @@ -424,11 +424,11 @@ void applyTransObjects(TransInfo *t) TransData *tob; for (tob = t->data; tob < t->data + t->total; tob++) { VECCOPY(tob->iloc, tob->loc); - if (tob->rot) { - VECCOPY(tob->irot, tob->rot); + if (tob->ext->rot) { + VECCOPY(tob->ext->irot, tob->ext->rot); } - if (tob->size) { - VECCOPY(tob->isize, tob->size); + if (tob->ext->size) { + VECCOPY(tob->ext->isize, tob->ext->size); } } recalcData(t); |