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:
authorJoshua Leung <aligorith@gmail.com>2009-11-23 05:27:52 +0300
committerJoshua Leung <aligorith@gmail.com>2009-11-23 05:27:52 +0300
commit8224dff9e24b71db5ba2099a9db782a1f241ad07 (patch)
tree6231ddde753c91c154c3d17da745adcc433fc463
parentacf837e3c5c59681b2c98910eb431e3c08f8878b (diff)
Bugfix - Hook Operators:
These now work for curves, nurbs, and lattices in addition to meshes again.
-rw-r--r--source/blender/editors/object/object_hook.c55
-rw-r--r--source/blender/editors/object/object_ops.c7
2 files changed, 46 insertions, 16 deletions
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index d97806cd806..a2feee54c8c 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -55,6 +55,7 @@
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
+#include "BKE_utildefines.h"
#include "RNA_define.h"
#include "RNA_access.h"
@@ -385,6 +386,22 @@ static void object_hook_select(Object *ob, HookModifierData *hmd)
else if(ob->type==OB_SURF) select_editcurve_hook(ob, hmd);
}
+/* special poll operators for hook operators */
+// TODO: check for properties window modifier context too as alternative?
+static int hook_op_edit_poll(bContext *C)
+{
+ Object *obedit= CTX_data_edit_object(C);
+
+ if (obedit) {
+ if (ED_operator_editmesh(C)) return 1;
+ if (ED_operator_editsurfcurve(C)) return 1;
+ if (ED_operator_editlattice(C)) return 1;
+ //if (ED_operator_editmball(C)) return 1;
+ }
+
+ return 0;
+}
+
static Object *add_hook_object_new(Scene *scene, Object *obedit)
{
Base *base, *basedit;
@@ -403,7 +420,6 @@ static Object *add_hook_object_new(Scene *scene, Object *obedit)
return ob;
}
-
static void add_hook_object(Scene *scene, Object *obedit, Object *ob, int mode)
{
ModifierData *md=NULL;
@@ -488,7 +504,7 @@ void OBJECT_OT_hook_add_selobj(wmOperatorType *ot)
/* api callbacks */
ot->exec= object_add_hook_selob_exec;
- ot->poll= ED_operator_editmesh;
+ ot->poll= hook_op_edit_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -514,7 +530,7 @@ void OBJECT_OT_hook_add_newobj(wmOperatorType *ot)
/* api callbacks */
ot->exec= object_add_hook_newob_exec;
- ot->poll= ED_operator_editmesh;
+ ot->poll= hook_op_edit_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -585,9 +601,9 @@ void OBJECT_OT_hook_remove(wmOperatorType *ot)
ot->description= "Remove a hook from the active object.";
/* api callbacks */
- ot->poll= ED_operator_editmesh;
ot->exec= object_hook_remove_exec;
ot->invoke= WM_menu_invoke;
+ ot->poll= hook_op_edit_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -607,7 +623,8 @@ static int object_hook_reset_exec(bContext *C, wmOperator *op)
if (ptr.data) { /* if modifier context is available, use that */
ob = ptr.id.data;
hmd= ptr.data;
- } else { /* use the provided property */
+ }
+ else { /* use the provided property */
ob = CTX_data_edit_object(C);
hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num);
}
@@ -617,7 +634,6 @@ static int object_hook_reset_exec(bContext *C, wmOperator *op)
}
/* reset functionality */
-
if(hmd->object) {
bPoseChannel *pchan= get_pose_channel(hmd->object->pose, hmd->subtarget);
@@ -646,12 +662,14 @@ void OBJECT_OT_hook_reset(wmOperatorType *ot)
{
PropertyRNA *prop;
+ /* identifiers */
ot->name= "Reset Hook";
ot->description= "Recalculate and and clear offset transformation.";
ot->idname= "OBJECT_OT_hook_reset";
- ot->poll= ED_operator_editmesh;
+ /* callbacks */
ot->exec= object_hook_reset_exec;
+ ot->poll= hook_op_edit_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -673,7 +691,8 @@ static int object_hook_recenter_exec(bContext *C, wmOperator *op)
if (ptr.data) { /* if modifier context is available, use that */
ob = ptr.id.data;
hmd= ptr.data;
- } else { /* use the provided property */
+ }
+ else { /* use the provided property */
ob = CTX_data_edit_object(C);
hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num);
}
@@ -683,7 +702,6 @@ static int object_hook_recenter_exec(bContext *C, wmOperator *op)
}
/* recenter functionality */
-
copy_m3_m4(bmat, ob->obmat);
invert_m3_m3(imat, bmat);
@@ -700,12 +718,14 @@ void OBJECT_OT_hook_recenter(wmOperatorType *ot)
{
PropertyRNA *prop;
+ /* identifiers */
ot->name= "Recenter Hook";
ot->description= "Set hook center to cursor position.";
ot->idname= "OBJECT_OT_hook_recenter";
- ot->poll= ED_operator_editmesh;
+ /* callbacks */
ot->exec= object_hook_recenter_exec;
+ ot->poll= hook_op_edit_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -728,7 +748,8 @@ static int object_hook_assign_exec(bContext *C, wmOperator *op)
if (ptr.data) { /* if modifier context is available, use that */
ob = ptr.id.data;
hmd= ptr.data;
- } else { /* use the provided property */
+ }
+ else { /* use the provided property */
ob = CTX_data_edit_object(C);
hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num);
}
@@ -760,12 +781,14 @@ void OBJECT_OT_hook_assign(wmOperatorType *ot)
{
PropertyRNA *prop;
+ /* identifiers */
ot->name= "Assign to Hook";
ot->description= "Assign the selected vertices to a hook.";
ot->idname= "OBJECT_OT_hook_assign";
- ot->poll= ED_operator_editmesh;
+ /* callbacks */
ot->exec= object_hook_assign_exec;
+ ot->poll= hook_op_edit_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -785,7 +808,8 @@ static int object_hook_select_exec(bContext *C, wmOperator *op)
if (ptr.data) { /* if modifier context is available, use that */
ob = ptr.id.data;
hmd= ptr.data;
- } else { /* use the provided property */
+ }
+ else { /* use the provided property */
ob = CTX_data_edit_object(C);
hmd = (HookModifierData *)BLI_findlink(&ob->modifiers, num);
}
@@ -795,7 +819,6 @@ static int object_hook_select_exec(bContext *C, wmOperator *op)
}
/* select functionality */
-
object_hook_select(ob, hmd);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data);
@@ -807,12 +830,14 @@ void OBJECT_OT_hook_select(wmOperatorType *ot)
{
PropertyRNA *prop;
+ /* identifiers */
ot->name= "Select Hook";
ot->description= "Selects effected vertices on mesh.";
ot->idname= "OBJECT_OT_hook_select";
- ot->poll= ED_operator_editmesh;
+ /* callbacks */
ot->exec= object_hook_select_exec;
+ ot->poll= hook_op_edit_poll;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index 44dc5b06ea8..fd66b564d53 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -227,6 +227,7 @@ void ED_keymap_object(wmKeyConfig *keyconf)
wmKeyMap *keymap;
wmKeyMapItem *kmi;
+ /* Objects, Regardless of Mode -------------------------------------------------- */
keymap= WM_keymap_find(keyconf, "Object Non-modal", 0, 0);
/* Note: this keymap works disregarding mode */
@@ -251,6 +252,7 @@ void ED_keymap_object(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "OBJECT_OT_center_set", CKEY, KM_PRESS, KM_ALT|KM_SHIFT|KM_CTRL, 0);
+ /* Object Mode ---------------------------------------------------------------- */
/* Note: this keymap gets disabled in non-objectmode, */
keymap= WM_keymap_find(keyconf, "Object Mode", 0, 0);
keymap->poll= object_mode_poll;
@@ -311,11 +313,14 @@ void ED_keymap_object(wmKeyConfig *keyconf)
WM_keymap_verify_item(keymap, "GROUP_OT_objects_add_active", GKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
WM_keymap_verify_item(keymap, "GROUP_OT_objects_remove_active", GKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0);
- /* Lattice */
+ /* Lattice -------------------------------------------------------------------- */
keymap= WM_keymap_find(keyconf, "Lattice", 0, 0);
keymap->poll= ED_operator_editlattice;
WM_keymap_add_item(keymap, "LATTICE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
+
+ /* menus */
+ WM_keymap_add_menu(keymap, "VIEW3D_MT_hook", HKEY, KM_PRESS, KM_CTRL, 0);
ED_object_generic_keymap(keyconf, keymap, TRUE);
}