[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36450] trunk/blender: =trunk=

Joseph Eagar joeedh at gmail.com
Tue May 3 03:48:18 CEST 2011


Revision: 36450
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36450
Author:   joeedh
Date:     2011-05-03 01:48:15 +0000 (Tue, 03 May 2011)
Log Message:
-----------
=trunk=
Recommitted eltopo collision code (but disabled by default)
with Genscher's permission.

To use, you need to install liblapack and libblas

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_userpref.py
    trunk/blender/source/blender/editors/mesh/loopcut.c
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    trunk/blender/source/blender/editors/transform/transform.c
    trunk/blender/source/blender/editors/transform/transform_ops.c
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h
    trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
    trunk/blender/source/blender/makesrna/intern/rna_userdef.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_userpref.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_userpref.py	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/release/scripts/startup/bl_ui/space_userpref.py	2011-05-03 01:48:15 UTC (rev 36450)
@@ -795,6 +795,9 @@
 
         sub.separator()
 
+        sub.label(text="Loop Cut:")
+        sub.prop(inputs, "loopcut_finish_on_release")
+        
         sub.label(text="Orbit Style:")
         sub.row().prop(inputs, "view_rotate_method", expand=True)
 

Modified: trunk/blender/source/blender/editors/mesh/loopcut.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/loopcut.c	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/editors/mesh/loopcut.c	2011-05-03 01:48:15 UTC (rev 36450)
@@ -100,6 +100,7 @@
 
 	int extend;
 	int do_cut;
+	wmTimer *timer;
 } tringselOpData;
 
 /* modal loop selection drawing callback */
@@ -315,10 +316,13 @@
 }
 
 /* called when modal loop selection is done... */
-static void ringsel_exit(wmOperator *op)
+static void ringsel_exit(bContext *C, wmOperator *op)
 {
 	tringselOpData *lcd= op->customdata;
 
+	if (lcd->timer)
+		WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), lcd->timer);
+
 	/* deactivate the extra drawing stuff in 3D-View */
 	ED_region_draw_cb_exit(lcd->ar->type, lcd->draw_handle);
 	
@@ -354,10 +358,10 @@
 	return 1;
 }
 
-static int ringcut_cancel (bContext *UNUSED(C), wmOperator *op)
+static int ringcut_cancel (bContext *C, wmOperator *op)
 {
 	/* this is just a wrapper around exit() */
-	ringsel_exit(op);
+	ringsel_exit(C, op);
 	return OPERATOR_CANCELLED;
 }
 
@@ -375,7 +379,7 @@
 	lcd = op->customdata;
 	
 	if (lcd->em->selectmode == SCE_SELECT_FACE) {
-		ringsel_exit(op);
+		ringsel_exit(C, op);
 		WM_operator_name_call(C, "MESH_OT_loop_select", WM_OP_INVOKE_REGION_WIN, NULL);
 		return OPERATOR_CANCELLED;
 	}
@@ -385,7 +389,7 @@
 	
 	edge = findnearestedge(&lcd->vc, &dist);
 	if(!edge) {
-		ringsel_exit(op);
+		ringsel_exit(C, op);
 		return OPERATOR_CANCELLED;
 	}
 
@@ -393,7 +397,7 @@
 	ringsel_find_edge(lcd, 1);
 
 	ringsel_finish(C, op);
-	ringsel_exit(op);
+	ringsel_exit(C, op);
 
 	return OPERATOR_FINISHED;
 }
@@ -404,7 +408,11 @@
 	tringselOpData *lcd;
 	EditEdge *edge;
 	int dist = 75;
-
+	
+	/*if we're in the cut-n-slide macro, set release_confirm based on user pref*/
+	if (op->opm)
+		RNA_boolean_set(op->next->ptr, "release_confirm", U.loopcut_finish_on_release);
+	
 	if(modifiers_isDeformedByLattice(obedit) || modifiers_isDeformedByArmature(obedit))
 		BKE_report(op->reports, RPT_WARNING, "Loop cut doesn't work well on deformed edit mesh display");
 	
