1.引入Chart控件,如图
添加一个XY 选择的复选框,给chart添加chart_MouseMove,chart_MouseDown,chart_MouseUp事件
事件代码如下,对象命名随意请忽视
public double chartBeforePointX = 0; // 用于记录鼠标上次移动的点,用于判断是左移还是右移
public double chartBeforePointY = 0; // 用于记录鼠标上次移动的点,用于判断是左移还是右移
public bool chartFlag;
int X1 = 0;
private void chartNuclide_MouseDown(object sender, MouseEventArgs e)
{
//var hitTestResult = this.chartNuclide.HitTest(e.X, e.Y);
A2 = true;
X = (int)cursor1;
chartBeforePointX = 0;
chartBeforePointY = 0;
chartFlag = true;
Z = chartNuclide.ChartAreas[0].CursorX.Position;
//chartNuclide.ChartAreas[0].CursorX
try
{
cursorX = chartNuclide.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
//double daozhi = 0;
//daozhi = ((double)cursorX / CFN);
if (cursorX > 0)
{
label36.Text = cursorX.ToString("0.00");
label35.Text = ((int)originalData1[(int)(cursorX/ CFN)] < 0 ? 0 : (int)originalData1[(int)(cursorX / CFN)]).ToString();
}
}
catch (Exception)
{
}
}
private void chartNuclide_MouseUp(object sender, MouseEventArgs e)
{
chartFlag = false;
}
bool A2 = false;
private void chartNuclide_SelectionRangeChanged(object sender, CursorEventArgs e)
{
try
{
if (A2)
{
Y = cursor1;
A2 = false;
double end = 0;
double start = 0;
if (X > Y)
{
end = Y;
start = X;
}
else
{
start = Y;
end = X;
}
rOIS2 = new ROI()
{
point1 = end,
point2 = start
};
double db1 = ZuoBiaoOriginal.Max<double>(sp => sp);
this.chartNuclide.ChartAreas[0].AxisY.Minimum = 0;
this.chartNuclide.ChartAreas[0].AxisY.Maximum = db1 + (db1 * 0.3) + 1;
this.chartNuclide.Series[0].Points.Clear();
for (int i = 0; i < ZuoBiaoOriginal.Length; i++)
{
this.chartNuclide.Series[0].Points.AddXY(i + 1, ZuoBiaoOriginal[i]);
if (i >= end && i <= start && chartNuclide.Series[0].Points[i].YValues[0] > 0)
{
chartNuclide.Series[0].Points[i].Color = Color.Aqua;
}
for (int s = 0; s < rOIS1.Count; s++)
{
if (rOIS1[s] != null && i >= rOIS1[s].point1 && i <= rOIS1[s].point2)
{
chartNuclide.Series[0].Points[i].Color = Color.Red;
}
}
}
}
}
catch (Exception)
{
}
}
private void chartNuclide_MouseMove(object sender, MouseEventArgs e)
{
try
{
double cursorX = chartNuclide.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
double cursorY = chartNuclide.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
cursor1 = (int)cursorX;
if (chartFlag)
{
//e.x代表的是当前点
double CW12 = ZuoBiaoOriginal.Max<double>(sp => sp) * 1.3;
if (ckx.Checked)
{
double x = (double)((chartNuclide.ChartAreas[0].AxisX.ScaleView.ViewMaximum - chartNuclide.ChartAreas[0].AxisX.ScaleView.ViewMinimum) * 0.03);
if (chartBeforePointX != 0 && e.X - chartBeforePointX > 0)//往右移动了
{
if (chartNuclide.ChartAreas[0].AxisX.ScaleView.Position > x)
{
chartNuclide.ChartAreas[0].AxisX.ScaleView.Position -= x;
}
else
{
chartNuclide.ChartAreas[0].AxisX.ScaleView.Position -= chartNuclide.ChartAreas[0].AxisX.ScaleView.Position;
}
}
else if (chartBeforePointX != 0 && e.X - chartBeforePointX < 0)//往左移动了
{
if (chartNuclide.ChartAreas[0].AxisX.ScaleView.ViewMaximum < (int)Size)
{
if ((int)Size - chartNuclide.ChartAreas[0].AxisX.ScaleView.ViewMaximum < x)
{
chartNuclide.ChartAreas[0].AxisX.ScaleView.Position += (int)Size - (int)chartNuclide.ChartAreas[0].AxisX.ScaleView.ViewMaximum;
}
else
{
chartNuclide.ChartAreas[0].AxisX.ScaleView.Position += x;
}
}
}
chartNuclide.ChartAreas[0].AxisX.ScaleView.Position = (int)chartNuclide.ChartAreas[0].AxisX.ScaleView.Position;
chartBeforePointX = e.X;
}
if (cky.Checked)
{
double y = (double)((chartNuclide.ChartAreas[0].AxisY.ScaleView.ViewMaximum - chartNuclide.ChartAreas[0].AxisY.ScaleView.ViewMinimum) * 0.03);
if (chartBeforePointY != 0 && e.Y - chartBeforePointY > 0)//往上移动了
{
if (chartNuclide.ChartAreas[0].AxisY.ScaleView.ViewMaximum >= CW12)
{
return;
}
else
{
chartNuclide.ChartAreas[0].AxisY.ScaleView.Position += y;
}
}
else if (chartBeforePointY != 0 && e.Y - chartBeforePointY < 0)//往下移动了
{
if (chartNuclide.ChartAreas[0].AxisY.ScaleView.Position > y)
{
chartNuclide.ChartAreas[0].AxisY.ScaleView.Position -= y;
}
else
{
chartNuclide.ChartAreas[0].AxisY.ScaleView.Position -= chartNuclide.ChartAreas[0].AxisY.ScaleView.Position;
}
}
chartBeforePointY = e.Y;
chartNuclide.ChartAreas[0].AxisY.ScaleView.Position = (int)chartNuclide.ChartAreas[0].AxisY.ScaleView.Position;
}
}
}
catch (Exception)
{
}
}
然后就可以进行缩放了 看下图的X轴
曲线ROI兴趣区绘制见下篇文章,暂时还没写。