Revision: 19111
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19111
Author:   aligorith
Date:     2009-02-25 11:27:08 +0100 (Wed, 25 Feb 2009)

Log Message:
-----------
Anim-Channel Filtering: If an object only has animation-data attached to one of 
its Material datablocks, they will now get included too. 

This makes it possible to edit keyframes for material animation where no 
object-linked animation exists. However, this is provided that the material is 
linked to an object!

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c

Modified: 
branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c  
2009-02-25 09:54:41 UTC (rev 19110)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c  
2009-02-25 10:27:08 UTC (rev 19111)
@@ -1191,7 +1191,7 @@
                if (base->object) {
                        Object *ob= base->object;
                        Key *key= ob_get_key(ob);
-                       short actOk, keyOk, dataOk;
+                       short actOk, keyOk, dataOk, matOk;
                        
                        /* firstly, check if object can be included, by the 
following fanimors:
                         *      - if only visible, must check for layer and 
also viewport visibility
@@ -1225,6 +1225,34 @@
                                        keyOk= ((key) && ANIMDATA_HAS_KEYS(key) 
&& !(ads->filterflag & ADS_FILTER_NOSHAPEKEYS));
                                }
                                
+                               /* materials - only for geometric types */
+                               matOk= 0; /* by default, not ok... */
+                               if ( !(ads->filterflag & ADS_FILTER_NOMAT) && 
(ob->totcol) && 
+                                        ELEM5(ob->type, OB_MESH, OB_CURVE, 
OB_SURF, OB_FONT, OB_MBALL) ) 
+                               {
+                                       int a;
+                                       
+                                       /* firstly check that we actuallly have 
some materials */
+                                       for (a=0; a < ob->totcol; a++) {
+                                               Material *ma= 
give_current_material(ob, a);
+                                               
+                                               /* if material has relevant 
animation data, break */
+                                               if (ads->filterflag & 
ADS_FILTER_ONLYDRIVERS) {
+                                                       if 
(ANIMDATA_HAS_DRIVERS(ma)) {
+                                                               matOk= 1;
+                                                               break;
+                                                       }
+                                               }
+                                               else {
+                                                       if 
(ANIMDATA_HAS_KEYS(ma)) {
+                                                               matOk= 1;
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+                               
+                               /* data */
                                switch (ob->type) {
                                        case OB_CAMERA: /* ------- Camera 
------------ */
                                        {
@@ -1244,22 +1272,13 @@
                                                        dataOk= 
(ANIMDATA_HAS_KEYS(la) && !(ads->filterflag & ADS_FILTER_NOLAM));       
                                        }
                                                break;
-                                       case OB_CURVE: /* -------- Curve 
---------- */
-                                       {
-                                               Curve *cu= (Curve *)ob->data;
-                                               if (ads->filterflag & 
ADS_FILTER_ONLYDRIVERS)
-                                                       dataOk= 
(ANIMDATA_HAS_DRIVERS(cu) && !(ads->filterflag & ADS_FILTER_NOCUR));
-                                               else
-                                                       dataOk= 
(ANIMDATA_HAS_KEYS(cu) && !(ads->filterflag & ADS_FILTER_NOCUR));       
-                                       }
-                                               break;
                                        default: /* --- other --- */
                                                dataOk= 0;
                                                break;
                                }
                                
                                /* check if all bad (i.e. nothing to show) */
-                               if (!actOk && !keyOk && !dataOk)
+                               if (!actOk && !keyOk && !dataOk && !matOk)
                                        continue;
                        }
                        else {
@@ -1267,6 +1286,24 @@
                                actOk= ANIMDATA_HAS_KEYS(ob);
                                keyOk= (key != NULL);
                                
+                               /* materials - only for geometric types */
+                               matOk= 0; /* by default, not ok... */
+                               if (ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, 
OB_FONT, OB_MBALL) && (ob->totcol)) 
+                               {
+                                       int a;
+                                       
+                                       /* firstly check that we actuallly have 
some materials */
+                                       for (a=0; a < ob->totcol; a++) {
+                                               Material *ma= 
give_current_material(ob, a);
+                                               
+                                               if (ANIMDATA_HAS_KEYS(ma)) {
+                                                       matOk= 1;
+                                                       break;
+                                               }
+                                       }
+                               }
+                               
+                               /* data */
                                switch (ob->type) {
                                        case OB_CAMERA: /* ------- Camera 
------------ */
                                        {
@@ -1292,7 +1329,7 @@
                                }
                                
                                /* check if all bad (i.e. nothing to show) */
-                               if (!actOk && !keyOk && !dataOk)
+                               if (!actOk && !keyOk && !dataOk && !matOk)
                                        continue;
                        }
                        


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

Reply via email to