Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-01-03 12:09:30 +0300
committerCampbell Barton <ideasman42@gmail.com>2011-01-03 12:09:30 +0300
commit35422ac536467ccddcaa17014b87aa3ed041a068 (patch)
tree37a722c5a2f862ea47e9824e7554d3f87afae462
parentdacdfbe6f3c9f777d3b97d159baf382aeec82cdd (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.py4
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c3
-rw-r--r--source/blender/makesrna/intern/rna_ID.c50
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c29
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.");