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

Martin Poirier theeth at yahoo.com
Fri Jan 16 21:24:35 CET 2009


Revision: 18541
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18541
Author:   theeth
Date:     2009-01-16 21:24:31 +0100 (Fri, 16 Jan 2009)

Log Message:
-----------
Command Gesture - Polygonize

New command option to turn continuous strokes into polylines.

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-16 18:04:01 UTC (rev 18540)
+++ branches/etch-a-ton/source/blender/src/editarmature_sketch.c	2009-01-16 20:24:31 UTC (rev 18541)
@@ -957,6 +957,52 @@
 	}
 }
 
+void sk_polygonizeStroke(SK_Stroke *stk, int start, int end)
+{
+	int offset;
+	int i;
+	
+	/* find first exact points outside of range */
+	for (;start > 0; start--)
+	{
+		if (stk->points[start].type == PT_EXACT)
+		{
+			break;
+		}
+	}
+	
+	for (;end < stk->nb_points - 1; end++)
+	{
+		if (stk->points[end].type == PT_EXACT)
+		{
+			break;
+		}
+	}
+	
+	offset = start + 1;
+	
+	for (i = start + 1; i < end; i++)
+	{
+		if (stk->points[i].type == PT_EXACT)
+		{
+			if (offset != i)
+			{
+				memcpy(stk->points + offset, stk->points + i, sizeof(SK_Point));
+			}
+
+			offset++;
+		}
+	}
+	
+	/* some points were removes, move end of array */
+	if (offset < end)
+	{
+		int size = stk->nb_points - end;
+		memmove(stk->points + offset, stk->points + end, size * sizeof(SK_Point));
+		stk->nb_points = offset + size;
+	}
+}
+
 void sk_flattenStroke(SK_Stroke *stk, int start, int end)
 {
 	float normal[3], distance[3];
@@ -2509,7 +2555,7 @@
 	SK_Intersection *isect;
 	int command;
 	
-	command = pupmenu("Action %t|Flatten %x1|Cut Out %x2");
+	command = pupmenu("Action %t|Flatten %x1|Cut Out %x2|Polygonize %x3");
 	if(command < 1) return;
 
 	for (isect = gest->intersections.first; isect; isect = isect->next)
@@ -2528,6 +2574,9 @@
 				case 2:
 					sk_cutoutStroke(isect->stroke, isect->after, i2->before, isect->p, i2->p);
 					break;
+				case 3:
+					sk_polygonizeStroke(isect->stroke, isect->before, i2->after);
+					break;
 			}
 
 			isect = i2;





More information about the Bf-blender-cvs mailing list