Revision: 21446
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21446
Author:   aligorith
Date:     2009-07-09 03:04:42 +0200 (Thu, 09 Jul 2009)

Log Message:
-----------
NLA SoC: Assorted cleanups

* Some cleanups aimed at giving some (neglible) speedups 

* Preparation for NLA-Strip keyframes to be editable

Modified Paths:
--------------
    branches/soc-2009-aligorith/source/blender/blenkernel/BKE_nla.h
    branches/soc-2009-aligorith/source/blender/blenkernel/intern/anim_sys.c
    branches/soc-2009-aligorith/source/blender/blenkernel/intern/nla.c
    
branches/soc-2009-aligorith/source/blender/editors/interface/interface_anim.c
    branches/soc-2009-aligorith/source/blender/makesdna/DNA_anim_types.h

Modified: branches/soc-2009-aligorith/source/blender/blenkernel/BKE_nla.h
===================================================================
--- branches/soc-2009-aligorith/source/blender/blenkernel/BKE_nla.h     
2009-07-08 22:49:35 UTC (rev 21445)
+++ branches/soc-2009-aligorith/source/blender/blenkernel/BKE_nla.h     
2009-07-09 01:04:42 UTC (rev 21446)
@@ -83,6 +83,8 @@
 
 short BKE_nlastrip_within_bounds(struct NlaStrip *strip, float min, float max);
 
+short BKE_nlatrack_has_animated_strips(struct NlaTrack *nlt);
+short BKE_nlatracks_have_animated_strips(ListBase *tracks);
 void BKE_nlastrip_validate_fcurves(struct NlaStrip *strip);
 
 /* ............ */

