using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Drawing.Drawing2D;
|
using System.Drawing;
|
using Eventech.Utils.Images;
|
|
namespace TProduct.PumpGraph.Picture
|
{
|
public partial class LxpMultiSpeedChart3
|
{
|
private void DrawAxisX()
|
{
|
//DrawAxisMinorX_Up(this._chartDiagramQH);//画较短的刻度线
|
//DrawAxisTitleQ_Up(this._chartDiagramQH);
|
//DrawAxisMajorX_Up(this._chartDiagramQH);//画主要的刻度短线
|
//DrawAxisLabelX_Up(this._chartDiagramQH);//画刻度数字
|
|
DrawAxisLabelX_Bottom(this._chartDiagramQH);//画刻度数字
|
DrawAxisMajorX_Bottom(this._chartDiagramQH);//画主要的刻度短线
|
DrawAxisMinorX_Bottom(this._chartDiagramQH);//画较短的刻度线
|
//DrawAxisTitleQ_Bottom(this._chartDiagramQH);//画“流量(m³/h)”
|
|
if (!_chartDiagramNPSH.IsEmpty)
|
{
|
DrawAxisLabelX_Bottom(this._chartDiagramNPSH);//画刻度数字
|
DrawAxisMajorX_Bottom(this._chartDiagramNPSH);//画主要的刻度短线
|
DrawAxisMinorX_Bottom(this._chartDiagramNPSH);//画较短的刻度线
|
// DrawAxisTitleQ_Bottom(this._chartDiagramNPSH);//画“流量(m³/h)”
|
}
|
|
if (_isDispCurveQE)
|
{
|
DrawAxisLabelX_Bottom(this._chartDiagramQE);//画刻度数字
|
DrawAxisMajorX_Bottom(this._chartDiagramQE);//画主要的刻度短线
|
DrawAxisMinorX_Bottom(this._chartDiagramQE);//画较短的刻度线
|
//DrawAxisTitleQ_Bottom(this._chartDiagramQE);//画“流量(m³/h)”
|
}
|
|
|
if (_isDispCurveQP)
|
{
|
DrawAxisLabelX_Bottom(this._chartDiagramQP);//画刻度数字
|
DrawAxisMajorX_Bottom(this._chartDiagramQP);//画主要的刻度短线
|
DrawAxisMinorX_Bottom(this._chartDiagramQP);//画较短的刻度线
|
DrawAxisTitleQ_Bottom(this._chartDiagramQP);//画“流量(m³/h)”
|
}
|
|
|
|
|
}
|
|
private bool IsInteralDispX(RectangleF chartDiagram)
|
{
|
double coordspace = _coordinateParas.CoordSpaceQ;
|
double coorminQ = _coordinateParas.CoordMinQ;//最小显示值
|
double coormax = (_coordinateParas.GridNumberX + 1) * coordspace + coorminQ;//刻度显示最大值
|
var gridSpaceWidthX = chartDiagram.Width / _coordinateParas.GridNumberX;//X轴上格子的宽度
|
|
if (gridSpaceWidthX > coormax.ToString().Length * _axisLabelSizeX * 1.1)
|
{
|
return false;
|
}
|
else
|
{
|
return true;
|
}
|
|
}
|
|
//绘制刻度显示值(下部)
|
private void DrawAxisLabelX_Bottom(RectangleF chartDiagram)
|
{
|
var gridSpaceWidthX = chartDiagram.Width / _coordinateParas.GridNumberX;//X轴上格子的宽度
|
double coorminQ = _coordinateParas.CoordMinQ;//最小显示值
|
double coordspace = _coordinateParas.CoordSpaceQ;
|
double coormax = (_coordinateParas.GridNumberX + 1) * coordspace + coorminQ;//刻度显示最大值
|
|
|
//X坐标显示刻度
|
bool isInteralDisap = IsInteralDispX(chartDiagram);
|
|
StringFormat sf = new StringFormat();
|
sf.Alignment = StringAlignment.Center; //水平居中
|
sf.LineAlignment = StringAlignment.Near; //垂直上对齐
|
|
using (var font = new System.Drawing.Font("Arial", _axisLabelSizeX, System.Drawing.FontStyle.Bold))
|
using (var brush = new System.Drawing.SolidBrush(_axisLabelColorQ))
|
{
|
for (int i = 0; i < _coordinateParas.GridNumberX + 1; i = i + 1)
|
{
|
if (isInteralDisap && i % 2 == 1)
|
{//间隔显示
|
continue;
|
}
|
float space = i * gridSpaceWidthX;
|
double kedu_d = coorminQ + i * coordspace;
|
if (kedu_d <= 0)
|
kedu_d = 0;
|
string kedu_str = "";
|
if (_unitQ == Eventech.Model.UnitQ.M3H)
|
{
|
kedu_str = kedu_d.ToString();
|
}
|
else
|
{
|
kedu_str = Math.Round(Eventech.Common.UnitQHelper.fromM3H(_unitQ, kedu_d), 3).ToString();
|
}
|
_graphics.DrawString(kedu_str, font, brush, new PointF(chartDiagram.Left + space, chartDiagram.Bottom + _axisLabelSpaceToDiagramQ), sf);
|
}
|
}
|
}
|
|
//绘制刻度显示值(上部)
|
private void DrawAxisLabelX_Up(RectangleF chartDiagram)
|
{
|
var gridSpaceWidthX = chartDiagram.Width / _coordinateParas.GridNumberX;//X轴上格子的宽度
|
double coorminQ = _coordinateParas.CoordMinQ;//最小显示值
|
double coordspace = _coordinateParas.CoordSpaceQ;
|
double coormax = (_coordinateParas.GridNumberX + 1) * coordspace + coorminQ;//刻度显示最大值
|
|
|
//X坐标显示刻度
|
bool isInteralDisap = IsInteralDispX(chartDiagram);
|
|
|
StringFormat sf = new StringFormat();
|
sf.Alignment = StringAlignment.Center; //水平居中
|
sf.LineAlignment = StringAlignment.Far; //垂直上对齐
|
|
using (var font = new System.Drawing.Font("Arial", _axisLabelSizeX, System.Drawing.FontStyle.Bold))
|
using (var brush = new System.Drawing.SolidBrush(_axisLabelColorQ))
|
{
|
for (int i = 0; i < _coordinateParas.GridNumberX + 1; i = i + 1)
|
{
|
if (isInteralDisap && i % 2 == 1)
|
{//间隔显示
|
continue;
|
}
|
float space = i * gridSpaceWidthX;
|
double kedu_d = coorminQ + i * coordspace;
|
if (kedu_d <= 0)
|
kedu_d = 0;
|
string kedu_str = "";
|
if (_unitQ == Eventech.Model.UnitQ.M3H)
|
{
|
kedu_str = kedu_d.ToString();
|
}
|
else
|
{
|
kedu_str = Math.Round(Eventech.Common.UnitQHelper.fromM3H(_unitQ, kedu_d), 3).ToString();
|
}
|
_graphics.DrawString(kedu_str, font, brush, new PointF(chartDiagram.Left + space, chartDiagram.Top - _axisLabelSpaceToDiagramQ - 1), sf);
|
}
|
}
|
}
|
|
//画X轴长刻度线
|
private void DrawAxisMajorX_Bottom(RectangleF chartDiagram)
|
{
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(AxisTickLineColor, AxisTickLineWidth))
|
{
|
for (int i = 0; i <= _coordinateParas.GridNumberX; i++)
|
{
|
float space = i * chartDiagram.Width / _coordinateParas.GridNumberX;//竖直线之间的间距
|
PointF startPt = new PointF(chartDiagram.Left + space, chartDiagram.Bottom);
|
PointF endPt = new PointF(chartDiagram.Left + space, chartDiagram.Bottom + _axisMajorTickLength);
|
_graphics.DrawLine(pen, startPt, endPt);
|
}
|
}
|
}
|
|
private void DrawAxisMajorX_Up(RectangleF chartDiagram)
|
{
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(AxisTickLineColor, AxisTickLineWidth))
|
{
|
for (int i = 0; i <= _coordinateParas.GridNumberX; i++)
|
{
|
float space = i * chartDiagram.Width / _coordinateParas.GridNumberX;//竖直线之间的间距
|
PointF startPt = new PointF(chartDiagram.Left + space, chartDiagram.Top);
|
PointF endPt = new PointF(chartDiagram.Left + space, chartDiagram.Top - _axisMajorTickLength);
|
_graphics.DrawLine(pen, startPt, endPt);
|
}
|
}
|
}
|
|
|
//画X轴短刻度线
|
private void DrawAxisMinorX_Bottom(RectangleF chartDiagram)
|
{
|
var gridSpaceWidthX = chartDiagram.Width / _coordinateParas.GridNumberX;//X轴上格子的宽度
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(AxisTickLineColor, AxisTickLineWidth))
|
{
|
for (int i = 0; i < _coordinateParas.GridNumberX; i++)
|
{
|
float space_tick = i * gridSpaceWidthX;//竖直线之间的间距
|
for (int j = 0; j < _axisMinorTickNumberX - 1; j++)
|
{
|
float space = j * gridSpaceWidthX / _axisMinorTickNumberX;
|
PointF startPt = new PointF(chartDiagram.Left + space + gridSpaceWidthX / _axisMinorTickNumberX + space_tick, chartDiagram.Bottom);
|
PointF endPt = new PointF(chartDiagram.Left + space + gridSpaceWidthX / _axisMinorTickNumberX + space_tick, chartDiagram.Bottom + _axisMinorTickLength);
|
_graphics.DrawLine(pen, startPt, endPt);
|
}
|
}
|
}
|
}
|
private void DrawAxisMinorX_Up(RectangleF chartDiagram)
|
{
|
var gridSpaceWidthX = chartDiagram.Width / _coordinateParas.GridNumberX;//X轴上格子的宽度
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(AxisTickLineColor, AxisTickLineWidth))
|
{
|
for (int i = 0; i < _coordinateParas.GridNumberX; i++)
|
{
|
float space_tick = i * gridSpaceWidthX;//竖直线之间的间距
|
for (int j = 0; j < _axisMinorTickNumberX - 1; j++)
|
{
|
float space = j * gridSpaceWidthX / _axisMinorTickNumberX;
|
PointF startPt = new PointF(chartDiagram.Left + space + gridSpaceWidthX / _axisMinorTickNumberX + space_tick, chartDiagram.Top);
|
PointF endPt = new PointF(chartDiagram.Left + space + gridSpaceWidthX / _axisMinorTickNumberX + space_tick, chartDiagram.Top - _axisMinorTickLength);
|
_graphics.DrawLine(pen, startPt, endPt);
|
}
|
}
|
}
|
}
|
|
|
//画X坐标说明,流量(m³/h)
|
private void DrawAxisTitleQ_Bottom(RectangleF chartDiagram)
|
{
|
StringFormat sf = new StringFormat();
|
sf.Alignment = StringAlignment.Center; //水平居中
|
sf.LineAlignment = StringAlignment.Near; //垂直上对齐
|
|
string title = string.Format("{0}({1})", TranslateString("流量"), Eventech.Common.UnitQHelper.GetEnUnitName(_unitQ));
|
PointF posi = new PointF();
|
posi.X = (chartDiagram.Left + _diagramRightBottomPt.X) / 2;
|
posi.Y = chartDiagram.Bottom + _axisTitleSpaceToDiagramQ;
|
using (var font = new System.Drawing.Font(GetAxisTitleFontName(), _axisTitleTextSizeQ, System.Drawing.FontStyle.Bold))
|
using (var brush = new System.Drawing.SolidBrush(AxisTitleTextColorQ))
|
{
|
_graphics.DrawString(title, font, brush, posi, sf);
|
}
|
}
|
|
private void DrawAxisTitleQ_Up(RectangleF chartDiagram)
|
{
|
StringFormat sf = new StringFormat();
|
sf.Alignment = StringAlignment.Center; //水平居中
|
sf.LineAlignment = StringAlignment.Far; //垂直上对齐
|
|
|
string title = string.Format("{0}({1})", TranslateString("流量"), Eventech.Common.UnitQHelper.GetEnUnitName(_unitQ));
|
PointF posi = new PointF();
|
posi.X = (chartDiagram.Left + _diagramRightBottomPt.X) / 2;
|
posi.Y = chartDiagram.Top - _axisTitleSpaceToDiagramQ ;
|
using (var font = new System.Drawing.Font(GetAxisTitleFontName(), _axisTitleTextSizeQ, System.Drawing.FontStyle.Bold))
|
using (var brush = new System.Drawing.SolidBrush(AxisTitleTextColorQ))
|
{
|
_graphics.DrawString(title, font, brush, posi, sf);
|
}
|
}
|
|
|
protected string GetAxisTitleFontName()
|
{
|
if (_language == Eventech.Model.eLocalizationType.zhCN)
|
{
|
return "宋体";
|
}
|
else
|
{
|
return "Arial";
|
}
|
}
|
}
|
}
|