private void PathBetween(Anchor a1, Anchor a2, CurveMode interpMode = CurveMode.CIM_Linear)
{
Line line;
BezierSegment bez;
switch (interpMode)
{
case CurveMode.CIM_Linear:
line = new Line();
line.bind(Line.X1Property, a1, "X");
line.bind(Line.Y1Property, a1, "Y", new YConverter(), ActualHeight);
line.bind(Line.X2Property, a2, "X");
line.bind(Line.Y2Property, a2, "Y", new YConverter(), ActualHeight);
graph.Children.Add(line);
break;
case CurveMode.CIM_Constant:
line = new Line();
line.bind(Line.X1Property, a1, "X");
line.bind(Line.Y1Property, a1, "Y", new YConverter(), ActualHeight);
line.bind(Line.X2Property, a2, "X");
line.bind(Line.Y2Property, a1, "Y", new YConverter(), ActualHeight);
graph.Children.Add(line);
line = new Line();
line.bind(Line.X1Property, a2, "X");
line.bind(Line.Y1Property, a1, "Y", new YConverter(), ActualHeight);
line.bind(Line.X2Property, a2, "X");
line.bind(Line.Y2Property, a2, "Y", new YConverter(), ActualHeight);
graph.Children.Add(line);
break;
case CurveMode.CIM_CurveAuto:
case CurveMode.CIM_CurveUser:
case CurveMode.CIM_CurveBreak:
case CurveMode.CIM_CurveAutoClamped:
bez = new BezierSegment(this);
bez.Slope1 = a1.point.Value.LeaveTangent;
bez.Slope2 = a2.point.Value.ArriveTangent;
bez.bind(BezierSegment.X1Property, a1, "X");
bez.bind(BezierSegment.Y1Property, a1, "Y");
bez.bind(BezierSegment.X2Property, a2, "X");
bez.bind(BezierSegment.Y2Property, a2, "Y");
graph.Children.Add(bez);
a1.rightBez = bez;
a2.leftBez = bez;
break;
default:
break;
}
}