Revision: 24907
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24907
Author:   aligorith
Date:     2009-11-26 04:43:39 +0100 (Thu, 26 Nov 2009)

Log Message:
-----------
Bugfix #20041: Drivers don't work on bone visiblity

- Drivers on added to the 'armature' datablock (i.e. keyframing some settings 
for a "Bone" as opposed to "PoseBone") now evaluate correctly. Added proper 
recalcs for this case too.

- Also fixed some memory leaks and loading problems I encountered with the test 
file provided. After having problems loading the test file, I ended up 
reproducing and finding the error.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenloader/intern/readfile.c

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c   2009-11-26 
02:58:53 UTC (rev 24906)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c   2009-11-26 
03:43:39 UTC (rev 24907)
@@ -37,6 +37,7 @@
 #include "BLI_math.h"
 #include "BLI_blenlib.h"
 
+#include "DNA_anim_types.h"
 #include "DNA_armature_types.h"
 #include "DNA_action_types.h"
 #include "DNA_curve_types.h"
@@ -49,6 +50,7 @@
 #include "DNA_scene_types.h"
 #include "DNA_view3d_types.h"
 
+#include "BKE_animsys.h"
 #include "BKE_armature.h"
 #include "BKE_action.h"
 #include "BKE_anim.h"
@@ -127,6 +129,12 @@
                        freeSketch(arm->sketch);
                        arm->sketch = NULL;
                }
+               
+               /* free animation data */
+               if (arm->adt) {
+                       BKE_free_animdata(&arm->id);
+                       arm->adt= NULL;
+               }
        }
 }
 

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c     2009-11-26 
02:58:53 UTC (rev 24906)
+++ trunk/blender/source/blender/blenkernel/intern/object.c     2009-11-26 
03:43:39 UTC (rev 24907)
@@ -2364,6 +2364,9 @@
                }
                
                if(ob->recalc & OB_RECALC_DATA) {
+                       ID *data_id= (ID *)ob->data;
+                       AnimData *adt= BKE_animdata_from_id(data_id);
+                       float ctime= (float)scene->r.cfra; // XXX this is bad...
                        
                        if (G.f & G_DEBUG)
                                printf("recalcdata %s\n", ob->id.name+2);
@@ -2386,10 +2389,6 @@
                                makeDispListCurveTypes(scene, ob, 0);
                        }
                        else if(ELEM(ob->type, OB_CAMERA, OB_LAMP)) {
-                               ID *data_id= (ID *)ob->data;
-                               AnimData *adt= BKE_animdata_from_id(data_id);
-                               float ctime= (float)scene->r.cfra; // XXX this 
is bad...
-                               
                                /* evaluate drivers */
                                BKE_animsys_evaluate_animdata(data_id, adt, 
ctime, ADT_RECALC_DRIVERS);
                        }
@@ -2402,6 +2401,9 @@
                                if(ob->pose==NULL || (ob->pose->flag & 
POSE_RECALC))
                                        armature_rebuild_pose(ob, ob->data);
                                
+                               /* evaluate drivers */
+                               BKE_animsys_evaluate_animdata(data_id, adt, 
ctime, ADT_RECALC_DRIVERS);
+                               
                                if(ob->id.lib && ob->proxy_from) {
                                        copy_pose_result(ob->pose, 
ob->proxy_from->pose);
                                        // printf("pose proxy copy, lib ob %s 
proxy %s\n", ob->id.name, ob->proxy_from->id.name);

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2009-11-26 
02:58:53 UTC (rev 24906)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2009-11-26 
03:43:39 UTC (rev 24907)
@@ -2397,7 +2397,9 @@
        link_list(fd, &arm->bonebase);
        arm->edbo= NULL;
        arm->sketch = NULL;
+       
        arm->adt= newdataadr(fd, arm->adt);
+       direct_link_animdata(fd, arm->adt);
        
        bone=arm->bonebase.first;
        while (bone) {


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to