public void DrawIsolatedFooting() { FootingGraphics.Clear(-50, -50, footingCanvWidth + 50, footingCanvHeight + 50); FootingGraphics.DrwColor = "dimgray"; FootingGraphics.FillColorOpt = "gray"; FootingGraphics.LineThickness = 2; footingChart.ChartArea = new RectangleF(0, 0, footingCanvWidth, footingCanvHeight); DimensionLine dimLine = new DimensionLine(); dimLine.DimDir = DimensionLine.DimensionDirection.left; dimLine.Graphic = FootingGraphics; float limit = (footingData.Width > footingData.Length ? footingData.Width : footingData.Length); float xMax = limit * 0.5f; float xMin = -limit * 0.5f; float yMax = limit * 0.5f; float yMin = -limit * 0.5f; float zMax = 1.2f * footingData.Thickness; float zMin = -1.2f * footingData.Thickness; float[] scaleLimits = new float[] { xMin, xMax, yMin, yMax, zMin, zMax }; //float[] scaleLimits = new float[] { -5, 5, -4, 4,-6, 6 }; SetGraphicLayout(footingCanvWidth, footingCanvHeight, 0, footingChart, scaleLimits); Matrix3 m = new Matrix3(); m = Matrix3.AzimuthElevation(footingChart.Elevation, footingChart.Azimuth); Point3[] pts = FootingCoordinate(footingData.Width, footingData.Length, footingData.Thickness); PointF[] pta = new PointF[4]; for (int i = 0; i < pts.Length; i++) { pts[i].Transform(m, footingChart); } int[] i0, i1; i0 = new int[4] { 1, 2, 7, 6 }; i1 = new int[4] { 2, 3, 4, 7 }; float elevation = footingChart.Elevation; float azimuth = footingChart.Azimuth; if (elevation >= 0) { if (azimuth >= -180 && azimuth < -90) { i0 = new int[4] { 4, 5, 6, 3 }; i1 = new int[4] { 5, 0, 7, 6 }; } else if (azimuth >= -90 && azimuth < 0) { i0 = new int[4] { 0, 7, 2, 1 }; i1 = new int[4] { 5, 0, 7, 6 }; } else if (azimuth >= 0 && azimuth < 90) { i0 = new int[4] { 0, 7, 2, 1 }; i1 = new int[4] { 1, 4, 3, 2 }; } else if (azimuth >= 90 && azimuth <= 180) { i0 = new int[4] { 4, 5, 6, 3 }; i1 = new int[4] { 1, 4, 3, 2 }; } } else if (elevation < 0) { if (azimuth >= -180 && azimuth < -90) { i0 = new int[4] { 1, 4, 3, 2 }; i1 = new int[4] { 1, 0, 7, 2 }; } else if (azimuth >= -90 && azimuth < 0) { i0 = new int[4] { 4, 5, 6, 3 }; i1 = new int[4] { 1, 4, 3, 2 }; } else if (azimuth >= 0 && azimuth < 90) { i0 = new int[4] { 5, 0, 7, 6 }; i1 = new int[4] { 4, 5, 6, 3 }; } else if (azimuth >= 90 && azimuth <= 180) { i0 = new int[4] { 5, 0, 7, 6 }; i1 = new int[4] { 1, 0, 7, 2 }; } } pta[0] = new PointF(pts[i0[0]].X, pts[i0[0]].Y); pta[1] = new PointF(pts[i0[1]].X, pts[i0[1]].Y); pta[2] = new PointF(pts[i0[2]].X, pts[i0[2]].Y); pta[3] = new PointF(pts[i0[3]].X, pts[i0[3]].Y); FootingGraphics.DrwColor = "dimgray"; FootingGraphics.FillColorOpt = "gray"; FootingGraphics.FillPolygone(pta); dimLine.DrawDimLineAligned(pta[0], pta[3], string.Format("W={0}", footingData.Width)); pta[0] = new PointF(pts[i1[0]].X, pts[i1[0]].Y); pta[1] = new PointF(pts[i1[1]].X, pts[i1[1]].Y); pta[2] = new PointF(pts[i1[2]].X, pts[i1[2]].Y); pta[3] = new PointF(pts[i1[3]].X, pts[i1[3]].Y); FootingGraphics.DrwColor = "dimgray"; FootingGraphics.FillColorOpt = "gray"; FootingGraphics.FillPolygone(pta); dimLine.DrawDimLineAligned(pta[0], pta[1], string.Format("L={0}", footingData.Length)); dimLine.DrawDimLineAligned(pta[1], pta[2], footingData.Thickness.ToString()); pta[0] = new PointF(pts[2].X, pts[2].Y); pta[1] = new PointF(pts[3].X, pts[3].Y); pta[2] = new PointF(pts[6].X, pts[6].Y); pta[3] = new PointF(pts[7].X, pts[7].Y); FootingGraphics.DrwColor = "dimgray"; FootingGraphics.FillColorOpt = "gray"; FootingGraphics.FillPolygone(pta); //Problem Around Here including the column graphics doesnt work well DrawColumn(); SetGraphicLayout(footingCanvWidth, footingCanvHeight, 0, footingChart, scaleLimits); Point3 pto = FootingCoordinate(footingData.Width, footingData.Length, footingData.Thickness)[0]; float x = footingData.ColLocX - (footingData.Width * 0.5f); float y = footingData.ColLocY - (footingData.Length * 0.5f); Point3 ptd = new Point3(pto.X, pto.Y + footingData.ColLocY, 0, 1); Point3 ptc = new Point3(pto.X + footingData.ColLocX, pto.Y, 0, 1); Point3 ptn = new Point3(x, y, 0, 1); ptd.Transform(m, footingChart); ptc.Transform(m, footingChart); ptn.Transform(m, footingChart); FootingGraphics.DrwColor = "white"; FootingGraphics.FillColorOpt = "yellow"; FootingGraphics.TextFont = "10 arial"; FootingGraphics.LineThickness = 0.5f; FootingGraphics.DrawLine(new PointF(ptd.X, ptd.Y), new PointF(ptn.X, ptn.Y)); FootingGraphics.DrawLine(new PointF(ptc.X, ptc.Y), new PointF(ptn.X, ptn.Y)); PointF ptt = new PointF(0.5f * (ptc.X + ptn.X), 0.5f * (ptc.Y + ptn.Y)); float ang = CalcAngle(new PointF(ptc.X, ptc.Y), new PointF(ptn.X, ptn.Y)); dimLine.DrawTextAtAngle(ptt, ang, string.Format("x={0}", footingData.ColLocX)); PointF ptm = new PointF(0.5f * (ptd.X + ptn.X), 0.5f * (ptd.Y + ptn.Y)); ang = CalcAngle(new PointF(ptd.X, ptd.Y), new PointF(ptn.X, ptn.Y)); dimLine.DrawTextAtAngle(ptm, ang, string.Format("y={0}", footingData.ColLocY)); FootingGraphics.DrwColor = "green"; Symbols symb = new Symbols(); symb.Graphic = FootingGraphics; //Loading Assignment Point3 loadPt = ColumnCoordinate(x, y, footingData.ColumnWidth, footingData.ColumnLength, footingData.Thickness)[0]; loadPt = new Point3(loadPt.X + 0.5f * footingData.ColumnWidth, loadPt.Y + footingData.ColumnLength * 0.5f, footingData.Thickness, 1); Point3 axialPt = new Point3(loadPt.X, loadPt.Y, loadPt.Z + 40, 1); Point3 mxPt = new Point3(loadPt.X + 80, loadPt.Y, loadPt.Z, 1); Point3 mxmPt = new Point3(loadPt.X + 40, loadPt.Y, loadPt.Z, 1); Point3 myPt = new Point3(loadPt.X, loadPt.Y - 80, loadPt.Z, 1); Point3 mymPt = new Point3(loadPt.X, loadPt.Y - 40, loadPt.Z, 1); loadPt.Transform(m, footingChart); axialPt.Transform(m, footingChart); mxPt.Transform(m, footingChart); myPt.Transform(m, footingChart); mxmPt.Transform(m, footingChart); mymPt.Transform(m, footingChart); FootingGraphics.DrawLine(loadPt.X, loadPt.Y, axialPt.X, axialPt.Y); FootingGraphics.DrawLine(loadPt.X, loadPt.Y, mxPt.X, mxPt.Y); FootingGraphics.DrawLine(loadPt.X, loadPt.Y, myPt.X, myPt.Y); PointF ptb = new PointF(loadPt.X, loadPt.Y); PointF pte = new PointF(axialPt.X, axialPt.Y); float angle = -CalcAngle(ptb, pte); if (footingData.Pn < 0) { symb.DrawArrow(new PointF(axialPt.X, axialPt.Y), 5, 10, -angle); } else { symb.DrawArrow(new PointF(loadPt.X, loadPt.Y), 5, 10, angle); } FootingGraphics.FillColorOpt = "black"; dimLine.DrawTextAtAngle(pte, -angle, string.Format("Pn={0}", footingData.Pn)); ptb = new PointF(loadPt.X, loadPt.Y); pte = new PointF(mxPt.X, mxPt.Y); angle = CalcAngle(ptb, pte); if (footingData.Mx < 0) { symb.DrawArrow(new PointF(mxPt.X, mxPt.Y), 5f, 10, angle); symb.DrawArrow(new PointF(mxmPt.X, mxmPt.Y), 5f, 10, angle); } else { angle += 180; symb.DrawArrow(new PointF(loadPt.X, loadPt.Y), 5f, 10, angle); symb.DrawArrow(new PointF(mxmPt.X, mxmPt.Y), 5f, 10, angle); } dimLine.DrawTextAtAngle(pte, angle, string.Format("Mx={0}", footingData.Mx)); ptb = new PointF(loadPt.X, loadPt.Y); pte = new PointF(myPt.X, myPt.Y); angle = -CalcAngle(ptb, pte); if (footingData.My < 0) { angle += 180; symb.DrawArrow(new PointF(myPt.X, myPt.Y), 5f, 10, angle); symb.DrawArrow(new PointF(mymPt.X, mymPt.Y), 5f, 10, angle); } else { symb.DrawArrow(new PointF(loadPt.X, loadPt.Y), 5f, 10, angle); symb.DrawArrow(new PointF(mymPt.X, mymPt.Y), 5f, 10, angle); } dimLine.DrawTextAtAngle(pte, angle, string.Format("My={0}", footingData.My)); }
public void DrawColumn() { FootingGraphics.DrwColor = "dimgray"; FootingGraphics.FillColorOpt = "gray"; FootingGraphics.LineThickness = 2; footingChart.ChartArea = new RectangleF(0, 0, footingCanvWidth, footingCanvHeight); float limit = (footingData.Width > footingData.Length ? footingData.Width : footingData.Length); float xMax = limit * 0.5f; float xMin = -limit * 0.5f; float yMax = limit * 0.5f; float yMin = -limit * 0.5f; float zMax = 1.2f * footingData.Thickness; float zMin = -1.2f * footingData.Thickness; float[] scaleLimits = new float[] { xMin, xMax, yMin, yMax, zMin, zMax }; SetGraphicLayout(footingCanvWidth, footingCanvHeight, 0, footingChart, scaleLimits); Matrix3 m = new Matrix3(); m = Matrix3.AzimuthElevation(footingChart.Elevation, footingChart.Azimuth); PointF[] pta = new PointF[4]; int[] i0, i1; i0 = new int[4] { 1, 2, 7, 6 }; i1 = new int[4] { 2, 3, 4, 7 }; float elevation = footingChart.Elevation; float azimuth = footingChart.Azimuth; if (elevation >= 0) { if (azimuth >= -180 && azimuth < -90) { i0 = new int[4] { 4, 5, 6, 3 }; i1 = new int[4] { 5, 0, 7, 6 }; } else if (azimuth >= -90 && azimuth < 0) { i0 = new int[4] { 0, 7, 2, 1 }; i1 = new int[4] { 5, 0, 7, 6 }; } else if (azimuth >= 0 && azimuth < 90) { i0 = new int[4] { 0, 7, 2, 1 }; i1 = new int[4] { 1, 4, 3, 2 }; } else if (azimuth >= 90 && azimuth <= 180) { i0 = new int[4] { 4, 5, 6, 3 }; i1 = new int[4] { 1, 4, 3, 2 }; } } else if (elevation < 0) { if (azimuth >= -180 && azimuth < -90) { i0 = new int[4] { 1, 4, 3, 2 }; i1 = new int[4] { 1, 0, 7, 2 }; } else if (azimuth >= -90 && azimuth < 0) { i0 = new int[4] { 4, 5, 6, 3 }; i1 = new int[4] { 1, 4, 3, 2 }; } else if (azimuth >= 0 && azimuth < 90) { i0 = new int[4] { 5, 0, 7, 6 }; i1 = new int[4] { 4, 5, 6, 3 }; } else if (azimuth >= 90 && azimuth <= 180) { i0 = new int[4] { 5, 0, 7, 6 }; i1 = new int[4] { 1, 0, 7, 2 }; } } float x = footingData.ColLocX - (footingData.Width * 0.5f); float y = footingData.ColLocY - (footingData.Length * 0.5f); Point3[] ptc = ColumnCoordinate(x, y, footingData.ColumnWidth, footingData.ColumnLength, footingData.Thickness); SetGraphicLayout(footingCanvWidth, footingCanvHeight, 0, footingChart, scaleLimits); for (int i = 0; i < ptc.Length; i++) { ptc[i].Transform(m, footingChart); } pta[0] = new PointF(ptc[i0[0]].X, ptc[i0[0]].Y); pta[1] = new PointF(ptc[i0[1]].X, ptc[i0[1]].Y); pta[2] = new PointF(ptc[i0[2]].X, ptc[i0[2]].Y); pta[3] = new PointF(ptc[i0[3]].X, ptc[i0[3]].Y); FootingGraphics.FillColorOpt = "grey"; FootingGraphics.FillPolygone(pta); pta[0] = new PointF(ptc[i1[0]].X, ptc[i1[0]].Y); pta[1] = new PointF(ptc[i1[1]].X, ptc[i1[1]].Y); pta[2] = new PointF(ptc[i1[2]].X, ptc[i1[2]].Y); pta[3] = new PointF(ptc[i1[3]].X, ptc[i1[3]].Y); FootingGraphics.FillColorOpt = "grey"; FootingGraphics.FillPolygone(pta); pta[0] = new PointF(ptc[2].X, ptc[2].Y); pta[1] = new PointF(ptc[3].X, ptc[3].Y); pta[2] = new PointF(ptc[6].X, ptc[6].Y); pta[3] = new PointF(ptc[7].X, ptc[7].Y); FootingGraphics.FillColorOpt = "grey"; FootingGraphics.FillPolygone(pta); }
//#region //public async Task BiaxialGraphicsAsync() //{ // DiagramGraphics = new DovDrawings(diagramContext); // DiagramGraphics.DrwColor = "white"; // DiagramGraphics.LineThickness = 2; // diagramChart.ChartArea = new RectangleF(0, 0, DiagramCanvWidth, DiagramCanvHeight); // bool start = true; // float axialMax = 5; // float axialMin = -5; // float bendxMax = 6; // float bendxMin = -6; // float bendyMax = 4; // float bendyMin = -4; // foreach (KeyValuePair<float, List<float[]>> chartPoint in ColumnInter.BiaxialChartTable) // { // List<float[]> data = chartPoint.Value; // List<float> bendingx = data[0].ToList(); // bendingx = bendingx.OrderBy(o => o).ToList(); // List<float> bendingy = data[1].ToList(); // bendingy = bendingy.OrderBy(o => o).ToList(); // List<float> axial = data[2].ToList(); // axial = axial.OrderBy(o => o).ToList(); // if (start) // { // axialMin = axial.First(); // axialMax = axial.Last(); // bendxMin = bendingx.First(); // bendxMax = bendingx.Last(); // bendyMin = bendingy.First(); // bendyMax = bendingy.Last(); // start = false; // } // else // { // if (axialMin > axial.First()) axialMin = axial.First(); // if (axialMax < axial.Last()) axialMax = axial.Last(); // if (bendxMin > bendingx.First()) bendxMin = bendingx.First(); // if (bendxMax < bendingx.Last()) bendxMax = bendingx.Last(); // if (bendyMin > bendingy.First()) bendyMin = bendingy.First(); // if (bendyMax < bendingy.Last()) bendyMax = bendingy.Last(); // } // } // diagramChart.XTick = (bendxMax - bendxMin) / 10; // diagramChart.YTick = (bendyMax - bendyMin) / 10; // diagramChart.ZTick = (axialMax - axialMin) / 10; // float[] scaleLimits = new float[] { bendxMin, bendxMax, bendyMin, bendyMax, axialMin, axialMax }; // diagramChart.Azimuth = -125; // diagramChart.Elevation = 35; // /// // //DiagramGraphics.DrwColor = "black"; // //PointF pt1 = new PointF(0, 0); // //PointF pt2 = new PointF(DiagramCanvWidth, DiagramCanvHeight); // //await DiagramGraphics.DrawRecAsync(pt1, pt2); // /// // SetGraphicLayout(DiagramCanvWidth, DiagramCanvHeight, 0, diagramChart, scaleLimits); // await diagramChart.AddChartStyle(DiagramGraphics); // DiagramGraphics.DrwColor = "red"; // diagramChart.ChartArea = new RectangleF(0, 0, DiagramCanvWidth, DiagramCanvHeight); // SetGraphicLayout(DiagramCanvWidth, DiagramCanvHeight, 0, diagramChart, scaleLimits); // diagramChart.Azimuth = -125; // diagramChart.Elevation = 35; // Matrix3 m = new Matrix3(); // m = Matrix3.AzimuthElevation(diagramChart.Elevation, diagramChart.Azimuth); // int n = 0; // foreach (KeyValuePair<float, List<float[]>> chartPoint in ColumnInter.BiaxialChartTable) // { // List<float[]> data = chartPoint.Value; // List<float> bendingx = data[0].ToList(); // List<float> bendingy = data[1].ToList(); // List<float> axial = data[2].ToList(); // Point3[] pts = new Point3[bendingx.Count]; // for (int i = 0; i < bendingx.Count; i++) // { // pts[i] = new Point3(bendingx[i], bendingy[i], axial[i], 1); // pts[i].Transform(m, diagramChart); // } // for (int j = 0; j < pts.Length - 1; j++) // { // await DiagramGraphics.DrawLineAsync(pts[j].X, pts[j].Y, pts[j + 1].X, pts[j + 1].Y); // } // n++; // } //} //#endregion public void DrawBiaxialGraphics() { BiaxialGraphics = new DovDrawings(biaxialContext); BiaxialGraphics.DrwColor = "white"; BiaxialGraphics.LineThickness = 3f; biaxialChart.ChartArea = new RectangleF(0, 0, BiaxialCanvWidth, BiaxialCanvHeight); bool start = true; float axialMax = 5; float axialMin = -5; float bendxMax = 6; float bendxMin = -6; float bendyMax = 4; float bendyMin = -4; foreach (KeyValuePair <float, List <float[]> > chartPoint in ColumnInter.BiaxialChartTable) { List <float[]> data = chartPoint.Value; List <float> bendingx = data[0].ToList(); bendingx = bendingx.OrderBy(o => o).ToList(); List <float> bendingy = data[1].ToList(); bendingy = bendingy.OrderBy(o => o).ToList(); List <float> axial = data[2].ToList(); axial = axial.OrderBy(o => o).ToList(); if (start) { axialMin = axial.First(); axialMax = axial.Last(); bendxMin = bendingx.First(); bendxMax = bendingx.Last(); bendyMin = bendingy.First(); bendyMax = bendingy.Last(); start = false; } else { if (axialMin > axial.First()) { axialMin = axial.First(); } if (axialMax < axial.Last()) { axialMax = axial.Last(); } if (bendxMin > bendingx.First()) { bendxMin = bendingx.First(); } if (bendxMax < bendingx.Last()) { bendxMax = bendingx.Last(); } if (bendyMin > bendingy.First()) { bendyMin = bendingy.First(); } if (bendyMax < bendingy.Last()) { bendyMax = bendingy.Last(); } } } biaxialChart.XTick = (bendxMax - bendxMin) / 10; biaxialChart.YTick = (bendyMax - bendyMin) / 10; biaxialChart.ZTick = (axialMax - axialMin) / 10; float[] scaleLimits = new float[] { bendxMin, bendxMax, bendyMin, bendyMax, axialMin, axialMax }; biaxialChart.Azimuth = -125; biaxialChart.Elevation = 35; /// SetGraphicLayout(BiaxialCanvWidth, BiaxialCanvHeight, 0, biaxialChart, scaleLimits); biaxialChart.AddChartStyle(BiaxialGraphics); BiaxialGraphics.DrwColor = "red"; BiaxialGraphics.LineThickness = 3f; biaxialChart.ChartArea = new RectangleF(0, 0, BiaxialCanvWidth, BiaxialCanvHeight); SetGraphicLayout(BiaxialCanvWidth, BiaxialCanvHeight, 0, biaxialChart, scaleLimits); biaxialChart.Azimuth = -125; biaxialChart.Elevation = 35; Matrix3 m = new Matrix3(); m = Matrix3.AzimuthElevation(biaxialChart.Elevation, biaxialChart.Azimuth); foreach (KeyValuePair <float, List <float[]> > chartPoint in ColumnInter.BiaxialChartTable) { List <float[]> data = chartPoint.Value; List <float> bendingx = data[0].ToList(); List <float> bendingy = data[1].ToList(); List <float> axial = data[2].ToList(); Point3[] pts = new Point3[bendingx.Count]; for (int i = 0; i < bendingx.Count; i++) { pts[i] = new Point3(bendingx[i], bendingy[i], axial[i], 1); pts[i].Transform(m, biaxialChart); } for (int j = 0; j < pts.Length - 1; j++) { BiaxialGraphics.DrawLine(pts[j].X, pts[j].Y, pts[j + 1].X, pts[j + 1].Y); } } }