[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