[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18639] branches/etch-a-ton/source/blender /src/editarmature_sketch.c: Prevent overdrawing to trigger when starting a stroke by snapping to an existing point .

Martin Poirier theeth at yahoo.com
Fri Jan 23 22:34:59 CET 2009


Revision: 18639
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18639
Author:   theeth
Date:     2009-01-23 22:34:51 +0100 (Fri, 23 Jan 2009)

Log Message:
-----------
Prevent overdrawing to trigger when starting a stroke by snapping to an existing point.
Overdrawing copies point type from start and end point (better for polyline)
misc renaming some structs and vars (cleanup mostly)

Modified Paths:
--------------
    branches/etch-a-ton/source/blender/src/editarmature_sketch.c

Modified: branches/etch-a-ton/source/blender/src/editarmature_sketch.c
===================================================================
--- branches/etch-a-ton/source/blender/src/editarmature_sketch.c	2009-01-23 21:08:01 UTC (rev 18638)
+++ branches/etch-a-ton/source/blender/src/editarmature_sketch.c	2009-01-23 21:34:51 UTC (rev 18639)
@@ -92,14 +92,14 @@
 	int selected;
 } SK_Stroke;
 
-#define SK_ADJUST_LIMIT	5
+#define SK_OVERDRAW_LIMIT	5
 
-typedef struct SK_Adjustment
+typedef struct SK_Overdraw
 {
 	SK_Stroke *target;
 	int	start, end;
 	int count;
-} SK_Adjustment;
+} SK_Overdraw;
 
 #define SK_Stroke_BUFFER_INIT_SIZE 20
 
@@ -127,7 +127,7 @@
 	SK_Stroke	*active_stroke;
 	SK_Stroke	*gesture;
 	SK_Point	next_point;
-	SK_Adjustment adj;
+	SK_Overdraw over;
 } SK_Sketch;
 
 typedef struct SK_StrokeIterator {
@@ -203,8 +203,8 @@
 void sk_applyConvertGesture(SK_Gesture *gest, SK_Sketch *sketch);
 
 
-void sk_resetAdjust(SK_Sketch *sketch);
-int sk_hasAdjust(SK_Sketch *sketch, SK_Stroke *stk);
+void sk_resetOverdraw(SK_Sketch *sketch);
+int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk);
 
 /******************** GESTURE ACTIONS ******************************/
 
@@ -1065,7 +1065,7 @@
 {
 	if (sketch->active_stroke != NULL)
 	{
-		sk_resetAdjust(sketch);
+		sk_resetOverdraw(sketch);
 		sk_removeStroke(sketch, sketch->active_stroke);
 	}
 }
@@ -1407,30 +1407,36 @@
 	return pt;
 }
 
-void sk_resetAdjust(SK_Sketch *sketch)
+void sk_resetOverdraw(SK_Sketch *sketch)
 {
-	sketch->adj.target = NULL;
-	sketch->adj.start = -1;
-	sketch->adj.end = -1;
-	sketch->adj.count = 0;
+	sketch->over.target = NULL;
+	sketch->over.start = -1;
+	sketch->over.end = -1;
+	sketch->over.count = 0;
 }
 
-int sk_hasAdjust(SK_Sketch *sketch, SK_Stroke *stk)
+int sk_hasOverdraw(SK_Sketch *sketch, SK_Stroke *stk)
 {
-	return	sketch->adj.target &&
-			sketch->adj.count >= SK_ADJUST_LIMIT &&
-			(sketch->adj.target == stk || stk == NULL) &&
-			(sketch->adj.start != -1 || sketch->adj.end != -1);
+	return	sketch->over.target &&
+			sketch->over.count >= SK_OVERDRAW_LIMIT &&
+			(sketch->over.target == stk || stk == NULL) &&
+			(sketch->over.start != -1 || sketch->over.end != -1);
 }
 
