[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34300] trunk/blender/source/blender/ python/intern/bpy_rna_array.c: bugfix [#25578] assigning to multi-dimensional arrays fails
Campbell Barton
ideasman42 at gmail.com
Thu Jan 13 17:00:16 CET 2011
Revision: 34300
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34300
Author: campbellbarton
Date: 2011-01-13 16:00:14 +0000 (Thu, 13 Jan 2011)
Log Message:
-----------
bugfix [#25578] assigning to multi-dimensional arrays fails
Modified Paths:
--------------
trunk/blender/source/blender/python/intern/bpy_rna_array.c
Modified: trunk/blender/source/blender/python/intern/bpy_rna_array.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_rna_array.c 2011-01-13 14:38:05 UTC (rev 34299)
+++ trunk/blender/source/blender/python/intern/bpy_rna_array.c 2011-01-13 16:00:14 UTC (rev 34300)
@@ -206,6 +206,23 @@
return validate_array_length(rvalue, ptr, prop, lvalue_dim, totitem, error_prefix);
}
+static char *copy_value_single(PyObject *item, PointerRNA *ptr, PropertyRNA *prop, char *data, unsigned int item_size, int *index, ItemConvertFunc convert_item, RNA_SetIndexFunc rna_set_index)
+{
+ if (!data) {
+ char value[sizeof(int)];
+
+ convert_item(item, value);
+ rna_set_index(ptr, prop, *index, value);
+ *index = *index + 1;
+ }
+ else {
+ convert_item(item, data);
+ data += item_size;
+ }
+
+ return data;
+}
+
static char *copy_values(PyObject *seq, PointerRNA *ptr, PropertyRNA *prop, int dim, char *data, unsigned int item_size, int *index, ItemConvertFunc convert_item, RNA_SetIndexFunc rna_set_index)
{
unsigned int i;
@@ -218,19 +235,9 @@
data= copy_values(item, ptr, prop, dim + 1, data, item_size, index, convert_item, rna_set_index);
}
else {
- if (!data) {
- char value[sizeof(int)];
+ data= copy_value_single(item, ptr, prop, data, item_size, index, convert_item, rna_set_index);
+ }
- convert_item(item, value);
- rna_set_index(ptr, prop, *index, value);
- *index = *index + 1;
- }
- else {
- convert_item(item, data);
- data += item_size;
- }
- }
-
Py_DECREF(item);
}
@@ -302,12 +309,18 @@
index += arrayoffset;
- if (!validate_array(py, ptr, prop, lvalue_dim, check_item_type, item_type_str, &totitem, error_prefix))
- return 0;
+ if(lvalue_dim == totdim) { /* single item, assign directly */
+ copy_value_single(py, ptr, prop, NULL, 0, &index, convert_item, rna_set_index);
+ }
+ else {
+ if (!validate_array(py, ptr, prop, lvalue_dim, check_item_type, item_type_str, &totitem, error_prefix)) {
+ return 0;
+ }
- if (totitem)
- copy_values(py, ptr, prop, lvalue_dim, NULL, 0, &index, convert_item, rna_set_index);
-
+ if (totitem) {
+ copy_values(py, ptr, prop, lvalue_dim, NULL, 0, &index, convert_item, rna_set_index);
+ }
+ }
return 1;
}
More information about the Bf-blender-cvs
mailing list