@@ -437,22 +445,34 @@
 
 	view3d_operator_needs_opengl(C);
 
-
 	switch (event->type) {
 		case LEFTMOUSE: /* confirm */ // XXX hardcoded
-			if (event->val == KM_PRESS) {
+			if (event->val == KM_RELEASE) {
 				/* finish */
 				ED_region_tag_redraw(lcd->ar);
 				
 				ringsel_finish(C, op);
-				ringsel_exit(op);
+				ringsel_exit(C, op);
 				ED_area_headerprint(CTX_wm_area(C), NULL);
 				
-				return OPERATOR_FINISHED;
+				return OPERATOR_FINISHED|OPERATOR_ABORT_MACRO;
+			}else {
+				lcd->timer = WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER2, 0.12);
 			}
 			
 			ED_region_tag_redraw(lcd->ar);
 			break;
+			
+		case TIMER2: 
+			/* finish */
+			ED_region_tag_redraw(lcd->ar);
+			
+			ringsel_finish(C, op);
+			ringsel_exit(C, op);
+			
+			ED_area_headerprint(CTX_wm_area(C), NULL);
+
+			return OPERATOR_FINISHED;
 		case RIGHTMOUSE: /* abort */ // XXX hardcoded
 		case ESCKEY:
 			if (event->val == KM_RELEASE) {

Modified: trunk/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_ops.c	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/editors/mesh/mesh_ops.c	2011-05-03 01:48:15 UTC (rev 36450)
@@ -175,8 +175,10 @@
 	ot= WM_operatortype_append_macro("MESH_OT_loopcut_slide", "Loop Cut and Slide", OPTYPE_UNDO|OPTYPE_REGISTER);
 	ot->description = "Cut mesh loop and slide it";
 	WM_operatortype_macro_define(ot, "MESH_OT_loopcut");
-	WM_operatortype_macro_define(ot, "TRANSFORM_OT_edge_slide");
-
+	otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_edge_slide");
+	RNA_boolean_set(otmacro->ptr, "release_confirm", 1);
+	RNA_int_set(otmacro->ptr, "launch_event", LEFTMOUSE);
+	
 	ot= WM_operatortype_append_macro("MESH_OT_duplicate_move", "Add Duplicate", OPTYPE_UNDO|OPTYPE_REGISTER);
 	ot->description = "Duplicate mesh and move";
 	WM_operatortype_macro_define(ot, "MESH_OT_duplicate");

Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/editors/transform/transform.c	2011-05-03 01:48:15 UTC (rev 36450)
@@ -1521,7 +1521,9 @@
 	t->mode = mode;
 
 	t->launch_event = event ? event->type : -1;
-
+	if (RNA_property_is_set(op->ptr, "launch_event"))
+		t->launch_event = RNA_int_get(op->ptr, "launch_event");
+	
 	if (t->launch_event == EVT_TWEAK_R)
 	{
 		t->launch_event = RIGHTMOUSE;

Modified: trunk/blender/source/blender/editors/transform/transform_ops.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_ops.c	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/editors/transform/transform_ops.c	2011-05-03 01:48:15 UTC (rev 36450)
@@ -495,10 +495,11 @@
 	{
 		RNA_def_boolean(ot->srna, "texture_space", 0, "Edit Object data texture space", "");
 	}
-
+	
 	// Add confirm method all the time. At the end because it's not really that important and should be hidden only in log, not in keymap edit
 	/*prop =*/ RNA_def_boolean(ot->srna, "release_confirm", 0, "Confirm on Release", "Always confirm operation when releasing button");
 	//RNA_def_property_flag(prop, PROP_HIDDEN);
+	RNA_def_int(ot->srna, "launch_event", 0, 0, INT_MAX, "Launch Event", "", 0, INT_MAX);
 }
 
 void TRANSFORM_OT_translate(struct wmOperatorType *ot)
@@ -742,7 +743,7 @@
 	ot->poll   = ED_operator_editmesh;
 
 	RNA_def_float_factor(ot->srna, "value", 0, -1.0f, 1.0f, "Factor", "", -1.0f, 1.0f);
-
+	
 	Transform_Properties(ot, P_MIRROR|P_SNAP);
 }
 

Modified: trunk/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2011-05-03 01:48:15 UTC (rev 36450)
@@ -383,13 +383,13 @@
 	short autokey_mode;		/* autokeying mode */
 	short autokey_flag;		/* flags for autokeying */
 	
-	short text_render, pad9;		/*options for text rendering*/
+	short text_render, dsm_maxmem;		/*options for text rendering*/
 	float pad10;
 
 	struct ColorBand coba_weight;	/* from texture.h */
 
 	float sculpt_paint_overlay_col[3];
-	int pad3;
+	int loopcut_finish_on_release;
 
 	char author[80];	/* author name for file formats supporting it */
 } UserDef;

