using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using System.Windows; using System.Windows.Data; using System.Windows.Media; using System.Windows.Media.Imaging; namespace AIStudio.Wpf.DiagramDesigner { public class ConnectionDataConverter : IMultiValueConverter { static ConnectionDataConverter() { Instance = new ConnectionDataConverter(); } public static ConnectionDataConverter Instance { get; private set; } public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { PathGeometry pathGeometry = new PathGeometry(); //if (values[0] != null) //{ // List points = (List)values[0]; // PathFigure figure = new PathFigure(); // figure.StartPoint = points[0]; // if (values[1]?.ToString() == DrawMode.RadiusConnectingLine.ToString()) // { // for (var i = 0; i < points.Count - 1; i++) // { // int current = i, last = i - 1, next = i + 1, next2 = i + 2; // if (last == -1) // { // last = 0; // } // if (next == points.Count) // { // next = points.Count - 1; // } // if (next2 == points.Count) // { // next2 = points.Count - 1; // } // var bzs = SegmentHelper.GetBezierSegment(points[current], points[last], points[next], points[next2]); // figure.Segments.Add(bzs); // } // //贝塞尔曲线的简单连接 // //var start = points[0]; // //var end = points.Last(); // //var width = end.X - start.X; // //var height = end.Y - start.Y; // //var ctrlPos = 0.382 * width + 0.309 * height; // //figure.Segments.Add(new BezierSegment(new Point(ctrlPos - 1, 1), new Point(width - ctrlPos + 1, height - 1), new Point(width - 1, height - 1), true)); // } // else // { // for (int i = 0; i < points.Count; i++) // { // LineSegment arc = new LineSegment(points[i], true); // figure.Segments.Add(arc); // } // } // pathGeometry.Figures.Add(figure); //} return pathGeometry; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }