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