Revision: 17352 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17352 Author: blendix Date: 2008-11-07 03:58:25 +0100 (Fri, 07 Nov 2008)
Log Message: ----------- RNA * Added more error prints for wrong definitions, for cases that would laters cause problems compiling or crash at runtime, and also made messages more clear. * Added some skeleton code for main/ID/mesh/vertex types for testing. * Added support for automatic arrays as collections using SDNA. * Changed how pointers to data work. Now they are always wrapped in a PointerRNA struct, which contains the data pointer and type, and also the data pointer and type of the ID datablock that this belongs to, since for example a vertex on it's own may not have enough information for some operations, it also needs the mesh. * Added some code for defining dependencies with RNA, and looking up data with paths like: scenes[0].objects["Cube"].data.verts[7].co. Note sure either will end up being used, this is experimental. http://wiki.blender.org/index.php/BlenderDev/Blender2.5/RNA Modified Paths: -------------- 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/SConscript 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.h branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c Added Paths: ----------- branches/blender2.5/blender/source/blender/makesrna/intern/rna_ID.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_dependency.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_main.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_mesh.c Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_access.h =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/RNA_access.h 2008-11-06 23:52:47 UTC (rev 17351) +++ branches/blender2.5/blender/source/blender/makesrna/RNA_access.h 2008-11-07 02:58:25 UTC (rev 17352) @@ -27,49 +27,90 @@ struct bContext; struct BlenderRNA; +struct StructRNA; struct PropertyRNA; -struct StructRNA; +struct PointerRNA; struct CollectionPropertyIterator; +struct Main; -/* Property */ +/* Pointer + * + * Currently only an RNA pointer to Main can be obtained, this + * should be extended to allow making other pointers as well. */ -void RNA_property_notify(struct PropertyRNA *prop, struct bContext *C, void *data); -int RNA_property_readonly(struct PropertyRNA *prop, struct bContext *C, void *data); +void RNA_pointer_main_get(struct Main *main, struct PointerRNA *r_ptr); -int RNA_property_boolean_get(struct PropertyRNA *prop, void *data); -void RNA_property_boolean_set(struct PropertyRNA *prop, void *data, int value); -int RNA_property_boolean_get_array(struct PropertyRNA *prop, void *data, int index); -void RNA_property_boolean_set_array(struct PropertyRNA *prop, void *data, int index, int value); +/* Property + * + * Access to struct properties. All this works with RNA pointers rather than + * direct pointers to the data. */ -int RNA_property_int_get(struct PropertyRNA *prop, void *data); -void RNA_property_int_set(struct PropertyRNA *prop, void *data, int value); -int RNA_property_int_get_array(struct PropertyRNA *prop, void *data, int index); -void RNA_property_int_set_array(struct PropertyRNA *prop, void *data, int index, int value); +int RNA_property_editable(struct PropertyRNA *prop, struct PointerRNA *ptr); +int RNA_property_evaluated(struct PropertyRNA *prop, struct PointerRNA *ptr); -float RNA_property_float_get(struct PropertyRNA *prop, void *data); -void RNA_property_float_set(struct PropertyRNA *prop, void *data, float value); -float RNA_property_float_get_array(struct PropertyRNA *prop, void *data, int index); -void RNA_property_float_set_array(struct PropertyRNA *prop, void *data, int index, float value); +void RNA_property_notify(struct PropertyRNA *prop, struct bContext *C, struct PointerRNA *ptr); -void RNA_property_string_get(struct PropertyRNA *prop, void *data, char *value); -int RNA_property_string_length(struct PropertyRNA *prop, void *data); -void RNA_property_string_set(struct PropertyRNA *prop, void *data, const char *value); +int RNA_property_boolean_get(struct PropertyRNA *prop, struct PointerRNA *ptr); +void RNA_property_boolean_set(struct PropertyRNA *prop, struct PointerRNA *ptr, int value); +int RNA_property_boolean_get_array(struct PropertyRNA *prop, struct PointerRNA *ptr, int index); +void RNA_property_boolean_set_array(struct PropertyRNA *prop, struct PointerRNA *ptr, int index, int value); -int RNA_property_enum_get(struct PropertyRNA *prop, void *data); -void RNA_property_enum_set(struct PropertyRNA *prop, void *data, int value); +int RNA_property_int_get(struct PropertyRNA *prop, struct PointerRNA *ptr); +void RNA_property_int_set(struct PropertyRNA *prop, struct PointerRNA *ptr, int value); +int RNA_property_int_get_array(struct PropertyRNA *prop, struct PointerRNA *ptr, int index); +void RNA_property_int_set_array(struct PropertyRNA *prop, struct PointerRNA *ptr, int index, int value); -void *RNA_property_pointer_get(struct PropertyRNA *prop, void *data); -void RNA_property_pointer_set(struct PropertyRNA *prop, void *data, void *value); -struct StructRNA *RNA_property_pointer_type(struct PropertyRNA *prop, void *data); +float RNA_property_float_get(struct PropertyRNA *prop, struct PointerRNA *ptr); +void RNA_property_float_set(struct PropertyRNA *prop, struct PointerRNA *ptr, float value); +float RNA_property_float_get_array(struct PropertyRNA *prop, struct PointerRNA *ptr, int index); +void RNA_property_float_set_array(struct PropertyRNA *prop, struct PointerRNA *ptr, int index, float value); -void RNA_property_collection_begin(struct PropertyRNA *prop, struct CollectionPropertyIterator *iter, void *data); +void RNA_property_string_get(struct PropertyRNA *prop, struct PointerRNA *ptr, char *value); +int RNA_property_string_length(struct PropertyRNA *prop, struct PointerRNA *ptr); +void RNA_property_string_set(struct PropertyRNA *prop, struct PointerRNA *ptr, const char *value); + +int RNA_property_enum_get(struct PropertyRNA *prop, struct PointerRNA *ptr); +void RNA_property_enum_set(struct PropertyRNA *prop, struct PointerRNA *ptr, int value); + +void RNA_property_pointer_get(struct PropertyRNA *prop, struct PointerRNA *ptr, struct PointerRNA *r_ptr); +void RNA_property_pointer_set(struct PropertyRNA *prop, struct PointerRNA *ptr, struct PointerRNA *ptr_value); +struct StructRNA *RNA_property_pointer_type(struct PropertyRNA *prop, struct PointerRNA *ptr); + +void RNA_property_collection_begin(struct PropertyRNA *prop, struct CollectionPropertyIterator *iter, struct PointerRNA *ptr); void RNA_property_collection_next(struct PropertyRNA *prop, struct CollectionPropertyIterator *iter); void RNA_property_collection_end(struct PropertyRNA *prop, struct CollectionPropertyIterator *iter); -void *RNA_property_collection_get(struct PropertyRNA *prop, struct CollectionPropertyIterator *iter); +void RNA_property_collection_get(struct PropertyRNA *prop, struct CollectionPropertyIterator *iter, struct PointerRNA *r_ptr); struct StructRNA *RNA_property_collection_type(struct PropertyRNA *prop, struct CollectionPropertyIterator *iter); -int RNA_property_collection_length(struct PropertyRNA *prop, void *data); -void *RNA_property_collection_lookup_int(struct PropertyRNA *prop, void *data, int key, struct StructRNA **type); -void *RNA_property_collection_lookup_string(struct PropertyRNA *prop, void *data, const char *key, struct StructRNA **type); +int RNA_property_collection_length(struct PropertyRNA *prop, struct PointerRNA *ptr); +int RNA_property_collection_lookup_int(struct PropertyRNA *prop, struct PointerRNA *ptr, int key, struct PointerRNA *r_ptr); +int RNA_property_collection_lookup_string(struct PropertyRNA *prop, struct PointerRNA *ptr, const char *key, struct PointerRNA *r_ptr); +/* Path + * + * Experimental method to refer to structs and properties with a string, + * using a syntax like: scenes[0].objects["Cube"].data.verts[7].co + * + * This provides a way to refer to RNA data while being detached from any + * particular pointers, which is useful in a number of applications, like + * UI code or Actions, though efficiency is a concern. */ + +char *RNA_path_append(const char *path, struct PropertyRNA *prop, int intkey, const char *strkey); +char *RNA_path_back(const char *path); + +int RNA_path_resolve(struct PointerRNA *ptr, const char *path, + struct PointerRNA *r_ptr, struct PropertyRNA **r_prop); + +/* Dependency + * + * Experimental code that will generate callbacks for each dependency + * between ID types. This may end up being useful for UI + * and evaluation code that needs to know such dependencies for correct + * redraws and re-evaluations. */ + +typedef void (*PropDependencyCallback)(void *udata, struct PointerRNA *from, struct PointerRNA *to); +void RNA_test_dependencies_cb(void *udata, struct PointerRNA *from, struct PointerRNA *to); + +void RNA_generate_dependencies(struct PointerRNA *mainptr, void *udata, PropDependencyCallback cb); + #endif /* RNA_ACCESS */ Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_define.h =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/RNA_define.h 2008-11-06 23:52:47 UTC (rev 17351) +++ branches/blender2.5/blender/source/blender/makesrna/RNA_define.h 2008-11-07 02:58:25 UTC (rev 17352) @@ -48,12 +48,13 @@ /* Struct */ struct StructRNA *RNA_def_struct(struct BlenderRNA *brna, const char *cname, const char *name); -void RNA_def_struct_sdna(struct StructRNA *rna, const char *structname); -void RNA_def_struct_name_property(struct StructRNA *rna, struct PropertyRNA *prop); +void RNA_def_struct_sdna(struct StructRNA *srna, const char *structname); +void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop); +void RNA_def_struct_flag(struct StructRNA *srna, int flag); /* Property */ -struct PropertyRNA *RNA_def_property(struct StructRNA *strct, const char *cname, int type, int subtype); +struct PropertyRNA *RNA_def_property(struct StructRNA *srna, const char *cname, int type, int subtype); void RNA_def_property_boolean_sdna(struct PropertyRNA *prop, const char *structname, const char *propname, int bit); void RNA_def_property_int_sdna(struct PropertyRNA *prop, const char *structname, const char *propname); @@ -61,10 +62,10 @@ void RNA_def_property_string_sdna(struct PropertyRNA *prop, const char *structname, const char *propname); void RNA_def_property_enum_sdna(struct PropertyRNA *prop, const char *structname, const char *propname); void RNA_def_property_pointer_sdna(struct PropertyRNA *prop, const char *structname, const char *propname); -void RNA_def_property_collection_sdna(struct PropertyRNA *prop, const char *structname, const char *propname); +void RNA_def_property_collection_sdna(struct PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname); +void RNA_def_property_flag(struct PropertyRNA *prop, int flag); void RNA_def_property_array(struct PropertyRNA *prop, int arraylength); -void RNA_def_property_access(struct PropertyRNA *prop, int editable, int evaluatable); void RNA_def_property_range(struct PropertyRNA *prop, double min, double max); void RNA_def_property_enum_items(struct PropertyRNA *prop, const struct PropertyEnumItem *item); @@ -83,14 +84,14 @@ void RNA_def_property_ui_text(struct PropertyRNA *prop, const char *name, const char *description); void RNA_def_property_ui_range(struct PropertyRNA *prop, double min, double max, double step, double precision); -void RNA_def_property_funcs(struct PropertyRNA *prop, char *notify, char *readonly); -void RNA_def_property_boolean_funcs(struct PropertyRNA *prop, char *get, char *set); -void RNA_def_property_int_funcs(struct PropertyRNA *prop, char *get, char *set); @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs