コード例 #1
0
ファイル: ArrowHeadTemplate.cs プロジェクト: 15831944/Test3-1
        internal void recalcArrowHead(ArrowHeadShape ah, PointF pt1, PointF pt2)
        {
            float dx = pt2.X - pt1.X;
            float dy = pt2.Y - pt1.Y;
            float l  = (float)Math.Sqrt(dx * dx + dy * dy);

            if (l == 0)
            {
                ah.defined = false;
                return;
            }
            ah.defined = true;
            float sine = +dx / l;
            float cosine = -dy / l;
            int   pts, c = 0, ch = 0;
            float x, y, r;

            for (int i = 0; i < elements.Count; ++i)
            {
                EArrowHeadElement el = (EArrowHeadElement)elements[i];
                switch (el)
                {
                case EArrowHeadElement.heLine:
                    for (int j = 0; j < 2; ++j)
                    {
                        x = (float)coords[c++] * ah.size;
                        y = (float)coords[c++] * ah.size;
                        ah.coords[ch++] = x * cosine - y * sine + pt2.X;
                        ah.coords[ch++] = x * sine + y * cosine + pt2.Y;
                    }
                    break;

                case EArrowHeadElement.heShape:
                    pts = (int)elements[++i];
                    for (int j = 0; j < pts; ++j)
                    {
                        x = (float)coords[c++] * ah.size;
                        y = (float)coords[c++] * ah.size;
                        ah.coords[ch++] = x * cosine - y * sine + pt2.X;
                        ah.coords[ch++] = x * sine + y * cosine + pt2.Y;
                    }
                    break;

                case EArrowHeadElement.heCircle:
                    x = (float)coords[c++] * ah.size;
                    y = (float)coords[c++] * ah.size;
                    r = (float)coords[c++] * ah.size;
                    ah.coords[ch++] = x * cosine - y * sine + pt2.X;
                    ah.coords[ch++] = x * sine + y * cosine + pt2.Y;
                    ah.coords[ch++] = r;
                    break;
                }               // switch (el)
            }                   // for (
        }
コード例 #2
0
        internal void draw(Graphics g, System.Drawing.Pen pen,
                           System.Drawing.Brush brush, float xoff, float yoff)
        {
            if (!defined)
            {
                return;
            }

            int c = 0;

            for (int i = 0; i < elements.GetLength(0); ++i)
            {
                EArrowHeadElement el = (EArrowHeadElement)elements[i];
                switch (el)
                {
                case EArrowHeadElement.heLine:
                {
                    float x1 = coords[c++] + xoff;
                    float y1 = coords[c++] + yoff;
                    float x2 = coords[c++] + xoff;
                    float y2 = coords[c++] + yoff;
                    g.DrawLine(pen, new PointF(x1, y1), new PointF(x2, y2));
                }
                break;

                case EArrowHeadElement.heShape:
                {
                    int      pts   = elements[++i];
                    PointF[] shape = new PointF[pts];
                    for (int j = 0; j < pts; ++j)
                    {
                        shape[j].X = coords[c++] + xoff;
                        shape[j].Y = coords[c++] + yoff;
                    }
                    g.FillPolygon(brush, shape);
                    g.DrawPolygon(pen, shape);
                }
                break;

                case EArrowHeadElement.heCircle:
                {
                    float cx = coords[c++] + xoff;
                    float cy = coords[c++] + yoff;
                    float r  = coords[c++];
                    g.FillEllipse(brush, cx - r, cy - r, 2 * r, 2 * r);
                    g.DrawEllipse(pen, cx - r, cy - r, 2 * r, 2 * r);
                }
                break;
                }                       // switch (el)
            }
        }