[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