[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18754] branches/blender2.5/blender/source /blender: 2.5

Ton Roosendaal ton at blender.org
Fri Jan 30 19:18:42 CET 2009


Revision: 18754
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18754
Author:   ton
Date:     2009-01-30 19:18:41 +0100 (Fri, 30 Jan 2009)

Log Message:
-----------
2.5

- Edit mesh: Add ctrl+click add vertex or extrude.
  I've made it not move the 3d cursor in that case.

Also found out tweak events conflicted with existing
keymap definitions; on tweak failure (= no mousemove) 
it now passes on the mouse event as 'mouse down' for 
the remaining keymaps to check.
These then actually respond to mouse-up instead of down...

The location in the keymaps where tweaks get generated
remains important. Examples:

1 - 'select' mouse-handler, operator return pass-through
2 - tweak handler checks, and makes tweak event
3 - grabber responds to tweak event

1 - ctrl+mouse tweak handler checks, makes tweak event,
    or passes event on
2 - if tweak event, it runs lasso
3 - else when passed on, ctrl+click extrude happens

In the first case, select works on mouse-down, immediate.
In the second case, extrude happens on mouse-release, even
though the keymap defined mouse-press.

This will make designing nice balanced keymaps still not
simple; especially because you can't tell operators to
pass on the key... although we can add the convention that
select-mouse operators always pass on to enable tweaks.

Still a good reason to wait with custom keymaps
when this is fully settled!

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
    branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c
    branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_select.c
    branches/blender2.5/blender/source/blender/editors/uvedit/uvedit_ops.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_windowmanager_types.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_keymap.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_markers.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -857,10 +857,10 @@
 	ListBase *keymap= WM_keymap_listbase(wm, "Markers", 0, 0);
 	
 	WM_keymap_verify_item(keymap, "MARKER_OT_add", MKEY, KM_PRESS, 0, 0);
