Revision: 26205
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26205
Author:   aligorith
Date:     2010-01-23 04:57:11 +0100 (Sat, 23 Jan 2010)

Log Message:
-----------
Animation Editors: DopeSheet filtering option to only include Objects that are 
members of the specified group

Between the datablock filtering options and the auto-snapping menu in the 
headers of Animation Editors, there is a new toggle for enabling this new 
feature (only when there are groups in the scene). Enabling this, a field to 
enter/select a group in the scene to filter with, will appear beside it. 

This feature has been added to make it easier to manage animating multiple 
character shots in Durian. 
By assigning the rigs of several bandits to a single group, or Sintel and her 
staff to another group, or Sintel and the guardians to another group, and so 
on, it is possible to filter the animation data shown in the editors to a 
useful subset of the total motion in the scene. 

This makes it easier to retime or edit the motions of one set of characters and 
their props without affecting the motions of other no-related objects. The 
downside is that there is a bit more setup work required upfront, but that's 
probably a small price to pay for some groupings that may be useful in other 
ways too later (perhaps for compositing or lighting work).

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/animation/anim_filter.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/makesdna/DNA_action_types.h
    trunk/blender/source/blender/makesrna/intern/rna_action.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2010-01-23 
03:04:37 UTC (rev 26204)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2010-01-23 
03:57:11 UTC (rev 26205)
@@ -4653,9 +4653,12 @@
                                        }
                                        else if(sl->spacetype==SPACE_IPO) {
                                                SpaceIpo *sipo= (SpaceIpo *)sl;
+                                               bDopeSheet *ads= sipo->ads;
                                                
-                                               if(sipo->ads)
-                                                       sipo->ads->source= 
newlibadr(fd, sc->id.lib, sipo->ads->source);
+                                               if (ads) {
+                                                       ads->source= 
newlibadr(fd, sc->id.lib, ads->source);
+                                                       ads->filter_grp= 
newlibadr(fd, sc->id.lib, ads->filter_grp);
+                                               }
                                        }
                                        else if(sl->spacetype==SPACE_BUTS) {
                                                SpaceButs *sbuts= (SpaceButs 
*)sl;
@@ -4686,8 +4689,14 @@
                                        }
                                        else if(sl->spacetype==SPACE_ACTION) {
                                                SpaceAction *saction= 
(SpaceAction *)sl;
+                                               bDopeSheet *ads= &saction->ads;
+                                               
+                                               if (ads) {
+                                                       ads->source= 
newlibadr(fd, sc->id.lib, ads->source);
+                                                       ads->filter_grp= 
newlibadr(fd, sc->id.lib, ads->filter_grp);
+                                               }
+                                               
                                                saction->action = newlibadr(fd, 
sc->id.lib, saction->action);
-                                               saction->ads.source= 
newlibadr(fd, sc->id.lib, saction->ads.source);
                                        }
                                        else if(sl->spacetype==SPACE_IMAGE) {
                                                SpaceImage *sima= (SpaceImage 
*)sl;
@@ -4695,7 +4704,13 @@
                                                sima->image= newlibadr_us(fd, 
sc->id.lib, sima->image);
                                        }
                                        else if(sl->spacetype==SPACE_NLA){
-                                               /* SpaceNla *snla= (SpaceNla 
*)sl;      */
+                                               SpaceNla *snla= (SpaceNla *)sl;
+                                               bDopeSheet *ads= snla->ads;
+                                               
+                                               if (ads) {
+                                                       ads->source= 
newlibadr(fd, sc->id.lib, ads->source);
+                                                       ads->filter_grp= 
newlibadr(fd, sc->id.lib, ads->filter_grp);
+                                               }
                                        }
                                        else if(sl->spacetype==SPACE_TEXT) {
                                                SpaceText *st= (SpaceText *)sl;

Modified: trunk/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_filter.c        
2010-01-23 03:04:37 UTC (rev 26204)
+++ trunk/blender/source/blender/editors/animation/anim_filter.c        
2010-01-23 03:57:11 UTC (rev 26205)
@@ -57,7 +57,7 @@
 #include "DNA_camera_types.h"
 #include "DNA_curve_types.h"
 #include "DNA_gpencil_types.h"
-#include "DNA_ipo_types.h"
+#include "DNA_group_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_lattice_types.h"
 #include "DNA_key_types.h"
@@ -83,6 +83,7 @@
 #include "BKE_fcurve.h"
 #include "BKE_context.h"
 #include "BKE_global.h"
+#include "BKE_group.h"
 #include "BKE_key.h"
 #include "BKE_object.h"
 #include "BKE_material.h"
@@ -1915,6 +1916,15 @@
                                        continue;
                                }
                                
