Exemple #1
0
        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));
        }