Yep, new drivers have no properties now (previously had a scene
current frame prop)

On Thu, Nov 17, 2011 at 6:10 PM, Daniel Salazar - 3Developer.com
<zan...@gmail.com> wrote:
> ohh! so good :D are new drivers like #frame not creating a property now then?
>
> cheers!
>
> Daniel Salazar
> 3Developer.com
>
>
>
> On Thu, Nov 17, 2011 at 1:08 AM, Campbell Barton <ideasma...@gmail.com> wrote:
>> Revision: 41943
>>          
>> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41943
>> Author:   campbellbarton
>> Date:     2011-11-17 07:08:09 +0000 (Thu, 17 Nov 2011)
>> Log Message:
>> -----------
>> pydrivers: 'frame' is now in the driver namespace,
>>
>> - no need to link to scenes when using a frame from the pydriver, this made 
>> linking rigs for eg, quite messy.
>> - advantage that we get subframe values (where scenes from was fixed to a 
>> whole number).
>>
>> Modified Paths:
>> --------------
>>    trunk/blender/source/blender/blenkernel/intern/fcurve.c
>>    trunk/blender/source/blender/editors/interface/interface_anim.c
>>    trunk/blender/source/blender/python/BPY_extern.h
>>    trunk/blender/source/blender/python/intern/bpy_driver.c
>>    trunk/blender/source/blender/python/intern/bpy_driver.h
>>    trunk/blender/source/blenderplayer/bad_level_call_stubs/stubs.c
>>
>> Modified: trunk/blender/source/blender/blenkernel/intern/fcurve.c
>> ===================================================================
>> --- trunk/blender/source/blender/blenkernel/intern/fcurve.c     2011-11-17 
>> 06:08:58 UTC (rev 41942)
>> +++ trunk/blender/source/blender/blenkernel/intern/fcurve.c     2011-11-17 
>> 07:08:09 UTC (rev 41943)
>> @@ -1576,7 +1576,7 @@
>>  *     - "evaltime" is the frame at which F-Curve is being evaluated
>>  *     - has to return a float value
>>  */
>> -static float evaluate_driver (ChannelDriver *driver, float UNUSED(evaltime))
>> +static float evaluate_driver (ChannelDriver *driver, const float evaltime)
>>  {
>>        DriverVar *dvar;
>>
>> @@ -1663,8 +1663,10 @@
>>                                /* this evaluates the expression using 
>> Python,and returns its result:
>>                                 *      - on errors it reports, then returns 
>> 0.0f
>>                                 */
>> -                               driver->curval= BPY_driver_exec(driver);
>> +                               driver->curval= BPY_driver_exec(driver, 
>> evaltime);
>>                        }
>> +#else /* WITH_PYTHON*/
>> +               (void)evaltime;
>>  #endif /* WITH_PYTHON*/
>>                }
>>                        break;
>> @@ -2087,7 +2089,7 @@
>>  /* Evaluate and return the value of the given F-Curve at the specified 
>> frame ("evaltime")
>>  * Note: this is also used for drivers
>>  */
>> -float evaluate_fcurve (FCurve *fcu, float evaltime)
>> +float evaluate_fcurve (FCurve *fcu, float evaltime)
>>  {
>>        float cvalue= 0.0f;
>>        float devaltime;
>>
>> Modified: trunk/blender/source/blender/editors/interface/interface_anim.c
>> ===================================================================
>> --- trunk/blender/source/blender/editors/interface/interface_anim.c     
>> 2011-11-17 06:08:58 UTC (rev 41942)
>> +++ trunk/blender/source/blender/editors/interface/interface_anim.c     
>> 2011-11-17 07:08:09 UTC (rev 41943)
>> @@ -164,24 +164,7 @@
>>                        /* set the expression */
>>                        // TODO: need some way of identifying variables used
>>                        BLI_strncpy_utf8(driver->expression, str, 
>> sizeof(driver->expression));
>> -
>> -                       /* FIXME: for now, assume that
>> -                        *      - for expressions, users are likely to be 
>> using "frame" -> current frame" as a variable
>> -                        *      - driver_add_new_variable() adds a 
>> single-prop variable by default
>> -                        */
>> -                       {
>> -                               DriverVar *dvar;
>> -                               DriverTarget *dtar;
>> -
>> -                               dvar = driver_add_new_variable(driver);
>> -                               BLI_strncpy(dvar->name, "frame", 
>> sizeof(dvar->name));
>> -
>> -                               dtar = &dvar->targets[0];
>> -                               dtar->id = (ID *)CTX_data_scene(C); // XXX: 
>> should we check that C is valid first?
>> -                               dtar->idtype= ID_SCE;
>> -                               dtar->rna_path = 
>> BLI_sprintfN("frame_current");
>> -                       }
>> -
>> +
>>                        /* updates */
>>                        driver->flag |= DRIVER_FLAG_RECOMPILE;
>>                        WM_event_add_notifier(C, NC_ANIMATION|ND_KEYFRAME, 
>> NULL);
>>
>> Modified: trunk/blender/source/blender/python/BPY_extern.h
>> ===================================================================
>> --- trunk/blender/source/blender/python/BPY_extern.h    2011-11-17 06:08:58 
>> UTC (rev 41942)
>> +++ trunk/blender/source/blender/python/BPY_extern.h    2011-11-17 07:08:09 
>> UTC (rev 41943)
>> @@ -74,7 +74,7 @@
>>  void   BPY_app_handlers_reset(const short do_all);
>>
>>  void   BPY_driver_reset(void);
>> -float  BPY_driver_exec(struct ChannelDriver *driver);
>> +float  BPY_driver_exec(struct ChannelDriver *driver, const float evaltime);
>>
>>  int            BPY_button_exec(struct bContext *C, const char *expr, double 
>> *value, const short verbose);
>>  int            BPY_string_exec(struct bContext *C, const char *expr);
>>
>> Modified: trunk/blender/source/blender/python/intern/bpy_driver.c
>> ===================================================================
>> --- trunk/blender/source/blender/python/intern/bpy_driver.c     2011-11-17 
>> 06:08:58 UTC (rev 41942)
>> +++ trunk/blender/source/blender/python/intern/bpy_driver.c     2011-11-17 
>> 07:08:09 UTC (rev 41943)
>> @@ -91,6 +91,29 @@
>>        return 0;
>>  }
>>
>> +/* note, this function should do nothing most runs, only when changing 
>> frame */
>> +static PyObject *bpy_pydriver_InternStr__frame= NULL;
>> +
>> +static void bpy_pydriver_update_dict(const float evaltime)
>> +{
>> +       /* not thread safe but neither is python */
>> +       static float evaltime_prev= FLT_MAX;
>> +
>> +       if (evaltime_prev != evaltime) {
>> +
>> +               /* currently only update the frame */
>> +               if (bpy_pydriver_InternStr__frame == NULL) {
>> +                       bpy_pydriver_InternStr__frame= 
>> PyUnicode_FromString("frame");
>> +               }
>> +
>> +               PyDict_SetItem(bpy_pydriver_Dict,
>> +                              bpy_pydriver_InternStr__frame,
>> +                              PyFloat_FromDouble(evaltime));
>> +
>> +               evaltime_prev= evaltime;
>> +       }
>> +}
>> +
>>  /* Update function, it gets rid of pydrivers global dictionary, forcing
>>  * BPY_driver_exec to recreate it. This function is used to force
>>  * reloading the Blender text module "pydrivers.py", if available, so
>> @@ -110,6 +133,11 @@
>>                bpy_pydriver_Dict= NULL;
>>        }
>>
>> +       if (bpy_pydriver_InternStr__frame) {
>> +               Py_DECREF(bpy_pydriver_InternStr__frame);
>> +               bpy_pydriver_InternStr__frame= NULL;
>> +       }
>> +
>>        if (use_gil)
>>                PyGILState_Release(gilstate);
>>
>> @@ -139,7 +167,7 @@
>>  * now release the GIL on python operator execution instead, using
>>  * PyEval_SaveThread() / PyEval_RestoreThread() so we dont lock up blender.
>>  */
>> -float BPY_driver_exec(ChannelDriver *driver)
>> +float BPY_driver_exec(ChannelDriver *driver, const float evaltime)
>>  {
>>        PyObject *driver_vars=NULL;
>>        PyObject *retval= NULL;
>> @@ -183,6 +211,10 @@
>>                }
>>        }
>>
>> +       /* update global namespace */
>> +       bpy_pydriver_update_dict(evaltime);
>> +
>> +
>>        if (driver->expr_comp==NULL)
>>                driver->flag |= DRIVER_FLAG_RECOMPILE;
>>
>> @@ -246,6 +278,7 @@
>>                }
>>        }
>>
>> +
>>  #if 0 // slow, with this can avoid all Py_CompileString above.
>>        /* execute expression to get a value */
>>        retval= PyRun_String(expr, Py_eval_input, bpy_pydriver_Dict, 
>> driver_vars);
>>
>> Modified: trunk/blender/source/blender/python/intern/bpy_driver.h
>> ===================================================================
>> --- trunk/blender/source/blender/python/intern/bpy_driver.h     2011-11-17 
>> 06:08:58 UTC (rev 41942)
>> +++ trunk/blender/source/blender/python/intern/bpy_driver.h     2011-11-17 
>> 07:08:09 UTC (rev 41943)
>> @@ -33,7 +33,7 @@
>>  extern PyObject *bpy_pydriver_Dict;
>>
>>  /* externals */
>> -float BPY_driver_exec(struct ChannelDriver *driver);
>> +float BPY_driver_exec(struct ChannelDriver *driver, const float evaltime);
>>  void BPY_driver_reset(void);
>>
>>  #endif // BPY_DRIVER_H
>>
>> Modified: trunk/blender/source/blenderplayer/bad_level_call_stubs/stubs.c
>> ===================================================================
>> --- trunk/blender/source/blenderplayer/bad_level_call_stubs/stubs.c     
>> 2011-11-17 06:08:58 UTC (rev 41942)
>> +++ trunk/blender/source/blenderplayer/bad_level_call_stubs/stubs.c     
>> 2011-11-17 07:08:09 UTC (rev 41943)
>> @@ -454,7 +454,7 @@
>>  void BPY_id_release(struct Text *text) {}
>>  int BPY_context_member_get(struct Context *C, const char *member, struct 
>> bContextDataResult *result) { return 0; }
>>  void BPY_pyconstraint_target(struct bPythonConstraint *con, struct 
>> bConstraintTarget *ct) {}
>> -float BPY_driver_exec(struct ChannelDriver *driver) {return 0.0f;} /* might 
>> need this one! */
>> +float BPY_driver_exec(struct ChannelDriver *driver, const float evaltime) 
>> {return 0.0f;} /* might need this one! */
>>  void BPY_DECREF(void *pyob_ptr) {}
>>  void BPY_pyconstraint_exec(struct bPythonConstraint *con, struct 
>> bConstraintOb *cob, struct ListBase *targets) {}
>>  void macro_wrapper(struct wmOperatorType *ot, void *userdata) {} ;
>>
>> _______________________________________________
>> Bf-blender-cvs mailing list
>> bf-blender-...@blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers@blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>



-- 
- Campbell
_______________________________________________
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers

Reply via email to