//---------------------------------------------------------------------
 public LineInterpolatorAA0(OutlineRenderer ren, LineParameters lp)
     : base(ren, lp)
 {
     m_di = new DistanceInterpolator1(lp.x1, lp.y1, lp.x2, lp.y2,
                                      lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK);
     m_li.adjust_forward();
 }
        public LineInterpolatorAABase(OutlineRenderer ren, LineParameters lp)
        {
            m_lp = lp;
            m_li = new LineInterpolatorDDA2(lp.vertical ? LineAA.DblHr(lp.x2 - lp.x1) : LineAA.DblHr(lp.y2 - lp.y1),
                                            lp.vertical ? Math.Abs(lp.y2 - lp.y1) : Math.Abs(lp.x2 - lp.x1) + 1);
            m_ren   = ren;
            m_len   = ((lp.vertical == (lp.inc > 0)) ? -lp.len : lp.len);
            m_x     = (lp.x1 >> LineAA.SUBPIXEL_SHIFT);
            m_y     = (lp.y1 >> LineAA.SUBPIXEL_SHIFT);
            m_old_x = (m_x);
            m_old_y = (m_y);
            m_count = ((lp.vertical ? Math.Abs((lp.y2 >> LineAA.SUBPIXEL_SHIFT) - m_y) :
                        Math.Abs((lp.x2 >> LineAA.SUBPIXEL_SHIFT) - m_x)));
            m_width = (ren.SubPixelWidth);
            //m_max_extent(m_width >> (line_subpixel_shift - 2));
            m_max_extent = ((m_width + LineAA.SUBPIXEL_MARK) >> LineAA.SUBPIXEL_SHIFT);
            m_step       = 0;
            LineInterpolatorDDA2 li = new LineInterpolatorDDA2(0,
                                                               lp.vertical ? (lp.dy << LineAA.SUBPIXEL_SHIFT) : (lp.dx << LineAA.SUBPIXEL_SHIFT),
                                                               lp.len);
            int i;
            int stop = m_width + LineAA.SUBPIXEL_SCALE * 2;

            for (i = 0; i < MAX_HALF_WIDTH; ++i)
            {
                m_dist[i] = li.Y;
                if (m_dist[i] >= stop)
                {
                    break;
                }
                li.Next();
            }
            m_dist[i++] = 0x7FFF0000;
        }
 public LineInterpolatorAABase(OutlineRenderer ren, LineParameters lp)
 {
     m_lp = lp;
     m_li = new LineInterpolatorDDA2(lp.vertical ? LineAA.DblHr(lp.x2 - lp.x1) : LineAA.DblHr(lp.y2 - lp.y1),
         lp.vertical ? Math.Abs(lp.y2 - lp.y1) : Math.Abs(lp.x2 - lp.x1) + 1);
     m_ren = ren;
     m_len = ((lp.vertical == (lp.inc > 0)) ? -lp.len : lp.len);
     m_x = (lp.x1 >> LineAA.SUBPIXEL_SHIFT);
     m_y = (lp.y1 >> LineAA.SUBPIXEL_SHIFT);
     m_old_x = (m_x);
     m_old_y = (m_y);
     m_count = ((lp.vertical ? Math.Abs((lp.y2 >> LineAA.SUBPIXEL_SHIFT) - m_y) :
                            Math.Abs((lp.x2 >> LineAA.SUBPIXEL_SHIFT) - m_x)));
     m_width = (ren.SubPixelWidth);
     //m_max_extent(m_width >> (line_subpixel_shift - 2));
     m_max_extent = ((m_width + LineAA.SUBPIXEL_MARK) >> LineAA.SUBPIXEL_SHIFT);
     m_step = 0;
     LineInterpolatorDDA2 li = new LineInterpolatorDDA2(0,
         lp.vertical ? (lp.dy << LineAA.SUBPIXEL_SHIFT) : (lp.dx << LineAA.SUBPIXEL_SHIFT),
         lp.len);
     int i;
     int stop = m_width + LineAA.SUBPIXEL_SCALE * 2;
     for (i = 0; i < MAX_HALF_WIDTH; ++i)
     {
         m_dist[i] = li.Y;
         if (m_dist[i] >= stop) break;
         li.Next();
     }
     m_dist[i++] = 0x7FFF0000;
 }
 //---------------------------------------------------------------------
 public LineInterpolatorAA0(OutlineRenderer ren, LineParameters lp)
 {
     this._ren = ren;
     _aa_data  = new LineInterpolatorAAData(ren, lp);
     _m_di     = new DistanceInterpolator1(lp.x1, lp.y1, lp.x2, lp.y2,
                                           lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK);
     _aa_data.m_li.adjust_forward();
 }
 //---------------------------------------------------------------------
 public LineInterpolatorAA2(OutlineRenderer ren, LineParameters lp,
                            int ex, int ey)
     : base(ren, lp)
 {
     m_di = new DistanceInterpolator2(lp.x1, lp.y1, lp.x2, lp.y2, ex, ey,
                                      lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK,
                                      0);
     base.m_li.adjust_forward();
     base.m_step -= base.m_max_extent;
 }
 public LineInterpolatorAA2(
     OutlineRenderer ren, LineParameters lp,
     int ex, int ey)
 {
     this._ren = ren;
     _aa_data  = new Lines.LineInterpolatorAAData(ren, lp);
     _m_di     = new DistanceInterpolator2(lp.x1, lp.y1, lp.x2, lp.y2, ex, ey,
                                           lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK,
                                           0);
     _aa_data.m_li.adjust_forward();
     _aa_data.m_step -= _aa_data.m_max_extent;
 }
        //---------------------------------------------------------------------
        public LineInterpolatorAA3(OutlineRenderer ren, LineParameters lp,
                                   int sx, int sy, int ex, int ey)
            : base(ren, lp)
        {
            m_di = new DistanceInterpolator3(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey,
                                             lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK);
            int dist1_start;
            int dist2_start;
            int npix = 1;

            if (lp.vertical)
            {
                do
                {
                    base.m_li.Prev();
                    base.m_y -= lp.inc;
                    base.m_x  = (base.m_lp.x1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
                    if (lp.inc > 0)
                    {
                        m_di.DecY(base.m_x - base.m_old_x);
                    }
                    else
                    {
                        m_di.IncY(base.m_x - base.m_old_x);
                    }
                    base.m_old_x = base.m_x;
                    dist1_start  = dist2_start = m_di.dist_start;
                    int dx = 0;
                    if (dist1_start < 0)
                    {
                        ++npix;
                    }
                    do
                    {
                        dist1_start += m_di.DyStart;
                        dist2_start -= m_di.DyStart;
                        if (dist1_start < 0)
                        {
                            ++npix;
                        }
                        if (dist2_start < 0)
                        {
                            ++npix;
                        }
                        ++dx;
                    }while (base.m_dist[dx] <= base.m_width);
                    if (npix == 0)
                    {
                        break;
                    }
                    npix = 0;
                }while (--base.m_step >= -base.m_max_extent);
            }
            else
            {
                do
                {
                    base.m_li.Prev();
                    base.m_x -= lp.inc;
                    base.m_y  = (base.m_lp.y1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
                    if (lp.inc > 0)
                    {
                        m_di.DecX(base.m_y - base.m_old_y);
                    }
                    else
                    {
                        m_di.IncX(base.m_y - base.m_old_y);
                    }
                    base.m_old_y = base.m_y;
                    dist1_start  = dist2_start = m_di.dist_start;
                    int dy = 0;
                    if (dist1_start < 0)
                    {
                        ++npix;
                    }
                    do
                    {
                        dist1_start -= m_di.DxStart;
                        dist2_start += m_di.DxStart;
                        if (dist1_start < 0)
                        {
                            ++npix;
                        }
                        if (dist2_start < 0)
                        {
                            ++npix;
                        }
                        ++dy;
                    }while (base.m_dist[dy] <= base.m_width);
                    if (npix == 0)
                    {
                        break;
                    }
                    npix = 0;
                }while (--base.m_step >= -base.m_max_extent);
            }
            base.m_li.adjust_forward();
            base.m_step -= base.m_max_extent;
        }
        public LineInterpolatorAA3(OutlineRenderer ren, LineParameters lp,
                                   int sx, int sy, int ex, int ey)
        {
            this._ren = ren;
            _aa_data  = new Lines.LineInterpolatorAAData(ren, lp);
            _m_di     = new DistanceInterpolator3(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey,
                                                  lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK);
            int dist1_start;
            int dist2_start;
            int npix = 1;

            if (lp.vertical)
            {
                do
                {
                    _aa_data.m_li.Prev();
                    _aa_data.m_y -= lp.inc;
                    _aa_data.m_x  = (_aa_data.m_lp.x1 + _aa_data.m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
                    if (lp.inc > 0)
                    {
                        _m_di.DecY(_aa_data.m_x - _aa_data.m_old_x);
                    }
                    else
                    {
                        _m_di.IncY(_aa_data.m_x - _aa_data.m_old_x);
                    }
                    _aa_data.m_old_x = _aa_data.m_x;
                    dist1_start      = dist2_start = _m_di.dist_start;
                    int dx = 0;
                    if (dist1_start < 0)
                    {
                        ++npix;
                    }
                    do
                    {
                        dist1_start += _m_di.DyStart;
                        dist2_start -= _m_di.DyStart;
                        if (dist1_start < 0)
                        {
                            ++npix;
                        }
                        if (dist2_start < 0)
                        {
                            ++npix;
                        }
                        ++dx;
                    }while (_aa_data.m_dist[dx] <= _aa_data.m_width);
                    if (npix == 0)
                    {
                        break;
                    }
                    npix = 0;
                }while (--_aa_data.m_step >= -_aa_data.m_max_extent);
            }
            else
            {
                do
                {
                    _aa_data.m_li.Prev();
                    _aa_data.m_x -= lp.inc;
                    _aa_data.m_y  = (_aa_data.m_lp.y1 + _aa_data.m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
                    if (lp.inc > 0)
                    {
                        _m_di.DecX(_aa_data.m_y - _aa_data.m_old_y);
                    }
                    else
                    {
                        _m_di.IncX(_aa_data.m_y - _aa_data.m_old_y);
                    }
                    _aa_data.m_old_y = _aa_data.m_y;
                    dist1_start      = dist2_start = _m_di.dist_start;
                    int dy = 0;
                    if (dist1_start < 0)
                    {
                        ++npix;
                    }
                    do
                    {
                        dist1_start -= _m_di.DxStart;
                        dist2_start += _m_di.DxStart;
                        if (dist1_start < 0)
                        {
                            ++npix;
                        }
                        if (dist2_start < 0)
                        {
                            ++npix;
                        }
                        ++dy;
                    }while (_aa_data.m_dist[dy] <= _aa_data.m_width);
                    if (npix == 0)
                    {
                        break;
                    }
                    npix = 0;
                }while (--_aa_data.m_step >= -_aa_data.m_max_extent);
            }
            _aa_data.m_li.adjust_forward();
            _aa_data.m_step -= _aa_data.m_max_extent;
        }
 //---------------------------------------------------------------------
 public LineInterpolatorAA3(OutlineRenderer ren, LineParameters lp,
                       int sx, int sy, int ex, int ey)
     : base(ren, lp)
 {
     m_di = new DistanceInterpolator3(lp.x1, lp.y1, lp.x2, lp.y2, sx, sy, ex, ey,
          lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK);
     int dist1_start;
     int dist2_start;
     int npix = 1;
     if (lp.vertical)
     {
         do
         {
             base.m_li.Prev();
             base.m_y -= lp.inc;
             base.m_x = (base.m_lp.x1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
             if (lp.inc > 0) m_di.DecY(base.m_x - base.m_old_x);
             else m_di.IncY(base.m_x - base.m_old_x);
             base.m_old_x = base.m_x;
             dist1_start = dist2_start = m_di.dist_start;
             int dx = 0;
             if (dist1_start < 0) ++npix;
             do
             {
                 dist1_start += m_di.DyStart;
                 dist2_start -= m_di.DyStart;
                 if (dist1_start < 0) ++npix;
                 if (dist2_start < 0) ++npix;
                 ++dx;
             }
             while (base.m_dist[dx] <= base.m_width);
             if (npix == 0) break;
             npix = 0;
         }
         while (--base.m_step >= -base.m_max_extent);
     }
     else
     {
         do
         {
             base.m_li.Prev();
             base.m_x -= lp.inc;
             base.m_y = (base.m_lp.y1 + base.m_li.Y) >> LineAA.SUBPIXEL_SHIFT;
             if (lp.inc > 0) m_di.DecX(base.m_y - base.m_old_y);
             else m_di.IncX(base.m_y - base.m_old_y);
             base.m_old_y = base.m_y;
             dist1_start = dist2_start = m_di.dist_start;
             int dy = 0;
             if (dist1_start < 0) ++npix;
             do
             {
                 dist1_start -= m_di.DxStart;
                 dist2_start += m_di.DxStart;
                 if (dist1_start < 0) ++npix;
                 if (dist2_start < 0) ++npix;
                 ++dy;
             }
             while (base.m_dist[dy] <= base.m_width);
             if (npix == 0) break;
             npix = 0;
         }
         while (--base.m_step >= -base.m_max_extent);
     }
     base.m_li.adjust_forward();
     base.m_step -= base.m_max_extent;
 }
Пример #10
0
 //---------------------------------------------------------------------
 public LineInterpolatorAA2(OutlineRenderer ren, LineParameters lp,
                       int ex, int ey)
     : base(ren, lp)
 {
     m_di = new DistanceInterpolator2(lp.x1, lp.y1, lp.x2, lp.y2, ex, ey,
          lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK,
          0);
     base.m_li.adjust_forward();
     base.m_step -= base.m_max_extent;
 }
Пример #11
0
 //---------------------------------------------------------------------
 public LineInterpolatorAA0(OutlineRenderer ren, LineParameters lp)
     : base(ren, lp)
 {
     m_di = new DistanceInterpolator1(lp.x1, lp.y1, lp.x2, lp.y2,
          lp.x1 & ~LineAA.SUBPIXEL_MARK, lp.y1 & ~LineAA.SUBPIXEL_MARK);
     m_li.adjust_forward();
 }