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
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-06-23 21:10:46 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-06-23 21:10:46 +0400
commitdd493f71bee1896823b50c68fb8f96ecf7dd959c (patch)
tree6b1dc2cf89c37641fe9d403d485c881d3bd04151 /source
parentaf3f862480cfa843f07fc9c16ddaf1f4fd877ae2 (diff)
modified patch from Arystanbek, allow assigning of mathutils matrix to an rna matrix
Diffstat (limited to 'source')
-rw-r--r--source/blender/python/intern/bpy_rna.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 70ccd4f58c9..e91b96d6f26 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -410,14 +410,29 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v
if (len > 0) {
PyObject *item;
+ int py_len = -1;
int i;
- if (!PySequence_Check(value)) {
+
+#ifdef USE_MATHUTILS
+ if(MatrixObject_Check(value)) {
+ MatrixObject *mat = (MatrixObject*)value;
+ if(!Matrix_ReadCallback(mat))
+ return -1;
+
+ py_len = mat->rowSize * mat->colSize;
+ } else // continue...
+#endif
+ if (PySequence_Check(value)) {
+ py_len= (int)PySequence_Length(value);
+ }
+ else {
PyErr_SetString(PyExc_TypeError, "expected a python sequence type assigned to an RNA array.");
return -1;
}
+ /* done getting the length */
- if ((int)PySequence_Length(value) != len) {
+ if (py_len != len) {
PyErr_SetString(PyExc_AttributeError, "python sequence length did not match the RNA array.");
return -1;
}
@@ -484,14 +499,21 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyObject *v
else param_arr = MEM_mallocN(sizeof(float) * len, "pyrna float array");
-
- /* collect the variables */
- for (i=0; i<len; i++) {
- item = PySequence_GetItem(value, i);
- param_arr[i] = (float)PyFloat_AsDouble(item); /* deal with any errors later */
- Py_DECREF(item);
+#ifdef USE_MATHUTILS
+ if(MatrixObject_Check(value) && RNA_property_subtype(prop) == PROP_MATRIX) {
+ MatrixObject *mat = (MatrixObject*)value;
+ memcpy(param_arr, mat->contigPtr, sizeof(float) * len);
+ } else // continue...
+#endif
+ {
+ /* collect the variables */
+ for (i=0; i<len; i++) {
+ item = PySequence_GetItem(value, i);
+ param_arr[i] = (float)PyFloat_AsDouble(item); /* deal with any errors later */
+ Py_DECREF(item);
+ }
}
-
+
if (PyErr_Occurred()) {
if(data==NULL)
MEM_freeN(param_arr);