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