[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