diff options
author | Martin Poirier <theeth@yahoo.com> | 2010-01-26 23:43:27 +0300 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2010-01-26 23:43:27 +0300 |
commit | 586af8ca479ad22e59ef3a45694096f8a5e16405 (patch) | |
tree | 97d50b355a58adaf42f8f020191fd960daee5287 /source/blender/python/intern | |
parent | b7405ce98f1a97226735aff9a3b78a96ec9f5fac (diff) |
Properties for macro operator call in python.
Dicts are converted to operator properties like this:
bpy.ops.armature.extrude_forked(TRANSFORM_OT_translate={"value":(2,0,1)})
Note that this doesn't work quite well if one operator is twice in the same macro, but that's a problem at the RNA level too. I'll have to deal with that eventually.
Diffstat (limited to 'source/blender/python/intern')
-rw-r--r-- | source/blender/python/intern/bpy_operator.c | 4 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 6 |
2 files changed, 7 insertions, 3 deletions
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index b98dab1c5c4..bdd3255ccea 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -83,9 +83,7 @@ static PyObject *pyop_call( PyObject * self, PyObject * args) error_val= -1; } else { - /* WM_operator_properties_create(&ptr, opname); */ - /* Save another lookup */ - RNA_pointer_create(NULL, ot->srna, NULL, &ptr); + WM_operator_properties_create_ptr(&ptr, ot); if(kw && PyDict_Size(kw)) error_val= pyrna_pydict_to_props(&ptr, kw, 0, "Converting py args to operator properties: "); diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 8370884c0a9..9c9192db1be 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -785,6 +785,12 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v StructRNA *ptype= RNA_property_pointer_type(ptr, prop); int flag = RNA_property_flag(prop); + /* if property is an OperatorProperties pointer and value is a map, forward back to pyrna_pydict_to_props */ + if (RNA_struct_is_a(ptype, &RNA_OperatorProperties) && PyDict_Check(value)) { + PointerRNA opptr = RNA_property_pointer_get(ptr, prop); + return pyrna_pydict_to_props(&opptr, value, 0, error_prefix); + } + if(!BPy_StructRNA_Check(value) && value != Py_None) { PyErr_Format(PyExc_TypeError, "%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(ptype)); return -1; |