-void sk_updateAdjust(SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
+void sk_updateOverdraw(SK_Sketch *sketch, SK_Stroke *stk, SK_DrawData *dd)
 {
-	if (sketch->adj.target == NULL)
+	if (sketch->over.target == NULL)
 	{
 		SK_Stroke *target;
 		int closest_index = -1;
 		int dist = SNAP_MIN_DISTANCE * 2;
 		
+		/* If snapping, don't start overdraw */
+		if (sk_lastStrokePoint(stk)->mode == PT_SNAP)
+		{
+			return;
+		}
+		
 		for (target = sketch->strokes.first; target; target = target->next)
 		{
 			if (target != stk)
@@ -1441,60 +1447,60 @@
 				
 				if (spt != NULL)
 				{
-					sketch->adj.target = target;
+					sketch->over.target = target;
 					closest_index = index;
 				}
 			}
 		}
 		
-		if (sketch->adj.target != NULL)
+		if (sketch->over.target != NULL)
 		{
 			if (closest_index > -1)
 			{
 				if (sk_lastStrokePoint(stk)->type == PT_EXACT)
 				{
-					sketch->adj.count = SK_ADJUST_LIMIT;
+					sketch->over.count = SK_OVERDRAW_LIMIT;
 				}
 				else
 				{
-					sketch->adj.count++;
+					sketch->over.count++;
 				}
 			}
 
 			if (stk->nb_points == 1)
 			{
-				sketch->adj.start = closest_index;
+				sketch->over.start = closest_index;
 			}
 			else
 			{
-				sketch->adj.end = closest_index;
+				sketch->over.end = closest_index;
 			}
 		}
 	}
-	else if (sketch->adj.target != NULL)
+	else if (sketch->over.target != NULL)
 	{
 		SK_Point *closest_pt = NULL;
 		int dist = SNAP_MIN_DISTANCE * 2;
 		int index;
 
-		closest_pt = sk_snapPointStroke(sketch->adj.target, dd->mval, &dist, &index);
+		closest_pt = sk_snapPointStroke(sketch->over.target, dd->mval, &dist, &index);
 		
 		if (closest_pt != NULL)
 		{
 			if (sk_lastStrokePoint(stk)->type == PT_EXACT)
 			{
-				sketch->adj.count = SK_ADJUST_LIMIT;
+				sketch->over.count = SK_OVERDRAW_LIMIT;
 			}
 			else
 			{
-				sketch->adj.count++;
+				sketch->over.count++;
 			}
 			
-			sketch->adj.end = index;
+			sketch->over.end = index;
 		}
 		else
 		{
-			sketch->adj.end = -1;
+			sketch->over.end = -1;
 		}
 	}
 }
@@ -1504,8 +1510,8 @@
 {
 	int retval = 0;
 
-	*start = sketch->adj.start;
-	*end = sketch->adj.end;
+	*start = sketch->over.start;
+	*end = sketch->over.end;
 	
 	if (*start == -1)
 	{
@@ -1514,7 +1520,7 @@
 	
 	if (*end == -1)
 	{
-		*end = sketch->adj.target->nb_points - 1;
+		*end = sketch->over.target->nb_points - 1;
 	}
 	
 	if (*end < *start)
@@ -1528,11 +1534,11 @@
 	return retval;
 }
 
-void sk_endAdjust(SK_Sketch *sketch)
+void sk_endOverdraw(SK_Sketch *sketch)
 {
 	SK_Stroke *stk = sketch->active_stroke;
 	
-	if (sk_hasAdjust(sketch, NULL))
+	if (sk_hasOverdraw(sketch, NULL))
 	{
 		int start;
 		int end;
@@ -1544,22 +1550,15 @@
 		
 		if (stk->nb_points > 1)
 		{
-			if (start != 0)
-			{
-				stk->points->type = PT_CONTINUOUS;
-			}
-			
-			if (end != sketch->adj.target->nb_points - 1)
-			{
-				sk_lastStrokePoint(stk)->type = PT_CONTINUOUS;
-			}
+			stk->points->type = sketch->over.target->points[start].type;
+			sk_lastStrokePoint(stk)->type = sketch->over.target->points[end].type;
 		}
 		
-		sk_inserStrokePoints(sketch->adj.target, stk->points, stk->nb_points, start, end);
+		sk_inserStrokePoints(sketch->over.target, stk->points, stk->nb_points, start, end);
 		
 		sk_removeStroke(sketch, stk);
 		
-		sk_resetAdjust(sketch);
+		sk_resetOverdraw(sketch);
 	}
 }
 
@@ -1571,7 +1570,7 @@
 	BLI_addtail(&sketch->strokes, stk);
 	sketch->active_stroke = stk;
 
-	sk_resetAdjust(sketch);	
+	sk_resetOverdraw(sketch);	
 }
 
 void sk_endStroke(SK_Sketch *sketch)
@@ -1580,7 +1579,7 @@
 
 	if (G.scene->toolsettings->bone_sketching & BONE_SKETCHING_ADJUST)
 	{
-		sk_endAdjust(sketch);
+		sk_endOverdraw(sketch);
 	}
 
 	sketch->active_stroke = NULL;
@@ -1929,7 +1928,7 @@
 	
 	if (G.scene->toolsettings->bone_sketching & BONE_SKETCHING_ADJUST)
 	{
-		sk_updateAdjust(sketch, stk, dd);
+		sk_updateOverdraw(sketch, stk, dd);
 	}
 }
 
@@ -2953,7 +2952,7 @@
 			int start = -1;
 			int end = -1;
 			
-			if (sk_hasAdjust(sketch, stk))
+			if (sk_hasOverdraw(sketch, stk))
 			{
 				sk_adjustIndexes(sketch, &start, &end);
 			}





More information about the Bf-blender-cvs mailing list