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();
}
}
}