//设置鼠标划过折线点时不显示图例
chartControl1.CrosshairEnabled = DefaultBoolean.False;
async void SetDataDeepChart(List<ChartData> list)
{
try
{
#region 按采集时间分组用于创建折线
//按测点名深度降序排列,第一条为Y轴最大值
//var orderList = list.OrderByDescending(o => o.Name.Split('-')[1]).ToList();
string name = list[0].Name;
string chartName = name.Length == 4 ? name.Substring(0, 2) : name.Substring(0, 3);
var newList = from fx in list
where !string.IsNullOrEmpty(fx.Name)
group fx by fx.Time.Date
into b
select new
{
b.Key,
Data = b
};
#endregion
#region 添加折线图
foreach (var item in newList.OrderBy(o=>o.Key))
{
Series series = new Series
{
Name = chartName + @"-" + item.Key.ToString("yyyy.MM.dd"),
ValueScaleType = ScaleType.Numerical,
ArgumentScaleType = ScaleType.Numerical
};
LineSeriesView lineSeriesView1 = new LineSeriesView
{
MarkerVisibility = DefaultBoolean.True
};
series.View = lineSeriesView1; //new LineSeriesView();
//设置鼠标悬停后提示框显示格式 {S}-名称 {A}-X轴值 {V}-Y轴值
series.CrosshairLabelPattern = "{S}:{A}:{V}";
Series series1 = new Series
{
Name = chartName + @"-" + item.Key.ToString("yyyy.MM.dd"),
ValueScaleType = ScaleType.Numerical,
ArgumentScaleType = ScaleType.Numerical
};
LineSeriesView lineSeriesView2 = new LineSeriesView
{
MarkerVisibility = DefaultBoolean.True
};
series1.View = lineSeriesView2; // new LineSeriesView();
//设置鼠标悬停后提示框显示格式 {S}-名称 {A}-X轴值 {V}-Y轴值
series1.CrosshairLabelPattern = "{S}:{A}:{V}";
var newDtos = list.Where(o => o.Time.Date == item.Key).ToList();
foreach (var dto in newDtos.OrderBy(o=>o.Name))
{
//时间位移
series.Points.Add(new SeriesPoint(_controls.FirstOrDefault(o => o.Name == dto.Name)?.Depth,dto.ChangeSum));
//series.Points.Add(new SeriesPoint(dto.ChangeSum, _controls.FirstOrDefault(o=>o.Name==dto.Name)?.Depth));
//时间变化速率
//series1.Points.Add(new SeriesPoint(dto.ChangeV, _controls.FirstOrDefault(o => o.Name == dto.Name)?.Depth));
series1.Points.Add(new SeriesPoint(_controls.FirstOrDefault(o => o.Name == dto.Name)?.Depth, dto.ChangeV));
}
chartControl1.Series.Add(series);
chartControl2.Series.Add(series1);
}
#endregion
#region 根据类型和等级获取控制值,累积变化量,变化速率
ControlGetAllDto getAllDto = new ControlGetAllDto
{
ProjectKey = _project.ProjectID.ToString()
};
//List<ControlDto> dtos = await controlService.GetControlAll(getAllDto);
//ControlDto firstDto = dtos.FirstOrDefault(o => o.TypeName == _typeName && o.Level == _level);
//if (firstDto == null)
// return;
#endregion
#region 添加报警值和控制值的警报线
var xyDiagram1 = (XYDiagram)chartControl1.Diagram;
//设置鼠标滚轮时折线图随着发生变大或缩小
xyDiagram1.EnableAxisXScrolling = true;
xyDiagram1.EnableAxisXZooming = true;
//设置X轴显示年月日时分秒
xyDiagram1.AxisX.DateTimeScaleOptions.MeasureUnit= DateTimeMeasureUnit.Second;
xyDiagram1.AxisX.Label.TextPattern= "{A:yyyy-MM-dd HH:mm:ss}";
xyDiagram1.AxisX.MinorCount = 1;//刻度间隔个数为1
xyDiagram1.AxisX.NumericScaleOptions.AutoGrid = false;
xyDiagram1.AxisX.NumericScaleOptions.GridSpacing = 1D;//间隔为1
xyDiagram1.AxisX.VisibleInPanesSerializable = "-1";
xyDiagram1.AxisX.WholeRange.Auto = false;
xyDiagram1.AxisX.WholeRange.AutoSideMargins = false;
//string maxValue = list[0].Name.Split('-')[1];
//if (_project.Name == "3#院办公大楼")
//{
// xyDiagram1.AxisX.WholeRange.MaxValueSerializable = "14";
//}
//xyDiagram1.AxisX.WholeRange.MinValueSerializable = "0";
xyDiagram1.AxisX.WholeRange.SideMarginsValue = 0D;//边界值,最大值=最大值+边界值
xyDiagram1.AxisX.Reverse = true;//Y轴坐标值反转显示,即最上面是0,越往下值越大
xyDiagram1.Rotated = true;//X轴和Y轴互换即竖向画折线
//ConstantLine constantLine1 = new ConstantLine
//{
// AxisValueSerializable =_controls.FirstOrDefault(o=>o.Name==name).ChangeSum.ToString(),// firstDto.ChangeSum.ToString(),
// Color = Color.Yellow,
// Name = "Constant Line 1",
// ShowInLegend = false
//};
//constantLine1.Title.Text = _typeName = @"报警值(" + _controls.FirstOrDefault(o => o.Name == name).ChangeSum + @")";
//constantLine1.Title.Alignment = ConstantLineTitleAlignment.Far;
//constantLine1.Title.TextColor = Color.Red;
ConstantLine constantLine2 = new ConstantLine
{
AxisValueSerializable = _controls.FirstOrDefault(o => o.Name == name).Value.ToString(),//firstDto.Value.ToString(),
Color = Color.Red,
Name = "Constant Line 2",
ShowInLegend = false
};
// firstDto.Value
constantLine2.Title.Text = _typeName = @"控制值(" + _controls.FirstOrDefault(o => o.Name == name).Value + @")";
constantLine2.Title.Alignment = ConstantLineTitleAlignment.Far;
constantLine2.Title.TextColor = Color.Red;
xyDiagram1.AxisX.Title.Text = @"深度(m)";
xyDiagram1.AxisX.Title.Visibility = DefaultBoolean.True;
xyDiagram1.AxisY.Title.Text = @"位移(mm)";
xyDiagram1.AxisY.Title.Visibility = DefaultBoolean.True;
xyDiagram1.AxisY.ConstantLines.AddRange(new[]
{
constantLine2
});
#endregion
#region 添加变化速率的警报线
var xyDiagram2 = (XYDiagram)chartControl2.Diagram;
xyDiagram2.AxisX.MinorCount = 1;//刻度间隔个数为1
xyDiagram2.AxisX.NumericScaleOptions.AutoGrid = false;
xyDiagram2.AxisX.NumericScaleOptions.GridSpacing = 1D;//间隔为1
xyDiagram2.AxisX.VisibleInPanesSerializable = "-1";
xyDiagram2.AxisX.WholeRange.Auto = false;
xyDiagram2.AxisX.WholeRange.AutoSideMargins = false;
//if (_project.Name == "3#院办公大楼")
//{
// xyDiagram2.AxisX.WholeRange.MaxValueSerializable = "14";
//}
//xyDiagram2.AxisX.WholeRange.MinValueSerializable = "0";
xyDiagram2.AxisX.WholeRange.SideMarginsValue = 0D;//边界值,最大值=最大值+边界值
xyDiagram2.AxisX.Reverse = true;//Y轴坐标值反转显示,即最上面是0,越往下值越大
xyDiagram2.Rotated = true;//X轴和Y轴互换即竖向画折线
xyDiagram2.AxisX.Title.Text = @"深度(m)";
xyDiagram2.AxisX.Title.Visibility = DefaultBoolean.True;
xyDiagram2.AxisY.Title.Text = @"变化率(mm/d)";
xyDiagram2.AxisY.Title.Visibility = DefaultBoolean.True;
ConstantLine constantLine3 = new ConstantLine
{
AxisValueSerializable = _controls.FirstOrDefault(o => o.Name == name).ChangeV.ToString(),//firstDto.ChangeV.ToString(),
Color = Color.Red,
Name = "Constant Line 3",
ShowInLegend = false
};
constantLine3.Title.Text = @"变化速率(" + _controls.FirstOrDefault(o => o.Name == name).ChangeV + @")";
constantLine3.Title.Alignment = ConstantLineTitleAlignment.Far;
constantLine3.Title.TextColor = Color.Red;
xyDiagram2.AxisY.ConstantLines.AddRange(new[]
{
constantLine3
});
#endregion
}
catch (Exception ex)
{
FileLogUtility.Error(ex);
}
}