using DevExpress.XtraCharts;
|
using DevExpress.XtraEditors;
|
using System;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Drawing.Drawing2D;
|
using System.Linq;
|
using System.Windows.Forms;
|
|
namespace TProduct.WinFrmUI.TPump
|
{
|
//拓展XtraChart DevExpress.XtraReports.UI.XRChart
|
static public class ExtendXtraChart
|
{
|
#region 导出
|
public static void ExportPictByDlg(this DevExpress.XtraCharts.ChartControl chart)
|
{
|
SaveFileDialog saveFileDlg = new SaveFileDialog();
|
saveFileDlg.Filter = "jpg 图片(*.jpg)|*.jpg|bmp 位图(*.bmp)|*.bmp|PDF 文件(*.pdf)|*.pdf|Execl 文件(*.xls)|*.xls";
|
if (saveFileDlg.ShowDialog() == DialogResult.OK)
|
{
|
string strFilter = saveFileDlg.FileName.Substring(saveFileDlg.FileName.Length - 3, 3);
|
switch (strFilter.ToUpper())
|
{
|
case "XLS":
|
chart.ExportToXls(saveFileDlg.FileName);
|
break;
|
case "PDF":
|
chart.ExportToPdf(saveFileDlg.FileName);
|
break;
|
case "JPG":
|
case "BMP":
|
chart.ExportToImage(saveFileDlg.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
|
break;
|
default:
|
//不支持的格式
|
XtraMessageBox.Show(saveFileDlg.FileName);
|
break;
|
}
|
}
|
}
|
public static void ExportChart2Xml(this DevExpress.XtraCharts.ChartControl chart)
|
{
|
SaveFileDialog saveFileDlg = new SaveFileDialog();
|
saveFileDlg.Filter = "xml 图形(*.xml)|*.xml";
|
if (saveFileDlg.ShowDialog() == DialogResult.OK)
|
{
|
//string strFilter = saveFileDlg.strFilePath.Substring(saveFileDlg.strFilePath.Length - 3, 3);
|
chart.SaveToFile(saveFileDlg.FileName);
|
}
|
}
|
#endregion
|
|
|
|
|
#region 绘制网格线
|
//不进行坐标转化
|
public static void DrawGridLineY(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
Eventech.Model.LxpCoordinateParas coordinateParas, Color axisColor, float axisWidth = 0.2f, bool isFullGridLine = false)
|
{
|
if (coordinateParas == null)
|
return;
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
|
using (Pen pen = new Pen(axisColor, axisWidth))
|
{
|
var maxQ = coordinateParas.CoordMinQ + coordinateParas.GridNumberX * coordinateParas.CoordSpaceQ;
|
|
int iCurveNum = 1;//至少有1条QH
|
if (coordinateParas.DispPanelQE == 0)
|
iCurveNum++;
|
if (coordinateParas.DispPanelQP == 0)
|
iCurveNum++;
|
if (coordinateParas.DispPanelNPSH == 0)
|
iCurveNum++;
|
|
if (iCurveNum > 1 || isFullGridLine)
|
{
|
for (int i = 1; i < coordinateParas.GridNumberY; i++)
|
{
|
var h = coordinateParas.CoordMinH + i * coordinateParas.CoordSpaceH;
|
|
ControlCoordinates coorStart = mainDiagram.DiagramToPoint(coordinateParas.CoordMinQ, h);
|
ControlCoordinates coorEnd = mainDiagram.DiagramToPoint(maxQ, h);
|
g.DrawLine(pen, coorStart.Point, coorEnd.Point);
|
}
|
}
|
else
|
{
|
for (int i = coordinateParas.StartLineNoH + 1; i < coordinateParas.EndLineNoH; i++)
|
{
|
var h = coordinateParas.CoordMinH + i * coordinateParas.CoordSpaceH;
|
|
ControlCoordinates coorStart = mainDiagram.DiagramToPoint(coordinateParas.CoordMinQ, h);
|
ControlCoordinates coorEnd = mainDiagram.DiagramToPoint(maxQ, h);
|
g.DrawLine(pen, coorStart.Point, coorEnd.Point);
|
}
|
}
|
}
|
}
|
//不进行坐标转化
|
public static void DrawGridLineX(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.QhCoordinateParas coordinateParas)
|
{
|
if (coordinateParas == null)
|
return;
|
|
double yMin = coordinateParas.ToChartValueH(coordinateParas.AxisLabelH.First());
|
double yMax = coordinateParas.ToChartValueH(coordinateParas.AxisLabelH.Last());
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
using (Pen pen = new Pen(TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.GridLinesColorX, 0.2f))
|
{
|
for (int i = 1; i < coordinateParas.AxisLabelQ.Count() - 1; i++)
|
{
|
var q = coordinateParas.ToChartValueQ(coordinateParas.AxisLabelQ[i]);
|
|
ControlCoordinates coorStart = mainDiagram.DiagramToPoint(q, yMin);
|
ControlCoordinates coorEnd = mainDiagram.DiagramToPoint(q, yMax);
|
g.DrawLine(pen, coorStart.Point, coorEnd.Point);
|
}
|
}
|
}
|
public static void DrawGridLineY(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.QhCoordinateParas coordinateParas)
|
{
|
if (coordinateParas == null)
|
return;
|
|
double xMin = coordinateParas.ToChartValueQ(coordinateParas.AxisLabelQ.First());
|
double xMax = coordinateParas.ToChartValueQ(coordinateParas.AxisLabelQ.Last());
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
using (Pen pen = new Pen(TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.GridLinesColorY, 0.2f))
|
{
|
for (int i = 1; i < coordinateParas.AxisLabelH.Count() - 1; i++)
|
{
|
var h = coordinateParas.ToChartValueH(coordinateParas.AxisLabelH[i]);
|
|
ControlCoordinates coorStart = mainDiagram.DiagramToPoint(xMin, h);
|
ControlCoordinates coorEnd = mainDiagram.DiagramToPoint(xMax, h);
|
g.DrawLine(pen, coorStart.Point, coorEnd.Point);
|
}
|
}
|
}
|
|
//直接用原始值即可
|
public static void DrawGridLineX0(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.QhCoordinateParas coordinateParas)
|
{
|
if (coordinateParas == null)
|
return;
|
|
double yMin = coordinateParas.AxisLabelH.First();
|
double yMax = coordinateParas.AxisLabelH.Last();
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
using (Pen pen = new Pen(TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.GridLinesColorX, 0.2f))
|
{
|
for (int i = 1; i < coordinateParas.AxisLabelQ.Count() - 1; i++)
|
{
|
var q = coordinateParas.AxisLabelQ[i];
|
|
ControlCoordinates coorStart = mainDiagram.DiagramToPoint(q, yMin);
|
ControlCoordinates coorEnd = mainDiagram.DiagramToPoint(q, yMax);
|
g.DrawLine(pen, coorStart.Point, coorEnd.Point);
|
}
|
}
|
}
|
public static void DrawGridLineY0(this DevExpress.XtraCharts.ChartControl chart, Graphics g, Eventech.Model.QhCoordinateParas coordinateParas)
|
{
|
if (coordinateParas == null)
|
return;
|
|
double xMin = coordinateParas.AxisLabelQ.First();
|
double xMax = coordinateParas.AxisLabelQ.Last();
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
using (Pen pen = new Pen(TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.GridLinesColorY, 0.2f))
|
{
|
for (int i = 1; i < coordinateParas.AxisLabelH.Count() - 1; i++)
|
{
|
var h = coordinateParas.AxisLabelH[i];
|
|
ControlCoordinates coorStart = mainDiagram.DiagramToPoint(xMin, h);
|
ControlCoordinates coorEnd = mainDiagram.DiagramToPoint(xMax, h);
|
g.DrawLine(pen, coorStart.Point, coorEnd.Point);
|
}
|
}
|
}
|
|
#endregion
|
|
|
|
#region 画工作点
|
|
public static void DrawDesignPoints4Cross(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
List<Eventech.Model.FeatPoint> designPoints,
|
Color pointColor, float curveWidth = 2f,
|
Eventech.Model.eDesignPointDispType dispType = Eventech.Model.eDesignPointDispType.LeftDownHalfCross,
|
Eventech.Model.PointToleranceParas crossPoint = null)
|
{
|
if (designPoints == null)
|
return;
|
foreach (var pt in designPoints)
|
DrawDesignPoint4Cross(chart, g, pt, pointColor, curveWidth, dispType, crossPoint);
|
}
|
|
public static void DrawDesignPoint4Triangle(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
List<Eventech.Model.FeatPoint> designPoints,
|
Eventech.Model.LxpCoordinateParas coordinate,
|
Color pointColor, float curveWidth = 2f)
|
{
|
if (designPoints == null)
|
return;
|
foreach (var pt in designPoints)
|
DrawDesignPoint4Triangle(chart, g, pt, coordinate, pointColor, curveWidth);
|
}
|
|
public static void DrawDesignPoint4Cross(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
Eventech.Model.FeatPoint designPoint,
|
Color pointColor, float curveWidth = 2f,
|
Eventech.Model.eDesignPointDispType dispType = Eventech.Model.eDesignPointDispType.LeftDownHalfCross,
|
Eventech.Model.PointToleranceParas crossPoint = null)
|
{
|
if (designPoint == null)
|
return;
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth))
|
{
|
if (dispType == Eventech.Model.eDesignPointDispType.LeftDownHalfCross)
|
{//
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point;
|
//一级4.5% 二级是8%
|
Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X * 0.92, Y = designPoint.Y };
|
System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point;
|
//一级3.0% 二级是5%
|
Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 0.95 };
|
System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point;
|
|
g.DrawLine(pen, dpPointX, dpPoint);
|
g.DrawLine(pen, dpPointY, dpPoint);
|
|
}
|
else if (dispType == Eventech.Model.eDesignPointDispType.Cross)
|
{
|
if (crossPoint == null)
|
{
|
Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * 0.92, Y = designPoint.Y };
|
System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * 1.08, Y = designPoint.Y };
|
System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 0.95 };
|
System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 1.05 };
|
System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point;
|
|
g.DrawLine(pen, dpPointX1, dpPointX2);
|
g.DrawLine(pen, dpPointY1, dpPointY2);
|
}
|
else
|
{
|
Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * crossPoint.TolRatioMinQ, Y = designPoint.Y };
|
System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * crossPoint.TolRatioMaxQ, Y = designPoint.Y };
|
System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * crossPoint.TolRatioMinH };
|
System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * crossPoint.TolRatioMaxH };
|
System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point;
|
|
g.DrawLine(pen, dpPointX1, dpPointX2);
|
g.DrawLine(pen, dpPointY1, dpPointY2);
|
}
|
}
|
else if (dispType == Eventech.Model.eDesignPointDispType.CrossAnPointCircle)
|
{
|
if (crossPoint == null)
|
{
|
Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * 0.92, Y = designPoint.Y };
|
System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * 1.08, Y = designPoint.Y };
|
System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 0.95 };
|
System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 1.05 };
|
System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point;
|
|
g.DrawLine(pen, dpPointX1, dpPointX2);
|
g.DrawLine(pen, dpPointY1, dpPointY2);
|
|
var x = Math.Abs(dpPointX1.X - dpPointX2.X) / 4;
|
var y = Math.Abs(dpPointY1.Y - dpPointY2.Y) / 5;
|
var r = Math.Min(x, y);
|
Eventech.Model.FeatPoint dpFeatPoint = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y };
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(dpFeatPoint.X, dpFeatPoint.Y).Point;
|
|
using (Brush b = new SolidBrush(pointColor))
|
g.FillEllipse(b, dpPoint.X - r / 2, dpPoint.Y - r / 2, r, r);
|
}
|
else
|
{
|
Eventech.Model.FeatPoint dpFeatPointX1 = new Eventech.Model.FeatPoint() { X = designPoint.X * crossPoint.TolRatioMinQ, Y = designPoint.Y };
|
System.Drawing.Point dpPointX1 = mainDiagram.DiagramToPoint(dpFeatPointX1.X, dpFeatPointX1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointX2 = new Eventech.Model.FeatPoint() { X = designPoint.X * crossPoint.TolRatioMaxQ, Y = designPoint.Y };
|
System.Drawing.Point dpPointX2 = mainDiagram.DiagramToPoint(dpFeatPointX2.X, dpFeatPointX2.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * crossPoint.TolRatioMinH };
|
System.Drawing.Point dpPointY1 = mainDiagram.DiagramToPoint(dpFeatPointY1.X, dpFeatPointY1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * crossPoint.TolRatioMaxH };
|
System.Drawing.Point dpPointY2 = mainDiagram.DiagramToPoint(dpFeatPointY2.X, dpFeatPointY2.Y).Point;
|
|
g.DrawLine(pen, dpPointX1, dpPointX2);
|
g.DrawLine(pen, dpPointY1, dpPointY2);
|
|
var x = Math.Abs(dpPointX1.X - dpPointX2.X) / 4;
|
var y = Math.Abs(dpPointY1.Y - dpPointY2.Y) / 5;
|
var r = Math.Min(x, y);
|
|
Eventech.Model.FeatPoint dpFeatPoint = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y };
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(dpFeatPoint.X, dpFeatPoint.Y).Point;
|
using (Brush b = new SolidBrush(pointColor))
|
g.FillEllipse(b, dpPoint.X - r / 2, dpPoint.Y - r / 2, r, r);
|
}
|
|
|
}
|
}
|
}
|
|
public static void DrawDesignPoint4Triangle(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
Eventech.Model.FeatPoint designPoint,
|
Eventech.Model.LxpCoordinateParas coordinate,
|
Color pointColor, float curveWidth = 2f)
|
{
|
if (designPoint == null || coordinate == null)
|
return;
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth))
|
{
|
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X - coordinate.CoordSpaceQ / 2, Y = designPoint.Y };
|
System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - coordinate.CoordSpaceH / 2 };
|
System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point;
|
|
|
|
g.DrawLine(pen, dpPointX, dpPoint);
|
g.DrawLine(pen, dpPointY, dpPoint);
|
g.DrawLine(pen, dpPointX, dpPointY);
|
|
}
|
}
|
|
public static void DrawDesignPoint4Triangle(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
Eventech.Model.FeatPoint designPoint,
|
Eventech.Model.QhCoordinateParas coordinate,
|
Color pointColor, float curveWidth = 2f)
|
{
|
if (designPoint == null || coordinate == null)
|
return;
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth))
|
{
|
double CoordSpaceQ = coordinate.AxisLabelQ[1] - coordinate.AxisLabelQ[0];
|
double CoordSpaceH = coordinate.AxisLabelH[1] - coordinate.AxisLabelH[0];
|
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X - CoordSpaceQ / 2, Y = designPoint.Y };
|
System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - CoordSpaceH / 2 };
|
System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point;
|
|
g.DrawLine(pen, dpPointX, dpPoint);
|
g.DrawLine(pen, dpPointY, dpPoint);
|
g.DrawLine(pen, dpPointX, dpPointY);
|
|
|
|
Eventech.Model.FeatPoint dpFeatPointX_S1 = new Eventech.Model.FeatPoint() { X = designPoint.X - CoordSpaceQ / 2 + CoordSpaceQ / 6, Y = designPoint.Y };
|
System.Drawing.Point dpPointX_S1 = mainDiagram.DiagramToPoint(dpFeatPointX_S1.X, dpFeatPointX_S1.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY_S1 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - CoordSpaceH / 2 + CoordSpaceH / 6 };
|
System.Drawing.Point dpPointY_S1 = mainDiagram.DiagramToPoint(dpFeatPointY_S1.X, dpFeatPointY_S1.Y).Point;
|
|
g.DrawLine(pen, dpPointX_S1, dpPointY_S1);
|
|
|
Eventech.Model.FeatPoint dpFeatPointX_S2 = new Eventech.Model.FeatPoint() { X = designPoint.X - CoordSpaceQ / 2 + CoordSpaceQ / 3, Y = designPoint.Y };
|
System.Drawing.Point dpPointX_S2 = mainDiagram.DiagramToPoint(dpFeatPointX_S2.X, dpFeatPointX_S2.Y).Point;
|
|
Eventech.Model.FeatPoint dpFeatPointY_S2 = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y - CoordSpaceH / 2 + CoordSpaceH / 3 };
|
System.Drawing.Point dpPointY_S2 = mainDiagram.DiagramToPoint(dpFeatPointY_S2.X, dpFeatPointY_S2.Y).Point;
|
|
g.DrawLine(pen, dpPointX_S2, dpPointY_S2);
|
}
|
}
|
|
public static void DrawDesignPoints(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
List<Eventech.Model.FeatPoint> designPoints,
|
Color pointColor, float curveWidth = 2f,
|
Eventech.Model.eDesignPointDispType dispType = Eventech.Model.eDesignPointDispType.LeftDownHalfCross)
|
{
|
if (designPoints == null || designPoints.Count() == 0)
|
return;
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth))
|
{
|
foreach (var designPoint in designPoints)
|
{
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(designPoint.X, designPoint.Y).Point;
|
//一级4.5% 二级是8%
|
Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = designPoint.X * 0.92, Y = designPoint.Y };
|
System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point;
|
//一级3% 二级是5%
|
Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = designPoint.X, Y = designPoint.Y * 0.95 };
|
System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point;
|
|
g.DrawLine(pen, dpPointX, dpPoint);
|
g.DrawLine(pen, dpPointY, dpPoint);
|
g.DrawLine(pen, dpPointX, dpPointY);
|
}
|
}
|
}
|
|
|
public static void DrawDesignPointsLog10(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
List<Eventech.Model.FeatPoint> designPoints,
|
Color pointColor, float curveWidth = 2f,
|
Eventech.Model.eDesignPointDispType dispType = Eventech.Model.eDesignPointDispType.LeftDownHalfCross)
|
{
|
if (designPoints == null || designPoints.Count() == 0)
|
return;
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
using (System.Drawing.Pen pen = new System.Drawing.Pen(pointColor, curveWidth))
|
{
|
foreach (var designPoint in designPoints)
|
{
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(Math.Log10(designPoint.X), Math.Log10(designPoint.Y)).Point;
|
//一级4.5% 二级是8%
|
Eventech.Model.FeatPoint dpFeatPointX = new Eventech.Model.FeatPoint() { X = Math.Log10(designPoint.X * 0.92), Y = Math.Log10(designPoint.Y) };
|
System.Drawing.Point dpPointX = mainDiagram.DiagramToPoint(dpFeatPointX.X, dpFeatPointX.Y).Point;
|
//一级3% 二级是5%
|
Eventech.Model.FeatPoint dpFeatPointY = new Eventech.Model.FeatPoint() { X = Math.Log10(designPoint.X), Y = Math.Log10(designPoint.Y * 0.95) };
|
System.Drawing.Point dpPointY = mainDiagram.DiagramToPoint(dpFeatPointY.X, dpFeatPointY.Y).Point;
|
|
g.DrawLine(pen, dpPointX, dpPoint);
|
g.DrawLine(pen, dpPointY, dpPoint);
|
}
|
}
|
}
|
|
#endregion
|
|
|
#region 画装置曲线
|
//在Chart上画型谱(填充)
|
public static void DrawEquipmentCurve(this DevExpress.XtraCharts.ChartControl chart,
|
Graphics g, List<Eventech.Model.FeatPoint> curve, bool isMonoColor = false)
|
{
|
if (curve == null || curve.Count() < 3)
|
return;
|
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return;
|
//得到屏幕上的点坐标
|
List<Point> chartPoint = new List<Point>();
|
int i = 0;
|
for (i = 0; i < curve.Count; i++)
|
{
|
System.Drawing.Point dpPoint = mainDiagram.DiagramToPoint(curve[i].X, curve[i].Y).Point;
|
|
chartPoint.Add(dpPoint);
|
}
|
|
//画曲线
|
//Color curveColor = TProduct.WinFrmUI.XPump.Properties.Settings.Speed.CurveColorEquipCurve;
|
Point[] pointArray = chartPoint.Distinct().ToArray();//如果点过密,投影到屏幕上,由于是整数可能会位置一样,取Distinct
|
if (pointArray.Length < 3)
|
return;
|
using (Pen pen = new Pen(TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.CurveColorEquipCurve, TProduct.WinFrmUI.TPump.ChartDisp.Settings.Default.CurveWidthEquipCurve))
|
{
|
g.DrawCurve(pen, pointArray);
|
}
|
}
|
#endregion
|
|
|
|
#region 绘制曲线QH
|
//不考虑坐标单位变化
|
public static Point[] DrawOpenCurve(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
List<Eventech.Model.FeatPoint> curve, Color curveColor, float curveWidth)
|
{
|
if (curve == null)
|
return null;
|
//if (qCalcHelper == null)
|
// return null;
|
//if (hCalcHelper == null)
|
// return null;
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return null;
|
List<Point> screenPoints = new List<Point>();
|
|
for (int i = 0; i < curve.Count; i++)
|
{
|
ControlCoordinates coor = mainDiagram.DiagramToPoint(curve[i].X, curve[i].Y);
|
screenPoints.Add(coor.Point);
|
}
|
|
|
//去掉重曲线复点
|
Point[] pointArray = screenPoints.Distinct().ToArray();
|
|
if (pointArray.Length > 2)
|
{
|
using (Pen pen = new Pen(curveColor, curveWidth))
|
{
|
g.DrawCurve(pen, pointArray);//, 0.5f);
|
}
|
}
|
else if (pointArray.Length == 2)
|
{
|
using (Pen pen = new Pen(curveColor, curveWidth))
|
{
|
g.DrawLine(pen, pointArray[0], pointArray[1]);
|
}
|
}
|
else if (pointArray.Length == 1)
|
{
|
using (Pen pen = new Pen(curveColor, curveWidth))
|
{
|
Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4);
|
g.FillEllipse(new SolidBrush(curveColor), rc);
|
}
|
}
|
else if (pointArray.Length == 0)
|
{
|
return null;
|
}
|
return pointArray;
|
}
|
|
//考虑坐标单位变化
|
public static Point[] DrawOpenCurve(this DevExpress.XtraCharts.ChartControl chart, Graphics g,
|
List<Eventech.Model.FeatPoint> curve, Color curveColor, float curveWidth,
|
Eventech.Model.IAxisCalcer qCalcHelper, Eventech.Model.IAxisCalcer hCalcHelper)
|
{
|
if (curve == null)
|
return null;
|
//if (qCalcHelper == null)
|
// return null;
|
//if (hCalcHelper == null)
|
// return null;
|
XYDiagram mainDiagram = (XYDiagram)chart.Diagram;
|
if (mainDiagram == null)
|
return null;
|
List<Point> screenPoints = new List<Point>();
|
if (qCalcHelper == null || hCalcHelper == null)
|
{
|
for (int i = 0; i < curve.Count; i++)
|
{
|
ControlCoordinates coor = mainDiagram.DiagramToPoint(curve[i].X, curve[i].Y);
|
screenPoints.Add(coor.Point);
|
}
|
}
|
else
|
{
|
for (int i = 0; i < curve.Count; i++)
|
{
|
ControlCoordinates coor = mainDiagram.DiagramToPoint(qCalcHelper.Calc(curve[i].X),
|
hCalcHelper.Calc(curve[i].Y));
|
screenPoints.Add(coor.Point);
|
}
|
}
|
|
//去掉重曲线复点
|
Point[] pointArray = screenPoints.Distinct().ToArray();
|
|
if (pointArray.Length > 2)
|
{
|
using (Pen pen = new Pen(curveColor, curveWidth))
|
{
|
g.DrawCurve(pen, pointArray);//, 0.5f);
|
}
|
}
|
else if (pointArray.Length == 2)
|
{
|
using (Pen pen = new Pen(curveColor, curveWidth))
|
{
|
g.DrawLine(pen, pointArray[0], pointArray[1]);
|
}
|
}
|
else if (pointArray.Length == 1)
|
{
|
using (Pen pen = new Pen(curveColor, curveWidth))
|
{
|
Rectangle rc = new Rectangle(pointArray[0].X - 2, pointArray[0].Y - 2, 4, 4);
|
g.FillEllipse(new SolidBrush(curveColor), rc);
|
}
|
}
|
else if (pointArray.Length == 0)
|
{
|
return null;
|
}
|
return pointArray;
|
}
|
|
#endregion
|
|
|
#region 绘制水印
|
|
public static void DrawCorpLogo(this DevExpress.XtraCharts.ChartControl chart, Graphics g)
|
{
|
if (!TProduct.WinFrmUI.GlobeParas.IsPrintWaterMark)
|
return;
|
|
string imgWaterMark = null;
|
var posi_list = TProduct.WinFrmUI.ImageWaterMarkHelper.CalcLogoImagePosiF2x2(chart.Width, chart.Height, true, out imgWaterMark);
|
if (posi_list != null && posi_list.Count > 0)
|
{
|
Image water_logo_image = Image.FromFile(imgWaterMark);
|
|
for (int i = 0; i < posi_list.Count; i = i + 1)
|
{
|
g.DrawImage(water_logo_image, posi_list[i]);
|
}
|
}
|
else
|
{//防止用户把水印文件删除掉
|
DrawWaterMarkText(chart, g);
|
}
|
}
|
|
|
|
public static void DrawWaterMarkText(this DevExpress.XtraCharts.ChartControl chart, Graphics g)
|
{
|
var waterMarkText = TProduct.WinFrmUI.GlobeParas.WaterMarkText;
|
if (string.IsNullOrEmpty(waterMarkText))
|
return;
|
|
GraphicsState gs = g.Save();
|
|
using (Font fontText = new Font("楷体", 24, FontStyle.Bold))
|
using (SolidBrush drawBrush = new SolidBrush(Color.FromArgb(50, 0, 191, 255)))
|
{
|
g.ResetTransform();
|
g.TranslateTransform(80, 80); //设置旋转中心为文字中心
|
g.RotateTransform(25);
|
g.DrawString(waterMarkText, fontText, drawBrush, 0, 0);
|
|
g.ResetTransform();
|
g.TranslateTransform(chart.Width - 200, chart.Height - 195);
|
g.RotateTransform(25);
|
g.DrawString(waterMarkText, fontText, drawBrush, 0, 0);
|
|
g.ResetTransform();
|
g.TranslateTransform(chart.Width - 200, 105);
|
g.RotateTransform(25);
|
g.DrawString(waterMarkText, fontText, drawBrush, 0, 0);
|
|
g.ResetTransform();
|
g.TranslateTransform(80, chart.Height - 200);
|
g.RotateTransform(25);
|
g.DrawString(waterMarkText, fontText, drawBrush, 0, 0);
|
}
|
|
g.Restore(gs);
|
}
|
|
#endregion
|
|
|
|
}
|
}
|