diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-03-16 11:53:35 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-03-16 11:53:35 +0300 |
commit | da18391ac48e3a08120563f1a8f5aef167999e63 (patch) | |
tree | 21df7eca1c66b87dacc257584f95bf96002b2b04 /source/blender/blenkernel | |
parent | 934c2a06fe9041b82b9b5d9f1bde95efbc2065c8 (diff) |
api function added for [#26481] Export to X3D of IndexedFaceSet should use X3D 's DEF USE mechanism
Object.is_modified(scene, 'PREVIEW') function for python exporters to check if any modifiers or shape keys are applied (weather the original mesh can be used for exporters).
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_object.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 3d32ba5a30a..065810089f1 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -136,6 +136,8 @@ int object_insert_ptcache(struct Object *ob); // void object_delete_ptcache(struct Object *ob, int index); struct KeyBlock *object_insert_shape_key(struct Scene *scene, struct Object *ob, const char *name, int from_mix); +int object_is_modified(struct Scene *scene, struct Object *ob); + void object_camera_matrix( struct RenderData *rd, struct Object *camera, int winx, int winy, short field_second, float winmat[][4], struct rctf *viewplane, float *clipsta, float *clipend, float *lens, float *ycor, diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 25354f2f239..9f2de5be84a 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -3061,3 +3061,24 @@ KeyBlock *object_insert_shape_key(Scene *scene, Object *ob, const char *name, in else return NULL; } +/* most important if this is modified it should _always_ return True, in certain + * cases false positives are hard to avoid (shape keys for eg) + */ +int object_is_modified(Scene *scene, Object *ob) +{ + int flag= 0; + + if(ob_get_key(ob)) { + flag |= eModifierMode_Render | eModifierMode_Render; + } + else { + ModifierData *md; + /* cloth */ + for(md=modifiers_getVirtualModifierList(ob); md && (flag != (eModifierMode_Render | eModifierMode_Realtime)); md=md->next) { + if((flag & eModifierMode_Render) == 0 && modifier_isEnabled(scene, md, eModifierMode_Render)) flag |= eModifierMode_Render; + if((flag & eModifierMode_Realtime) == 0 && modifier_isEnabled(scene, md, eModifierMode_Realtime)) flag |= eModifierMode_Realtime; + } + } + + return flag; +} |