[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22772] branches/blender2.5/blender/source /blender: Implemented dynamic and multidimensional array support in RNA.

Arystanbek Dyussenov arystan.d at gmail.com
Tue Aug 25 19:06:36 CEST 2009


Revision: 22772
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22772
Author:   kazanbas
Date:     2009-08-25 19:06:36 +0200 (Tue, 25 Aug 2009)

Log Message:
-----------
Implemented dynamic and multidimensional array support in RNA.

Example code: http://www.pasteall.org/7332/c.
New API functions: http://www.pasteall.org/7330/c.

Maximum number of dimensions is currently limited to 3, but can be increased arbitrarily if needed.

What this means for ID property access:

* MeshFace.verts - dynamic array, size 3 or 4 depending on MFace.v4
* MeshTextureFace.uv - dynamic, 2-dimensional array, size depends on MFace.v4
* Object.matrix - 2-dimensional array

What this means for functions:

* more intuitive API possibility, for example:
  Mesh.add_vertices([(x, y, z), (x, y, z), ...])
  Mesh.add_faces([(1, 2, 3), (4, 5, 6), ...])

Python part is not complete yet, e.g. it is possible to:

MeshFace.verts = (1, 2, 3) # even if Mesh.verts is (1, 2, 3, 4) and vice-versa
MeshTextureFace.uv = [(0.0, 0.0)] * 4 # only if a corresponding MFace is a quad

but the following won't work:

