[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21111] branches/blender2.5/blender/source /blender/python/intern/bpy_rna.c: modified patch from Arystanbek, allow assigning of mathutils matrix to an rna matrix
Campbell Barton
ideasman42 at gmail.com
Tue Jun 23 19:10:46 CEST 2009
Revision: 21111
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21111
Author: campbellbarton
Date: 2009-06-23 19:10:46 +0200 (Tue, 23 Jun 2009)
Log Message:
-----------
modified patch from Arystanbek, allow assigning of mathutils matrix to an rna matrix
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c 2009-06-23 17:06:46 UTC (rev 21110)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c 2009-06-23 17:10:46 UTC (rev 21111)
@@ -410,14 +410,29 @@
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 @@
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);
More information about the Bf-blender-cvs
mailing list