Hi Nitin for making zoom i want to use this portion of code:
https://www.grapecity.com/componentone/docs/win/online-flexchart/zoom.html
And I comment all the pan rows that you write for me
#region "FlexChart Events for Zoom and Pan"
/// <summary>
/// Reset Zoom
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _fChart_DoubleClick(object sender, EventArgs e)
{
try
{
//if (e.Button == MouseButtons.Left)
{
_fChart.BeginUpdate();
// Restore default values for axis limits
//_fChart.AxisX.Min = Double.NaN;
//_fChart.AxisY.Min = Double.NaN;
//_fChart.AxisX.Max = Double.NaN;
//_fChart.AxisY.Max = Double.NaN;
_fChart.AxisX.Min = _xInitMin;
_fChart.AxisX.Max = _xInitMax;
_fChart.AxisY.Min = _yInitMin;
_fChart.AxisY.Max = _yInitMax;
_maxZoomX = "";
_minZoomX = "";
_chartZoomIsActive = false;
_fChart.EndUpdate();
}
}
catch (Exception ex)
{
ctrlLogger.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
ctrlLogger.Error(ex.Message + "\n" + ex.StackTrace);
if (ex.InnerException != null)
ctrlLogger.Error("Inner exception: " + ex.InnerException.Message);
}
}
/// <summary>
/// Update Range values on graph
/// </summary>
/// <param name="minX">Min X value</param>
/// <param name="maxX">Max X value</param>
/// <param name="minAxisY">Min Y value</param>
/// <param name="maxAxisY">Max X value</param>
private void UpdatedZoomRangeValues(string minX, string maxX, double minAxisY, double maxAxisY)
{
//double minAxisX, double maxAxisX,
//string lbl_MinX = DateTime.FromOADate(minAxisX).ToString("yyyy-MM-dd hh:mm:ss");//minAxisX.ToString("N2");
//string lbl_MaxX = DateTime.FromOADate(maxAxisX).ToString("yyyy-MM-dd hh:mm:ss");//maxAxisX.ToString("N2");
_minZoomX = minX;
_maxZoomX = maxX;
string lbl_MinY = minAxisY.ToString("N2");
string lbl_MaxY = maxAxisY.ToString("N2");
}
/// <summary>
/// Mouse Up => Zoom or Pan
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _fChart_MouseUp(object sender, MouseEventArgs e)
{
try
{
if (e.Button == System.Windows.Forms.MouseButtons.Left) // zoom
{
// Stop Zooming
_IsMouseDown = false;
if (!_lastPoint.IsEmpty)
{
var start = _fChart.PointToData(_startPoint);
var last = _fChart.PointToData(_lastPoint);
float XMin = Math.Min(start.X, last.X);
float XMax = Math.Max(start.X, last.X);
float YMin = Math.Min(start.Y, last.Y);
float YMax = Math.Max(start.Y, last.Y);
//var max = (int)Math.Floor(XMax);
//var min = (int)Math.Ceiling(XMin);
//if (XMin >= XMax)
//{
// _startPoint = _lastPoint = Point.Empty;.
// _chartZoomIsActive = true;
// return;
//}
//if (YMin >= YMax)
//{
// _startPoint = _lastPoint = Point.Empty;
// _chartZoomIsActive = true;
// return;
//}
//_fChart.BeginUpdate();
//Update axes with new limits
//if (max > min +1)
//{
//}
_fChart.AxisX.Min = XMin;
_fChart.AxisX.Max = XMax;
_fChart.AxisY.Min = YMin;
_fChart.AxisY.Max = YMax;
//lblDebug.Text = "x = (" + _fChart.AxisX.Min.ToString() + ";" + _fChart.AxisX.Max.ToString() + ") - y = (" + _fChart.AxisY.Min.ToString() + ";" + _fChart.AxisY.Max.ToString() + ") ; min = " + min.ToString() + " ; max = " + max.ToString();
//if (_fChart.DataSource is DataTable ds)
//{
// //get the objects from DataSource with the help of Data points
// UpdatedZoomRangeValues(ds.Rows[min][0].ToString(), ds.Rows[max][0].ToString(), _fChart.AxisY.Min, _fChart.AxisY.Max);
// //pdateLabels(ds[min].Date, ds[max].Date, flexChart1.AxisY.Min, flexChart1.AxisY.Max);
//}
//if (pnlAvgTable.Visible == true) InitializeAvgPanel();
//_chartZoomIsActive = true;
_fChart.EndUpdate();
}
// Clean up
_startPoint = _lastPoint = Point.Empty;
}
//if (e.Button == System.Windows.Forms.MouseButtons.Right) //pan
//{
// // Start panning
// _startPoint = _lastPoint = new System.Drawing.Point(-1, -1);
// if (_IsPanning)
// _startPanning = _IsPanning = false; //End Pan Operation
//}
}
catch (Exception ex)
{
ctrlLogger.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
ctrlLogger.Error(ex.Message + "\n" + ex.StackTrace);
if (ex.InnerException != null)
ctrlLogger.Error("Inner exception: " + ex.InnerException.Message);
}
}
/// <summary>
/// Mouse Move on Chart
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _fChart_MouseMove(object sender, MouseEventArgs e)
{
try
{
//Drawing zoom region rectangle borders and update selection range
if (_IsMouseDown && e.Button == MouseButtons.Left)
{
var ptCurrent = e.Location;
var left = (int)_fChart.PlotRect.Left;
var right = (int)_fChart.PlotRect.Right;
var top = (int)_fChart.PlotRect.Top;
var bot = (int)_fChart.PlotRect.Bottom;
//Making sure that rectangle's end coordinate lies within FlexChart's PlotRect
ptCurrent.X = ptCurrent.X < left ? left : ptCurrent.X > right ? right : ptCurrent.X;
ptCurrent.Y = ptCurrent.Y < top ? top : ptCurrent.Y > bot ? bot : ptCurrent.Y;
_lastPoint = ptCurrent;
_fChart.Refresh();
}
//if (e.Button == MouseButtons.Right) // Pan
//{
// if (_startPanning == false)
// {
// if (_IsPanning)
// _IsPanning = false;
// return;
// }
// _IsPanning = true; //Start the Pan operation
// _lastPoint = e.Location;
// var dataPoint = _fChart.PointToData(_startPoint); //Start
// var newDataPoint = _fChart.PointToData(_lastPoint); //End
// PerformPan(dataPoint, newDataPoint);
// _startPoint = _lastPoint;
//}
}
catch (Exception ex)
{
ctrlLogger.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
ctrlLogger.Error(ex.Message + "\n" + ex.StackTrace);
if (ex.InnerException != null)
ctrlLogger.Error("Inner exception: " + ex.InnerException.Message);
}
}
/// <summary>
/// Mouse Down => Zoom or Pan
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _fChart_MouseDown(object sender, MouseEventArgs e)
{
try
{
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
//Start Zooming
_IsMouseDown = true;
_startPoint = e.Location;
_lastPoint = Point.Empty;
}
//if (e.Button == System.Windows.Forms.MouseButtons.Right)
//{
// // Start panning
// _startPoint = e.Location;
// _startPanning = true;
//}
}
catch (Exception ex)
{
ctrlLogger.Error(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
ctrlLogger.Error(ex.Message + "\n" + ex.StackTrace);
if (ex.InnerException != null)
ctrlLogger.Error("Inner exception: " + ex.InnerException.Message);
}
}
/// <summary>
/// Render
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void _fChart_Rendered(object sender, RenderEventArgs e)
{
if (!_startPoint.IsEmpty && !_lastPoint.IsEmpty)
{
// draw selection
var p1 = _startPoint;
var p2 = _lastPoint;
e.Engine.SetFill(null);
e.Engine.SetStroke(Brushes.Red);
e.Engine.SetStrokeThickness(1);
e.Engine.SetStrokePattern(new double[] { 3, 3 });
e.Engine.DrawRect(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y), Math.Abs(p2.X - p1.X), Math.Abs(p2.Y - p1.Y));
}
//if (_IsLoading)
//{
// Axis axisX = _fChart.AxisX;
// Axis axisY = _fChart.AxisY;
// _xInitMin = ((IAxis)axisX).GetMin();
// _xInitMax = ((IAxis)axisX).GetMax();
// _yInitMin = ((IAxis)axisY).GetMin();
// _yInitMax = ((IAxis)axisY).GetMax();
// _IsLoading = false;
//}
}
/// <summary>
/// Pan
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
private void PerformPan(System.Drawing.PointF start, System.Drawing.PointF end)
{
double currentXMin = (_fChart.AxisX as C1.Chart.IAxis).GetMin();
double currentXMax = (_fChart.AxisX as C1.Chart.IAxis).GetMax();
double currentYMin = (_fChart.AxisY as C1.Chart.IAxis).GetMin();
double currentYMax = (_fChart.AxisY as C1.Chart.IAxis).GetMax();
var deltaX = (end.X - start.X);
var deltaY = (end.Y - start.Y);
_fChart.BeginUpdate();
////Pan along X-axis
if (currentXMin - deltaX >= _xInitMin && currentXMax - deltaX <= _xInitMax)
{
_fChart.AxisX.Min = Math.Max(currentXMin - deltaX, _xInitMin);
_fChart.AxisX.Max = Math.Min(currentXMax - deltaX, _xInitMax);
}
////Pan along Y-axis
if (currentYMin - deltaY >= _yInitMin && currentYMax - deltaY <= _yInitMax)
{
_fChart.AxisY.Min = Math.Max(currentYMin - deltaY, _yInitMin);
_fChart.AxisY.Max = Math.Min(currentYMax - deltaY, _yInitMax);
}
_fChart.EndUpdate();
}
#endregion