[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17258] branches/animsys2/source/blender/ src: AnimSys2: Bugfixes for code from past few days
Joshua Leung
aligorith at gmail.com
Sat Nov 1 11:18:21 CET 2008
Revision: 17258
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17258
Author: aligorith
Date: 2008-11-01 11:18:21 +0100 (Sat, 01 Nov 2008)
Log Message:
-----------
AnimSys2: Bugfixes for code from past few days
* Fixed the causes of several crashes that occurred, also added checks for a few more potential ones (or errors)
* New keyframes on new IPO-curves were being added with constant interpolation only
* Removed debug code
Modified Paths:
--------------
branches/animsys2/source/blender/src/drawipo.c
branches/animsys2/source/blender/src/keyframing.c
Modified: branches/animsys2/source/blender/src/drawipo.c
===================================================================
--- branches/animsys2/source/blender/src/drawipo.c 2008-11-01 00:23:08 UTC (rev 17257)
+++ branches/animsys2/source/blender/src/drawipo.c 2008-11-01 10:18:21 UTC (rev 17258)
@@ -1230,7 +1230,7 @@
* - first handle only if previous beztriple was bezier-mode
* - second handle only if current beztriple is bezier-mode
*/
- if ((!prevbezt && (bezt->ipo==IPO_BEZ)) || (prevbezt->ipo==IPO_BEZ)) {
+ if ( (!prevbezt && (bezt->ipo==IPO_BEZ)) || (prevbezt && (prevbezt->ipo==IPO_BEZ)) ) {
if ((bezt->f1 & SELECT) == sel)/* && G.v2d->cur.xmin < bezt->vec[0][0] < G.v2d->cur.xmax)*/
bglVertex3fv(bezt->vec[0]);
}
@@ -1326,7 +1326,8 @@
fp= bezt->vec[0];
/* only draw first handle if previous segment was had handles */
- if ((!prevbezt && (bezt->ipo==IPO_BEZ)) || (prevbezt->ipo==IPO_BEZ)) {
+ if ( (!prevbezt && (bezt->ipo==IPO_BEZ)) || (prevbezt && (prevbezt->ipo==IPO_BEZ)) )
+ {
cpack(col[bezt->h1]);
glBegin(GL_LINE_STRIP);
glVertex2fv(fp); glVertex2fv(fp+3);
@@ -1335,7 +1336,8 @@
}
/* only draw second handle if this segment is bezier */
- if (bezt->ipo == IPO_BEZ) {
+ if (bezt->ipo == IPO_BEZ)
+ {
cpack(col[bezt->h2]);
glBegin(GL_LINE_STRIP);
glVertex2fv(fp+3); glVertex2fv(fp+6);
@@ -1345,7 +1347,7 @@
else {
/* only draw first handle if previous segment was had handles, and selection is ok */
if ( ((bezt->f1 & SELECT)==sel) &&
- ((!prevbezt && (bezt->ipo==IPO_BEZ)) || (prevbezt->ipo==IPO_BEZ)) )
+ ( (!prevbezt && (bezt->ipo==IPO_BEZ)) || (prevbezt && (prevbezt->ipo==IPO_BEZ)) ) )
{
fp= bezt->vec[0];
cpack(col[bezt->h1]);
Modified: branches/animsys2/source/blender/src/keyframing.c
===================================================================
--- branches/animsys2/source/blender/src/keyframing.c 2008-11-01 00:23:08 UTC (rev 17257)
+++ branches/animsys2/source/blender/src/keyframing.c 2008-11-01 10:18:21 UTC (rev 17258)
@@ -325,8 +325,12 @@
/* add temp beztriple to keyframes */
a= insert_bezt_icu(icu, &beztr);
- if (!fast) calchandles_ipocurve(icu);
+ /* what if 'a' is a negative index?
+ * for now, just exit to prevent any segfaults
+ */
+ if (a < 0) return;
+
/* set handletype and interpolation */
if (icu->totvert > 2) {
BezTriple *bezt= (icu->bezt + a);
@@ -347,13 +351,20 @@
}
else
bezt->ipo= icu->ipo;
+ }
+ else {
+ BezTriple *bezt= (icu->bezt + a);
- /* don't recalculate handles if fast is set
- * - this is a hack to make importers faster
- */
- // TODO: importers should add to a bpoint array allocated once instead
- if (!fast) calchandles_ipocurve(icu);
+ /* set interpolation directly from ipo-curve */
+ bezt->ipo= icu->ipo;
}
+
+ /* don't recalculate handles if fast is set
+ * - this is a hack to make importers faster
+ * - in past handles were calculated twice... only once now at end should be sufficient!
+ */
+ // TODO: importers should add to a bpoint array allocated once instead
+ if (!fast) calchandles_ipocurve(icu);
}
/* ------------------- Get Data ------------------------ */
@@ -924,12 +935,11 @@
/* --------- KeyingSet Adrcode Getters ------------ */
/* initialise a channel-getter storage */
-static bKS_AdrcodeGetter *ks_adrcodegetter_init (bKeyingSet *ks, bCommonKeySrc *cks)
+static void ks_adrcodegetter_init (bKS_AdrcodeGetter *kag, bKeyingSet *ks, bCommonKeySrc *cks)
{
- bKS_AdrcodeGetter *kag;
-
/* error checking */
- kag= MEM_callocN(sizeof(bKS_AdrcodeGetter), "KAG");
+ if (kag == NULL)
+ return;
if (ELEM(NULL, ks, cks)) {
/* set invalid settings that won't cause harm */
@@ -949,8 +959,6 @@
kag->index= -1;
kag->tot= ks->chan_num;
}
-
- return kag;
}
/* 'default' channel-getter that will be used when iterating through keyingset's channels
@@ -1014,7 +1022,6 @@
bCommonKeySrc *cks= (kag) ? kag->cks : NULL;
short index, adrcode;
-
/* error checking */
if (ELEM3(NULL, kag, ks, cks)) return 0;
if (ks->chan_num <= 0) return 0;
@@ -1965,13 +1972,12 @@
}
}
else {
- bKS_AdrcodeGetter *kag;
+ bKS_AdrcodeGetter kag;
short (*get_next_adrcode)(bKS_AdrcodeGetter *);
int adrcode;
/* initialise keyingset channel iterator */
- kag= ks_adrcodegetter_init(ks, cks);
- printf("kag = %p \n", kag);
+ ks_adrcodegetter_init(&kag, ks, cks);
/* get iterator - only one can be in use at a time... the flags should be mutually exclusive in this regard */
if (ks->flag & COMMONKEY_PCHANROT)
@@ -1982,7 +1988,7 @@
get_next_adrcode= ks_getnextadrcode_default;
/* loop over channels available in keyingset */
- for (adrcode= get_next_adrcode(kag); adrcode > 0; adrcode= get_next_adrcode(kag)) {
+ for (adrcode= get_next_adrcode(&kag); adrcode > 0; adrcode= get_next_adrcode(&kag)) {
short flag;
/* insert mode or delete mode */
@@ -2006,9 +2012,6 @@
success += insertkey(cks->id, ks->blocktype, cks->actname, cks->constname, adrcode, flag);
}
}
-
- /* free keyingset channel iterator */
- MEM_freeN(kag);
}
/* special handling for some key-sources */
More information about the Bf-blender-cvs
mailing list