Line1() public abstract method

public abstract Line1 ( LineParameters lp, int sx, int sy ) : void
lp LineParameters
sx int
sy int
return void
示例#1
0
        void Draw(ref DrawVarsPart0 dv,
                  ref DrawVarsPart1 dv1,
                  ref DrawVarsPart2 dv2,
                  ref LineParameters curr,
                  ref LineParameters next,
                  int start,
                  int end)
        {
            int i;

            for (i = start; i < end; i++)
            {
                if (m_line_join == OutlineJoin.Round)
                {
                    dv2.xb1 = curr.x1 + (curr.y2 - curr.y1);
                    dv2.yb1 = curr.y1 - (curr.x2 - curr.x1);
                    dv2.xb2 = curr.x2 + (curr.y2 - curr.y1);
                    dv2.yb2 = curr.y2 - (curr.x2 - curr.x1);
                }

                switch (dv.flags)
                {
                case 0: m_ren.Line3(curr, dv2.xb1, dv2.yb1, dv2.xb2, dv2.yb2); break;

                case 1: m_ren.Line2(curr, dv2.xb2, dv2.yb2); break;

                case 2: m_ren.Line1(curr, dv2.xb1, dv2.yb1); break;

                case 3: m_ren.Line0(curr); break;
                }

                if (m_line_join == OutlineJoin.Round && (dv.flags & 2) == 0)
                {
                    m_ren.Pie(curr.x2, curr.y2,
                              curr.x2 + (curr.y2 - curr.y1),
                              curr.y2 - (curr.x2 - curr.x1),
                              curr.x2 + (next.y2 - next.y1),
                              curr.y2 - (next.x2 - next.x1));
                }

                dv1.x1   = dv1.x2;
                dv1.y1   = dv1.y2;
                dv.lcurr = dv.lnext;
                dv.lnext = m_src_vertices[dv.idx].len;
                ++dv.idx;
                if (dv.idx >= m_src_vertices.Count)
                {
                    dv.idx = 0;
                }
                dv1.x2  = m_src_vertices[dv.idx].x;
                dv1.y2  = m_src_vertices[dv.idx].y;
                curr    = next;
                next    = new LineParameters(dv1.x1, dv1.y1, dv1.x2, dv1.y2, dv.lnext);
                dv2.xb1 = dv2.xb2;
                dv2.yb1 = dv2.yb2;
                switch (m_line_join)
                {
                case OutlineJoin.NoJoin:
                    dv.flags = 3;
                    break;

                case OutlineJoin.Mitter:
                    dv.flags >>= 1;
                    dv.flags  |= (curr.DiagonalQuadrant ==
                                  next.DiagonalQuadrant ? 1 : 0);
                    if ((dv.flags & 2) == 0)
                    {
                        LineAA.Bisectrix(curr, next, out dv2.xb2, out dv2.yb2);
                    }
                    break;

                case OutlineJoin.Round:
                    dv.flags >>= 1;
                    dv.flags  |= (((curr.DiagonalQuadrant ==
                                    next.DiagonalQuadrant) ? 1 : 0) << 1);
                    break;

                case OutlineJoin.AccurateJoin:
                    dv.flags = 0;
                    LineAA.Bisectrix(curr, next, out dv2.xb2, out dv2.yb2);
                    break;
                }
            }
        }