From 7af9e824bfc3a2ad10843e451a1cb15a266164ca Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Mon, 3 Mar 2008 03:21:25 +0000 Subject: [PATCH] * Bugfix #8426: certain hooks options segfaulted This was caused by my previous commit for add_hook. * Also, removed a compiler warning in the Python code --- source/blender/python/api2_2x/Modifier.c | 17 ++++++++++- source/blender/python/api2_2x/Scene.c | 1 + source/blender/src/editobject.c | 39 ++++++++++++------------ 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/source/blender/python/api2_2x/Modifier.c b/source/blender/python/api2_2x/Modifier.c index 57f09332c03..f965bfee91b 100644 --- a/source/blender/python/api2_2x/Modifier.c +++ b/source/blender/python/api2_2x/Modifier.c @@ -1,5 +1,5 @@ /* - * $Id: Modifier.c 12840 2007-12-11 01:58:22Z khughes $ + * $Id$ * * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** * @@ -44,6 +44,7 @@ #include "BLI_blenlib.h" #include "BLI_arithb.h" #include "MEM_guardedalloc.h" +#include "BDR_editobject.h" #include "butspace.h" #include "blendef.h" #include "mydevice.h" @@ -1352,6 +1353,18 @@ static PyObject *ModSeq_moveDown( BPy_ModSeq * self, BPy_Modifier *value ) Py_RETURN_NONE; } + +/* quick hack for ZanQdo: add new hook modifier for selected verts */ +static PyObject *ModSeq_ZanQdoHack(BPy_ModSeq *self) +{ + /* this should add the hook (assumes that modifier stack is on same ob!) */ + if ((self) && (G.obedit) && (self->object==G.obedit)) { + add_hook(1); + } + + Py_RETURN_NONE; +} + /*****************************************************************************/ /* Python BPy_ModSeq methods table: */ /*****************************************************************************/ @@ -1365,6 +1378,8 @@ static PyMethodDef BPy_ModSeq_methods[] = { "(modifier) - Move a modifier up in stack"}, {"moveDown", ( PyCFunction ) ModSeq_moveDown, METH_O, "(modifier) - Move a modifier down in stack"}, + {"ZanQdoHack", (PyCFunction)ModSeq_ZanQdoHack, METH_NOARGS, + "while in editmode, adds a hook for the selected verts (adds new modifier, and deselects object)"}, {NULL, NULL, 0, NULL} }; diff --git a/source/blender/python/api2_2x/Scene.c b/source/blender/python/api2_2x/Scene.c index aa229801188..ebf50d7dfde 100644 --- a/source/blender/python/api2_2x/Scene.c +++ b/source/blender/python/api2_2x/Scene.c @@ -42,6 +42,7 @@ struct View3D; #include "DNA_screen_types.h" #include "DNA_userdef_types.h" /* U.userdefs */ #include "DNA_object_types.h" /* SceneObSeq_new */ +#include "BKE_armature.h" #include "BKE_depsgraph.h" #include "BKE_library.h" #include "BKE_object.h" diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c index a98020aea35..821be0b07e4 100644 --- a/source/blender/src/editobject.c +++ b/source/blender/src/editobject.c @@ -634,17 +634,33 @@ int hook_getIndexArray(int *tot, int **indexar, char *name, float *cent_r) void add_hook_menu(void) { - ModifierData *md = NULL; - HookModifierData *hmd = NULL; - Object *ob=NULL; int mode; + if(G.obedit==NULL) return; + if(modifiers_findByType(G.obedit, eModifierType_Hook)) mode= pupmenu("Hooks %t|Add, To New Empty %x1|Add, To Selected Object %x2|Remove... %x3|Reassign... %x4|Select... %x5|Clear Offset...%x6"); else mode= pupmenu("Hooks %t|Add, New Empty %x1|Add, To Selected Object %x2"); if(mode<1) return; + + /* do operations */ + add_hook(mode); + + allqueue(REDRAWVIEW3D, 0); + allqueue(REDRAWBUTSOBJECT, 0); + + BIF_undo_push("Add hook"); +} + +void add_hook(int mode) +{ + ModifierData *md = NULL; + HookModifierData *hmd = NULL; + Object *ob=NULL; + + if(G.obedit==NULL) return; /* preconditions */ if(mode==2) { /* selected object */ @@ -708,23 +724,6 @@ void add_hook_menu(void) ob= hmd->object; } - /* do operations */ - add_hook(mode); - - allqueue(REDRAWVIEW3D, 0); - allqueue(REDRAWBUTSOBJECT, 0); - - BIF_undo_push("Add hook"); -} - -void add_hook(int mode) -{ - ModifierData *md = NULL; - HookModifierData *hmd = NULL; - Object *ob=NULL; - - if(G.obedit==NULL) return; - /* do it, new hooks or reassign */ if(mode==1 || mode==2 || mode==4) { float cent[3];