-	WM_keymap_verify_item(keymap, "MARKER_OT_move", EVT_TWEAK_R, KM_ANY, 0, 0);
+	WM_keymap_verify_item(keymap, "MARKER_OT_move", EVT_TWEAK_S, KM_ANY, 0, 0);
 	WM_keymap_verify_item(keymap, "MARKER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
-	WM_keymap_verify_item(keymap, "MARKER_OT_mouseselect", RIGHTMOUSE, KM_PRESS, 0, 0);
-	WM_keymap_verify_item(keymap, "MARKER_OT_mouseselect_extend", RIGHTMOUSE, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_verify_item(keymap, "MARKER_OT_mouseselect", SELECTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_verify_item(keymap, "MARKER_OT_mouseselect_extend", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_verify_item(keymap, "MARKER_OT_border_select", BKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "MARKER_OT_select_all", AKEY, KM_PRESS, 0, 0);
 	WM_keymap_verify_item(keymap, "MARKER_OT_delete", XKEY, KM_PRESS, 0, 0);
@@ -868,6 +868,6 @@
 	WM_keymap_add_item(keymap, "MARKER_OT_move", GKEY, KM_PRESS, 0, 0);
 	
 	/* generates event, needs to be after select to work */
-	WM_keymap_verify_item(keymap, "WM_OT_tweak_gesture", RIGHTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
 	
 }

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_add.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -118,6 +118,8 @@
 	{10,9,11}
 };
 
+/* *************** add-click-mesh (extrude) operator ************** */
+
 static void get_view_aligned_coordinate(ViewContext *vc, float *fp, short mval[2])
 {
 	float dvec[3];
@@ -136,15 +138,19 @@
 	}
 }
 
-void add_click_mesh(bContext *C)
+static int dupli_extrude_cursor(bContext *C, wmOperator *op, wmEvent *event)
 {
 	ViewContext vc;
 	EditVert *eve, *v1;
 	float min[3], max[3];
 	int done= 0;
+	short mval[2];
 	
 	em_setup_viewcontext(C, &vc);
 	
+	mval[0]= event->x - vc.ar->winrct.xmin;
+	mval[1]= event->y - vc.ar->winrct.ymin;
+	
 	INIT_MINMAX(min, max);
 	
 	for(v1= vc.em->verts.first;v1; v1=v1->next) {
@@ -159,7 +165,6 @@
 		EditEdge *eed;
 		float vec[3], cent[3], mat[3][3];
 		float nor[3]= {0.0, 0.0, 0.0};
-		short mval[2];
 		
 		/* check for edges that are half selected, use for rotation */
 		done= 0;
@@ -220,27 +225,45 @@
 		float mat[3][3],imat[3][3];
 		float *curs= give_cursor(vc.scene, vc.v3d);
 		
+		VECCOPY(min, curs);
+		get_view_aligned_coordinate(&vc, min, mval);
+		
 		eve= addvertlist(vc.em, 0, NULL);
 
 		Mat3CpyMat4(mat, vc.obedit->obmat);
 		Mat3Inv(imat, mat);
 		
-		VECCOPY(eve->co, curs);
+		VECCOPY(eve->co, min);
+		Mat3MulVecfl(imat, eve->co);
 		VecSubf(eve->co, eve->co, vc.obedit->obmat[3]);
-
-		Mat3MulVecfl(imat, eve->co);
 		
 		eve->f= SELECT;
 	}
 	
 	//retopo_do_all();
+	WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, vc.obedit); 
+	DAG_object_flush_update(vc.scene, vc.obedit, OB_RECALC_DATA);
 	
-	BIF_undo_push("Add vertex/edge/face");
-	DAG_object_flush_update(vc.scene, vc.obedit, OB_RECALC_DATA);	
+	return OPERATOR_FINISHED;
+}
+
+void MESH_OT_dupli_extrude_cursor(wmOperatorType *ot)
+{
+	/* identifiers */
+	ot->name= "Duplicate or Extrude at 3D Cursor";
+	ot->idname= "MESH_OT_dupli_extrude_cursor";
 	
-
+	/* api callbacks */
+	ot->invoke= dupli_extrude_cursor;
+	ot->poll= ED_operator_editmesh;
+	
+	/* flags */
+	ot->flag= OPTYPE_REGISTER/*|OPTYPE_UNDO*/;
 }
 
+
+/* ********************** */
+
 /* selected faces get hidden edges */
 static void make_fgon(EditMesh *em, int make)
 {

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-01-30 18:18:41 UTC (rev 18754)
@@ -106,6 +106,7 @@
 void MESH_OT_add_primitive_monkey(struct wmOperatorType *ot);
 void MESH_OT_add_primitive_uv_sphere(struct wmOperatorType *ot);
 void MESH_OT_add_primitive_ico_sphere(struct wmOperatorType *ot);
+void MESH_OT_dupli_extrude_cursor(struct wmOperatorType *ot);
 
 /* ******************* editmesh_lib.c */
 void EM_stats_update(EditMesh *em);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -138,6 +138,7 @@
 	WM_operatortype_append(MESH_OT_extrude_mesh);
 	WM_operatortype_append(MESH_OT_edit_faces);
 	WM_operatortype_append(MESH_OT_separate);
+	WM_operatortype_append(MESH_OT_dupli_extrude_cursor);
 	
 }
 
@@ -181,6 +182,7 @@
 	WM_keymap_add_item(keymap, "MESH_OT_add_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "OBJECT_OT_mesh_add", AKEY, KM_PRESS, KM_SHIFT, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_separate", PKEY, KM_PRESS, KM_SHIFT, 0);
+	WM_keymap_add_item(keymap, "MESH_OT_dupli_extrude_cursor", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
 	
 	
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/space_action/action_ops.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -140,7 +140,7 @@
 	WM_keymap_add_item(keymap, "ACT_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
 	
 	/* generates event, needs to be after select to work */
-	WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
 		
 	/* transform system */
 	transform_keymap_for_space(wm, keymap, SPACE_ACTION);

Modified: branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -187,7 +187,7 @@
 	//WM_keymap_add_item(keymap, "GRAPHEDIT_OT_view_all", HOMEKEY, KM_PRESS, 0, 0);
 	
 	/* generates event, needs to be after select to work */
-	WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
 
 	/* transform system */
 	transform_keymap_for_space(wm, keymap, SPACE_IPO);

Modified: branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/space_node/node_ops.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -74,8 +74,8 @@
 	WM_keymap_add_item(keymap, "NODE_OT_delete_selection", XKEY, KM_PRESS, 0, 0);
 	
 	/* generates event, needs to be after select to work */
-	WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", ACTIONMOUSE, KM_PRESS, 0, 0);
-	WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_tweak(keymap, ACTIONMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
 	
 	transform_keymap_for_space(wm, keymap, SPACE_NODE);
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/space_sequencer/sequencer_ops.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -151,7 +151,7 @@
 	
 	WM_keymap_verify_item(keymap, "ANIM_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0);
 
-	WM_keymap_add_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);
+	WM_keymap_tweak(keymap, SELECTMOUSE, KM_PRESS, 0, 0);
 
 	transform_keymap_for_space(wm, keymap, SPACE_SEQ);
 }

Modified: branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-01-30 16:45:25 UTC (rev 18753)
+++ branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c	2009-01-30 18:18:41 UTC (rev 18754)
@@ -153,8 +153,8 @@
 	WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
 	RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0)->ptr, "type", 1);
 	WM_keymap_add_item(keymap, "VIEW3D_OT_borderselect", BKEY, KM_PRESS, 0, 0);
-	WM_keymap_add_item(keymap, "VIEW3D_OT_lasso_select", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
-	RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_lasso_select", LEFTMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0)->ptr, "type", 1);
+	WM_keymap_add_item(keymap, "VIEW3D_OT_lasso_select", EVT_TWEAK_A, KM_ANY, KM_CTRL, 0);
+	RNA_enum_set(WM_keymap_add_item(keymap, "VIEW3D_OT_lasso_select", EVT_TWEAK_A, KM_ANY, KM_SHIFT|KM_CTRL, 0)->ptr, "type", 1);
 	WM_keymap_add_item(keymap, "VIEW3D_OT_circle_select", CKEY, KM_PRESS, 0, 0);
 	
 	WM_keymap_add_item(keymap, "VIEW3D_OT_clipping", BKEY, KM_PRESS, KM_ALT, 0);
@@ -182,7 +182,9 @@
 	transform_keymap_for_space(wm, keymap, SPACE_VIEW3D);
 
 	/* generates event, in end to make select work */
-	WM_keymap_verify_item(keymap, "WM_OT_tweak_gesture", SELECTMOUSE, KM_PRESS, 0, 0);

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list