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); } } }
private void OnDragEnds() { _dragPosition = null; _draggedBezierPoint = null; if (_beziers.Count == 0) { ReDrawCanvas(); } }
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); }