Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillian Padovani Germano <wpgermano@gmail.com>2007-03-30 04:57:07 +0400
committerWillian Padovani Germano <wpgermano@gmail.com>2007-03-30 04:57:07 +0400
commitc86e95c84a4f0ed6021a0f5f2d7dc879faaa6a4b (patch)
tree1e587198b2093374e75036fc0fa9e50746ad024c /source/blender/python/BPY_interface.c
parentf40d6754375d1cb786999e947d29b21cd5095415 (diff)
BPython: pydrivers
-Adding name "self" to the pydriver's dictionary, so that objects can be easily referenced in their own expressions. For example, the expression: self.LocY for the LocX channel of an object would force this object's location in X to be equal to its location in Y. As always, feedback welcomed.
Diffstat (limited to 'source/blender/python/BPY_interface.c')
-rw-r--r--source/blender/python/BPY_interface.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
index dd5efb9296f..479a1fb5d26 100644
--- a/source/blender/python/BPY_interface.c
+++ b/source/blender/python/BPY_interface.c
@@ -64,6 +64,7 @@
#include "api2_2x/Blender.h"
#include "api2_2x/Camera.h"
#include "api2_2x/Draw.h"
+#include "api2_2x/Object.h"
#include "api2_2x/Registry.h"
#include "api2_2x/BPyModule.h" /* for the "bpy" default module */
@@ -1070,8 +1071,10 @@ static int bpy_pydriver_create_dict(void)
if (mod) {
PyObject *fcn = PyObject_GetAttrString(mod, "Get");
Py_DECREF(mod);
- if (fcn)
+ if (fcn) {
PyDict_SetItemString(d, "ob", fcn);
+ Py_DECREF(fcn);
+ }
}
/* me(meshname) == Blender.Mesh.Get(meshname) */
@@ -1079,8 +1082,10 @@ static int bpy_pydriver_create_dict(void)
if (mod) {
PyObject *fcn = PyObject_GetAttrString(mod, "Get");
Py_DECREF(mod);
- if (fcn)
+ if (fcn) {
PyDict_SetItemString(d, "me", fcn);
+ Py_DECREF(fcn);
+ }
}
/* ma(matname) == Blender.Material.Get(matname) */
@@ -1088,8 +1093,10 @@ static int bpy_pydriver_create_dict(void)
if (mod) {
PyObject *fcn = PyObject_GetAttrString(mod, "Get");
Py_DECREF(mod);
- if (fcn)
+ if (fcn) {
PyDict_SetItemString(d, "ma", fcn);
+ Py_DECREF(fcn);
+ }
}
return 0;
@@ -1170,8 +1177,9 @@ struct Object **BPY_pydriver_get_objects(IpoDriver *driver)
float BPY_pydriver_eval(IpoDriver *driver)
{
char *expr = NULL;
- PyObject *retval, *floatval;
+ PyObject *retval, *floatval, *bpy_ob = NULL;
float result = 0.0f; /* default return */
+ int setitem_retval;
if (!driver) return result;
@@ -1185,6 +1193,18 @@ float BPY_pydriver_eval(IpoDriver *driver)
}
}
+ if (driver->ob)
+ bpy_ob = Object_CreatePyObject(driver->ob);
+
+ if (!bpy_ob) {
+ Py_INCREF(Py_None);
+ bpy_ob = Py_None;
+ }
+
+ setitem_retval = EXPP_dict_set_item_str(bpy_pydriver_Dict, "self", bpy_ob);
+
+/* sds*/
+
if( !setup_armature_weakrefs()){
fprintf( stderr, "Oops - weakref dict setup\n");
return result;
@@ -1196,17 +1216,18 @@ float BPY_pydriver_eval(IpoDriver *driver)
if (retval == NULL) {
return pydriver_error(driver);
}
- else {
- floatval = PyNumber_Float(retval);
- Py_DECREF(retval);
- }
+
+ floatval = PyNumber_Float(retval);
+ Py_DECREF(retval);
if (floatval == NULL)
return pydriver_error(driver);
- else {
- result = (float)PyFloat_AsDouble(floatval);
- Py_DECREF(floatval);
- }
+
+ result = (float)PyFloat_AsDouble(floatval);
+ Py_DECREF(floatval);
+
+ /* remove 'self', since this dict is also used by py buttons */
+ if (setitem_retval == 0) PyDict_DelItemString(bpy_pydriver_Dict, "self");
/* all fine, make sure the "invalid expression" flag is cleared */
driver->flag &= ~IPO_DRIVER_FLAG_INVALID;