[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19377] branches/blender2.5/blender/source /blender/editors: Finished porting etch-a-ton to 2.5

Martin Poirier theeth at yahoo.com
Mon Mar 23 02:01:44 CET 2009


Revision: 19377
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19377
Author:   theeth
Date:     2009-03-23 02:01:44 +0100 (Mon, 23 Mar 2009)

Log Message:
-----------
Finished porting etch-a-ton to 2.5

Changes: Gestures are now Shift-ActionMouse (doing it with SelectMouse required a bit of juggling and triggered a display glitch that I'll try to debug later)

Everything else should be as functional as in trunk, apart from the dotted rubber band line which doesn't update while the view is rotated and only the current area getting redrawn while drawing (the later should be easy to fix).

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h
    branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c
    branches/blender2.5/blender/source/blender/editors/armature/editarmature_sketch.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c

Modified: branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h	2009-03-23 00:28:05 UTC (rev 19376)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_intern.h	2009-03-23 01:01:44 UTC (rev 19377)
@@ -63,7 +63,6 @@
 
 void SKETCH_OT_gesture(struct wmOperatorType *ot);
 void SKETCH_OT_delete(struct wmOperatorType *ot);
-void SKETCH_OT_draw_poly(struct wmOperatorType *ot);
 void SKETCH_OT_draw_stroke(struct wmOperatorType *ot);
 void SKETCH_OT_draw_preview(struct wmOperatorType *ot);
 void SKETCH_OT_finish_stroke(struct wmOperatorType *ot);

Modified: branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c	2009-03-23 00:28:05 UTC (rev 19376)
+++ branches/blender2.5/blender/source/blender/editors/armature/armature_ops.c	2009-03-23 01:01:44 UTC (rev 19377)
@@ -133,7 +133,6 @@
 	/* SKETCH */	
 	WM_operatortype_append(SKETCH_OT_gesture);
 	WM_operatortype_append(SKETCH_OT_delete);
-	WM_operatortype_append(SKETCH_OT_draw_poly);
 	WM_operatortype_append(SKETCH_OT_draw_stroke);
 	WM_operatortype_append(SKETCH_OT_draw_preview);
 	WM_operatortype_append(SKETCH_OT_finish_stroke);
@@ -208,17 +207,7 @@
 	WM_keymap_add_item(keymap, "ARMATURE_OT_click_extrude", LEFTMOUSE, KM_PRESS, KM_CTRL, 0);
 	
 	/* Armature ------------------------ */
-//	keymap= WM_keymap_listbase(wm, "Sketch", 0, 0);
-	
-	WM_keymap_add_item(keymap, "SKETCH_OT_gesture", EVT_TWEAK_S, KM_ANY, 0, 0);
 	WM_keymap_add_item(keymap, "SKETCH_OT_delete", XKEY, KM_PRESS, 0, 0);
-	WM_keymap_add_item(keymap, "SKETCH_OT_draw_poly", ACTIONMOUSE, KM_PRESS, KM_SHIFT, 0);
-	kmi = WM_keymap_add_item(keymap, "SKETCH_OT_draw_poly", ACTIONMOUSE, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
-	RNA_boolean_set(kmi->ptr, "snap", 1);
-	WM_keymap_add_item(keymap, "SKETCH_OT_draw_preview", MOUSEMOVE, KM_ANY, KM_SHIFT, 0);
-	kmi = WM_keymap_add_item(keymap, "SKETCH_OT_draw_preview", MOUSEMOVE, KM_ANY, KM_SHIFT|KM_CTRL, 0);
-	RNA_boolean_set(kmi->ptr, "snap", 1);
-	WM_keymap_add_item(keymap, "SKETCH_OT_draw_stroke", EVT_TWEAK_A, KM_ANY, 0, 0);
 	WM_keymap_add_item(keymap, "SKETCH_OT_finish_stroke", SELECTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "SKETCH_OT_cancel_stroke", ESCKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "SKETCH_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);

Modified: branches/blender2.5/blender/source/blender/editors/armature/editarmature_sketch.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/editarmature_sketch.c	2009-03-23 00:28:05 UTC (rev 19376)
+++ branches/blender2.5/blender/source/blender/editors/armature/editarmature_sketch.c	2009-03-23 01:01:44 UTC (rev 19377)
@@ -1249,11 +1249,11 @@
 		int closest_index = -1;
 		int dist = SNAP_MIN_DISTANCE * 2;
 		
-		/* If snapping, don't start overdraw */
-		if (sk_lastStrokePoint(stk)->mode == PT_SNAP)
-		{
-			return;
-		}
+//		/* If snapping, don't start overdraw */ Can't do that, snap is embed too now
+//		if (sk_lastStrokePoint(stk)->mode == PT_SNAP)
+//		{
+//			return;
+//		}
 		
 		for (target = sketch->strokes.first; target; target = target->next)
 		{
@@ -1711,7 +1711,7 @@
 		point_added = sk_addStrokeDrawPoint(C, sketch, stk, dd);
 	}
 	
-	if (scene->toolsettings->bone_sketching & BONE_SKETCHING_ADJUST)
+	if (stk == sketch->active_stroke && scene->toolsettings->bone_sketching & BONE_SKETCHING_ADJUST)
 	{
 		sk_updateOverdraw(C, sketch, stk, dd);
 	}
@@ -1743,11 +1743,10 @@
 	stk->points[stk->nb_points - 1].type = PT_EXACT;
 }
 
-void sk_updateNextPoint(SK_Sketch *sketch)
+void sk_updateNextPoint(SK_Sketch *sketch, SK_Stroke *stk)
 {
-	if (sketch->active_stroke)
+	if (stk)
 	{
-		SK_Stroke *stk = sketch->active_stroke;
 		memcpy(&sketch->next_point, stk->points[stk->nb_points - 1].p, sizeof(SK_Point));
 	}
 }
@@ -2856,10 +2855,8 @@
 	return 0;
 }
 
-void sk_draw_poly(bContext *C, SK_Sketch *sketch, short mval[2], short snap)
+void sk_start_draw_stroke(SK_Sketch *sketch)
 {
-	SK_DrawData dd;
-	
 	if (sketch->active_stroke == NULL)
 	{
 		sk_startStroke(sketch);
@@ -2867,160 +2864,24 @@
 		
 		sketch->active_stroke->selected = 1;
 	}
+}
 
-	sk_initDrawData(&dd, mval);
-	sk_addStrokePoint(C, sketch, sketch->active_stroke, &dd, snap);
-	
-	sk_updateNextPoint(sketch);
+void sk_start_draw_gesture(SK_Sketch *sketch)
+{
+	sketch->gesture = sk_createStroke();
 }
 
-int sk_paint(bContext *C, SK_Sketch *sketch, short mbut)
+int sk_draw_stroke(bContext *C, SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd, short snap)
 {
-	Scene *scene = CTX_data_scene(C);
-	int retval = 1;
-	short qual = 0;
-	short mval[2];
-	
-	if (mbut == LEFTMOUSE)
+	if (sk_stroke_filtermval(dd))
 	{
-		SK_DrawData dd;
-		if (sketch->active_stroke == NULL)
-		{
-			sk_startStroke(sketch);
-			sk_selectAllSketch(sketch, -1);
-			
-			sketch->active_stroke->selected = 1;
-		}
-
-		sk_initDrawData(&dd, mval);
-		
-		/* paint loop */
-		do {
-			/* get current user input */
-//			XXX
-//			getmouseco_areawin(dd.mval);
-			
-			/* only add current point to buffer if mouse moved (otherwise wait until it does) */
-			if (sk_stroke_filtermval(&dd)) {
-
-				sk_addStrokePoint(C, sketch, sketch->active_stroke, &dd, qual);
-				sk_updateDrawData(&dd);
-//				XXX
-//				force_draw(0);
-			}
-			else
-			{
-//				BIF_wait_for_statechange();
-			}
-			
-//			while( qtest() ) {
-//				short event, val;
-//				event = extern_qread(&val);
-//			}
-			
-			/* do mouse checking at the end, so don't check twice, and potentially
-			 * miss a short tap 
-			 */
-		} while (0 /*get_mbut() & L_MOUSE*/);
-		
-		sk_endContinuousStroke(sketch->active_stroke);
-		sk_filterLastContinuousStroke(sketch->active_stroke);
-		sk_updateNextPoint(sketch);
+		sk_addStrokePoint(C, sketch, stk, dd, snap);
+		sk_updateDrawData(dd);
+		sk_updateNextPoint(sketch, stk);
+		return 1;
 	}
-	else if (mbut == RIGHTMOUSE)
-	{
-		if (sketch->active_stroke != NULL)
-		{
-			SK_Stroke *stk = sketch->active_stroke;
-			
-			sk_endStroke(C, sketch);
-			
-			if (scene->toolsettings->bone_sketching & BONE_SKETCHING_QUICK)
-			{
-				if (scene->toolsettings->bone_sketching_convert == SK_CONVERT_RETARGET)
-				{
-					sk_retargetStroke(C, stk);
-				}
-				else
-				{
-					sk_convertStroke(C, stk);
-				}
-//				XXX
-//				BIF_undo_push("Convert Sketch");
-				sk_removeStroke(sketch, stk);
-//				XXX
-//				allqueue(REDRAWBUTSEDIT, 0);
-			}
 	
-//			XXX		
-//			allqueue(REDRAWVIEW3D, 0);
-		}
-		/* no gestures in quick mode */
-		else if (scene->toolsettings->bone_sketching & BONE_SKETCHING_QUICK)
-		{
-			retval = 0; /* return zero for default click behavior */
-		}
-		else
-		{
-			SK_DrawData dd;
-			sketch->gesture = sk_createStroke();
-	
-			sk_initDrawData(&dd, mval);
-			
-			/* paint loop */
-			do {
-				/* get current user input */
-//				XXX
-//				getmouseco_areawin(dd.mval);
-				
-				/* only add current point to buffer if mouse moved (otherwise wait until it does) */
-				if (sk_stroke_filtermval(&dd)) {
-
-					sk_addStrokeDrawPoint(C, sketch, sketch->gesture, &dd);
-					sk_updateDrawData(&dd);
-					
-					/* draw only if mouse has moved */
-					if (sketch->gesture->nb_points > 1)
-					{
-//						XXX
-//						force_draw(0);
-					}
-				}
-				else
-				{
-//					BIF_wait_for_statechange();
-				}
-				
-//				while( qtest() ) {
-//					short event, val;
-//					event = extern_qread(&val);
-//				}
-				
-				/* do mouse checking at the end, so don't check twice, and potentially
-				 * miss a short tap 
-				 */
-			} while (0 /*get_mbut() & R_MOUSE*/);
-			
-			sk_endContinuousStroke(sketch->gesture);
-			sk_filterLastContinuousStroke(sketch->gesture);
-			sk_filterLastContinuousStroke(sketch->gesture);
-			sk_filterLastContinuousStroke(sketch->gesture);
-	
-			if (sketch->gesture->nb_points > 1)		
-			{
-				/* apply gesture here */
-				sk_applyGesture(C, sketch);
-			}
-	
-			sk_freeStroke(sketch->gesture);
-			sketch->gesture = NULL;
-			
-//			XXX
-//			allqueue(REDRAWVIEW3D, 0);
-		}
-	}
-	
-	return retval;
+	return 0;
 }
 
 static int ValidSketchViewContext(ViewContext *vc)
@@ -3110,23 +2971,6 @@
 	}
 }
 
