Пример #1
0
        private void MoveBezierPont(DraggedBezierPoint point, Point pos)
        {
            if (point.Type == DotType.Control1 || point.Type == DotType.Control2)
            {
                point.Curve.SetPoint(point.Type, pos);
                return;
            }
            var prev = point.Curve.GetPoint(point.Type);
            var diff = pos - prev;

            if (point.Type == DotType.Start)
            {
                point.Curve.SetPoint(point.Type, pos);
                var c1 = point.Curve.GetPoint(DotType.Control1);
                point.Curve.SetPoint(DotType.Control1, c1 + diff);
                var prevCurve = point.Curve.Previous;
                if (prevCurve != null)
                {
                    var c2 = prevCurve.GetPoint(DotType.Control2);
                    prevCurve.SetPoint(DotType.Control2, c2 + diff);
                }
            }
            else if (point.Type == DotType.End)
            {
                point.Curve.SetPoint(point.Type, pos);
                var c2 = point.Curve.GetPoint(DotType.Control2);
                point.Curve.SetPoint(DotType.Control2, c2 + diff);
                var nextCurve = point.Curve.Next;
                if (nextCurve != null)
                {
                    var c1 = nextCurve.GetPoint(DotType.Control1);
                    nextCurve.SetPoint(DotType.Control1, c1 + diff);
                }
            }
        }
Пример #2
0
 private void OnDragEnds()
 {
     _dragPosition       = null;
     _draggedBezierPoint = null;
     if (_beziers.Count == 0)
     {
         ReDrawCanvas();
     }
 }
Пример #3
0
        private bool TryStartDragPoint(object sender, DotType dotType)
        {
            if (_beziers.Count == 0)
            {
                return(false);
            }
            var ellipse = sender as Ellipse;
            var curve   = ellipse?.Tag as IBezierCurve;

            if (curve == null)
            {
                return(false);
            }
            _draggedBezierPoint = new DraggedBezierPoint(curve, dotType);
            return(true);
        }