[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