diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 8dfb64d8b63..4505af65a0a 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -2163,6 +2163,7 @@ void object_handle_update(Object *ob) } else where_is_object(ob); + if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript((ID *)ob, SCRIPT_OBJECTUPDATE); } if(ob->recalc & OB_RECALC_DATA) { @@ -2228,6 +2229,7 @@ void object_handle_update(Object *ob) psys_get_modifier(ob, psys)->flag &= ~eParticleSystemFlag_psys_updated; } } + if (G.f & G_DOSCRIPTLINKS) BPY_do_pyscript((ID *)ob, SCRIPT_OBDATAUPDATE); } /* the no-group proxy case, we call update */ diff --git a/source/blender/makesdna/DNA_scriptlink_types.h b/source/blender/makesdna/DNA_scriptlink_types.h index 8a08d3f12c1..a21c67fc5e8 100644 --- a/source/blender/makesdna/DNA_scriptlink_types.h +++ b/source/blender/makesdna/DNA_scriptlink_types.h @@ -61,6 +61,9 @@ typedef struct ScriptLink { * RENDER script links for clean-up actions */ #define SCRIPT_POSTRENDER 32 +#define SCRIPT_OBJECTUPDATE 64 +#define SCRIPT_OBDATAUPDATE 128 + /* **************** SPACE HANDLERS ********************* */ /* these are special scriptlinks that can be assigned to * a given space in a given ScrArea to: diff --git a/source/blender/python/api2_2x/gen_utils.c b/source/blender/python/api2_2x/gen_utils.c index f05be1ba68b..780712dac7b 100644 --- a/source/blender/python/api2_2x/gen_utils.c +++ b/source/blender/python/api2_2x/gen_utils.c @@ -1,5 +1,5 @@ /* - * $Id: gen_utils.c 11932 2007-09-03 17:28:50Z stiv $ + * $Id$ * * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** * @@ -238,6 +238,10 @@ char *event_to_name( short event ) switch ( event ) { case SCRIPT_FRAMECHANGED: return "FrameChanged"; + case SCRIPT_OBJECTUPDATE: + return "ObjectUpdate"; + case SCRIPT_OBDATAUPDATE: + return "ObDataUpdate"; case SCRIPT_ONLOAD: return "OnLoad"; case SCRIPT_ONSAVE: @@ -406,6 +410,10 @@ PyObject *EXPP_getScriptLinks( ScriptLink * slink, PyObject * value, if( !strcmp( eventname, "FrameChanged" ) ) event = SCRIPT_FRAMECHANGED; + else if( !strcmp( eventname, "ObjectUpdate" ) ) + event = SCRIPT_OBJECTUPDATE; + else if( !strcmp( eventname, "ObDataUpdate" ) ) + event = SCRIPT_OBDATAUPDATE; else if( !strcmp( eventname, "Redraw" ) ) event = SCRIPT_REDRAW; else if( !strcmp( eventname, "Render" ) ) @@ -562,6 +570,10 @@ PyObject *EXPP_addScriptLink(ScriptLink *slink, PyObject *args, int is_scene) if( !strcmp( eventname, "FrameChanged" ) ) event = SCRIPT_FRAMECHANGED; + else if( !strcmp( eventname, "ObjectUpdate" ) ) + event = SCRIPT_OBJECTUPDATE; + else if( !strcmp( eventname, "ObDataUpdate" ) ) + event = SCRIPT_OBDATAUPDATE; else if( !strcmp( eventname, "Redraw" ) ) event = SCRIPT_REDRAW; else if( !strcmp( eventname, "Render" ) ) diff --git a/source/blender/src/buttons_script.c b/source/blender/src/buttons_script.c index 52e7be7c93e..c6d3522a8d7 100644 --- a/source/blender/src/buttons_script.c +++ b/source/blender/src/buttons_script.c @@ -268,7 +268,7 @@ void do_scriptbuts(unsigned short event) allqueue(REDRAWOOPS, 0); } -void draw_scriptlink(uiBlock *block, ScriptLink *script, int sx, int sy, int scene) +void draw_scriptlink(uiBlock *block, ScriptLink *script, int sx, int sy, int idcode) { char str[256]; @@ -276,10 +276,13 @@ void draw_scriptlink(uiBlock *block, ScriptLink *script, int sx, int sy, int sce strcpy(str, "FrameChanged%x 1|"); strcat(str, "Redraw%x 4|"); strcat(str, "Render%x 16|"); - if (scene) { + if (idcode==ID_SCE) { strcat(str, "OnLoad%x 2|"); strcat(str, "OnSave%x 8"); - } + } else { + strcat(str, "ObjectUpdate%x 64|"); + strcat(str, "ObDataUpdate%x 128"); + } uiBlockBeginAlign(block); uiDefButS(block, MENU, 1, str, (short)sx, (short)sy, 140, 19, &script->flag[script->actscript-1], 0, 0, 0, 0, "Script links for this event"); @@ -291,7 +294,7 @@ void draw_scriptlink(uiBlock *block, ScriptLink *script, int sx, int sy, int sce uiDefButS(block, NUM, REDRAWBUTSSCRIPT, str, (short)(sx+140), (short)sy-20,60,19, &script->actscript, 1, script->totscript, 0, 0, "Total / Active Script link (LeftMouse + Drag to change)"); - if (scene) { + if (idcode==ID_SCE) { if (script->totscript<32767) uiDefBut(block, BUT, B_SSCRIPT_ADD, "New", (short)(sx+240), (short)sy-20, 40, 19, 0, 0, 0, 0, 0, "Add a new Script link");