-//int BIF_paintSketch(bContext *C, short mbut)
-//{
-//	if (BIF_validSketchMode(C))
-//	{
-//		if (GLOBAL_sketch == NULL)
-//		{
-//			GLOBAL_sketch = sk_createSketch();
-//		}
-//		
-//		return sk_paint(C, GLOBAL_sketch, mbut);
-//	}
-//	else
-//	{
-//		return 0;
-//	}
-//}
-//
 //void BIF_selectAllSketch(bContext *C, int mode)
 //{
 //	if (BIF_validSketchMode(C))
@@ -3185,20 +3029,134 @@
 	return OPERATOR_FINISHED;
 }
 
-static int sketch_draw_poly(bContext *C, wmOperator *op, wmEvent *event)
+static int sketch_draw_stroke_cancel(bContext *C, wmOperator *op)
 {
+	sk_cancelStroke(GLOBAL_sketch);
+	MEM_freeN(op->customdata);	
+	return OPERATOR_CANCELLED;
+}
+
+static int sketch_draw_stroke(bContext *C, wmOperator *op, wmEvent *event)
+{
 	short snap = RNA_boolean_get(op->ptr, "snap");
+	SK_DrawData *dd;
 	
 	if (GLOBAL_sketch == NULL)
 	{
 		GLOBAL_sketch = sk_createSketch();
 	}
 	
-	sk_draw_poly(C, GLOBAL_sketch, event->mval, snap);
+	op->customdata = dd = MEM_callocN(sizeof("SK_DrawData"), "SketchDrawData");
+	sk_initDrawData(dd, event->mval);
 	
-	return OPERATOR_FINISHED|OPERATOR_PASS_THROUGH;
+	sk_start_draw_stroke(GLOBAL_sketch);
+	
+	sk_draw_stroke(C, GLOBAL_sketch, GLOBAL_sketch->active_stroke, dd, snap);
+	
+	WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
+static int sketch_draw_gesture_cancel(bContext *C, wmOperator *op)
+{
+	sk_cancelStroke(GLOBAL_sketch);
+	MEM_freeN(op->customdata);	
+	return OPERATOR_CANCELLED;
+}
+
+static int sketch_draw_gesture(bContext *C, wmOperator *op, wmEvent *event)
+{
+	short snap = RNA_boolean_get(op->ptr, "snap");
+	SK_DrawData *dd;
+	
+	if (GLOBAL_sketch == NULL)
+	{
+		GLOBAL_sketch = sk_createSketch();
+	}
+	
+	op->customdata = dd = MEM_callocN(sizeof("SK_DrawData"), "SketchDrawData");
+	sk_initDrawData(dd, event->mval);
+	
+	sk_start_draw_gesture(GLOBAL_sketch);
+	sk_draw_stroke(C, GLOBAL_sketch, GLOBAL_sketch->gesture, dd, snap);
+	
+	WM_event_add_modal_handler(C, &CTX_wm_window(C)->handlers, op);
+
+	return OPERATOR_RUNNING_MODAL;
+}
+

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list