Exemple #1
0
 public void AddChartStyle(DovDrawings g)
 {
     Add3DAxes(g);
     Add3DGrids(g);
     Add3DTicks(g);
     Add3DLabels(g);
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        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));
            }
        }
Exemple #4
0
        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));
            }
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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()));
        }
Exemple #9
0
        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();
        }
Exemple #10
0
        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);
                }
            }
        }
Exemple #11
0
        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);
            }
        }