Revision: 20028 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20028 Author: aligorith Date: 2009-05-02 06:51:14 +0200 (Sat, 02 May 2009)
Log Message: ----------- F-Curve Modifiers - Per-Modifier Muting: It is now possible to mute individual modifiers so that they will not contribute to the final result. Modified Paths: -------------- branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c branches/blender2.5/blender/source/blender/editors/space_graph/graph_buttons.c branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h branches/blender2.5/blender/source/blender/makesrna/intern/rna_fcurve.c Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c =================================================================== --- branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c 2009-05-02 04:20:36 UTC (rev 20027) +++ branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c 2009-05-02 04:51:14 UTC (rev 20028) @@ -2239,7 +2239,7 @@ /* only evaluate if there's a callback for this */ // TODO: implement the 'influence' control feature... if (fmi && fmi->evaluate_modifier) { - if ((fcm->flag & FMODIFIER_FLAG_DISABLED) == 0) + if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) fmi->evaluate_modifier(fcu, fcm, &cvalue, evaltime); } } Modified: branches/blender2.5/blender/source/blender/editors/space_graph/graph_buttons.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_graph/graph_buttons.c 2009-05-02 04:20:36 UTC (rev 20027) +++ branches/blender2.5/blender/source/blender/editors/space_graph/graph_buttons.c 2009-05-02 04:51:14 UTC (rev 20028) @@ -871,18 +871,21 @@ but= uiDefBut(block, ROUNDBOX, B_REDR, "", 0, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), ""); /* expand */ - uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded"); + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded."); /* checkbox for 'active' status (for now) */ - but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one"); + but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one."); uiButSetFunc(but, activate_fmodifier_cb, fcu, fcm); /* name */ if (fmi) - but= uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 240, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); else - but= uiDefBut(block, LABEL, 1, "<Unknown Modifier>", 10+40, *yco, 240, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + uiDefBut(block, LABEL, 1, "<Unknown Modifier>", 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + /* 'mute' button */ + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_MUTED, B_REDR, ICON_MUTE_IPO_OFF, 10+(width-60), *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is temporarily muted (not evaluated)."); + /* delete button */ but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 10+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier."); uiButSetFunc(but, delete_fmodifier_cb, fcu, fcm); Modified: branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c 2009-05-02 04:20:36 UTC (rev 20027) +++ branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c 2009-05-02 04:51:14 UTC (rev 20028) @@ -775,6 +775,37 @@ glDisable(GL_BLEND); } +/* check if any FModifiers to draw controls for - fcm is 'active' modifier */ +static short fcurve_needs_draw_fmodifier_controls (FCurve *fcu, FModifier *fcm) +{ + /* don't draw if there aren't any modifiers at all */ + if (fcu->modifiers.first == NULL) + return 0; + + /* if there's an active modifier - don't draw if it is cycles modifier, since + * that basically still shows the original points + */ + if ((fcm) && (fcm->type == FMODIFIER_TYPE_CYCLES)) + return 0; + + /* if only one modifier - don't draw if it is muted or disabled */ + if (fcu->modifiers.first == fcu->modifiers.last) { + fcm= fcu->modifiers.first; + if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) + return 0; + } + + /* if only active modifier - don't draw if it is muted or disabled */ + if (fcm) { + if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) + return 0; + } + + /* if we're still here, this means that there are modifiers with controls to be drawn */ + // FIXME: what happens if all the modifiers were muted/disabled + return 1; +} + /* This is called twice from space_graph.c -> graph_main_area_draw() * Unselected then selected F-Curves are drawn so that they do not occlude each other. */ @@ -853,14 +884,8 @@ } /* 2) draw handles and vertices as appropriate based on active */ - if ( ((fcm) && (fcm->type != FMODIFIER_TYPE_CYCLES)) || (fcu->modifiers.first && !fcm) ) { - /* draw controls for the 'active' modifier - * - there may not be an 'active' modifier on this curve to draw - * - this curve may not be active, so modifier controls shouldn't get drawn either - * - * NOTE: cycles modifier is currently an exception where the original points can still be edited, so - * this branch is skipped... (TODO: set up the generic system for this so that we don't need special hacks like this) - */ + if (fcurve_needs_draw_fmodifier_controls(fcu, fcm)) { + /* only draw controls if this is the active modifier */ if ((fcu->flag & FCURVE_ACTIVE) && (fcm)) { switch (fcm->type) { case FMODIFIER_TYPE_ENVELOPE: /* envelope */ Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h =================================================================== --- branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h 2009-05-02 04:20:36 UTC (rev 20027) +++ branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h 2009-05-02 04:51:14 UTC (rev 20028) @@ -61,6 +61,8 @@ FMODIFIER_FLAG_EXPANDED = (1<<1), /* modifier is active one (in UI) for editing purposes */ FMODIFIER_FLAG_ACTIVE = (1<<2), + /* user wants modifier to be skipped */ + FMODIFIER_FLAG_MUTED = (1<<3), } eFModifier_Flags; /* --- */ Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_fcurve.c =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/intern/rna_fcurve.c 2009-05-02 04:20:36 UTC (rev 20027) +++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_fcurve.c 2009-05-02 04:51:14 UTC (rev 20028) @@ -491,10 +491,15 @@ RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED); RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI."); + prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_MUTED); + RNA_def_property_ui_text(prop, "Muted", "F-Curve Modifier will not be evaluated."); + // XXX this is really an internal flag, but it may be useful for some tools to be able to access this... prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED ); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED); RNA_def_property_ui_text(prop, "Disabled", "F-Curve Modifier has invalid settings and will not be evaluated."); // TODO: setting this to true must ensure that all others in stack are turned off too... _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs