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
path: root/source
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2005-02-23 17:19:41 +0300
committerTon Roosendaal <ton@blender.org>2005-02-23 17:19:41 +0300
commit386f390ab8ae9a13b1b31fa4cd5a0f01546415eb (patch)
tree2f14078b3ff4b80135b2050e621de8dd6f4736b4 /source
parent9f678340b5a9f838c7e0f389d1e0b5957bcd175d (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-xsource/blender/src/transform.c39
-rwxr-xr-xsource/blender/src/transform.h12
-rwxr-xr-xsource/blender/src/transform_generics.c14
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);