+                               /* check if object belongs to the filtering 
group if option to filter 
+                                * objects by the grouped status is on
+                                *      - used to ease the process of doing 
multiple-character choreographies
+                                */
+                               if (ads->filterflag & ADS_FILTER_ONLYOBGROUP) {
+                                       if (object_in_group(ob, 
ads->filter_grp) == 0)
+                                               continue;
+                               }
+                               
                                /* check filters for datatypes */
                                        /* object */
                                actOk= 0;

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c        
2010-01-23 03:04:37 UTC (rev 26204)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c        
2010-01-23 03:57:11 UTC (rev 26205)
@@ -115,6 +115,17 @@
                uiItemR(row, "", 0, ptr, "display_armature", 0);
        if (mainptr && mainptr->particle.first)
                uiItemR(row, "", 0, ptr, "display_particle", 0);
+       
+       /* group-based filtering (only when groups are available */
+       if (mainptr && mainptr->group.first) {
+               row= uiLayoutRow(layout, 1);
+               
+               uiItemR(row, "", 0, ptr, "only_group_objects", 0);
+               
+               /* if enabled, show the group selection field too */
+               if (RNA_boolean_get(ptr, "only_group_objects"))
+                       uiItemR(row, "", 0, ptr, "filtering_group", 0);
+       }
 }
 
 /********************** Search Callbacks *************************/

Modified: trunk/blender/source/blender/makesdna/DNA_action_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_action_types.h    2010-01-23 
03:04:37 UTC (rev 26204)
+++ trunk/blender/source/blender/makesdna/DNA_action_types.h    2010-01-23 
03:57:11 UTC (rev 26205)
@@ -39,6 +39,7 @@
 
 struct SpaceLink;
 struct Object;
+struct Group;
 
 /* ************************************************ */
 /* Visualisation */
@@ -498,11 +499,13 @@
 
 /* Storage for Dopesheet/Grease-Pencil Editor data */
 typedef struct bDopeSheet {
-       ID              *source;                /* currently ID_SCE (for 
Dopesheet), and ID_SC (for Grease Pencil) */
-       ListBase chanbase;              /* cache for channels (only initialised 
when pinned) */  // XXX not used!
+       ID              *source;                        /* currently ID_SCE 
(for Dopesheet), and ID_SC (for Grease Pencil) */
+       ListBase chanbase;                      /* cache for channels (only 
initialised when pinned) */  // XXX not used!
        
-       int filterflag;                 /* flags to use for filtering data */
-       int flag;                               /* standard flags */
+       struct Group *filter_grp;       /* object group for 
ADS_FILTER_ONLYOBGROUP filtering option */ 
+       
+       int filterflag;                         /* flags to use for filtering 
data */
+       int flag;                                       /* standard flags */
 } bDopeSheet;
 
 
@@ -511,15 +514,19 @@
                /* general filtering */
        ADS_FILTER_ONLYSEL                      = (1<<0),       /* only include 
channels relating to selected data */
        
-               /* assorted general settings */
-       ADS_FILTER_ONLYDRIVERS          = (1<<1),       /* for 'Drivers' editor 
- TEMPORARY -  only include Driver data from AnimData */
+               /* temporary filters */
+       ADS_FILTER_ONLYDRIVERS          = (1<<1),       /* for 'Drivers' editor 
- only include Driver data from AnimData */
        ADS_FILTER_ONLYNLA                      = (1<<2),       /* for 'NLA' 
editor - only include NLA data from AnimData */
-       ADS_FILTER_SELEDIT                      = (1<<3),       /* for Graph 
Editor - TEMPORARY - used to indicate whether to include a filtering flag or 
not */
-       ADS_FILTER_SUMMARY                      = (1<<4),       /* for 
'DopeSheet' Editor - include 'summary' line */
+       ADS_FILTER_SELEDIT                      = (1<<3),       /* for Graph 
Editor - used to indicate whether to include a filtering flag or not */
        
