[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24798] trunk/blender/source/blender/ editors/object: Bugfix - Hook Operators:

Joshua Leung aligorith at gmail.com
Mon Nov 23 03:28:26 CET 2009


Revision: 24798
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24798
Author:   aligorith
Date:     2009-11-23 03:27:52 +0100 (Mon, 23 Nov 2009)

Log Message:
-----------
Bugfix - Hook Operators:

These now work for curves, nurbs, and lattices in addition to meshes again.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_hook.c
    trunk/blender/source/blender/editors/object/object_ops.c

Modified: trunk/blender/source/blender/editors/object/object_hook.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_hook.c	2009-11-23 01:10:47 UTC (rev 24797)
+++ trunk/blender/source/blender/editors/object/object_hook.c	2009-11-23 02:27:52 UTC (rev 24798)
@@ -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 @@
 	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 @@
 	return ob;
 }
 
-
 static void add_hook_object(Scene *scene, Object *obedit, Object *ob, int mode)
 {
 	ModifierData *md=NULL;
@@ -488,7 +504,7 @@
 	
 	/* 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 @@
 	
 	/* 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 @@
 	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 @@
 	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 @@
 	}
 	
 	/* reset functionality */
-	
 	if(hmd->object) {
 		bPoseChannel *pchan= get_pose_channel(hmd->object->pose, hmd->subtarget);
 		
@@ -646,12 +662,14 @@
 {
 	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 @@
 	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 @@
 	}
 	
 	/* recenter functionality */
-	
 	copy_m3_m4(bmat, ob->obmat);
 	invert_m3_m3(imat, bmat);
 	
@@ -700,12 +718,14 @@
 {
 	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 @@
 	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 @@
 {
 	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 @@
 	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 @@
 	}
 	
 	/* select functionality */
-	
 	object_hook_select(ob, hmd);
 	
 	WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data);
@@ -807,12 +830,14 @@
 {
 	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;

Modified: trunk/blender/source/blender/editors/object/object_ops.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_ops.c	2009-11-23 01:10:47 UTC (rev 24797)
+++ trunk/blender/source/blender/editors/object/object_ops.c	2009-11-23 02:27:52 UTC (rev 24798)
@@ -227,6 +227,7 @@
 	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 @@
 	
 	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 @@
 	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);
 }





More information about the Bf-blender-cvs mailing list