public void ZoomIn(CorePoint pivot)
{
if (AxisX == null || AxisY == null) return;
View.HideTooltip();
pivot = new CorePoint(
ChartFunctions.FromPlotArea(pivot.X, AxisOrientation.X, this),
ChartFunctions.FromPlotArea(pivot.Y, AxisOrientation.Y, this));
var speed = View.ZoomingSpeed < 0.1 ? 0.1 : (View.ZoomingSpeed > 0.95 ? 0.95 : View.ZoomingSpeed);
if (View.Zoom == ZoomingOptions.X || View.Zoom == ZoomingOptions.Xy)
{
foreach (var xi in AxisX)
{
var max = double.IsNaN(xi.MaxValue) ? xi.TopLimit : xi.MaxValue;
var min = double.IsNaN(xi.MinValue) ? xi.BotLimit : xi.MinValue;
var l = max - min;
var rMin = (pivot.X - min) / l;
var rMax = 1 - rMin;
var target = l*speed;
if (target < xi.View.MinRange) return;
var mint = pivot.X - target*rMin;
var maxt = pivot.X + target*rMax;
xi.View.SetRange(mint, maxt);
}
}
if (View.Zoom == ZoomingOptions.Y || View.Zoom == ZoomingOptions.Xy)
{
foreach (var yi in AxisY)
{
var max = double.IsNaN(yi.MaxValue) ? yi.TopLimit : yi.MaxValue;
var min = double.IsNaN(yi.MinValue) ? yi.BotLimit : yi.MinValue;
var l = max - min;
var rMin = (pivot.Y - min) / l;
var rMax = 1 - rMin;
var target = l * speed;
if (target < yi.View.MinRange) return;
var mint = pivot.Y - target * rMin;
var maxt = pivot.Y + target * rMax;
yi.View.SetRange(mint, maxt);
}
}
}