Modified: trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2011-05-03 01:48:15 UTC (rev 36450)
@@ -312,6 +312,7 @@
 #define OPERATOR_PASS_THROUGH	8
 /* in case operator got executed outside WM code... like via fileselect */
 #define OPERATOR_HANDLED		16
+#define OPERATOR_ABORT_MACRO	32
 
 /* wmOperator flag */
 #define OP_GRAB_POINTER			1

Modified: trunk/blender/source/blender/makesrna/intern/rna_userdef.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/makesrna/intern/rna_userdef.c	2011-05-03 01:48:15 UTC (rev 36450)
@@ -2676,6 +2676,10 @@
 	RNA_def_property_enum_items(prop, view_zoom_axes);
 	RNA_def_property_ui_text(prop, "Zoom Axis", "Axis of mouse movement to zoom in or out on");
 	
+	prop= RNA_def_property(srna, "loopcut_finish_on_release", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_sdna(prop, NULL, "loopcut_finish_on_release", 1);
+	RNA_def_property_ui_text(prop, "End Loopcut Slide On Release", "End Loopcut Slide On Mouse Release, a 'click-drag-and-hold' workflow");
+
 	prop= RNA_def_property(srna, "invert_mouse_zoom", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ZOOM_INVERT);
 	RNA_def_property_ui_text(prop, "Invert Zoom Direction", "Invert the axis of mouse movement for zooming");

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-05-03 00:13:01 UTC (rev 36449)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2011-05-03 01:48:15 UTC (rev 36450)
@@ -214,6 +214,9 @@
 			} else {
 				break; /* operator didn't finish, end macro */
 			}
+			
+			if (retval & OPERATOR_ABORT_MACRO)
+				break;
 		}
 	}
 	
@@ -239,6 +242,9 @@
 		} else {
 			break; /* operator didn't finish, end macro */
 		}
+		
+		if (retval & OPERATOR_ABORT_MACRO)
+			break;
 	}
 
 	return wm_macro_end(op, retval);
@@ -265,43 +271,45 @@
 			MacroData *md = op->customdata;
 
 			md->retval = OPERATOR_FINISHED; /* keep in mind that at least one operator finished */
-
-			retval = wm_macro_invoke_internal(C, op, event, opm->next);
-
-			/* if new operator is modal and also added its own handler */
-			if (retval & OPERATOR_RUNNING_MODAL && op->opm != opm) {
-				wmWindow *win = CTX_wm_window(C);
-				wmEventHandler *handler = NULL;
-
-				for (handler = win->modalhandlers.first; handler; handler = handler->next) {
-					/* first handler in list is the new one */
-					if (handler->op == op)
-						break;
-				}
-
-				if (handler) {
-					BLI_remlink(&win->modalhandlers, handler);
-					wm_event_free_handler(handler);
-				}
-
-				/* if operator is blocking, grab cursor
-				 * This may end up grabbing twice, but we don't care.

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list