ZedGraph 源碼修改 選擇X軸放大
通過修改源碼實現(xiàn) 圖譜區(qū)域選擇區(qū)域縮放比吭,X軸可以實現(xiàn)選中區(qū)域橫向縮放
1.在ZedGraphControl 類中增加 _isXSelectZoom 屬性咐蚯,用來標識是否選擇X軸坐標
image.png
- 在 MasterPane 類中增加 FindXPaneRect 方法用于查找X坐標軸具體區(qū)域,此方法也可以直接改為返回bool 僅用于驗證
/// <summary>
/// 查找X軸空白
/// </summary>
/// <param name="mousePt"></param>
/// <returns></returns>
public GraphPane FindXPaneRect(PointF mousePt)
{
foreach (GraphPane pane in _paneList)
{
double chartX= pane.Chart._rect.X;
double startChartY = pane.Chart._rect.Y+ pane.Chart._rect.Height;
if (mousePt.Y > startChartY)
return pane;
}
return null;
}
3.在ZedGraphControl.Events 類中 ZedGraphControl_MouseDown事件中修改代碼如下
image.png
- 在ZedGraphControl.Events 類中CalcScreenRect 方法中 修改如下代碼,控制選擇區(qū)域虛線矩形顯示問題
private Rectangle CalcScreenRect( Point mousePt1, Point mousePt2 )
{
Point screenPt = PointToScreen( mousePt1 );
Size size = new Size( mousePt2.X - mousePt1.X, mousePt2.Y - mousePt1.Y );
Rectangle rect = new Rectangle( screenPt, size );
if ( _isZooming )
{
Rectangle chartRect = Rectangle.Round( _dragPane.Chart._rect );
Point chartPt = PointToScreen( chartRect.Location );
if ( !_isEnableVZoom || _isXSelectZoom)
{
rect.Y = chartPt.Y;
rect.Height = chartRect.Height + 1;
}
else if ( !_isEnableHZoom )
{
rect.X = chartPt.X;
rect.Width = chartRect.Width + 1;
}
}
return rect;
}
image.png
5.修改 ZedGraphControl.Events 類中HandleZoomFinish 方法
image.png
image.png