using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using Eventech.Utils.Images; namespace TProduct.PumpGraph.Picture { public partial class LxpSeriesChart { #region 坐标 protected Eventech.Model.QhCoordinateParas _coordinateParas = null; public void SetCoordinate(string strChartCoord) { SetCoordinate(Eventech.Model.QhCoordinateParas.ToParameter(strChartCoord)); } public void SetCoordinate(Eventech.Model.QhCoordinateParas coordinateParas) { this._coordinateParas = coordinateParas; } #endregion #region 显示设置 protected bool _isDispAxisTitle = true; //刻度线颜色 protected Color _axisTitleLineColor = Color.FromArgb(120, Color.Black); //网格线Y颜色 protected Color _gridLineColor = Color.FromArgb(60, Color.Black); public Color GridLineColor { get { return _gridLineColor; } set { _gridLineColor = value; } } /// /// /// protected float _gridLineWidth = 1f; public float GridLineWidthY { get { return _gridLineWidth; } set { _gridLineWidth = value; } } /// /// /// protected Color _axisLabelColor = Color.Black; public Color AxisLabelColor { get { return _axisLabelColor; } set { _axisLabelColor = value; } } /// /// 长刻度线的长度 /// public float AxisMajorTickLength { get { return _axisMajorTickLength; } set { _axisMajorTickLength = value; } } protected float _axisMajorTickLength = 10; /// /// /// private float _axisLabelSizeQ = 12f; public float AxisLabelSizeQ { get { return _axisLabelSizeQ; } set { _axisLabelSizeQ = value; } } /// /// /// private float _axisLabelSize = 12f; public float AxisLabelSizeH { get { return _axisLabelSize; } set { _axisLabelSize = value; } } protected float _axisTitleDistanceH = 55;//文字离X轴的距离 protected float _axisTitleDistanceQ = 75;//文字离Y轴的距离 protected float _axisLabelDistanceH = 10;//文字离X轴的距离 protected float _axisLabelDistanceQ = 35;//文字离Y轴的距离 private float _axisTitleTextSizeQ = 16f; private float _axisTitleTextSizeH = 16f; private Color _axisTitleTextColorQ = Color.Black; private Color _axisTitleTextColorH = Color.Black; #endregion protected void DrawDiagram() { DrawGridLineQ(); DrawGridLineH(); using (System.Drawing.Pen pen = new System.Drawing.Pen(_axisTitleLineColor, 1.5f)) _graphics.DrawRectangle(pen, this._chartDiagramSize.X, _chartDiagramSize.Y, _chartDiagramSize.Width, _chartDiagramSize.Height); } /// /// 绘制流量曲线网格(竖直) /// protected void DrawGridLineQ() { using (var brush = new System.Drawing.SolidBrush(_axisLabelColor)) using (var font = new System.Drawing.Font("Arial", _axisLabelSize, System.Drawing.FontStyle.Regular)) using (var grid_pen = new System.Drawing.Pen(_gridLineColor, _gridLineWidth)) using (var tick_pen = new System.Drawing.Pen(_axisTitleLineColor, 1.5f)) { float[] dashValues = { 7, 3 }; grid_pen.DashPattern = dashValues; for (int i = 0; i < _coordinateParas.AxisLabelQ.Count; i++) { double Q = _coordinateParas.AxisLabelQ[i]; string content = Math.Round(Eventech.Common.UnitQHelper.fromM3H(_coordinateParas.UnitQ, Q), 2).ToString(); float px = MapRealToPictQ(Q); if (float.IsNaN(px)){ //do return; } PointF pt0 = new PointF(); pt0.X = px; pt0.Y = _chartDiagramSize.Bottom ; PointF pt1 = new PointF(); pt1.X = px; pt1.Y = _chartDiagramSize.Top; PointF pt2 = new PointF(); pt2.X = px; pt2.Y = _chartDiagramSize.Bottom + _axisMajorTickLength; _graphics.DrawLine(grid_pen, pt0, pt1); _graphics.DrawLine(tick_pen, pt0, pt2); //刻度值 PointF pt = new PointF(); pt.X = pt1.X; pt.Y = _chartDiagramSize.Bottom + _axisLabelDistanceQ; _graphics.DrawString(content, pt, font, _axisLabelColor, StringAlignment.Center, StringAlignment.Far, 0); } } } /// /// 绘制扬程曲线网格(水平) /// protected void DrawGridLineH() { using (var brush = new System.Drawing.SolidBrush(_axisLabelColor)) using (var font = new System.Drawing.Font("Arial", _axisLabelSize, System.Drawing.FontStyle.Regular)) using (var grid_pen = new System.Drawing.Pen(_gridLineColor, _gridLineWidth)) using (var tick_pen = new System.Drawing.Pen(_axisTitleLineColor,1.5f)) { float[] dashValues = { 7, 3 }; grid_pen.DashPattern = dashValues; for (int i = 0; i < _coordinateParas.AxisLabelH.Count; i++) { double h = _coordinateParas.AxisLabelH[i]; string content = Math.Round(Eventech.Common.UnitHHelper.fromM(_coordinateParas.UnitH, h), 2).ToString(); var py = MapRealToPictH(h); PointF pt0 = new PointF(); pt0.X = _chartDiagramSize.Left ; pt0.Y = py; PointF pt1 = new PointF(); pt1.X = _chartDiagramSize.Left - _axisMajorTickLength; pt1.Y = py; PointF pt2 = new PointF(); pt2.X = _chartDiagramSize.Right; pt2.Y = py; _graphics.DrawLine(grid_pen, pt0, pt2); _graphics.DrawLine(tick_pen, pt0, pt1); //刻度值 PointF pt = new PointF(); pt.X = _chartDiagramSize.Left - _axisLabelDistanceH; pt.Y = pt1.Y; _graphics.DrawString(content, pt, font, _axisLabelColor, StringAlignment.Far, StringAlignment.Center, 0); } } } /// /// 画X坐标说明 /// protected void DrawAxisTitleQ() { string title = string.Format("{0}({1})", "Q", Eventech.Common.UnitQHelper.GetEnUnitName(this._coordinateParas.UnitQ)); PointF pt = new PointF(); pt.X = _chartDiagramSize.X + _chartDiagramSize.Width / 2 - 5; pt.Y = _chartDiagramSize.Bottom + _axisTitleDistanceQ; using (var font = new System.Drawing.Font("Arial", _axisTitleTextSizeQ, System.Drawing.FontStyle.Regular)) { _graphics.DrawString(title, pt, font, _axisTitleTextColorQ, StringAlignment.Near, StringAlignment.Far, 0); } } /// /// / /// protected void DrawAxisTitleH() { string title = string.Format("{0}({1})", "H", Eventech.Common.UnitHHelper.GetEnUnitName(this._coordinateParas.UnitH)); PointF pt = new PointF(); pt.X = (float)(_chartDiagramSize.X - _axisTitleDistanceH); pt.Y = _chartDiagramSize.Y + _chartDiagramSize.Height / 2; using (var font = new Font("Arial", _axisTitleTextSizeH)) { _graphics.DrawString(title, pt, font, _axisTitleTextColorQ, StringAlignment.Far, StringAlignment.Center, -90); } _graphics.ResetTransform(); } } }