[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12654] trunk/blender/source/blender: Bugfix #7573
Ton Roosendaal
ton at blender.org
Thu Nov 22 21:26:00 CET 2007
Revision: 12654
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12654
Author: ton
Date: 2007-11-22 21:25:59 +0100 (Thu, 22 Nov 2007)
Log Message:
-----------
Bugfix #7573
NLA Window, Strip blending mode "Add" didn't work at all.
It was using very bad quaternion addition. Replaced with proper code.
For devs; new is the function QuatMulFac(quat, factor) which allows to
multiply a rotation with a value (make it rotate more or less)
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/action.c
trunk/blender/source/blender/blenlib/BLI_arithb.h
trunk/blender/source/blender/blenlib/intern/arithb.c
trunk/blender/source/blender/src/drawipo.c
Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c 2007-11-22 17:02:37 UTC (rev 12653)
+++ trunk/blender/source/blender/blenkernel/intern/action.c 2007-11-22 20:25:59 UTC (rev 12654)
@@ -607,8 +607,10 @@
QUATCOPY(squat, schan->quat);
if(mode==ACTSTRIPMODE_BLEND)
QuatInterpol(dchan->quat, dquat, squat, srcweight);
- else
- QuatAdd(dchan->quat, dquat, squat, srcweight);
+ else {
+ QuatMulFac(squat, srcweight);
+ QuatMul(dchan->quat, dquat, squat);
+ }
NormalQuat (dchan->quat);
}
Modified: trunk/blender/source/blender/blenlib/BLI_arithb.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_arithb.h 2007-11-22 17:02:37 UTC (rev 12653)
+++ trunk/blender/source/blender/blenlib/BLI_arithb.h 2007-11-22 20:25:59 UTC (rev 12654)
@@ -119,6 +119,8 @@
void QuatOne(float *);
void QuatMul(float *, float *, float *);
void QuatMulVecf(float *q, float *v);
+void QuatMulf(float *q, float f);
+void QuatMulFac(float *q, float fac);
void NormalQuat(float *);
void VecRotToQuat(float *vec, float phi, float *quat);
@@ -126,7 +128,6 @@
void QuatSub(float *q, float *q1, float *q2);
void QuatConj(float *q);
void QuatInv(float *q);
-void QuatMulf(float *q, float f);
float QuatDot(float *q1, float *q2);
void QuatCopy(float *q1, float *q2);
Modified: trunk/blender/source/blender/blenlib/intern/arithb.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/arithb.c 2007-11-22 17:02:37 UTC (rev 12653)
+++ trunk/blender/source/blender/blenlib/intern/arithb.c 2007-11-22 20:25:59 UTC (rev 12654)
@@ -1109,6 +1109,7 @@
QuatMulf(q, 1.0f/f);
}
+/* simple mult */
void QuatMulf(float *q, float f)
{
q[0] *= f;
@@ -1124,6 +1125,20 @@
q2[0]= -q2[0];
}
+/* angular mult factor */
+void QuatMulFac(float *q, float fac)
+{
+ float angle= fac*saacos(q[0]); /* quat[0]= cos(0.5*angle), but now the 0.5 and 2.0 rule out */
+
+ float co= (float)cos(angle);
+ float si= (float)sin(angle);
+ q[0]= co;
+ Normalize(q+1);
+ q[1]*= si;
+ q[2]*= si;
+ q[3]*= si;
+
+}
void QuatToMat3( float *q, float m[][3])
{
Modified: trunk/blender/source/blender/src/drawipo.c
===================================================================
--- trunk/blender/source/blender/src/drawipo.c 2007-11-22 17:02:37 UTC (rev 12653)
+++ trunk/blender/source/blender/src/drawipo.c 2007-11-22 20:25:59 UTC (rev 12654)
@@ -2014,7 +2014,7 @@
return (string);
}
-static char *ipodriver_channelselect_pup(void)
+static char *ipodriver_channelselect_pup(int is_armature)
{
static char string[1024];
char *tmp;
@@ -2031,7 +2031,8 @@
tmp+= sprintf(tmp, "|Scale X %%x%d", OB_SIZE_X);
tmp+= sprintf(tmp, "|Scale Y %%x%d", OB_SIZE_Y);
tmp+= sprintf(tmp, "|Scale Z %%x%d", OB_SIZE_Z);
- tmp+= sprintf(tmp, "|Rotation Differance %%x%d", OB_ROT_DIFF);
+ if(is_armature)
+ tmp+= sprintf(tmp, "|Rotation Differance %%x%d", OB_ROT_DIFF);
return (string);
}
@@ -2094,7 +2095,8 @@
ipodriver_modeselect_pup(driver->ob), 165,240,145,20, &(driver->blocktype), 0, 0, 0, 0, "Driver type");
uiDefButS(block, MENU, B_IPO_REDR,
- ipodriver_channelselect_pup(), 165,220,145,20, &(driver->adrcode), 0, 0, 0, 0, "Driver channel");
+ ipodriver_channelselect_pup(driver->ob->type==OB_ARMATURE && driver->blocktype==ID_AR),
+ 165,220,145,20, &(driver->adrcode), 0, 0, 0, 0, "Driver channel");
}
uiBlockEndAlign(block);
}
More information about the Bf-blender-cvs
mailing list