public void AddChartStyle(DovDrawings g) { Add3DAxes(g); Add3DGrids(g); Add3DTicks(g); Add3DLabels(g); }
public void DrawGrid(DovDrawings g) { float xlimMin = XMin; float xlimMax = XMax; float ylimMin = YMin; float ylimMax = YMax; float start = XMin; float end = XMax; g.DrwColor = "green"; g.LineThickness = 0.7f; //List<Task> gridx = new List<Task>(); for (float i = start; i <= end; i += XTick) { g.DrawLine(Point2D(new PointF(i, ylimMin)), Point2D(new PointF(i, ylimMax))); } //await Task.WhenAll(gridx); g.DrwColor = "#0cd5f0"; g.LineThickness = 0.3f; start = YMin; end = YMax; //List<Task> gridy = new List<Task>(); for (float j = start; j <= end; j += YTick) { g.DrawLine(Point2D(new PointF(xlimMin, j)), Point2D(new PointF(xlimMax, j))); } //await Task.WhenAll(gridy); }
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)); } }
private void Add3DAxes(DovDrawings g) { Matrix3 m = Matrix3.AzimuthElevation(Elevation, Azimuth); Point3[] pts = CoordinatesOfChartBox(); g.DrwColor = "red"; g.LineThickness = 2; for (int i = 0; i < pts.Length; i++) { pts[i].Transform(m, this); } g.DrawLine(pts[0].X, pts[0].Y, pts[1].X, pts[1].Y); g.DrawLine(pts[1].X, pts[1].Y, pts[2].X, pts[2].Y); g.DrawLine(pts[2].X, pts[2].Y, pts[3].X, pts[3].Y); }
public void DrawTickMark(DovDrawings g) { float xlimMin = XMin; float xlimMax = XMax; float ylimMin = YMin; float ylimMax = YMax; float start = XMin; float end = XMax; g.DrwColor = "green"; g.LineThickness = 0.7f; //List<Task> gridx = new List<Task>(); for (float i = start; i <= end; i += XTick) { PointF xPoint = Point2D(new PointF(i, ylimMin)); g.DrawLine(new PointF(xPoint.X, xPoint.Y + TickLength), Point2D(new PointF(i, ylimMin))); g.TextFont = TickFont; g.FillColorOpt = TickFontColor; g.TextBase = Canvas.CanvasEnum.TextBaseline.Top; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Center; g.DrawText(Math.Round(i, 2).ToString(), new PointF(xPoint.X, xPoint.Y + TickLength)); } g.DrwColor = "#0cd5f0"; g.LineThickness = 0.3f; start = YMin; end = YMax; for (float j = start; j <= end; j += YTick) { PointF yPoint = Point2D(new PointF(xlimMin, j)); g.DrawLine(new PointF(yPoint.X - TickLength, yPoint.Y), Point2D(new PointF(xlimMin, j))); g.TextFont = TickFont; g.FillColorOpt = TickFontColor; g.TextBase = Canvas.CanvasEnum.TextBaseline.Middle; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Right; g.DrawText(Math.Round(j, 2).ToString(), new PointF(yPoint.X - TickLength, yPoint.Y)); } }
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())); }
private void Add3DLabels(DovDrawings g) { Matrix3 m = Matrix3.AzimuthElevation(Elevation, Azimuth); Point3 pt = new Point3(); Point3[] pts = CoordinatesOfChartBox(); // Add x tick labels: float offset = (YMax - YMin) / 20; float labelSpace = offset; g.FillColorOpt = "white"; g.TextFont = LabelFont; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Right; for (float x = XMin + XTick; x < XMax; x = x + XTick) { if (Elevation >= 0) { if (Azimuth >= -90 && Azimuth < 90) { labelSpace = -offset; } } else if (Elevation < 0) { if ((Azimuth >= -180 && Azimuth < -90) || Azimuth >= 90 && Azimuth <= 180) { labelSpace = -offset; } } pt = new Point3(x, pts[1].Y + labelSpace, pts[1].Z, pts[1].W); pt.Transform(m, this); g.DrawText(Math.Round(x, 2).ToString(), new PointF(pt.X, pt.Y)); } // Add y tick labels: offset = (XMax - XMin) / 20; labelSpace = offset; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Left; for (float y = YMin + YTick; y < YMax; y = y + YTick) { pts = CoordinatesOfChartBox(); if (Elevation >= 0) { if (Azimuth >= -180 && Azimuth < 0) { labelSpace = -offset; } } else if (Elevation < 0) { if (Azimuth >= 0 && Azimuth < 180) { labelSpace = -offset; } } pt = new Point3(pts[1].X + labelSpace, y, pts[1].Z, pts[1].W); pt.Transform(m, this); g.DrawText(Math.Round(y, 2).ToString(), new PointF(pt.X, pt.Y)); } // Add z tick labels: float xoffset = (XMax - XMin) / 30.0f; float yoffset = (YMax - YMin) / 15.0f; float xlabelSpace = xoffset; float ylabelSpace = yoffset; float txtHeight = 8; string font = "pt Verenda"; font = txtHeight + font; LabelFont = font; g.TextFont = LabelFont; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Right; for (float z = ZMin; z <= ZMax; z = z + ZTick) { pts = CoordinatesOfChartBox(); if (Elevation >= 0) { if (Azimuth >= -180 && Azimuth < -90) { xlabelSpace = 0; ylabelSpace = yoffset; } else if (Azimuth >= -90 && Azimuth < 0) { xlabelSpace = xoffset; ylabelSpace = 0; } else if (Azimuth >= 0 && Azimuth < 90) { xlabelSpace = 0; ylabelSpace = -yoffset; } else if (Azimuth >= 90 && Azimuth <= 180) { xlabelSpace = -xoffset; ylabelSpace = 0; } } else if (Elevation < 0) { if (Azimuth >= -180 && Azimuth < -90) { ylabelSpace = 0; xlabelSpace = xoffset; } else if (Azimuth >= -90 && Azimuth < 0) { ylabelSpace = -yoffset; xlabelSpace = 0; } else if (Azimuth >= 0 && Azimuth < 90) { ylabelSpace = 0; xlabelSpace = -xoffset; } else if (Azimuth >= 90 && Azimuth <= 180) { ylabelSpace = yoffset; xlabelSpace = 0; } } pt = new Point3(pts[2].X + ylabelSpace, pts[2].Y + xlabelSpace, z, pts[2].W); pt.Transform(m, this); g.TextBase = Canvas.CanvasEnum.TextBaseline.Middle; g.TextAlignment = Canvas.CanvasEnum.TextAlign.Right; g.DrawText(Math.Round(z, 2).ToString(), new PointF(pt.X - labelSpace, pt.Y - txtHeight / 2)); } // Add Title: if (Title != "No Title") { g.TextFont = TitleFont; g.DrawText(Title, new PointF(ChartArea.Width / 2, ChartArea.Height / 30)); } // Add x axis label: offset = (YMax - YMin) / 3; labelSpace = offset; float offset1 = (XMax - XMin) / 10; float xc = offset1; if (Elevation >= 0) { if (Azimuth >= -90 && Azimuth < 90) { labelSpace = -offset; } if (Azimuth >= 0 && Azimuth <= 180) { xc = -offset1; } } else if (Elevation < 0) { if ((Azimuth >= -180 && Azimuth < -90) || Azimuth >= 90 && Azimuth <= 180) { labelSpace = -offset; } if (Azimuth >= -180 && Azimuth <= 0) { xc = -offset1; } } Point3[] pta = new Point3[2]; pta[0] = new Point3(XMin, pts[1].Y + labelSpace, pts[1].Z, pts[1].W); pta[1] = new Point3((XMin + XMax) / 2 - xc, pts[1].Y + labelSpace, pts[1].Z, pts[1].W); pta[0].Transform(m, this); pta[1].Transform(m, this); float theta = (float)Math.Atan((pta[1].Y - pta[0].Y) / (pta[1].X - pta[0].X)); g.Save(); g.TextBase = Canvas.CanvasEnum.TextBaseline.Middle; g.Translate(pta[1].X, pta[1].Y); g.Rotate(theta); g.DrawText(XLabel, new PointF(0, 0)); g.Restore(); // Add y axis label: offset = (XMax - XMin) / 3; offset1 = (YMax - YMin) / 5; labelSpace = offset; float yc = YTick; if (Elevation >= 0) { if (Azimuth >= -180 && Azimuth < 0) { labelSpace = -offset; } if (Azimuth >= -90 && Azimuth <= 90) { yc = -offset1; } } else if (Elevation < 0) { yc = -offset1; if (Azimuth >= 0 && Azimuth < 180) { labelSpace = -offset; } if (Azimuth >= -90 && Azimuth <= 90) { yc = offset1; } } pta[0] = new Point3(pts[1].X + labelSpace, YMin, pts[1].Z, pts[1].W); pta[1] = new Point3(pts[1].X + labelSpace, (YMin + YMax) / 2 + yc, pts[1].Z, pts[1].W); pta[0].Transform(m, this); pta[1].Transform(m, this); theta = (float)Math.Atan((pta[1].Y - pta[0].Y) / (pta[1].X - pta[0].X)); g.Save(); g.Translate(pta[1].X, pta[1].Y); g.Rotate(theta); g.DrawText(YLabel, new PointF(0, 0)); g.Restore(); // Add z axis labels: float zticklength = 10; labelSpace = -1.3f * offset; offset1 = (ZMax - ZMin) / 8; float zc = -offset1; for (float z = ZMin; z < ZMax; z = z + ZTick) { float size = 30f;/*await g.MeasureTextWidthAsync(z.ToString());*/ if (zticklength < size) { zticklength = size; } } float zlength = -zticklength; if (Elevation >= 0) { if (Azimuth >= -180 && Azimuth < -90) { zlength = -zticklength; labelSpace = -1.3f * offset; zc = -offset1; } else if (Azimuth >= -90 && Azimuth < 0) { zlength = zticklength; labelSpace = 2 * offset / 3; zc = offset1; } else if (Azimuth >= 0 && Azimuth < 90) { zlength = zticklength; labelSpace = 2 * offset / 3; zc = -offset1; } else if (Azimuth >= 90 && Azimuth <= 180) { zlength = -zticklength; labelSpace = -1.3f * offset; zc = offset1; } } else if (Elevation < 0) { if (Azimuth >= -180 && Azimuth < -90) { zlength = -zticklength; labelSpace = -1.3f * offset; zc = offset1; } else if (Azimuth >= -90 && Azimuth < 0) { zlength = zticklength; labelSpace = 2 * offset / 3; zc = -offset1; } else if (Azimuth >= 0 && Azimuth < 90) { zlength = zticklength; labelSpace = 2 * offset / 3; zc = offset1; } else if (Azimuth >= 90 && Azimuth <= 180) { zlength = -zticklength; labelSpace = -1.3f * offset; zc = -offset1; } } pta[0] = new Point3(pts[2].X - 1.6f * labelSpace, pts[2].Y, (ZMin + ZMax) / 2 + zc, pts[2].W); pta[0].Transform(m, this); /// rotate Graphic g.Save(); g.TextBase = Canvas.CanvasEnum.TextBaseline.Middle; g.Translate(pta[0].X - zlength, pta[0].Y); g.Rotate(270 * (float)Math.PI / 180); g.DrawText(ZLabel, new PointF(0, 0)); g.Restore(); }
private void Add3DGrids(DovDrawings g) { Matrix3 m = Matrix3.AzimuthElevation(Elevation, Azimuth); Point3[] pta = new Point3[3]; Point3[] pts; g.DrwColor = "white"; g.LineThickness = 0.5f; // Draw x gridlines: if (IsXGrid) { for (float x = XMin; x <= XMax; x = x + XTick) { pts = CoordinatesOfChartBox(); pta[0] = new Point3(x, pts[1].Y, pts[1].Z, pts[1].W); if (Elevation >= 0) { if ((Azimuth >= -180 && Azimuth < -90) || (Azimuth >= 0 && Azimuth < 90)) { pta[1] = new Point3(x, pts[0].Y, pts[1].Z, pts[1].W); pta[2] = new Point3(x, pts[0].Y, pts[3].Z, pts[1].W); } else { pta[1] = new Point3(x, pts[2].Y, pts[1].Z, pts[1].W); pta[2] = new Point3(x, pts[2].Y, pts[3].Z, pts[1].W); } } else if (Elevation < 0) { if ((Azimuth >= -180 && Azimuth < -90) || (Azimuth >= 0 && Azimuth < 90)) { pta[1] = new Point3(x, pts[2].Y, pts[1].Z, pts[1].W); pta[2] = new Point3(x, pts[2].Y, pts[3].Z, pts[1].W); } else { pta[1] = new Point3(x, pts[0].Y, pts[1].Z, pts[1].W); pta[2] = new Point3(x, pts[0].Y, pts[3].Z, pts[1].W); } } for (int i = 0; i < pta.Length; i++) { pta[i].Transform(m, this); } g.DrawLine(pta[0].X, pta[0].Y, pta[1].X, pta[1].Y); g.DrawLine(pta[1].X, pta[1].Y, pta[2].X, pta[2].Y); } } // Draw y gridlines: if (IsYGrid) { for (float y = YMin; y <= YMax; y = y + YTick) { pts = CoordinatesOfChartBox(); pta[0] = new Point3(pts[1].X, y, pts[1].Z, pts[1].W); if (Elevation >= 0) { if ((Azimuth >= -180 && Azimuth < -90) || (Azimuth >= 0 && Azimuth < 90)) { pta[1] = new Point3(pts[2].X, y, pts[1].Z, pts[1].W); pta[2] = new Point3(pts[2].X, y, pts[3].Z, pts[1].W); } else { pta[1] = new Point3(pts[0].X, y, pts[1].Z, pts[1].W); pta[2] = new Point3(pts[0].X, y, pts[3].Z, pts[1].W); } } if (Elevation < 0) { if ((Azimuth >= -180 && Azimuth < -90) || (Azimuth >= 0 && Azimuth < 90)) { pta[1] = new Point3(pts[0].X, y, pts[1].Z, pts[1].W); pta[2] = new Point3(pts[0].X, y, pts[3].Z, pts[1].W); } else { pta[1] = new Point3(pts[2].X, y, pts[1].Z, pts[1].W); pta[2] = new Point3(pts[2].X, y, pts[3].Z, pts[1].W); } } for (int i = 0; i < pta.Length; i++) { pta[i].Transform(m, this); } g.DrawLine(pta[0].X, pta[0].Y, pta[1].X, pta[1].Y); g.DrawLine(pta[1].X, pta[1].Y, pta[2].X, pta[2].Y); } } //Draw Z gridlines: if (IsZGrid) { for (float z = ZMin; z <= ZMax; z = z + ZTick) { pts = CoordinatesOfChartBox(); pta[0] = new Point3(pts[2].X, pts[2].Y, z, pts[2].W); if (Elevation >= 0) { if ((Azimuth >= -180 && Azimuth < -90) || (Azimuth >= 0 && Azimuth < 90)) { pta[1] = new Point3(pts[2].X, pts[0].Y, z, pts[1].W); pta[2] = new Point3(pts[0].X, pts[0].Y, z, pts[1].W); } else { pta[1] = new Point3(pts[0].X, pts[2].Y, z, pts[1].W); pta[2] = new Point3(pts[0].X, pts[1].Y, z, pts[1].W); } } if (Elevation < 0) { if ((Azimuth >= -180 && Azimuth < -90) || (Azimuth >= 0 && Azimuth < 90)) { pta[1] = new Point3(pts[0].X, pts[2].Y, z, pts[1].W); pta[2] = new Point3(pts[0].X, pts[0].Y, z, pts[1].W); } else { pta[1] = new Point3(pts[2].X, pts[0].Y, z, pts[1].W); pta[2] = new Point3(pts[0].X, pts[0].Y, z, pts[1].W); } } for (int i = 0; i < pta.Length; i++) { pta[i].Transform(m, this); } g.DrawLine(pta[0].X, pta[0].Y, pta[1].X, pta[1].Y); g.DrawLine(pta[1].X, pta[1].Y, pta[2].X, pta[2].Y); } } }
private void Add3DTicks(DovDrawings g) { Matrix3 m = Matrix3.AzimuthElevation(Elevation, Azimuth); Point3[] pta = new Point3[2]; Point3[] pts = CoordinatesOfChartBox(); g.DrwColor = "green"; // Add x ticks: float offset = (YMax - YMin) / 20.0f; float ticklength = offset; for (float x = XMin; x <= XMax; x = x + XTick) { if (Elevation >= 0) { if (Azimuth >= -90 && Azimuth < 90) { ticklength = -offset; } } else if (Elevation < 0) { if ((Azimuth >= -180 && Azimuth < -90) || Azimuth >= 90 && Azimuth <= 180) { ticklength = -(YMax - YMin) / 30; } } pta[0] = new Point3(x, pts[1].Y + ticklength, pts[1].Z, pts[1].W); pta[1] = new Point3(x, pts[1].Y, pts[1].Z, pts[1].W); for (int i = 0; i < pta.Length; i++) { pta[i].Transform(m, this); } g.DrawLine(pta[0].X, pta[0].Y, pta[1].X, pta[1].Y); } // Add y ticks: offset = (XMax - XMin) / 20.0f; ticklength = offset; for (float y = YMin; y <= YMax; y = y + YTick) { pts = CoordinatesOfChartBox(); if (Elevation >= 0) { if (Azimuth >= -180 && Azimuth < 0) { ticklength = -offset; } } else if (Elevation < 0) { if (Azimuth >= 0 && Azimuth < 180) { ticklength = -offset; } } pta[0] = new Point3(pts[1].X + ticklength, y, pts[1].Z, pts[1].W); pta[1] = new Point3(pts[1].X, y, pts[1].Z, pts[1].W); for (int i = 0; i < pta.Length; i++) { pta[i].Transform(m, this); } g.DrawLine(pta[0].X, pta[0].Y, pta[1].X, pta[1].Y); } // Add z ticks: float xoffset = (XMax - XMin) / 30.0f; float yoffset = (YMax - YMin) / 30.0f; float xticklength = xoffset; float yticklength = yoffset; for (float z = ZMin; z <= ZMax; z = z + ZTick) { if (Elevation >= 0) { if (Azimuth >= -180 && Azimuth < -90) { xticklength = 0; yticklength = yoffset; } else if (Azimuth >= -90 && Azimuth < 0) { xticklength = xoffset; yticklength = 0; } else if (Azimuth >= 0 && Azimuth < 90) { xticklength = 0; yticklength = -yoffset; } else if (Azimuth >= 90 && Azimuth <= 180) { xticklength = -xoffset; yticklength = 0; } } else if (Elevation < 0) { if (Azimuth >= -180 && Azimuth < -90) { yticklength = 0; xticklength = xoffset; } else if (Azimuth >= -90 && Azimuth < 0) { yticklength = -yoffset; xticklength = 0; } else if (Azimuth >= 0 && Azimuth < 90) { yticklength = 0; xticklength = -xoffset; } else if (Azimuth >= 90 && Azimuth <= 180) { yticklength = yoffset; xticklength = 0; } } pta[0] = new Point3(pts[2].X, pts[2].Y, z, pts[2].W); pta[1] = new Point3(pts[2].X + yticklength, pts[2].Y + xticklength, z, pts[2].W); for (int i = 0; i < pta.Length; i++) { pta[i].Transform(m, this); } g.DrawLine(pta[0].X, pta[0].Y, pta[1].X, pta[1].Y); } }