private void AddStrokeAsPoints(Stroke stroke) { int count = 0; StylusPointCollection spc = new StylusPointCollection(); foreach (StylusPoint sp in stroke.StylusPoints) { double x = sp.X - (sp.X % 1) + (inkDA.Width / 2); double y = sp.Y - (sp.Y % 1) + (inkDA.Height / 2); StylusPoint point = new StylusPoint(x, y); if (!spc.Contains(point)) { spc.Add(point); } Stroke st = new Stroke(spc); st.DrawingAttributes = inkDA; if (!canvas.Strokes.Contains(st)) { canvas.Strokes.Add(st); count++; } spc = new StylusPointCollection(); } ActionHistory.Add(Actions.AddStroke); UndoPoints.Add(count); dirty = true; }
private void AddStrokeAsPoints(Stroke stroke, PenSize size) { int count = 0; StylusPointCollection spc = new StylusPointCollection(); foreach (StylusPoint sp in stroke.StylusPoints) { int scale = 1; if (size == PenSize.Medium) { scale = 2; } if (size == PenSize.Large) { scale = 4; } double x = sp.X - (sp.X % scale) + 0.5; double y = sp.Y - (sp.Y % scale) + 0.5; StylusPoint point = new StylusPoint(x, y); if (!spc.Contains(point)) { spc.Add(point); } if ((size == PenSize.Medium) || (size == PenSize.Large)) { point = new StylusPoint(x + 1, y); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x, y + 1); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 1, y + 1); if (!spc.Contains(point)) { spc.Add(point); } if (size == PenSize.Large) { point = new StylusPoint(x + 2, y); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 3, y); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 2, y + 1); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 3, y + 1); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x, y + 2); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 1, y + 2); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 2, y + 2); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 3, y + 2); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x, y + 3); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 1, y + 3); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 2, y + 3); if (!spc.Contains(point)) { spc.Add(point); } point = new StylusPoint(x + 3, y + 3); if (!spc.Contains(point)) { spc.Add(point); } } } if (!spc.Contains(point)) { spc.Add(point); } Stroke st = new Stroke(spc); st.DrawingAttributes = inkDA; if (!canvas.Strokes.Contains(st)) { canvas.Strokes.Add(st); count++; } spc = new StylusPointCollection(); } ActionHistory.Add(Actions.AddStroke); UndoPoints.Add(count); dirty = true; }
public static StylusPointCollection removeRedundancy(StylusPointCollection points) { //Remove duplicate points StylusPointCollection workingList = new StylusPointCollection(); for (int i = 1; i < points.Count; i++) { var point1 = points[i - 1]; var point2 = points[i]; if (!(point1.X == point2.X && point1.Y == point2.Y)) { if (! workingList.Contains(point1)) workingList.Add(point1); } } return workingList; }