diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-04-05 00:02:43 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-04-05 00:38:57 +0300 |
commit | 82b0a9e36900c8aeb374078bd4cb3a7d7f8295e6 (patch) | |
tree | a3fc9e26f72de53c47de2637e52164a24a875f6f /source/blender/python/intern/bpy_rna_driver.c | |
parent | 65f279b7705a14ffdbd79f1835504344af40c283 (diff) |
PyDriver support for all RNA property types
Support for driver variables that don't resolve to numbers, eg:
objects, bones, curves... etc.
Without this, Python expressions to access this data needed to use an absolute path from `bpy.data`,
however this is inconvenient, breaks easily (based on naming) and wouldn't set the dependencies correctly.
Diffstat (limited to 'source/blender/python/intern/bpy_rna_driver.c')
-rw-r--r-- | source/blender/python/intern/bpy_rna_driver.c | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/source/blender/python/intern/bpy_rna_driver.c b/source/blender/python/intern/bpy_rna_driver.c new file mode 100644 index 00000000000..482508a8d85 --- /dev/null +++ b/source/blender/python/intern/bpy_rna_driver.c @@ -0,0 +1,79 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/python/intern/bpy_rna_driver.c + * \ingroup pythonintern + * + * This file defines utility functions that use the RNA API, from PyDrivers. + */ + +#include <Python.h> + +#include "MEM_guardedalloc.h" + +#include "BLI_utildefines.h" + +#include "BKE_fcurve.h" + +#include "RNA_access.h" + +#include "bpy_rna.h" + +#include "bpy_rna_driver.h" /* own include */ + + +/** + * A version of #driver_get_variable_value which returns a PyObject. + */ +PyObject *pyrna_driver_get_variable_value( + struct ChannelDriver *driver, struct DriverTarget *dtar) +{ + PyObject *driver_arg = NULL; + PointerRNA ptr; + PropertyRNA *prop = NULL; + int index; + + if (driver_get_variable_property(driver, dtar, &ptr, &prop, &index)) { + if (prop) { + if (index != -1) { + if (index < RNA_property_array_length(&ptr, prop) && index >= 0) { + /* object, property & index */ + driver_arg = pyrna_array_index(&ptr, prop, index); + } + else { + /* out of range, pass */ + } + } + else { + /* object & property */ + driver_arg = pyrna_prop_to_py(&ptr, prop); + } + } + else { + /* object only */ + driver_arg = pyrna_struct_CreatePyObject(&ptr); + } + } + else { + /* can't resolve path, pass */ + } + + return driver_arg; +} |