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