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 ZlpFeatChart1 { private void DrawAllCurves() { DrawQHCurve(); DrawWorkCurve(); // DrawDesignPoint(); //等效线 DrawEqualParaCurveE(); DrawAnnotText(); } //绘制扬程流量线 private void DrawQHCurve() { if (CurveGroupQH == null) return; using (Pen pen = new Pen(_curveColorQH, _curveWidthQH)) //using (var font = new System.Drawing.Font("Arial", this._curveParasLabelHeight, System.Drawing.FontStyle.Regular)) //using (var brush = new System.Drawing.SolidBrush(_curveQHColor)) { foreach (var curveQH in CurveGroupQH) { var points_qh = curveQH.ToPoints(12); List mp_points = new List(); foreach (var point in points_qh) { PointF pt = new PointF(); pt.X = MapRealToPictQ(point.X); pt.Y = MapRealToPictH(point.Y); mp_points.Add(pt); } _graphics.DrawCurve(pen, mp_points.ToArray()); //mp_points.Clear(); // //if (_annoAnchorPointList == null) //{//自己定义位置 // //_graphics.DrawString(curveQH.ToString(), font, brush, new PointF(mp_points[mp_points.Count - 1].X - this._curveParasLabelHeight, mp_points[mp_points.Count - 1].Y + this._curveParasLabelHeight)); //} } } } //绘制工作曲线 private void DrawWorkCurve() { if (WorkCurveGroup == null) return; List workPoints = new List(); var curves = Eventech.Common.CurveExpressConver.ToPoints(WorkCurveGroup, 12); foreach (var curve in curves) { PointF pt = new PointF(); pt.X = MapRealToPictQ(curve.X); pt.Y = MapRealToPictH(curve.Y); workPoints.Add(pt); } using (Pen pen = new Pen(_workCurveColor, _workCurveWidth)) { _graphics.DrawCurve(pen, workPoints.ToArray()); // mp_points.Clear(); } } //绘制设计点十字线 private void DrawDesignPoint() { if (_designPointStdUnit == null || _designPointStdUnit.X < 0.1) return; PointF designPt = new PointF(); designPt.X = MapRealToPictQ(_designPointStdUnit.X); designPt.Y = MapRealToPictH(_designPointStdUnit.Y); if (designPt.Y > _diagramLeftBottomPt.Y) return; if (_crossPoint == null) { _crossPoint = new Eventech.Model.CrossPoint(_designPointStdUnit, Eventech.Model.eToleranceGrade.GB3216_2005_2); } using (Pen pen = new Pen(_designPointLineColor, _designPointLineWidth)) { _graphics.DrawLine(pen, designPt, new PointF(MapRealToPictQ(_crossPoint.MinX), designPt.Y)); _graphics.DrawLine(pen, designPt, new PointF(designPt.X, MapRealToPictH(_crossPoint.MinY))); } } //绘制等效线 public void DrawEqualParaCurveE() { if (_equalParaCurveE == null || _equalParaCurveE.Count() == 0) return; float curveWidth = _equalParaCurveWidth; using (SolidBrush brushText = new SolidBrush(EqualParaCurveColor)) using (Pen penCurve = new Pen(EqualParaCurveColor, curveWidth)) { foreach (var equalCurve in _equalParaCurveE) { List imgPoints = new List(); int i = 0; for (i = 0; i < equalCurve.PointInfo.Count; i++) { PointF imgPoint = new PointF(); imgPoint.X = MapRealToPictQ(equalCurve.PointInfo[i].X); imgPoint.Y = MapRealToPictH(equalCurve.PointInfo[i].Y); imgPoints.Add(imgPoint); } //去掉重曲线复点 //Point[] pointArray = screenPoints.Distinct().ToArray(); // 绘制 if (imgPoints.Count() > 2) { if (equalCurve.IsClosed) {//封闭 System.Drawing.Drawing2D.FillMode aFillMode = System.Drawing.Drawing2D.FillMode.Alternate; _graphics.DrawClosedCurve(penCurve, imgPoints.ToArray(), equalCurve.DispTension, aFillMode); } else {//开放曲线 _graphics.DrawCurve(penCurve, imgPoints.ToArray(), equalCurve.DispTension); //Bezier曲线绘制 // bezierCurves = null; //bezierCurves = Eventech.Common.BezierCurveHelper.CreateOpenCurves(equalCurve.PointInfo.ToArray()); //foreach (var c in bezierCurves) //{ // ControlCoordinates coor0 = mainDiagram.DiagramToPoint(c.Point0.X, c.Point0.Y); // ControlCoordinates coor1 = mainDiagram.DiagramToPoint(c.Point1.X, c.Point1.Y); // ControlCoordinates coor2 = mainDiagram.DiagramToPoint(c.Point2.X, c.Point2.Y); // ControlCoordinates coor3 = mainDiagram.DiagramToPoint(c.Point3.X, c.Point3.Y); // g.DrawBezier(penCurve, coor0.Point, coor1.Point, coor3.Point, coor3.Point); //} } } else if (imgPoints.Count() == 2) {//直线 _graphics.DrawLine(penCurve, imgPoints[0], imgPoints[1]); } else if (imgPoints.Count() == 1) {//点 RectangleF rc = new RectangleF(imgPoints[0].X - 2, imgPoints[0].Y - 2, 4, 4); using (Brush b = new SolidBrush(EqualParaCurveColor)) _graphics.FillEllipse(b, rc); } if (_annoAnchorPointList == null) {//自己定义位置 //using (SolidBrush brushText = new SolidBrush(colorText)) //{ // foreach (var equalCurve in allEqualParaCurveE) // { // //位置影射 // //ControlCoordinates coor = mainDiagram.DiagramToPoint(equalCurve.PointInfo[0].X, // // equalCurve.PointInfo[0].Y); // if (equalCurve.PointInfo[0].Y > equalCurve.PointInfo[equalCurve.PointInfo.Count - 1].Y) // { // text_pt.X = MapRealToPictQ(equalCurve.PointInfo[0].X); // text_pt.Y = MapRealToPictH(equalCurve.PointInfo[0].Y); // } // else // { // text_pt.X = MapRealToPictQ(equalCurve.PointInfo[equalCurve.PointInfo.Count - 1].X); // text_pt.Y = MapRealToPictH(equalCurve.PointInfo[equalCurve.PointInfo.Count - 1].Y); // } // //绘制文字 // _graphics.DrawString(equalCurve.CurvePara.ToString(), fontText, brushText, // text_pt.X, text_pt.Y - 15); // } //} } } } } //显示效率值(作废) public void DrawEqualParaCurvePara(Eventech.Model.CombineCurveList allEqualParaCurveE, Color colorText, Font fontText, Eventech.Model.QhCoordinateParas coordinateParas) { if (allEqualParaCurveE == null || coordinateParas == null) return; //是否显示 if (!_isDispEqualParaTextE) return; if (colorText == Color.Empty) colorText = Color.Red; PointF equalParaCurvePoint = new PointF(); // if (_annoAnchorPointList == null) {//自己定义位置 using (SolidBrush brushText = new SolidBrush(colorText)) { foreach (var equalCurve in allEqualParaCurveE) { //位置影射 //ControlCoordinates coor = mainDiagram.DiagramToPoint(equalCurve.PointInfo[0].X, // equalCurve.PointInfo[0].Y); float textLength = fontText.Height; if (equalCurve.PointInfo[0].Y > equalCurve.PointInfo[equalCurve.PointInfo.Count - 1].Y) { equalParaCurvePoint.X = MapRealToPictQ(equalCurve.PointInfo[0].X); equalParaCurvePoint.Y = MapRealToPictH(equalCurve.PointInfo[0].Y); } else { equalParaCurvePoint.X = MapRealToPictQ(equalCurve.PointInfo[equalCurve.PointInfo.Count - 1].X); equalParaCurvePoint.Y = MapRealToPictH(equalCurve.PointInfo[equalCurve.PointInfo.Count - 1].Y); } //绘制文字 _graphics.DrawString(equalCurve.CurvePara.ToString(), fontText, brushText, equalParaCurvePoint.X, equalParaCurvePoint.Y - 15); } } } else {//读取数据库中设置的文字位置 //if (theCurveLabelHelper == null) // theCurveLabelHelper = new ChartCurveLabelHelper(); //else // theCurveLabelHelper.ClearLabel();//清空 string equalParaCurveText = null; float textLength = 0; float textWidth = 0; // for (int k = 0; k < _annoAnchorPointList.Count; k++) { var annoAncor = _annoAnchorPointList[k]; equalParaCurveText = annoAncor.Text.Substring(0, annoAncor.Text.Length - 1); equalParaCurvePoint.X = MapRealToPictQ(annoAncor.X); equalParaCurvePoint.Y = MapRealToPictH(annoAncor.Y); textLength = equalParaCurveText.Length; textWidth = fontText.Height; //右 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Right) { using (SolidBrush brushText = new SolidBrush(colorText)) { _graphics.DrawString(equalParaCurveText + "%", fontText, brushText, equalParaCurvePoint.X + textLength, equalParaCurvePoint.Y); } } //下 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Bottom) { using (SolidBrush brushText = new SolidBrush(colorText)) { _graphics.DrawString(equalParaCurveText + "%", fontText, brushText, equalParaCurvePoint.X, equalParaCurvePoint.Y + textWidth + 2); } } //左 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Left) { using (SolidBrush brushText = new SolidBrush(colorText)) { _graphics.DrawString(equalParaCurveText + "%", fontText, brushText, equalParaCurvePoint.X - textLength - textWidth * 2, equalParaCurvePoint.Y); } } //上 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Top) { using (SolidBrush brushText = new SolidBrush(colorText)) { _graphics.DrawString(equalParaCurveText + "%", fontText, brushText, equalParaCurvePoint.X, equalParaCurvePoint.Y - textWidth - 2); } } //theCurveLabelHelper.AddLabel2(annoAncor, // Color.Red, // _coordinateParas.AxisCalcQ, // _coordinateParas.AxisCalcH); } } } //显示效率值等 public void DrawAnnotText() { if (_annoAnchorPointList == null || _annoAnchorPointList.Count() == 0) return; //是否显示 if (!_isDispEqualParaTextE) return; // using (var font = new System.Drawing.Font("Arial", _equalCurveParaLabelHeight, System.Drawing.FontStyle.Regular)) { for (int k = 0; k < _annoAnchorPointList.Count; k++) { var annoAncor = _annoAnchorPointList[k]; string textContent = annoAncor.Text; PointF text_pt = new PointF(); text_pt.X = MapRealToPictQ(annoAncor.X); text_pt.Y = MapRealToPictH(annoAncor.Y); System.Drawing.Color colorText ; if (annoAncor.CurveTag == "QH") { colorText = _curveColorQH; } else { colorText = EqualParaCurveColor; } //右 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Right) { //text_pt.X = text_pt.X - _equalCurveParaLabelHeight; _graphics.DrawString(textContent, text_pt, font, colorText, StringAlignment.Near, StringAlignment.Center, 0); } //下 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Bottom) { text_pt.Y = text_pt.Y + _equalCurveParaLabelHeight * 0.8f; _graphics.DrawString(textContent, text_pt, font, colorText, StringAlignment.Center, StringAlignment.Near , 0); } //左 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Left) { _graphics.DrawString(textContent, text_pt, font, colorText, StringAlignment.Far, StringAlignment.Center, 0); } //上 if (annoAncor.TextAligment == (int)Eventech.Model.eTextAligment.Top) { text_pt.Y = text_pt.Y - _equalCurveParaLabelHeight*0.8f; _graphics.DrawString(textContent, text_pt, font, colorText, StringAlignment.Center, StringAlignment.Far, 0); } } } } } }