public void DrawRecSection(PointF pt, float w, float h, ChartStyle cs) { float wdth = w; float hgt = h; PointF pt2 = new PointF(wdth * 0.5f, -hgt * 0.5f); PointF pt3 = new PointF(wdth * 0.5f, hgt * 0.5f); PointF pt4 = new PointF(-wdth * 0.5f, hgt * 0.5f); PointF[] polygon = new[] { cs.Point2D(pt2), cs.Point2D(pt3), cs.Point2D(pt4) }; Graphic.Stroke(); Graphic.SetLineWidth(LineThickness); Graphic.SetStrokeStyle(DrwColor); Graphic.BeginPath(); Graphic.MoveTo(cs.Point2D(pt).X, cs.Point2D(pt).Y); //List<Task> secTask = new List<Task>(); for (int i = 0; i < polygon.Length; i++) { DrawLineTo(polygon[i]); } //await Task.WhenAll(secTask); Graphic.SetFillStyle(FillColorOpt); Graphic.ClosePath(); Graphic.Fill(); }
public void DrawBmy(DovDrawings g, ChartStyle cs) { PointF pt1; PointF pt2; PointF pt3; PointF pt4; cs.YMin = 0; float minx1 = Min(bbm[1].ToArray()); float minx2 = Min(tbm[1].ToArray()); float maxx1 = Max(bbm[1].ToArray()); float maxx2 = Max(tbm[1].ToArray()); cs.XMin = (minx1 < minx2 ? minx1 : minx2); cs.XMax = (maxx1 > maxx2 ? maxx1 : maxx2); cs.YMax = fData.Length; for (int i = 0; i < bbm[0].Count - 1; i++) { pt1 = new PointF((float)bbm[1][i], (float)bbm[0][i]); pt2 = new PointF((float)bbm[1][i + 1], (float)bbm[0][i + 1]); pt3 = new PointF(0, pt1.Y); pt4 = new PointF(0, pt2.Y); g.DrawLine(cs.Point2D(pt1), cs.Point2D(pt2)); g.DrawLine(cs.Point2D(pt2), cs.Point2D(pt4)); g.DrawLine(cs.Point2D(pt4), cs.Point2D(pt3)); if (i == (bbm[0].Count - 2)) { string va = string.Format("{0}kNm", Math.Round(pt2.X, 2)); g.FillColorOpt = "black"; g.TextBase = Canvas.CanvasEnum.TextBaseline.Bottom; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Left; g.DrawText(va, cs.Point2D(pt2)); } } for (int i = 0; i < tbm[0].Count - 1; i++) { pt1 = new PointF((float)tbm[1][i], (float)tbm[0][i] + fData.ColLocY + 0.5f * fData.ColumnLength); pt2 = new PointF((float)tbm[1][i + 1], (float)tbm[0][i + 1] + fData.ColLocY + 0.5f * fData.ColumnLength); pt3 = new PointF(0, pt1.Y); pt4 = new PointF(0, pt2.Y); if (i == 0) { g.DrawLine(cs.Point2D(pt1), cs.Point2D(pt3)); //value string va = string.Format("{0}kNm", Math.Round(pt1.X, 2)); g.FillColorOpt = "black"; g.TextBase = Canvas.CanvasEnum.TextBaseline.Top; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Left; g.DrawText(va, cs.Point2D(pt1)); } g.DrawLine(cs.Point2D(pt1), cs.Point2D(pt2)); if (pt2.X != pt4.X) { g.DrawLine(cs.Point2D(pt2), cs.Point2D(pt4)); } g.DrawLine(cs.Point2D(pt4), cs.Point2D(pt3)); } }
public void DrawBmx(DovDrawings g, ChartStyle cs) { PointF pt1; PointF pt2; PointF pt3; PointF pt4; cs.XMin = 0; cs.XMax = fData.Width; float miny1 = Min(lbm[1].ToArray()); float miny2 = Min(rbm[1].ToArray()); float maxy1 = Max(lbm[1].ToArray()); float maxy2 = Max(rbm[1].ToArray()); cs.YMin = (miny1 < miny2 ? miny1 : miny2); cs.YMax = (maxy1 > maxy2 ? maxy1 : maxy2); for (int i = 0; i < lbm[0].Count - 1; i++) { pt1 = new PointF((float)lbm[0][i], (float)lbm[1][i]); pt2 = new PointF((float)lbm[0][i + 1], (float)lbm[1][i + 1]); pt3 = new PointF(pt1.X, 0); pt4 = new PointF(pt2.X, 0); g.DrawLine(cs.Point2D(pt1), cs.Point2D(pt2)); g.DrawLine(cs.Point2D(pt2), cs.Point2D(pt4)); g.DrawLine(cs.Point2D(pt4), cs.Point2D(pt3)); if (i == (lbm[0].Count - 2)) { string va = string.Format("{0}kNm", Math.Round(pt2.Y, 2)); g.FillColorOpt = "black"; g.TextBase = Canvas.CanvasEnum.TextBaseline.Top; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Right; g.DrawText(va, cs.Point2D(pt2)); } } for (int i = 0; i < rbm[0].Count - 1; i++) { pt1 = new PointF((float)rbm[0][i] + fData.ColLocX + 0.5f * fData.ColumnWidth, (float)rbm[1][i]); pt2 = new PointF((float)rbm[0][i + 1] + fData.ColLocX + 0.5f * fData.ColumnWidth, (float)rbm[1][i + 1]); pt3 = new PointF(pt1.X, 0); pt4 = new PointF(pt2.X, 0); if (i == 0) { g.DrawLine(cs.Point2D(pt1), cs.Point2D(pt3)); string va = string.Format("{0}kNm", Math.Round(pt1.Y, 2)); g.FillColorOpt = "black"; g.TextBase = Canvas.CanvasEnum.TextBaseline.Top; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Left; g.DrawText(va, cs.Point2D(pt1)); } g.DrawLine(cs.Point2D(pt1), cs.Point2D(pt2)); if (pt2.Y != pt4.Y) { g.DrawLine(cs.Point2D(pt2), cs.Point2D(pt4)); } g.DrawLine(cs.Point2D(pt4), cs.Point2D(pt3)); } }
public void DrawBendingMomentDiagram(DovDrawings g, ChartStyle cs) { DimensionLine dim = new DimensionLine(); dim.Graphic = g; g.TextBase = TextBaseline.Bottom; g.TextAlignment = TextAlign.Left; g.TextFont = "12px Arial"; float[,] Am = ca.AmAllMemeAction; float[] El = ca.El; float maxMom; float minMom; List <float> mom = new List <float>(); float length = 0; for (int i = 0; i < Am.GetLength(0); i++) { float ml = Am[i, 1]; float mr = -Am[i, 3]; mom.Add(ml); mom.Add(mr); length += El[i]; } maxMom = Max(mom.ToArray()); minMom = Min(mom.ToArray()); cs.YMax = maxMom; cs.YMin = minMom; cs.XMax = length; cs.XMin = 0; float preLength = 0; float m1; float m2; float mnext; PointF pt1; PointF pt2; PointF pt3; for (int i = 0; i < Am.GetLength(0); i++) { m1 = Am[i, 1]; m2 = -Am[i, 3]; pt1 = new PointF(preLength, m1); preLength += El[i]; pt2 = new PointF(preLength, m2); pt1 = cs.Point2D(pt1); pt2 = cs.Point2D(pt2); g.DrawLine(pt1, pt2); if (i < Am.GetLength(0) - 1) { mnext = Am[i + 1, 1]; if (mnext == m2) { continue; } else { pt3 = new PointF(preLength, mnext); pt3 = cs.Point2D(pt3); g.DrawLine(pt2, pt3); } } } PointF pt4 = new PointF(0, 0); PointF pt5 = new PointF(length, 0); pt4 = cs.Point2D(pt4); pt5 = cs.Point2D(pt5); g.DrawLine(pt4, pt5); float l1 = 0; for (int j = 0; j < nel; j++) { l1 += El[j]; } float ml1 = -Am[nel - 1, 3]; g.FillColorOpt = "black"; PointF pt6 = new PointF(l1, ml1); pt6 = cs.Point2D(pt6); dim.DrawTextAtAngle(pt6, 0f, string.Format("{0} kNm", Math.Round(ml1, 2).ToString())); int nelem = Am.GetLength(0); float mr1 = -Am[nelem - ner - 1, 3]; float l2 = 0; for (int j = 0; j < nelem - ner; j++) { l2 += El[j]; } pt6 = new PointF(l2, mr1); pt6 = cs.Point2D(pt6); g.TextBase = TextBaseline.Bottom; g.TextAlignment = TextAlign.Left; dim.DrawTextAtAngle(pt6, 0f, string.Format("{0} kNm", Math.Round(mr1, 2).ToString())); float[] locAndMin = MinAndLocation(mom.ToArray()); int elno = FindElement((int)locAndMin[0]); float m = locAndMin[1]; l2 = 0; for (int j = 0; j <= elno; j++) { l2 += El[j]; } g.TextBase = TextBaseline.Hanging; g.TextAlignment = TextAlign.Right; pt6 = new PointF(l2, m); pt6 = cs.Point2D(pt6); dim.DrawTextAtAngle(pt6, 0f, string.Format("{0} kNm", Math.Round(m, 2).ToString())); }
public void DrawShearForceDiagram(DovDrawings g, ChartStyle cs) { DimensionLine dim = new DimensionLine(); dim.Graphic = g; g.TextBase = TextBaseline.Hanging; g.TextAlignment = TextAlign.Left; g.TextFont = "12px Arial"; float[,] Am = ca.AmAllMemeAction; float[] El = ca.El; float maxShear = 0; float minShear = 0; List <float> shear = new List <float>(); float length = 0; for (int i = 0; i < Am.GetLength(0); i++) { float vl = Am[i, 0]; float vr = -Am[i, 2]; shear.Add(vl); shear.Add(vr); length += El[i]; } maxShear = Max(shear.ToArray()); minShear = Min(shear.ToArray()); cs.YMax = maxShear; cs.YMin = minShear; cs.XMin = 0; cs.XMax = length; float preLength = 0; float v1 = 0; float v2 = 0; float vnext = 0; PointF pt1 = new PointF(); PointF pt2 = new PointF(); PointF pt3 = new PointF(); for (int i = 0; i < Am.GetLength(0); i++) { v1 = Am[i, 0]; v2 = -Am[i, 2]; pt1 = new PointF(preLength, v1); preLength += El[i]; pt2 = new PointF(preLength, v2); pt1 = cs.Point2D(pt1); pt2 = cs.Point2D(pt2); g.DrawLine(pt1, pt2); if (i < Am.GetLength(0) - 1) { vnext = Am[i + 1, 0]; if (vnext == v2) { continue; } else { pt3 = new PointF(preLength, vnext); pt3 = cs.Point2D(pt3); g.DrawLine(pt2, pt3); } } } PointF pt4 = new PointF(0, 0); PointF pt5 = new PointF(length, 0); pt4 = cs.Point2D(pt4); pt5 = cs.Point2D(pt5); g.DrawLine(pt4, pt5); float l1 = 0; for (int j = 0; j < nel; j++) { l1 += El[j]; } float vl1 = -Am[nel - 1, 2]; float vl2 = Am[nel, 0]; g.FillColorOpt = "black"; PointF pt6 = new PointF(l1, vl1); PointF pt7 = new PointF(l1, vl2); pt6 = cs.Point2D(pt6); dim.DrawTextAtAngle(pt6, 0f, string.Format("{0} kNm", Math.Round(vl1, 2).ToString())); pt7 = cs.Point2D(pt7); g.TextBase = TextBaseline.Bottom; g.TextAlignment = TextAlign.Left; dim.DrawTextAtAngle(pt7, 0f, string.Format("{0} kNm", Math.Round(vl2, 2).ToString())); int nelem = Am.GetLength(0); float vr1 = -Am[nelem - ner - 1, 2]; float vr2 = Am[nelem - ner, 0]; float l2 = 0; for (int j = 0; j < nelem - ner; j++) { l2 += El[j]; } pt6 = new PointF(l2, vr1); pt7 = new PointF(l2, vr2); pt6 = cs.Point2D(pt6); pt7 = cs.Point2D(pt7); g.TextBase = TextBaseline.Hanging; g.TextAlignment = TextAlign.Left; dim.DrawTextAtAngle(pt6, 0f, string.Format("{0} kNm", Math.Round(vr1, 2).ToString())); g.TextBase = TextBaseline.Bottom; g.TextAlignment = TextAlign.Left; dim.DrawTextAtAngle(pt7, 0f, string.Format("{0} kNm", Math.Round(vr2, 2).ToString())); }