/// <summary> /// We create a stroke with points close and then add the stroke to the canvas. /// If the points are far apart, we create a new stroke for those points. /// </summary> /// <param name="inkCanvas"></param> /// <param name="strokeInfo"></param> public static void AddStrokePreview(this InkCanvas inkCanvas, StrokeInfo strokeInfo) { StylusPoint firstPoint = strokeInfo.PointCollection[0]; StylusPointCollection tmpPoints = new StylusPointCollection(); tmpPoints.Add(firstPoint); for (int i = 0; i < strokeInfo.PointCollection.Count - 1; i++) { if (CalculateDistance(strokeInfo.PointCollection[i], strokeInfo.PointCollection[i + 1]) < 5) { tmpPoints.Add(strokeInfo.PointCollection[i + 1]); } else { inkCanvas.Strokes.Add(CreateStroke(strokeInfo, tmpPoints.Clone())); tmpPoints.Clear(); tmpPoints.Add(strokeInfo.PointCollection[i + 1]); } } if (tmpPoints.Count > 0) { inkCanvas.Strokes.Add(CreateStroke(strokeInfo, tmpPoints)); } }
public void CopyToStylusPointCollection(StylusPointCollection strokeTipCollection) { if (strokeTipCollection == null) { throw new ArgumentNullException("strokeTipCollection"); } strokeTipCollection.Clear(); for (int i = 0; i < _arrayLength; i++) { if (_array[i].Description.PropertyCount == 3) { continue; } strokeTipCollection.Add(_array[i]); } }
public void Clear() { pointCollection.Clear(); }
private Geometry GenerateStylusPoints(Geometry geo, bool closed) { PathGeometry g = geo.GetFlattenedPathGeometry(); StylusPointCollection StylusPointsCopy = StylusPoints.Clone(); connectingPoints = new List <ConnectingPoint>(); StylusPointsCopy.Clear(); Point startPoint = new Point(-1, -1); foreach (var f in g.Figures) { foreach (var s in f.Segments) { if (s is PolyLineSegment) { for (int i = 0; i < ((PolyLineSegment)s).Points.Count; i++) { Point pt = (((PolyLineSegment)s).Points[i]); if (i == 0) { if (startPoint.X == -1 && startPoint.Y == -1) { startPoint = pt; } connectingPoints.Add(new ConnectingPoint(pt.X, pt.Y, null)); } else { connectingPoints.Add(new ConnectingPoint(pt.X, pt.Y, connectingPoints[connectingPoints.Count - 1])); } StylusPointsCopy.Add(new StylusPoint(pt.X, pt.Y)); } } else if (s is LineSegment && !closed) { Point pt = f.StartPoint; startPoint = pt; connectingPoints.Add(new ConnectingPoint(pt.X, pt.Y, null)); StylusPointsCopy.Add(new StylusPoint(pt.X, pt.Y)); pt = (((LineSegment)s).Point); connectingPoints.Add(new ConnectingPoint(pt.X, pt.Y, connectingPoints[connectingPoints.Count - 1])); StylusPointsCopy.Add(new StylusPoint(pt.X, pt.Y)); } } } if (closed && !(startPoint.X == -1 && startPoint.Y == -1)) { StylusPointsCopy.Add(new StylusPoint(startPoint.X, startPoint.Y)); connectingPoints.Add(new ConnectingPoint(startPoint.X, startPoint.Y, connectingPoints[connectingPoints.Count - 1])); } for (int i = 0; i < connectingPoints.Count - 1; i++) { if (connectingPoints[i + 1].previous != null) { connectingPoints[i].next = connectingPoints[i + 1]; } } StylusPoints = StylusPointsCopy; return(g); }