[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32117] trunk/blender/source/blender/ python/intern/bpy_rna.c: py/ rna keyframe functions can now key longer paths if called from an ID block.

Ralf Hölzemer r.hoelzemer at googlemail.com
Sun Sep 26 15:09:34 CEST 2010


Hi Campbell,

this commit introduced a small build problem on launchpad.
See https://projects.blender.org/tracker/index.php?func=detail&aid=24003&group_id=9&atid=127
for the details.

2010/9/25 Campbell Barton <ideasman42 at gmail.com>:
> Revision: 32117
>          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32117
> Author:   campbellbarton
> Date:     2010-09-25 12:11:36 +0200 (Sat, 25 Sep 2010)
>
> Log Message:
> -----------
> py/rna keyframe functions can now key longer paths if called from an ID block.
> eg, bpy.context.object.keyframe_insert("soft_body.plastic")
>
> Modified Paths:
> --------------
>    trunk/blender/source/blender/python/intern/bpy_rna.c
>
> Modified: trunk/blender/source/blender/python/intern/bpy_rna.c
> ===================================================================
> --- trunk/blender/source/blender/python/intern/bpy_rna.c        2010-09-25 08:31:58 UTC (rev 32116)
> +++ trunk/blender/source/blender/python/intern/bpy_rna.c        2010-09-25 10:11:36 UTC (rev 32117)
> @@ -1979,26 +1979,46 @@
>  static int pyrna_struct_anim_args_parse(PointerRNA *ptr, const char *error_prefix, const char *path,
>        char **path_full, int *index)
>  {
> +       const int is_idbase= RNA_struct_is_ID(ptr->type);
>        PropertyRNA *prop;
> +       PointerRNA r_ptr;
>
>        if (ptr->data==NULL) {
>                PyErr_Format(PyExc_TypeError, "%.200s this struct has no data, can't be animated", error_prefix);
>                return -1;
>        }
>
> -       prop = RNA_struct_find_property(ptr, path);
> -
> +       /* full paths can only be given from ID base */
> +       if(is_idbase) {
> +               int r_index= -1;
> +               if(RNA_path_resolve_full(ptr, path, &r_ptr, &prop, &r_index)==0) {
> +                       prop= NULL;
> +               }
> +               else if(r_index != -1) {
> +                       PyErr_Format(PyExc_ValueError, "%.200s path includes index, must be a separate argument", error_prefix, path);
> +                       return -1;
> +               }
> +               else if(ptr->id.data != r_ptr.id.data) {
> +                       PyErr_Format(PyExc_ValueError, "%.200s path spans ID blocks", error_prefix, path);
> +                       return -1;
> +               }
> +       }
> +    else {
> +               prop = RNA_struct_find_property(ptr, path);
> +               r_ptr= *ptr;
> +    }
> +
>        if (prop==NULL) {
>                PyErr_Format( PyExc_TypeError, "%.200s property \"%s\" not found", error_prefix, path);
>                return -1;
>        }
>
> -       if (!RNA_property_animateable(ptr, prop)) {
> +       if (!RNA_property_animateable(&r_ptr, prop)) {
>                PyErr_Format(PyExc_TypeError, "%.200s property \"%s\" not animatable", error_prefix, path);
>                return -1;
>        }
>
> -       if(RNA_property_array_check(ptr, prop) == 0) {
> +       if(RNA_property_array_check(&r_ptr, prop) == 0) {
>                if((*index) == -1) {
>                        *index= 0;
>                }
> @@ -2008,19 +2028,24 @@
>                }
>        }
>        else {
> -               int array_len= RNA_property_array_length(ptr, prop);
> +               int array_len= RNA_property_array_length(&r_ptr, prop);
>                if((*index) < -1 || (*index) >= array_len) {
>                        PyErr_Format( PyExc_TypeError, "%.200s index out of range \"%s\", given %d, array length is %d", error_prefix, path, *index, array_len);
>                        return -1;
>                }
>        }
>
> -       *path_full= RNA_path_from_ID_to_property(ptr, prop);
> -
> -       if (*path_full==NULL) {
> -               PyErr_Format( PyExc_TypeError, "%.200s could not make path to \"%s\"", error_prefix, path);
> -               return -1;
> +       if(is_idbase) {
> +               *path_full= BLI_strdup(path);
>        }
> +       else {
> +               *path_full= RNA_path_from_ID_to_property(&r_ptr, prop);
> +
> +               if (*path_full==NULL) {
> +                       PyErr_Format( PyExc_TypeError, "%.200s could not make path to \"%s\"", error_prefix, path);
> +                       return -1;
> +               }
> +       }
>
>        return 0;
>  }
>
>
> _______________________________________________
> 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