+               /* general filtering 2 */
+       ADS_FILTER_SUMMARY                      = (1<<4),       /* for 
'DopeSheet' Editors - include 'summary' line */
+       ADS_FILTER_ONLYOBGROUP          = (1<<5),       /* only the objects in 
the specified object group get used */
+       
                /* datatype-based filtering */
        ADS_FILTER_NOSHAPEKEYS          = (1<<6),
        ADS_FILTER_NOMESH                       = (1<<7),
+       // NOTE: there are a few more spaces for datablock filtering here...
        ADS_FILTER_NOCAM                        = (1<<10),
        ADS_FILTER_NOMAT                        = (1<<11),
        ADS_FILTER_NOLAM                        = (1<<12),

Modified: trunk/blender/source/blender/makesrna/intern/rna_action.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_action.c   2010-01-23 
03:04:37 UTC (rev 26204)
+++ trunk/blender/source/blender/makesrna/intern/rna_action.c   2010-01-23 
03:57:11 UTC (rev 26205)
@@ -64,35 +64,60 @@
 
        srna= RNA_def_struct(brna, "DopeSheet", NULL);
        RNA_def_struct_sdna(srna, "bDopeSheet");
-       RNA_def_struct_ui_text(srna, "DopeSheet", "Storage for 
Dopesheet/Grease-Pencil Editor data.");
-
+       RNA_def_struct_ui_text(srna, "DopeSheet", "Settings for filtering the 
channels shown in Animation Editors.");
+       
+       /* Source of DopeSheet data */
        prop= RNA_def_property(srna, "source", PROP_POINTER, PROP_NONE);
        RNA_def_property_struct_type(prop, "ID");
        RNA_def_property_ui_text(prop, "Source", "ID-Block representing source 
data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil).");
-
+       
+       /* General Filtering Settings */
        prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "filterflag", 
ADS_FILTER_ONLYSEL);
        RNA_def_property_ui_text(prop, "Only Selected", "Only include channels 
relating to selected objects and data.");
        RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
        RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
-
-       prop= RNA_def_property(srna, "only_nla", PROP_BOOLEAN, PROP_NONE);
-       RNA_def_property_boolean_sdna(prop, NULL, "filterflag", 
ADS_FILTER_ONLYNLA);
-       RNA_def_property_ui_text(prop, "Only NLA", "Only include NLA data from 
Animation data.");
+       
+       /* Object Group Filtering Settings */
+       prop= RNA_def_property(srna, "only_group_objects", PROP_BOOLEAN, 
PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "filterflag", 
ADS_FILTER_ONLYOBGROUP);
+       RNA_def_property_ui_text(prop, "Only Objects in Group", "Only include 
channels from Objects in the specified Group.");
+       RNA_def_property_ui_icon(prop, ICON_GROUP, 0);
        RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
        
+       prop= RNA_def_property(srna, "filtering_group", PROP_POINTER, 
PROP_NONE);
+       RNA_def_property_pointer_sdna(prop, NULL, "filter_grp");
+       RNA_def_property_flag(prop, PROP_EDITABLE);
+       RNA_def_property_ui_text(prop, "Filtering Group", "Group that included 
Object should be a member of.");
+       RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
+       
+       /* NLA Specific Settings */
+       prop= RNA_def_property(srna, "include_missing_nla", PROP_BOOLEAN, 
PROP_NONE);
+       RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", 
ADS_FILTER_NLA_NOACT);
+       RNA_def_property_ui_text(prop, "Include Missing NLA", "Include 
Animation Data blocks with no NLA data. (NLA Editor only)");
+       RNA_def_property_ui_icon(prop, ICON_ACTION, 0);
+       RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
+       
+       /* Summary Settings (DopeSheet editors only) */
        prop= RNA_def_property(srna, "display_summary", PROP_BOOLEAN, 
PROP_NONE);
        RNA_def_property_boolean_sdna(prop, NULL, "filterflag", 
ADS_FILTER_SUMMARY);
        RNA_def_property_ui_text(prop, "Display Summary", "Display an 
additional 'summary' line. (DopeSheet Editors only)");
        RNA_def_property_ui_icon(prop, ICON_BORDERMOVE, 0);
        RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN_EDIT, NULL);
-
+       
+       prop= RNA_def_property(srna, "collapse_summary", PROP_BOOLEAN, 
PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", 
ADS_FLAG_SUMMARY_COLLAPSED);
+       RNA_def_property_ui_text(prop, "Collapse Summary", "Collapse summary 
when shown, so all other channels get hidden. (DopeSheet Editors Only)");

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to