[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17104] branches/etch-a-ton/source/blender /src/editarmature_sketch.c: Delete Gesture:

Martin Poirier theeth at yahoo.com
Sun Oct 19 01:54:09 CEST 2008


Revision: 17104
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17104
Author:   theeth
Date:     2008-10-19 01:54:09 +0200 (Sun, 19 Oct 2008)

Log Message:
-----------
Delete Gesture:

2 segments gesture, going back and forth over a stroke (intersecting twice, angle between segments > 120). Can delete more than one stroke at once. Stroke crossed only once are not deleted.

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	2008-10-18 22:16:42 UTC (rev 17103)
+++ branches/etch-a-ton/source/blender/src/editarmature_sketch.c	2008-10-18 23:54:09 UTC (rev 17104)
@@ -1535,6 +1535,43 @@
 	}
 }
 
+int sk_detectDeleteGesture(SK_Sketch *sketch, SK_Stroke *gesture, ListBase *list, SK_Stroke *segments)
+{
+	float s1[3], s2[3];
+	float angle;
+	
+	VecSubf(s1, segments->points[1].p, segments->points[0].p);
+	VecSubf(s2, segments->points[2].p, segments->points[1].p);
+	
+	angle = VecAngle2(s1, s2);
+	
+	if (angle > 120)
+	{
+		return 1;
+	}
+	else
+	{
+		return 0;
+	}
+}
+
+void sk_applyDeleteGesture(SK_Sketch *sketch, SK_Stroke *gesture, ListBase *list, SK_Stroke *segments)
+{
+	SK_Intersection *isect;
+	
+	for (isect = list->first; isect; isect = isect->next)
+	{
+		/* only delete strokes that are crossed twice */
+		if (isect->next && isect->next->stroke == isect->stroke)
+		{
+			isect = isect->next;
+			
+			BLI_remlink(&sketch->strokes, isect->stroke);
+			sk_freeStroke(isect->stroke);
+		}
+	}
+}
+
 void sk_applyGesture(SK_Sketch *sketch)
 {
 	ListBase intersections;
@@ -1555,6 +1592,10 @@
 	{
 		sk_applyTrimGesture(sketch, sketch->gesture, &intersections, segments);
 	}
+	else if (nb_segments == 2 && nb_intersections == 2 && sk_detectDeleteGesture(sketch, sketch->gesture, &intersections, segments))
+	{
+		sk_applyDeleteGesture(sketch, sketch->gesture, &intersections, segments);
+	}
 	
 	sk_freeStroke(segments);
 	BLI_freelistN(&intersections);





More information about the Bf-blender-cvs mailing list