Modified: 
branches/soc-2009-aligorith/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/soc-2009-aligorith/source/blender/blenkernel/intern/anim_sys.c     
2009-07-08 22:49:35 UTC (rev 21445)
+++ branches/soc-2009-aligorith/source/blender/blenkernel/intern/anim_sys.c     
2009-07-09 01:04:42 UTC (rev 21446)
@@ -392,10 +392,10 @@
 short animsys_remap_path (AnimMapper *remap, char *path, char **dst)
 {
        /* is there a valid remapping table to use? */
-       if (remap) {
+       //if (remap) {
                /* find a matching entry... to use to remap */
                // ...TODO...
-       }
+       //}
        
        /* nothing suitable found, so just set dst to look at path (i.e. no 
alloc/free needed) */
        *dst= path;
@@ -521,7 +521,6 @@
                short ok= 0;
                
                /* check if this driver's curve should be skipped */
-               // FIXME: maybe we shouldn't check for muted, though that would 
make things more confusing, as there's already too many ways to disable?
                if ((fcu->flag & (FCURVE_MUTED|FCURVE_DISABLED)) == 0) 
                {
                        /* check if driver itself is tagged for recalculation */
@@ -1185,6 +1184,9 @@
        ListBase echannels= {NULL, NULL};
        NlaEvalStrip *nes;
        
+       // TODO: need to zero out all channels used, otherwise we have problems 
with threadsafety
+       // and also when the user jumps between different times instead of 
moving sequentially...
+       
        /* 1. get the stack of strips to evaluate at current time (influence 
calculated here) */
        for (nlt=adt->nla_tracks.first; nlt; nlt=nlt->next, track_index++) { 
                /* if tweaking is on and this strip is the tweaking track, stop 
on this one */

Modified: branches/soc-2009-aligorith/source/blender/blenkernel/intern/nla.c
===================================================================
--- branches/soc-2009-aligorith/source/blender/blenkernel/intern/nla.c  
2009-07-08 22:49:35 UTC (rev 21445)
+++ branches/soc-2009-aligorith/source/blender/blenkernel/intern/nla.c  
2009-07-09 01:04:42 UTC (rev 21446)
@@ -926,7 +926,6 @@
                nlt_a->flag |= NLATRACK_ACTIVE;
 }
 
-
 /* Check if there is any space in the given track to add a strip of the given 
length */
 short BKE_nlatrack_has_space (NlaTrack *nlt, float start, float end)
 {
@@ -1050,6 +1049,46 @@
        return 1;
 }
 
+/* Animated Strips ------------------------------------------- */
+
+/* Check if the given NLA-Track has any strips with own F-Curves */
+short BKE_nlatrack_has_animated_strips (NlaTrack *nlt)
+{
+       NlaStrip *strip;
+       
+       /* sanity checks */
+       if ELEM(NULL, nlt, nlt->strips.first)
+               return 0;
+               
+       /* check each strip for F-Curves only (don't care about whether the 
flags are set) */
+       for (strip= nlt->strips.first; strip; strip= strip->next) {
+               if (strip->fcurves.first)
+                       return 1;
+       }
+       
+       /* none found */
+       return 0;
+}
+
+/* Check if given NLA-Tracks have any strips with own F-Curves */
+short BKE_nlatracks_have_animated_strips (ListBase *tracks)
+{
+       NlaTrack *nlt;
+       
+       /* sanity checks */
+       if ELEM(NULL, tracks, tracks->first)
+               return 0;
+               
+       /* check each track, stopping on the first hit */
+       for (nlt= tracks->first; nlt; nlt= nlt->next) {
+               if (BKE_nlatrack_has_animated_strips(nlt))
+                       return 1;
+       }
+       
+       /* none found */
+       return 0;
+}
+
 /* Validate the NLA-Strips 'control' F-Curves based on the flags set*/
 void BKE_nlastrip_validate_fcurves (NlaStrip *strip) 
 {

Modified: 
branches/soc-2009-aligorith/source/blender/editors/interface/interface_anim.c
===================================================================
--- 
branches/soc-2009-aligorith/source/blender/editors/interface/interface_anim.c   
    2009-07-08 22:49:35 UTC (rev 21445)
+++ 
branches/soc-2009-aligorith/source/blender/editors/interface/interface_anim.c   
    2009-07-09 01:04:42 UTC (rev 21446)
@@ -30,12 +30,15 @@
 void ui_but_anim_flag(uiBut *but, float cfra)
 {
        but->flag &= ~(UI_BUT_ANIMATED|UI_BUT_ANIMATED_KEY|UI_BUT_DRIVEN);
-
-       if(but->rnaprop && but->rnapoin.id.data) {
+       
+       /* there must be some RNA-pointer + property combo for this button */
+       if (but->rnaprop && but->rnapoin.id.data && 
+               RNA_property_animateable(&but->rnapoin, but->rnaprop)) 
+       {
                AnimData *adt= BKE_animdata_from_id(but->rnapoin.id.data);
                FCurve *fcu;
                char *path;
-
+               
                if (adt) {
                        if ((adt->action && adt->action->curves.first) || 
(adt->drivers.first)) {
                                /* XXX this function call can become a 
performance bottleneck */
@@ -113,7 +116,6 @@
        WM_operator_name_call(C, "ANIM_OT_remove_driver_button", 
WM_OP_INVOKE_DEFAULT, NULL);
 }
 
-// TODO: refine the logic for adding/removing drivers...
 void ui_but_anim_menu(bContext *C, uiBut *but)
 {
        uiPopupMenu *pup;

Modified: branches/soc-2009-aligorith/source/blender/makesdna/DNA_anim_types.h
===================================================================
--- branches/soc-2009-aligorith/source/blender/makesdna/DNA_anim_types.h        
2009-07-08 22:49:35 UTC (rev 21445)
+++ branches/soc-2009-aligorith/source/blender/makesdna/DNA_anim_types.h        
2009-07-09 01:04:42 UTC (rev 21446)
@@ -741,6 +741,8 @@
        ADT_NLA_EDIT_ON                 = (1<<2),
                /* active Action for 'tweaking' does not have mapping applied 
for editing */
        ADT_NLA_EDIT_NOMAP              = (1<<3),
+               /* NLA-Strip F-Curves are expanded in UI */
+       ADT_NLA_SKEYS_COLLAPSED = (1<<4),
        
                /* drivers expanded in UI */
        ADT_DRIVERS_COLLAPSED   = (1<<10),


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

Reply via email to