Fixed and completed support for returning multiple values. This includes support for returning arrays, both fixed and dynamically sized. The way this is achieved is by storing an additional int value next to the dynamic parameter in the ParameterList stack which gets passed to the C function as an additional parameter. In the case of return parameters it is duty of the C function to set this int to the correct length value for the dynamic parameter (which makes sense). Note that for the dynamic output/return parameter it is assumed the function has allocated that memory (which gets freed automatically).
Also, I cleaned the makesrna's bridge function generation code a bit and renamed PROP_RETURN to PROP_OUTPUT, which represents better the reality now that there are multiple returns. The function now to mark multiple returns (outputs) is RNA_def_function_output.
For an example, look at Action.get_frame_range in rna_action_api.c, by the way Aligorith I removed the #ifdef for this function now that there's support for returning arrays, feel free to modify (the function seems to work).
- scene.render_data.frame_path(frame=num), returns the output path for rending images of video.
- scene.render_data.file_extension, readonly attribute, gives the extension ".jpg", ".mov" etc
- player support was guessing names, use the above functions to get the actual names used, accounting for #'s replacing numbers.
* Property update functions no longer get context, instead they get only
Main and Scene. The RNA api was intended to be as context-less as
possible, since it doesn't really matter who is changing the property,
everything that uses the property should be updated.
* There's still one exception case that use it now, screen operations
still depend on context too much. It also revealed a few places using
context where they shouldn't.
* Ideally Scene shouldn't be passed, but much of Blender still depends on
it, should be dropped when we try to support multiple scene editing.
Change was planned for a while, but need this now to be able to call
update without a context pointer.
* Removed ED_anim_dag_flush_update and ED_anim_object_flush_update. These
were wrapping DAG_* calls and were intended be used instead of them when
doing a DAG update from editors. That goes against the design in my opinion,
no matter who calls the DAG, that should update the editors correctly, so
any special checks in such functions for editors should be avoided.
* Driver RNA properties now do updates again, including DAG scene sorting,
text buttons no longer update as you type anymore, so this should be
safe I think.
* Remove scene.update() RNA function, all properties/functions should do this
automatically, if changing some property or calling a function/operator
does not do the correct update, that should be fixed.
* copied I/O scripts
* copied, modified rna_*_api.c and rna_*.c
I/O scripts not working yet due to slight BPY differences and RNA changes. Will fix them later.
Not merged changes:
* C unit testing integration, because it is clumsy
* scons cross-compiling, can be merged easily later
Wrapped the Keying Sets API with RNA Functions so that they can now be called from Py-Scripts. This will ultimately be useful for riggers to create Keying Sets which can get loaded up/created for animators to use after importing their rig.
I've created a demo for this, which can be found at:
http://www.pasteall.org/blend/552
Notes:
- Kazanbas, I've had to create a rna_scene_api.c here to hold some of the relevant functions. Hopefully this won't cause you too much pain when you do your next merge from 2.5 to your branch ;)
- I've noticed that there seem to be a few cases mentioned in the demo which don't totally work yet. I'll commit some fixes for those later.
Changing Scene.current_frame doesn't work in this case because it adds
a notifier.
Also added RNA_property_update call in pyrna_struct_setattro so that
notifiers are added when a property changes.
* Main.remove_object
* Scene.add_object
* Scene.remove_object
* Object.convert_to_triface
* Object.create_preview_mesh
- a small tweak in set_mesh (blenkernel/inter/mesh.c) to make it work on objects having data == NULL