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

Brecht Van Lommel brecht at blender.org
Thu Aug 27 15:20:55 CEST 2009


Hi Arystanbek,

Thanks for implementing this, saves me quite some work. I looked over the
diffs and the implementation looks fine as well.

Brecht.

On Tue, Aug 25, 2009 at 7:06 PM, Arystanbek Dyussenov
<arystan.d at gmail.com>wrote:

> 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. @@
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
>


More information about the Bf-committers mailing list