diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-01-03 12:09:30 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-01-03 12:09:30 +0300 |
commit | 35422ac536467ccddcaa17014b87aa3ed041a068 (patch) | |
tree | 37a722c5a2f862ea47e9824e7554d3f87afae462 | |
parent | dacdfbe6f3c9f777d3b97d159baf382aeec82cdd (diff) |
rna/api
move Object.update(...) to ID.update(). since depsgraph update function can now be called on ID types.
also changed how update flags work.
obj.update(scene, 1, 1, 1)
... is now
obj.update({'OBJECT', 'DATA', 'TIME'})
Don't pass scene anymore. This was used for recalculating text but I think this is better dont in a different function.
-rw-r--r-- | release/scripts/op/io_scene_fbx/export_fbx.py | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 3 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_ID.c | 50 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_object_api.c | 29 |
4 files changed, 55 insertions, 31 deletions
diff --git a/release/scripts/op/io_scene_fbx/export_fbx.py b/release/scripts/op/io_scene_fbx/export_fbx.py index c92c6540f0f..0be6a01aef2 100644 --- a/release/scripts/op/io_scene_fbx/export_fbx.py +++ b/release/scripts/op/io_scene_fbx/export_fbx.py @@ -1907,7 +1907,7 @@ def save(operator, context, filepath="", if ob_arms_orig_rest: for ob_base in bpy.data.objects: if ob_base.type == 'ARMATURE': - ob_base.update(scene) + ob_base.update() # This causes the makeDisplayList command to effect the mesh scene.frame_set(scene.frame_current) @@ -2055,7 +2055,7 @@ def save(operator, context, filepath="", if ob_arms_orig_rest: for ob_base in bpy.data.objects: if ob_base.type == 'ARMATURE': - ob_base.update(scene) + ob_base.update() # This causes the makeDisplayList command to effect the mesh scene.frame_set(scene.frame_current) diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 1904e63c2ba..81a6b4a19e2 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -2463,6 +2463,9 @@ void DAG_id_tag_update(ID *id, short flag) } } } + else { + BKE_assert(!"invalid flag for this 'idtype'"); + } } } diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index 69342068a57..efef72913c9 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -30,6 +30,7 @@ #include "DNA_ID.h" #include "DNA_vfont_types.h" +#include "DNA_object_types.h" #include "WM_types.h" @@ -73,6 +74,7 @@ EnumPropertyItem id_type_items[] = { #include "BKE_library.h" #include "BKE_animsys.h" #include "BKE_material.h" +#include "BKE_depsgraph.h" /* name functions that ignore the first two ID characters */ void rna_ID_name_get(PointerRNA *ptr, char *value) @@ -248,6 +250,43 @@ ID *rna_ID_copy(ID *id) return NULL; } +static void rna_ID_update(ID *id, ReportList *reports, int flag) +{ + /* XXX, new function for this! */ + /*if (ob->type == OB_FONT) { + Curve *cu = ob->data; + freedisplist(&cu->disp); + BKE_text_to_curve(sce, ob, CU_LEFT); + }*/ + + if(flag == 0) { + /* pass */ + } + else { + /* ensure flag us correct for the type */ + switch(GS(id->name)) { + case ID_OB: + if(flag & ~(OB_RECALC_ALL)) { + BKE_report(reports, RPT_ERROR, "'refresh' incompatible with Object ID type"); + return; + } + break; + /* Could add particle updates later */ +/* case ID_PA: + if(flag & ~(OB_RECALC_ALL|PSYS_RECALC)) { + BKE_report(reports, RPT_ERROR, "'refresh' incompatible with ParticleSettings ID type"); + return; + } + break; */ + default: + BKE_report(reports, RPT_ERROR, "This ID type is not compatible with any 'refresh' options"); + return; + } + } + + DAG_id_tag_update(id, flag); +} + void rna_ID_user_clear(ID *id) { id->us= 0; /* dont save */ @@ -382,6 +421,12 @@ static void rna_def_ID(BlenderRNA *brna) FunctionRNA *func; PropertyRNA *prop, *parm; + static EnumPropertyItem update_flag_items[] = { + {OB_RECALC_OB, "OBJECT", 0, "Object", ""}, + {OB_RECALC_DATA, "DATA", 0, "Data", ""}, + {OB_RECALC_TIME, "TIME", 0, "Time", ""}, + {0, NULL, 0, NULL, NULL}}; + srna= RNA_def_struct(brna, "ID", NULL); RNA_def_struct_ui_text(srna, "ID", "Base type for datablocks, defining a unique name, linking from other libraries and garbage collection"); RNA_def_struct_flag(srna, STRUCT_ID|STRUCT_ID_REFCOUNT); @@ -433,6 +478,11 @@ static void rna_def_ID(BlenderRNA *brna) func= RNA_def_function(srna, "animation_data_clear", "BKE_free_animdata"); RNA_def_function_ui_description(func, "Clear animation on this this ID."); + func= RNA_def_function(srna, "update", "rna_ID_update"); + RNA_def_function_flag(func, FUNC_USE_REPORTS); + RNA_def_function_ui_description(func, "Tag the id to update its display data."); + parm= RNA_def_enum(func, "refresh", update_flag_items, 0, "", "Type of updates to perform."); + RNA_def_property_flag(parm, PROP_ENUM_FLAG); } static void rna_def_library(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c index 96f24c4ecc9..945d0dbb123 100644 --- a/source/blender/makesrna/intern/rna_object_api.c +++ b/source/blender/makesrna/intern/rna_object_api.c @@ -262,25 +262,6 @@ static void rna_Object_free_duplilist(Object *ob, ReportList *reports) } } -/* copied from old API Object.makeDisplayList (Object.c) - * use _ suffix because this exists for internal rna */ -static void rna_Object_update(Object *ob, Scene *sce, int object, int data, int time) -{ - int flag= 0; - - if (ob->type == OB_FONT) { - Curve *cu = ob->data; - freedisplist(&cu->disp); - BKE_text_to_curve(sce, ob, CU_LEFT); - } - - if(object) flag |= OB_RECALC_OB; - if(data) flag |= OB_RECALC_DATA; - if(time) flag |= OB_RECALC_TIME; - - DAG_id_tag_update(&ob->id, flag); -} - static PointerRNA rna_Object_shape_key_add(Object *ob, bContext *C, ReportList *reports, const char *name, int from_mix) { Scene *scene= CTX_data_scene(C); @@ -462,16 +443,6 @@ void RNA_api_object(StructRNA *srna) parm= RNA_def_int(func, "index", 0, 0, 0, "", "The face index, -1 when no intersection is found.", 0, 0); RNA_def_function_output(func, parm); - - /* DAG */ - func= RNA_def_function(srna, "update", "rna_Object_update"); - RNA_def_function_ui_description(func, "Tag the object to update its display data."); - parm= RNA_def_pointer(func, "scene", "Scene", "", ""); - RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL); - RNA_def_boolean(func, "object", 1, "", "Tag the object for updating"); - RNA_def_boolean(func, "data", 1, "", "Tag the objects display data for updating"); - RNA_def_boolean(func, "time", 1, "", "Tag the object time related data for updating"); - /* View */ func= RNA_def_function(srna, "is_visible", "rna_Object_is_visible"); RNA_def_function_ui_description(func, "Determine if object is visible in a given scene."); |