[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [14703] trunk/blender/source/blender: Bugfixes:
Joshua Leung
aligorith at gmail.com
Tue May 6 09:10:31 CEST 2008
Revision: 14703
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=14703
Author: aligorith
Date: 2008-05-06 09:10:30 +0200 (Tue, 06 May 2008)
Log Message:
-----------
Bugfixes:
* NLA scaling was being incorrectly handled with fractional values. This was caused by clamping to integers instead of floats when making sure the scale value was positive.
* Added checks to help prevent some weird cases that may sometimes occur and cause problems
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/action.c
trunk/blender/source/blender/src/drawnla.c
trunk/blender/source/blender/src/editnla.c
Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c 2008-05-05 22:08:50 UTC (rev 14702)
+++ trunk/blender/source/blender/blenkernel/intern/action.c 2008-05-06 07:10:30 UTC (rev 14703)
@@ -489,11 +489,11 @@
{
float length, actlength, repeat, scale;
- if(strip->repeat == 0.0f) strip->repeat = 1.0f;
+ if (strip->repeat == 0.0f) strip->repeat = 1.0f;
repeat = (strip->flag & ACTSTRIP_USESTRIDE) ? (1.0f) : (strip->repeat);
- if(strip->scale == 0.0f) strip->scale= 1.0f;
- scale = abs(strip->scale); /* scale must be positive (for now) */
+ if (strip->scale == 0.0f) strip->scale= 1.0f;
+ scale = fabs(strip->scale); /* scale must be positive (for now) */
actlength = strip->actend-strip->actstart;
if (actlength == 0.0f) actlength = 1.0f;
Modified: trunk/blender/source/blender/src/drawnla.c
===================================================================
--- trunk/blender/source/blender/src/drawnla.c 2008-05-05 22:08:50 UTC (rev 14702)
+++ trunk/blender/source/blender/src/drawnla.c 2008-05-06 07:10:30 UTC (rev 14703)
@@ -490,39 +490,42 @@
allqueue (REDRAWNLA, 0);
allqueue (REDRAWVIEW3D, 0);
break;
- case B_NLA_SCALE:
+ case B_NLA_SCALE: /* adjust end-frame when scale is changed */
{
float actlen= strip->actend - strip->actstart;
float mapping= strip->scale * strip->repeat;
- strip->end = (actlen * mapping) + strip->start;
+ if (mapping != 0.0f)
+ strip->end = (actlen * mapping) + strip->start;
+ else
+ printf("NLA Scale Error: Scale = %0.4f, Repeat = %0.4f \n", strip->scale, strip->repeat);
- allqueue (REDRAWNLA, 0);
- allqueue (REDRAWIPO, 0);
- allqueue (REDRAWACTION, 0);
- allqueue (REDRAWVIEW3D, 0);
+ allqueue(REDRAWNLA, 0);
+ allqueue(REDRAWIPO, 0);
+ allqueue(REDRAWACTION, 0);
+ allqueue(REDRAWVIEW3D, 0);
}
break;
- case B_NLA_SCALE2:
+ case B_NLA_SCALE2: /* adjust scale when end-frame is changed */
{
float actlen= strip->actend - strip->actstart;
float len= strip->end - strip->start;
strip->scale= len / (actlen * strip->repeat);
- allqueue (REDRAWNLA, 0);
- allqueue (REDRAWIPO, 0);
- allqueue (REDRAWACTION, 0);
- allqueue (REDRAWVIEW3D, 0);
+ allqueue(REDRAWNLA, 0);
+ allqueue(REDRAWIPO, 0);
+ allqueue(REDRAWACTION, 0);
+ allqueue(REDRAWVIEW3D, 0);
}
break;
case B_NLA_LOCK:
synchronize_action_strips();
- allqueue (REDRAWNLA, 0);
- allqueue (REDRAWIPO, 0);
- allqueue (REDRAWACTION, 0);
- allqueue (REDRAWVIEW3D, 0);
+ allqueue(REDRAWNLA, 0);
+ allqueue(REDRAWIPO, 0);
+ allqueue(REDRAWACTION, 0);
+ allqueue(REDRAWVIEW3D, 0);
break;
case B_NLA_MOD_ADD:
Modified: trunk/blender/source/blender/src/editnla.c
===================================================================
--- trunk/blender/source/blender/src/editnla.c 2008-05-05 22:08:50 UTC (rev 14702)
+++ trunk/blender/source/blender/src/editnla.c 2008-05-06 07:10:30 UTC (rev 14703)
@@ -188,11 +188,16 @@
void synchronize_action_strips(void)
{
Base *base;
+ Object *ob;
bActionStrip *strip;
for (base=G.scene->base.first; base; base=base->next) {
+ /* get object first */
+ ob= base->object;
+
/* step 1: adjust strip-lengths */
- for (strip = base->object->nlastrips.last; strip; strip=strip->prev) {
+ // FIXME: this seems very buggy
+ for (strip = ob->nlastrips.last; strip; strip=strip->prev) {
if (strip->flag & ACTSTRIP_LOCK_ACTION) {
float actstart, actend;
@@ -212,7 +217,7 @@
}
/* step 2: adjust blendin/out values for each strip if option is turned on */
- for (strip= base->object->nlastrips.first; strip; strip=strip->next) {
+ for (strip= ob->nlastrips.first; strip; strip=strip->next) {
if (strip->flag & ACTSTRIP_AUTO_BLENDS) {
bActionStrip *prev= strip->prev;
bActionStrip *next= strip->next;
More information about the Bf-blender-cvs
mailing list