MeshTextureFace.uv[3] = (0.0, 0.0) # setting uv[3] modifies MTFace.uv[1][0] instead of MTFace.uv[3]

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_ipo_utils.c
    branches/blender2.5/blender/source/blender/editors/animation/drivers.c
    branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
    branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_anim.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_templates.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_utils.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c
    branches/blender2.5/blender/source/blender/makesrna/RNA_access.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_define.h
    branches/blender2.5/blender/source/blender/makesrna/RNA_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.h

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/python/intern/bpy_array.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-08-25 17:05:04 UTC (rev 22771)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c	2009-08-25 17:06:36 UTC (rev 22772)
@@ -441,19 +441,19 @@
 			switch (RNA_property_type(prop)) 
 			{
 				case PROP_BOOLEAN:
-					if (RNA_property_array_length(prop))
+					if (RNA_property_array_length(&new_ptr, prop))
 						RNA_property_boolean_set_index(&new_ptr, prop, array_index, (int)value);
 					else
 						RNA_property_boolean_set(&new_ptr, prop, (int)value);
 					break;
 				case PROP_INT:
-					if (RNA_property_array_length(prop))
+					if (RNA_property_array_length(&new_ptr, prop))
 						RNA_property_int_set_index(&new_ptr, prop, array_index, (int)value);
 					else
 						RNA_property_int_set(&new_ptr, prop, (int)value);
 					break;
 				case PROP_FLOAT:
-					if (RNA_property_array_length(prop))
+					if (RNA_property_array_length(&new_ptr, prop))
 						RNA_property_float_set_index(&new_ptr, prop, array_index, value);
 					else
 						RNA_property_float_set(&new_ptr, prop, value);
@@ -1178,19 +1178,19 @@
 		switch (RNA_property_type(prop)) 
 		{
 			case PROP_BOOLEAN:
-				if (RNA_property_array_length(prop))
+				if (RNA_property_array_length(ptr, prop))
 					RNA_property_boolean_set_index(ptr, prop, array_index, (int)value);
 				else
 					RNA_property_boolean_set(ptr, prop, (int)value);
 				break;
 			case PROP_INT:
-				if (RNA_property_array_length(prop))
+				if (RNA_property_array_length(ptr, prop))
 					RNA_property_int_set_index(ptr, prop, array_index, (int)value);
 				else
 					RNA_property_int_set(ptr, prop, (int)value);
 				break;
 			case PROP_FLOAT:
-				if (RNA_property_array_length(prop))
+				if (RNA_property_array_length(ptr, prop))
 					RNA_property_float_set_index(ptr, prop, array_index, value);
 				else
 					RNA_property_float_set(ptr, prop, value);

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c	2009-08-25 17:05:04 UTC (rev 22771)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c	2009-08-25 17:06:36 UTC (rev 22772)
@@ -698,19 +698,19 @@
 	if (RNA_path_resolve(&id_ptr, path, &ptr, &prop)) {
 		switch (RNA_property_type(prop)) {
 			case PROP_BOOLEAN:
-				if (RNA_property_array_length(prop))
+				if (RNA_property_array_length(&ptr, prop))
 					value= (float)RNA_property_boolean_get_index(&ptr, prop, index);
 				else
 					value= (float)RNA_property_boolean_get(&ptr, prop);
 				break;
 			case PROP_INT:
-				if (RNA_property_array_length(prop))
+				if (RNA_property_array_length(&ptr, prop))
 					value= (float)RNA_property_int_get_index(&ptr, prop, index);
 				else
 					value= (float)RNA_property_int_get(&ptr, prop);
 				break;
 			case PROP_FLOAT:
-				if (RNA_property_array_length(prop))
+				if (RNA_property_array_length(&ptr, prop))
 					value= RNA_property_float_get_index(&ptr, prop, index);
 				else
 					value= RNA_property_float_get(&ptr, prop);

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_ipo_utils.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_ipo_utils.c	2009-08-25 17:05:04 UTC (rev 22771)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_ipo_utils.c	2009-08-25 17:06:36 UTC (rev 22772)
@@ -147,7 +147,7 @@
 			propname= (char *)RNA_property_ui_name(prop);
 			
 			/* Array Index - only if applicable */
-			if (RNA_property_array_length(prop)) {
+			if (RNA_property_array_length(&ptr, prop)) {
 				char c= RNA_property_array_item_char(prop, fcu->array_index);
 				
 				/* we need to write the index to a temp buffer (in py syntax) */

Modified: branches/blender2.5/blender/source/blender/editors/animation/drivers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/drivers.c	2009-08-25 17:05:04 UTC (rev 22771)
+++ branches/blender2.5/blender/source/blender/editors/animation/drivers.c	2009-08-25 17:06:36 UTC (rev 22772)
@@ -157,7 +157,7 @@
 		/* fill in current value for python */
 		if(type == DRIVER_TYPE_PYTHON) {
 			PropertyType proptype= RNA_property_type(prop);
-			int array= RNA_property_array_length(prop);
+			int array= RNA_property_array_length(&ptr, prop);
 			char *expression= fcu->driver->expression;
 			int val, maxlen= sizeof(fcu->driver->expression);
 			float fval;
@@ -241,7 +241,7 @@
 		
 		if (path) {
 			if (all) {
-				length= RNA_property_array_length(prop);
+				length= RNA_property_array_length(&ptr, prop);
 				
 				if (length) index= 0;
 				else length= 1;
@@ -303,7 +303,7 @@
 		
 		if (path) {
 			if (all) {
-				length= RNA_property_array_length(prop);
+				length= RNA_property_array_length(&ptr, prop);
 				
 				if(length) index= 0;
 				else length= 1;

Modified: branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyframing.c	2009-08-25 17:05:04 UTC (rev 22771)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyframing.c	2009-08-25 17:06:36 UTC (rev 22772)
@@ -503,19 +503,19 @@
 	
 	switch (RNA_property_type(prop)) {
 		case PROP_BOOLEAN:
-			if (RNA_property_array_length(prop))
+			if (RNA_property_array_length(ptr, prop))
 				value= (float)RNA_property_boolean_get_index(ptr, prop, index);
 			else
 				value= (float)RNA_property_boolean_get(ptr, prop);
 			break;
 		case PROP_INT:
-			if (RNA_property_array_length(prop))
+			if (RNA_property_array_length(ptr, prop))
 				value= (float)RNA_property_int_get_index(ptr, prop, index);
 			else
 				value= (float)RNA_property_int_get(ptr, prop);
 			break;
 		case PROP_FLOAT:
-			if (RNA_property_array_length(prop))
+			if (RNA_property_array_length(ptr, prop))
 				value= RNA_property_float_get_index(ptr, prop, index);
 			else
 				value= RNA_property_float_get(ptr, prop);
@@ -1313,7 +1313,7 @@
 		
 		if (path) {
 			if (all) {
-				length= RNA_property_array_length(prop);
+				length= RNA_property_array_length(&ptr, prop);
 				
 				if(length) index= 0;
 				else length= 1;
@@ -1396,7 +1396,7 @@
 		
 		if (path) {
 			if (all) {
-				length= RNA_property_array_length(prop);
+				length= RNA_property_array_length(&ptr, prop);
 				
 				if(length) index= 0;
 				else length= 1;

Modified: branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-08-25 17:05:04 UTC (rev 22771)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-08-25 17:06:36 UTC (rev 22772)
@@ -925,7 +925,7 @@
 				
 				RNA_id_pointer_create(ksp->id, &id_ptr);
 				if (RNA_path_resolve(&id_ptr, ksp->rna_path, &ptr, &prop) && prop)
-					arraylen= RNA_property_array_length(prop);
+					arraylen= RNA_property_array_length(&ptr, prop);
 			}
 			
 			/* we should do at least one step */
@@ -1048,7 +1048,7 @@
 					
 					RNA_id_pointer_create(cks->id, &id_ptr);
 					if (RNA_path_resolve(&id_ptr, path, &ptr, &prop) && prop)
-						arraylen= RNA_property_array_length(prop);
+						arraylen= RNA_property_array_length(&ptr, prop);
 				}
 				
 				/* for each possible index, perform operation 

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-08-25 17:05:04 UTC (rev 22771)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-08-25 17:06:36 UTC (rev 22772)
@@ -1089,7 +1089,7 @@
 		vec[0]= vec[1]= vec[2]= 0.0f;
 
 		if(RNA_property_type(prop) == PROP_FLOAT) {
-			tot= RNA_property_array_length(prop);
+			tot= RNA_property_array_length(&but->rnapoin, prop);
 			tot= MIN2(tot, 3);
 
 			for(a=0; a<tot; a++)
@@ -1123,7 +1123,7 @@
 		prop= but->rnaprop;
 
 		if(RNA_property_type(prop) == PROP_FLOAT) {
-			tot= RNA_property_array_length(prop);
+			tot= RNA_property_array_length(&but->rnapoin, prop);
 			tot= MIN2(tot, 3);
 
 			for(a=0; a<tot; a++)
@@ -1181,19 +1181,19 @@
 
 		switch(RNA_property_type(prop)) {
 			case PROP_BOOLEAN:
-				if(RNA_property_array_length(prop))
+				if(RNA_property_array_length(&but->rnapoin, prop))
 					value= RNA_property_boolean_get_index(&but->rnapoin, prop, but->rnaindex);
 				else
 					value= RNA_property_boolean_get(&but->rnapoin, prop);
 				break;
 			case PROP_INT:
-				if(RNA_property_array_length(prop))
+				if(RNA_property_array_length(&but->rnapoin, prop))
 					value= RNA_property_int_get_index(&but->rnapoin, prop, but->rnaindex);
 				else
 					value= RNA_property_int_get(&but->rnapoin, prop);
 				break;
 			case PROP_FLOAT:
-				if(RNA_property_array_length(prop))
+				if(RNA_property_array_length(&but->rnapoin, prop))
 					value= RNA_property_float_get_index(&but->rnapoin, prop, but->rnaindex);
 				else
 					value= RNA_property_float_get(&but->rnapoin, prop);
@@ -1245,19 +1245,19 @@
 		if(RNA_property_editable(&but->rnapoin, prop)) {
 			switch(RNA_property_type(prop)) {
 				case PROP_BOOLEAN:
-					if(RNA_property_array_length(prop))
+					if(RNA_property_array_length(&but->rnapoin, prop))
 						RNA_property_boolean_set_index(&but->rnapoin, prop, but->rnaindex, value);
 					else
 						RNA_property_boolean_set(&but->rnapoin, prop, value);
 					break;
 				case PROP_INT:
-					if(RNA_property_array_length(prop))
+					if(RNA_property_array_length(&but->rnapoin, prop))
 						RNA_property_int_set_index(&but->rnapoin, prop, but->rnaindex, value);
 					else
 						RNA_property_int_set(&but->rnapoin, prop, value);
 					break;
 				case PROP_FLOAT:
-					if(RNA_property_array_length(prop))
+					if(RNA_property_array_length(&but->rnapoin, prop))
 						RNA_property_float_set_index(&but->rnapoin, prop, but->rnaindex, value);
 					else
 						RNA_property_float_set(&but->rnapoin, prop, value);
@@ -2414,7 +2414,7 @@

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list