Example #1
0
        /// <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));
            }
        }
Example #2
0
 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();
 }
Example #4
0
        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);
        }